<?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>51093</bug_id>
          
          <creation_ts>2010-12-14 20:44:11 -0800</creation_ts>
          <short_desc>Refactor HTMLInputElement: Move a part of HTMLInputElement::defaultEventHandler() to InputTypes</short_desc>
          <delta_ts>2010-12-23 04:59:47 -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>Forms</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></keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>322480</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-14 20:44:11 -0800</bug_when>
    <thetext>Refactor HTMLInputElement: Move a part of HTMLInputElement::defaultEventHandler() to InputTypes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322481</commentid>
    <comment_count>1</comment_count>
      <attachid>76626</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-14 20:45:00 -0800</bug_when>
    <thetext>Created attachment 76626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322673</commentid>
    <comment_count>2</comment_count>
      <attachid>76626</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-12-15 10:32:13 -0800</bug_when>
    <thetext>Comment on attachment 76626
Patch

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

ok, with comments.

&gt; WebCore/ChangeLog:10
&gt; +        renders, and the isindex form submission quirk code to InputTypes.

renders-&gt;renderers

&gt; WebCore/html/HTMLInputElement.h:213
&gt; +    void handleBeforeTextInsertedEvent(Event* event) { InputElement::handleBeforeTextInsertedEvent(m_data, this, this, event); }

Darin would tell me to move this into HTMLInputElement.cpp :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322686</commentid>
    <comment_count>3</comment_count>
      <attachid>76626</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-15 10:44:13 -0800</bug_when>
    <thetext>Comment on attachment 76626
Patch

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

Great to see more progress on this. I am really looking forward to the day we delete DeprecatedInputType, InputTypeMap, createTypeMap, deprecatedInputType, and m_deprecatedTypeNumber.

&gt;&gt; WebCore/html/HTMLInputElement.h:213
&gt;&gt; +    void handleBeforeTextInsertedEvent(Event* event) { InputElement::handleBeforeTextInsertedEvent(m_data, this, this, event); }
&gt; 
&gt; Darin would tell me to move this into HTMLInputElement.cpp :)

I definitely would it it was a virtual function and so unlikely to get inlined or if the function body was big enough and called in more than one place so that inlining it actually makes the overall code size bigger, with no significant gain in performance.

But if neither of those is true, then having it in the header is OK with me. I do prefer the wordier idiom where the function definition is outside the class definition, because it keeps the class definition itself easier to read. See Node::parentNode for an example of this.

&gt; WebCore/html/NumberInputType.cpp:56
&gt; +    return ch == &apos;+&apos; || ch == &apos;-&apos; || ch == &apos;.&apos; || ch == &apos;e&apos; || ch == &apos;E&apos; || (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;);

For the last part of this expression, the isASCIIDigit is a good choice, perhaps slightly better than writing it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326033</commentid>
    <comment_count>4</comment_count>
      <attachid>76626</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-23 04:59:37 -0800</bug_when>
    <thetext>Comment on attachment 76626
Patch

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

Thank you for reviewing.
I have committed it as http://trac.webkit.org/changeset/74549

&gt;&gt; WebCore/ChangeLog:10
&gt;&gt; +        renders, and the isindex form submission quirk code to InputTypes.
&gt; 
&gt; renders-&gt;renderers

Fixed.

&gt;&gt;&gt; WebCore/html/HTMLInputElement.h:213
&gt;&gt;&gt; +    void handleBeforeTextInsertedEvent(Event* event) { InputElement::handleBeforeTextInsertedEvent(m_data, this, this, event); }
&gt;&gt; 
&gt;&gt; Darin would tell me to move this into HTMLInputElement.cpp :)
&gt; 
&gt; I definitely would it it was a virtual function and so unlikely to get inlined or if the function body was big enough and called in more than one place so that inlining it actually makes the overall code size bigger, with no significant gain in performance.
&gt; 
&gt; But if neither of those is true, then having it in the header is OK with me. I do prefer the wordier idiom where the function definition is outside the class definition, because it keeps the class definition itself easier to read. See Node::parentNode for an example of this.

Yeah, this function is not virtual and has 1-line content.
I moved the function definition to the outside of the class declaration.

&gt;&gt; WebCore/html/NumberInputType.cpp:56
&gt;&gt; +    return ch == &apos;+&apos; || ch == &apos;-&apos; || ch == &apos;.&apos; || ch == &apos;e&apos; || ch == &apos;E&apos; || (ch &gt;= &apos;0&apos; &amp;&amp; ch &lt;= &apos;9&apos;);
&gt; 
&gt; For the last part of this expression, the isASCIIDigit is a good choice, perhaps slightly better than writing it out.

Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76626</attachid>
            <date>2010-12-14 20:45:00 -0800</date>
            <delta_ts>2010-12-23 04:59:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51093-20101215134458.patch</filename>
            <type>text/plain</type>
            <size>45246</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjVhZWFkZTRhYmE3ZWFhZmZjYmJjNTI0MDA3ZGQ4OWI2YTNlNGNjNy4uYjhmODljNTU3NzcxZDIz
NmM2YTRmZGYyMjk3NDQ4ZGVmYWE4Mzg2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MCBAQAorMjAxMC0xMi0xNCAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgSFRNTElucHV0RWxlbWVudDogTW92ZSBh
IHBhcnQgb2YgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigpCisgICAgICAg
IHRvIElucHV0VHlwZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MTA5MworCisgICAgICAgIE1vdmUgQmVmb3JlVGV4dEluc2VydGVkIGFuZCBXaGVl
bCBldmVudCBoYW5kbGluZywgZXZlbnQgZm9yd2FyZGluZyB0bworICAgICAgICByZW5kZXJzLCBh
bmQgdGhlIGlzaW5kZXggZm9ybSBzdWJtaXNzaW9uIHF1aXJrIGNvZGUgdG8gSW5wdXRUeXBlcy4K
KyAgICAgICAgQWxzbywgY2hhbmdlIHRoZSByZXR1cm4gdHlwZXMgb2YgSW5wdXRUeXBlIGV2ZW50
IGhhbmRsZXJzIGZyb20gJ2Jvb2wnCisgICAgICAgIHRvICd2b2lkJy4gV2UgdXNlIEV2ZW50Ojpk
ZWZhdWx0SGFuZGxlZCgpIHRvIGRlY2lkZSB3aGV0aGVyIGV2ZW50CisgICAgICAgIGhhbmRsaW5n
IHNob3VsZCBiZSBzdG9wcGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMg
aXMganVzdCBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5wdXRU
eXBlLmNwcDogYm9vbC0+dm9pZCBjaGFuZ2VzCisgICAgICAgIChXZWJDb3JlOjpCYXNlQnV0dG9u
SW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUJ1
dHRvbklucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQnV0dG9uSW5wdXRUeXBlOjpoYW5kbGVLZXl1cEV2ZW50KToKKyAgICAgICAgKiBodG1sL0Jh
c2VCdXR0b25JbnB1dFR5cGUuaDogZGl0dG8uCisgICAgICAgICogaHRtbC9CYXNlQ2hlY2thYmxl
SW5wdXRUeXBlLmNwcDogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCYXNlQ2hlY2thYmxlSW5w
dXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNr
YWJsZUlucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudCk6CisgICAgICAgICogaHRtbC9CYXNl
Q2hlY2thYmxlSW5wdXRUeXBlLmg6IGRpdHRvLgorICAgICAgICAqIGh0bWwvQmFzZURhdGVBbmRU
aW1lSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VEYXRlQW5kVGltZUlucHV0
VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCYXNl
RGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRsZVdoZWVsRXZlbnQpOiBKdXN0IGNhbGxzIGhhbmRs
ZVdoZWVsRXZlbnRGb3JTcGluQnV0dG9uKCkuCisgICAgICAgICogaHRtbC9CYXNlRGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaDogYm9vbC0+dm9pZCBjaGFuZ2UgYW5kIGhhbmRsZVdoZWxsRXZlbnQoKSBh
ZGRpdGlvbi4KKyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmNwcDogYm9vbC0+dm9p
ZCBjaGFuZ2UKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrYm94SW5wdXRUeXBlOjpoYW5kbGVLZXl1
cEV2ZW50KToKKyAgICAgICAgKiBodG1sL0NoZWNrYm94SW5wdXRUeXBlLmg6IGRpdHRvLgorICAg
ICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5jcHA6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgICogaHRtbC9G
aWxlSW5wdXRUeXBlLmg6IGRpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgIC0gQ2hhbmdlIHJldHVybi12YWx1ZSBoYW5kbGluZyBvZiBJbnB1dFR5
cGUgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgIC0gTW92ZSBvdXQgYmVmb3JlVGV4dEluc2VydGVk
L3doZWVsIGV2ZW50IGhhbmRsaW5nIGFuZCBpc2luZGV4IGZvcm0gcXVpcmsuCisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICBBZGRlZCBzbyB0
aGF0IElucHV0VHlwZSBjYW4gY2FsbCBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KCkuCisgICAgICAgICogaHRtbC9JbWFnZUlucHV0VHlwZS5jcHA6IGJvb2wtPnZv
aWQgY2hhbmdlCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0
aXZhdGVFdmVudCk6CisgICAgICAgICogaHRtbC9JbWFnZUlucHV0VHlwZS5oOiBkaXR0by4KKyAg
ICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjpoYW5kbGVDbGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6
aGFuZGxlRE9NQWN0aXZhdGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6Omhh
bmRsZUtleWRvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmhhbmRsZUtl
eXByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpoYW5kbGVLZXl1cEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpoYW5kbGVXaGVlbEV2ZW50
KTogQWRkZWQgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OklucHV0
VHlwZTo6Zm9yd2FyZEV2ZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6
OmZvcm1Gb3JTdWJtaXNzaW9uKTogZGl0dG8uCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoK
KyAgICAgICAgKiBodG1sL0lzSW5kZXhJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SXNJbmRleElucHV0VHlwZTo6Zm9ybUZvclN1Ym1pc3Npb24pOiBNb3ZlZCBmcm9tIEhUTUxJbnB1
dEVsZW1lbnQuY3BwLgorICAgICAgICAqIGh0bWwvSXNJbmRleElucHV0VHlwZS5oOgorICAgICAg
ICAqIGh0bWwvTnVtYmVySW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTnVtYmVy
Q2hhcmFjdGVyKTogTW92ZWQgZnJvbSBIVE1MSW5wdXRFbGVtZW50LmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6Ok51bWJlcklucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KTogYm9vbC0+dm9pZCBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KTogTW92ZWQgZnJvbSBIVE1JbnB1dEVsZW1lbnQuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjpoYW5kbGVXaGVlbEV2ZW50KTogQWRkZWQuIEp1
c3QgY2FsbHMgaGFuZGxlV2hlZWxFdmVudEZvclNwaW5CdXR0b24oKS4KKyAgICAgICAgKiBodG1s
L051bWJlcklucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOiBi
b29sLT52b2lkIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6aGFu
ZGxlQ2xpY2tFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0lucHV0VHlwZTo6aGFuZGxl
S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpoYW5kbGVL
ZXl1cEV2ZW50KToKKyAgICAgICAgKiBodG1sL1JhZGlvSW5wdXRUeXBlLmg6CisgICAgICAgICog
aHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlw
ZTo6aGFuZGxlS2V5ZG93bkV2ZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlu
cHV0VHlwZTo6Zm9yd2FyZEV2ZW50KTogTW92ZWQgZnJvbSBIVE1MSW5wdXRFbGVtZW50LmNwcC4K
KyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9SZXNldElu
cHV0VHlwZS5jcHA6IGJvb2wtPnZvaWQgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmVzZXRJ
bnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOiAKKyAgICAgICAgKiBodG1sL1Jlc2V0
SW5wdXRUeXBlLmg6IGRpdHRvLgorICAgICAgICAqIGh0bWwvU3VibWl0SW5wdXRUeXBlLmNwcDog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdWJtaXRJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2
YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvU3VibWl0SW5wdXRUeXBlLmg6IGRpdHRvLgorICAg
ICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KTogYm9vbC0+dm9pZCBjaGFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVu
dEZvclNwaW5CdXR0b24pOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0
VHlwZTo6aGFuZGxlV2hlZWxFdmVudEZvclNwaW5CdXR0b24pOiBNb3ZlZCBmcm9tIEhUTUxJbnB1
dEVsZW1lbnQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpmb3J3
YXJkRXZlbnQpOiBkaXR0by4KKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgor
CiAyMDEwLTEyLTE0ICBLb2FuLVNpbiBUYW4gIDxrb2Fuc2luLnRhbkBnbWFpbC5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcCBiL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9u
SW5wdXRUeXBlLmNwcAppbmRleCAwYmExZDg5ZDBkMjRmZGU0OGMwYThkMWVmYTMyMmNjODFkYzBj
YjM5Li5jOGZmZDM3NDgzN2Y3NDkyYTVjNDgwYjAxODA5MWJjNjU4MDg4NjUyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wgQmFzZUJ1dHRv
bklucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6aGFuZGxlS2V5
ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBCYXNlQnV0dG9uSW5wdXRUeXBl
OjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgY29uc3Qg
U3RyaW5nJiBrZXkgPSBldmVudC0+a2V5SWRlbnRpZmllcigpOwogICAgIGlmIChrZXkgPT0gIlUr
MDAyMCIpIHsKQEAgLTUxLDMzICs1MSwyOSBAQCBib29sIEJhc2VCdXR0b25JbnB1dFR5cGU6Omhh
bmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gTm8gc2V0
RGVmYXVsdEhhbmRsZWQoKSwgYmVjYXVzZSBJRSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhp
cyBjYXNlCiAgICAgICAgIC8vIGFuZCB0aGUgY2FsbGVyIHdpbGwgb25seSBkaXNwYXRjaCBhIGtl
eXByZXNzIGlmIHdlIGRvbid0IGNhbGwgc2V0RGVmYXVsdEhhbmRsZWQoKS4KICAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJhc2VCdXR0b25JbnB1dFR5cGU6OmhhbmRsZUtleXBy
ZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lkIEJhc2VCdXR0b25JbnB1dFR5cGU6
OmhhbmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaW50IGNo
YXJDb2RlID0gZXZlbnQtPmNoYXJDb2RlKCk7CiAgICAgaWYgKGNoYXJDb2RlID09ICdccicpIHsK
ICAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjaGFyQ29kZSA9PSAnICcpIHsKICAgICAgICAg
Ly8gUHJldmVudCBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgQmFzZUJ1dHRvbklucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgQmFzZUJ1dHRvbklucHV0VHlwZTo6aGFuZGxlS2V5
dXBFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9
IGV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CiAgICAgaWYgKGtleSAhPSAiVSswMDIwIikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAgICAgLy8gU2ltdWxhdGUgbW91c2Ug
Y2xpY2sgZm9yIHNwYWNlYmFyIGZvciBidXR0b24gdHlwZXMuCiAgICAgZGlzcGF0Y2hTaW11bGF0
ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUmVuZGVyT2Jq
ZWN0KiBCYXNlQnV0dG9uSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CYXNlQnV0
dG9uSW5wdXRUeXBlLmggYi9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5oCmluZGV4
IDU5ZTI4YmY5NmNkODkwMWQ1N2RkNmE5MzY1MzJmOTEwOWZhNzAyZWYuLjljM2E1NjQ5ZjU2MTA1
YzllNDkzOWUzYzc2YWFhMTg4NzExZDRjYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CYXNl
QnV0dG9uSW5wdXRUeXBlLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUu
aApAQCAtNDIsOSArNDIsOSBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopOwotICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVL
ZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogfTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwIGIvV2ViQ29y
ZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwCmluZGV4IDk0MGFjZjQyYjgzMmZmZGY4
MzMzNjQ4ZTA5YWJlZThjNDdjMWRhMWMuLmUwODk5NDVhZTZlYzgxYTBlMmFiOTA1MGYxYjViZjJj
MzY3MjNkNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBl
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAKQEAgLTU4
LDcgKzU4LDcgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShG
b3JtRGF0YUxpc3QmIGVuY29kaW5nLCBib29sKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCkKK3ZvaWQgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93
bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGNvbnN0IFN0cmluZyYga2V5ID0g
ZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKICAgICBpZiAoa2V5ID09ICJVKzAwMjAiKSB7CkBAIC02
NiwxNyArNjYsMTQgQEAgYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3du
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5k
bGVkKCksIGJlY2F1c2UgSUUgZGlzcGF0Y2hlcyBhIGtleXByZXNzIGluIHRoaXMgY2FzZQogICAg
ICAgICAvLyBhbmQgdGhlIGNhbGxlciB3aWxsIG9ubHkgZGlzcGF0Y2ggYSBrZXlwcmVzcyBpZiB3
ZSBkb24ndCBjYWxsIHNldERlZmF1bHRIYW5kbGVkKCkuCiAgICAgfQotICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpoYW5kbGVLZXlwcmVzc0V2ZW50
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpoYW5k
bGVLZXlwcmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+
Y2hhckNvZGUoKSA9PSAnICcpIHsKICAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgZG93biB0
aGUgcGFnZS4KICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBl
LmggYi9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCmluZGV4IDhjYjk1Y2Y2
NzcwZTc2MzU2ZTE1NjcyMTJiMzljOTY5Mjc4MTgwNDkuLmE5YmJjNzYxY2IzMGJiMWI2OTZjMzQ3
OWQyNDdmZWJjY2RmNmZlNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxl
SW5wdXRUeXBlLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuaApA
QCAtMzksMTMgKzM5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJhc2VDaGVja2Fi
bGVJbnB1dFR5cGUgOiBwdWJsaWMgSW5wdXRUeXBlIHsKIHByb3RlY3RlZDoKICAgICBCYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIDogSW5wdXRUeXBlKGVs
ZW1lbnQpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRF
dmVudCopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVu
dCopOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNvbnRyb2xTdGF0ZShT
dHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Db250cm9sU3RhdGUo
Y29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYsIGJvb2wpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlwcmVz
c0V2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5cHJlc3NF
dmVudChLZXlib2FyZEV2ZW50Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmNwcCBiL1dlYkNv
cmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCmluZGV4IDcwMjQzZTU5YzRlZjE3
ZGFkMTMwNzMwZTZlMzg2NGJmNzYwNjcwZDcuLjZhZTFhZmE4MjI0NGU0N2JhMTgzNmI2MjE3Mjkw
YTg0MjMwY2EyMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1
dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3Bw
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KQEAgLTExOSw5ICsxMjAsMTYgQEAg
ZG91YmxlIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6c3RlcEJhc2UoKSBjb25zdAogICAgIHJl
dHVybiBwYXJzZVRvRG91YmxlKGVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwg
ZGVmYXVsdFN0ZXBCYXNlKCkpOwogfQogCi1ib29sIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZTo6
aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBCYXNlRGF0ZUFu
ZFRpbWVJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
IHsKLSAgICByZXR1cm4gaGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRvbihldmVudCkgfHwg
VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQpOworICAgIGhhbmRs
ZUtleWRvd25FdmVudEZvclNwaW5CdXR0b24oZXZlbnQpOworICAgIGlmICghZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCkpCisgICAgICAgIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2
ZW50KGV2ZW50KTsKK30KKwordm9pZCBCYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGU6OmhhbmRsZVdo
ZWVsRXZlbnQoV2hlZWxFdmVudCogZXZlbnQpCit7CisgICAgaGFuZGxlV2hlZWxFdmVudEZvclNw
aW5CdXR0b24oZXZlbnQpOwogfQogCiBkb3VibGUgQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlOjpw
YXJzZVRvRG91YmxlKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25z
dApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oIGIv
V2ViQ29yZS9odG1sL0Jhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oCmluZGV4IGFkNzMwMmE5ZTFi
YWRiY2VmY2ExOTM4ZWYwZWUyNGM3Nzk0NGVjZmMuLjJkYWE3N2MwYTcxMmQ3YWFhNjlmNTlhNGQz
NGVmMTgxYzVmMzVmOTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CYXNlRGF0ZUFuZFRpbWVJ
bnB1dFR5cGUuaAorKysgYi9XZWJDb3JlL2h0bWwvQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmgK
QEAgLTU4LDcgKzU4LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBkZWZhdWx0VmFs
dWVGb3JTdGVwVXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3RlcE1pc21hdGNoKGNvbnN0
IFN0cmluZyYsIGRvdWJsZSkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcEJhc2UoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50Kik7CiAgICAgdmly
dHVhbCBTdHJpbmcgc2VyaWFsaXplKGRvdWJsZSkgY29uc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9odG1sL0NoZWNrYm94
SW5wdXRUeXBlLmNwcAppbmRleCBjZDE3MWMxZGFjNTAwN2QyM2IzYTNiM2JkMTZkN2Y0MWQyMDJl
NTEyLi44Zjk4N2M4OTljZjEyOGNjMTY1YjY1NzE3OTU0ZjU5MzE1NTJkMzY5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9D
aGVja2JveElucHV0VHlwZS5jcHAKQEAgLTU4LDEzICs1OCwxMiBAQCBTdHJpbmcgQ2hlY2tib3hJ
bnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdAogICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpOwogfQogCi1ib29sIENoZWNrYm94
SW5wdXRUeXBlOjpoYW5kbGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBD
aGVja2JveElucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
IHsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CiAgICAg
aWYgKGtleSAhPSAiVSswMDIwIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm47CiAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKLSAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0NoZWNrYm94SW5wdXRUeXBlLmggYi9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1dFR5
cGUuaAppbmRleCBlNjZhYjE1MzllOWI5MzgxYzkxNGJkZmI3ODk0NmRiMWFkMWIzZGZjLi5hNThh
MGEzZGJmZTRhYzkyODA1NmYyMWFiMjJkMTE0MDEwNDUwODNhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvQ2hlY2tib3hJbnB1dFR5cGUuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2hlY2tib3hJbnB1
dFR5cGUuaApAQCAtNDQsNyArNDQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmFs
dWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
TWlzc2luZ1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5dXBFdmVudChL
ZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleXVwRXZlbnQoS2V5Ym9h
cmRFdmVudCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwCmluZGV4IGI1ZmMyZmJkM2JlYzY4ZTIwMzcyYWRjNTNhYmIwY2NmYTFjMDcwNzIuLjBlMGUz
NTc0OWVmMjY5MDk4NTdiZTNiMTBjNTAzNDAyNDExNzEyNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAKQEAgLTgzLDEzICs4MywxMiBAQCBTdHJpbmcgRmlsZUlucHV0VHlwZTo6dmFsdWVNaXNzaW5n
VGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQoKS0+bXVsdGlwbGUoKSA/IHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpIDogdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpOwogfQogCi1ib29sIEZpbGVJbnB1dFR5cGU6
OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqIGV2ZW50KQordm9pZCBGaWxlSW5wdXRUeXBl
OjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZWxlbWVu
dCgpLT5kaXNhYmxlZCgpIHx8ICFlbGVtZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIHRvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wo
ZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Y2xpY2soKTsKICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogUmVuZGVyT2JqZWN0KiBGaWxlSW5wdXRU
eXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29u
c3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmggYi9XZWJDb3JlL2h0
bWwvRmlsZUlucHV0VHlwZS5oCmluZGV4IGRmOTVmZmNiNTFkNTFiYTMxNGE5ODJiYjgzNjRlODcw
MWQxMzRmMTIuLmE4ZGFkNDNmMmQ5ZGMxNGMxOGNjNzk1MmZhNWMwYWM0ODFmNDdiODUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgKKysrIGIvV2ViQ29yZS9odG1sL0Zp
bGVJbnB1dFR5cGUuaApAQCAtNDUsNyArNDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlTWlzc2luZ1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRE9N
QWN0aXZhdGVFdmVudChFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0
ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAppbmRleCA3NmY4NjY1MGIzNjdiYzJhNjZmYzU1M2EwMThmM2VlMDQwYmI3YmQ0
Li41OGMwNmE5ZGE3ZWE4ZjA1YzAyZjczNzE3NGYyN2U1ZDI4YjhlZmIwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCkBAIC04MCwxMiArODAsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRzID0gMjU2OwogCi1zdGF0aWMgYm9vbCBp
c051bWJlckNoYXJhY3RlcihVQ2hhciBjaCkKLXsKLSAgICByZXR1cm4gY2ggPT0gJysnIHx8IGNo
ID09ICctJyB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdFJwotICAgICAgICB8
fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7Ci19Ci0KIEhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJ
bnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkKICAgICAsIG1fbWF4UmVzdWx0cygtMSkKQEAg
LTEyOTQsMTQgKzEyODgsMTcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpwb3N0RGlzcGF0Y2hF
dmVudEhhbmRsZXIoRXZlbnQgKmV2dCwgdm9pZCogZGF0YSkKIAogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiB7Ci0gICAgLy8gRklYTUU6IEl0
IHdvdWxkIGJlIGJldHRlciB0byByZWZhY3RvciB0aGlzIGZvciB0aGUgZGlmZmVyZW50IHR5cGVz
IG9mIGlucHV0IGVsZW1lbnQuCi0gICAgLy8gSGF2aW5nIHRoZW0gYWxsIGluIG9uZSBnaWFudCBm
dW5jdGlvbiBtYWtlcyB0aGlzIGhhcmQgdG8gcmVhZCwgYW5kIGFsbW9zdCBhbGwgdGhlIGhhbmRs
aW5nIGlzIHR5cGUtc3BlY2lmaWMuCi0KLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBl
dnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBtX2lucHV0VHlwZS0+aGFu
ZGxlQ2xpY2tFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KSkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tF
dmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KSk7CisgICAgICAgIGlmIChldnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKGV2
dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCAmJiBtX2lucHV0VHlwZS0+aGFuZGxlS2V5ZG93bkV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldnQpKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChldnQtPmlzS2V5
Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleWRvd25FdmVudChzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZ0KSk7CisgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2FsbCB0aGUgYmFzZSBldmVu
dCBoYW5kbGVyIGJlZm9yZSBhbnkgb2Ygb3VyIG93biBldmVudCBoYW5kbGluZyBmb3IgYWxtb3N0
IGFsbCBldmVudHMgaW4gdGV4dCBmaWVsZHMuCiAgICAgLy8gTWFrZXMgZWRpdGluZyBrZXlib2Fy
ZCBoYW5kbGluZyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUga2V5ZG93biBhbmQga2V5cHJlc3Mg
aGFuZGxpbmcgaW4gdGhpcyBmdW5jdGlvbi4KQEAgLTEzMTYsMTYgKzEzMTMsMjUgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgLy8g
YWN0dWFsbHkgc3VibWl0dGluZyB0aGUgZm9ybS4gRm9yIHJlc2V0IGlucHV0cywgdGhlIGZvcm0g
aXMgcmVzZXQuIFRoZXNlIGV2ZW50cyBhcmUgc2VudCB3aGVuIHRoZSB1c2VyIGNsaWNrcwogICAg
IC8vIG9uIHRoZSBlbGVtZW50LCBvciBwcmVzc2VzIGVudGVyIHdoaWxlIGl0IGlzIHRoZSBhY3Rp
dmUgZWxlbWVudC4gSmF2YVNjcmlwdCBjb2RlIHdpc2hpbmcgdG8gYWN0aXZhdGUgdGhlIGVsZW1l
bnQKICAgICAvLyBtdXN0IGRpc3BhdGNoIGEgRE9NQWN0aXZhdGUgZXZlbnQgLSBhIGNsaWNrIGV2
ZW50IHdpbGwgbm90IGRvIHRoZSBqb2IuCi0gICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5ET01BY3RpdmF0ZUV2ZW50ICYmIG1faW5wdXRUeXBlLT5oYW5kbGVET01BY3RpdmF0ZUV2
ZW50KGV2dCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLkRPTUFjdGl2YXRlRXZlbnQpIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZURP
TUFjdGl2YXRlRXZlbnQoZXZ0KTsKKyAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50
IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24ga2V5
IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50Lgot
ICAgIGlmIChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5rZXlwcmVzc0V2ZW50ICYmIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50KHN0
YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50
KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpKTsKKyAgICAgICAgaWYgKGV2dC0+ZGVm
YXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoZXZ0
LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBF
dmVudCAmJiBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudChzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50Kj4oZXZ0KSkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZXZ0LT5pc0tleWJvYXJk
RXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgeworICAg
ICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZ0KSk7CisgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKG1faW5wdXRUeXBlLT5zaG91bGRTdWJtaXRJ
bXBsaWNpdGx5KGV2dCkpIHsKICAgICAgICAgaWYgKGlzU2VhcmNoRmllbGQoKSkgewpAQCAtMTM0
MiwxMSArMTM0OCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZ0KQogICAgICAgICAgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wociktPnNl
dENoYW5nZWRTaW5jZUxhc3RDaGFuZ2VFdmVudChmYWxzZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRm9yU3VibWlzc2lvbiA9IGZvcm0oKTsKLSAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZm9ybSBhbmQgdGhlIGVsZW1lbnQgaXMgYW4gPGlzaW5k
ZXg+LCB0aGVuIGNyZWF0ZSBhIHRlbXBvcmFyeSBmb3JtIGp1c3QgdG8gYmUgdXNlZCBmb3Igc3Vi
bWlzc2lvbi4KLSAgICAgICAgaWYgKCFmb3JtRm9yU3VibWlzc2lvbiAmJiBkZXByZWNhdGVkSW5w
dXRUeXBlKCkgPT0gSVNJTkRFWCkKLSAgICAgICAgICAgIGZvcm1Gb3JTdWJtaXNzaW9uID0gY3Jl
YXRlVGVtcG9yYXJ5Rm9ybUZvcklzSW5kZXgoKTsKLQorICAgICAgICBSZWZQdHI8SFRNTEZvcm1F
bGVtZW50PiBmb3JtRm9yU3VibWlzc2lvbiA9IG1faW5wdXRUeXBlLT5mb3JtRm9yU3VibWlzc2lv
bigpOwogICAgICAgICAvLyBGb3JtIG1heSBuZXZlciBoYXZlIGJlZW4gcHJlc2VudCwgb3IgbWF5
IGhhdmUgYmVlbiBkZXN0cm95ZWQgYnkgY29kZSByZXNwb25kaW5nIHRvIHRoZSBjaGFuZ2UgZXZl
bnQuCiAgICAgICAgIGlmIChmb3JtRm9yU3VibWlzc2lvbikKICAgICAgICAgICAgIGZvcm1Gb3JT
dWJtaXNzaW9uLT5zdWJtaXRJbXBsaWNpdGx5KGV2dCwgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlz
c2lvbigpKTsKQEAgLTEzNTYsNzIgKzEzNTgsMjAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgfQogCiAgICAgaWYgKGV2dC0+aXNC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKQotICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudChldnQpOwotCi0gICAgaWYgKGhhc1NwaW5CdXR0b24oKSAmJiBldnQtPmlzV2hlZWxF
dmVudCgpKSB7Ci0gICAgICAgIFdoZWVsRXZlbnQqIHdoZWVsID0gc3RhdGljX2Nhc3Q8V2hlZWxF
dmVudCo+KGV2dCk7Ci0gICAgICAgIGludCBzdGVwID0gMDsKLSAgICAgICAgaWYgKHdoZWVsLT53
aGVlbERlbHRhWSgpID4gMCkgewotICAgICAgICAgICAgc3RlcCA9IDE7Ci0gICAgICAgIH0gZWxz
ZSBpZiAod2hlZWwtPndoZWVsRGVsdGFZKCkgPCAwKSB7Ci0gICAgICAgICAgICBzdGVwID0gLTE7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0ZXApIHsKLSAgICAgICAgICAgIHN0ZXBVcEZyb21S
ZW5kZXJlcihzdGVwKTsKLSAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHN0YXRpY19j
YXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZ0KSk7CisKKyAgICBpZiAoZXZ0LT5pc1do
ZWVsRXZlbnQoKSkgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlV2hlZWxFdmVudChzdGF0
aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZ0KSk7CisgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5k
bGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGlz
VGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQoKSB8fCBldnQt
PmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1
c0V2ZW50KSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIo
KSktPmZvcndhcmRFdmVudChldnQpOwogCi0gICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBSQU5HRSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2dC0+aXNE
cmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKLSAgICAgICAgdG9SZW5kZXJTbGlk
ZXIocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldnQpOworICAgIG1faW5wdXRUeXBlLT5mb3J3
YXJkRXZlbnQoZXZ0KTsKIAogICAgIGlmICghY2FsbEJhc2VDbGFzc0Vhcmx5ICYmICFldnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpo
YW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGRl
cHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBOVU1CRVIpIHsKLSAgICAgICAgQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
Kj4oZXZlbnQpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0RXZlbnQtPnRleHQoKS5s
ZW5ndGgoKTsKLSAgICAgICAgYm9vbCBoYXNJbnZhbGlkQ2hhciA9IGZhbHNlOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
aXNOdW1iZXJDaGFyYWN0ZXIodGV4dEV2ZW50LT50ZXh0KClbaV0pKSB7Ci0gICAgICAgICAgICAg
ICAgaGFzSW52YWxpZENoYXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNJbnZhbGlkQ2hhcikgewotICAgICAg
ICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpcHBlZDsKLSAgICAgICAgICAgIHN0cmlwcGVkLnJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIgY2ggPSB0ZXh0RXZlbnQtPnRl
eHQoKVtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyQ2hhcmFjdGVyKGNoKSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc3RyaXBwZWQuYXBw
ZW5kKGNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRleHRFdmVudC0+c2V0VGV4dChT
dHJpbmc6OmFkb3B0KHN0cmlwcGVkKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgSW5wdXRFbGVt
ZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChtX2RhdGEsIHRoaXMsIHRoaXMsIGV2
ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IEhUTUxJbnB1dEVsZW1lbnQ6
OmNyZWF0ZVRlbXBvcmFyeUZvcm1Gb3JJc0luZGV4KCkKLXsKLSAgICBSZWZQdHI8SFRNTEZvcm1F
bGVtZW50PiBmb3JtID0gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAg
Zm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICBmb3JtLT5zZXRNZXRob2QoIkdF
VCIpOwotICAgIGlmICghZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmlzRW1wdHkoKSkgewotICAgICAg
ICAvLyBXZSB0cmVhdCB0aGUgaHJlZiBwcm9wZXJ0eSBvZiB0aGUgPGJhc2U+IGVsZW1lbnQgYXMg
dGhlIGZvcm0gYWN0aW9uLCBhcyBwZXIgc2VjdGlvbiA3LjUgCi0gICAgICAgIC8vICJRdWVyaWVz
IGFuZCBJbmRleGVzIiBvZiB0aGUgSFRNTCAyLjAgc3BlYy4gPGh0dHA6Ly93d3cudzMub3JnL01h
cmtVcC9odG1sLXNwZWMvaHRtbC1zcGVjXzcuaHRtbCNTRUM3LjU+LgotICAgICAgICBmb3JtLT5z
ZXRBY3Rpb24oZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnN0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZvcm0ucmVsZWFzZSgpOwotfQotCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gKGF0dHItPm5hbWUo
KSA9PSBzcmNBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBmb3JtYWN0aW9uQXR0cik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaAppbmRleCAwZjBlOTdlNjdiNjUzODVkZmYxY2NmM2QyYTFkMzhjNmIwNmVk
OTdhLi4zYmExMjdhNDYxN2ZmN2IzMWNkNjZmOTYwZjQzOWYwNzU4ZWUxOWFkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmgKQEAgLTIxMCw2ICsyMTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCk7CiAgICAgfQogCisgICAgdm9pZCBo
YW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChFdmVudCogZXZlbnQpIHsgSW5wdXRFbGVtZW50
OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChtX2RhdGEsIHRoaXMsIHRoaXMsIGV2ZW50
KTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAKQEAgLTMzOCw4ICszNDAs
NiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKCk7CiAg
ICAgCi0gICAgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChFdmVudCopOwotICAg
IFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBjcmVhdGVUZW1wb3JhcnlGb3JtRm9ySXNJbmRl
eCgpOwogICAgIC8vIEhlbHBlciBmb3Igc3RlcFVwKCkvc3RlcERvd24oKS4gIEFkZHMgc3RlcCB2
YWx1ZSAqIGNvdW50IHRvIHRoZSBjdXJyZW50IHZhbHVlLgogICAgIHZvaWQgYXBwbHlTdGVwKGRv
dWJsZSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SW1hZ2VJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAppbmRl
eCA3YTc2MTc0M2U2YzgwY2I5NjRlZDlhNTFlMjE1YjM5NmVmNjc1MDAwLi4xZmYzZjQ5NWU0N2Uw
ZDU2MzM1M2M4NmY1Y2Q2ZGNmYTQ1MzBhZDBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSW1h
Z2VJbnB1dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAg
LTYyLDExICs2MiwxMSBAQCBib29sIEltYWdlSW5wdXRUeXBlOjpzdXBwb3J0c1ZhbGlkYXRpb24o
KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbWFnZUlucHV0VHlwZTo6aGFu
ZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCit2b2lkIEltYWdlSW5wdXRUeXBlOjpo
YW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4gZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudC0+
ZGlzYWJsZWQoKSB8fCAhZWxlbWVudC0+Zm9ybSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKICAgICBlbGVtZW50LT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CiAg
ICAgaWYgKGV2ZW50LT51bmRlcmx5aW5nRXZlbnQoKSAmJiBldmVudC0+dW5kZXJseWluZ0V2ZW50
KCktPmlzTW91c2VFdmVudCgpKSB7CiAgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQtPnVuZGVybHlpbmdFdmVudCgpKTsKQEAgLTc2
LDcgKzc2LDYgQEAgYm9vbCBJbWFnZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChF
dmVudCogZXZlbnQpCiAgICAgZWxlbWVudC0+Zm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2ZW50KTsg
Ly8gRXZlbnQgaGFuZGxlcnMgY2FuIHJ1bi4KICAgICBlbGVtZW50LT5zZXRBY3RpdmF0ZWRTdWJt
aXQoZmFsc2UpOwogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIHJldHVybiB0
cnVlOwogfQogCiBSZW5kZXJPYmplY3QqIEltYWdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9JbWFnZUlucHV0VHlwZS5oIGIvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmgK
aW5kZXggNjFhYmY5ZDAwZTY5YTMwYzk5ZGViZjMwMGJhMmIxYjJhMzE0MzYxMi4uN2U1MzYyMmNi
ZjE4NDUxMDY2MmE2NmRiMjVhNGRjZDZhYmZmYmZlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0ltYWdlSW5wdXRUeXBlLmgKKysrIGIvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmgKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEo
Rm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmFs
aWRhdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhh
bmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRE9N
QWN0aXZhdGVFdmVudChFdmVudCopOwogCiAgICAgLy8gVGhpcyBpcyB2YWxpZCBvbmx5IGR1cmlu
ZyBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoKS4KICAgICBJbnRQb2ludCBtX2NsaWNr
TG9jYXRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IDhhN2E5Nzk5YzMxN2EyN2NkY2VmMzVlMzIxOGM3
Y2JmNTEyZGNjNjYuLjhiYmM5YjFhYTU5MDU0ZDg2OWZlNTZjMDE0M2FiNDRkMWZmMWI2ZTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
IgogI2luY2x1ZGUgIkJ1dHRvbklucHV0VHlwZS5oIgogI2luY2x1ZGUgIkNoZWNrYm94SW5wdXRU
eXBlLmgiCiAjaW5jbHVkZSAiQ29sb3JJbnB1dFR5cGUuaCIKQEAgLTI5MSwyOSArMjkyLDM3IEBA
IFN0cmluZyBJbnB1dFR5cGU6OnZhbHVlTWlzc2luZ1RleHQoKSBjb25zdAogICAgIHJldHVybiB2
YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKIH0KIAotYm9vbCBJbnB1dFR5cGU6
OmhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopCit2b2lkIElucHV0VHlwZTo6aGFuZGxlQ2xp
Y2tFdmVudChNb3VzZUV2ZW50KikKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5w
dXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KikKK3ZvaWQgSW5wdXRUeXBlOjpo
YW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KikKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopCit2b2lk
IElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKQogewotICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnB1dFR5cGU6OmhhbmRsZUtleXByZXNzRXZlbnQoS2V5
Ym9hcmRFdmVudCopCit2b2lkIElucHV0VHlwZTo6aGFuZGxlS2V5cHJlc3NFdmVudChLZXlib2Fy
ZEV2ZW50KikKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5wdXRUeXBlOjpoYW5k
bGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKQordm9pZCBJbnB1dFR5cGU6OmhhbmRsZUtleXVw
RXZlbnQoS2V5Ym9hcmRFdmVudCopCit7Cit9CisKK3ZvaWQgSW5wdXRUeXBlOjpoYW5kbGVCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogZXZlbnQpCit7Cisg
ICAgZWxlbWVudCgpLT5oYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChldmVudCk7Cit9CisK
K3ZvaWQgSW5wdXRUeXBlOjpoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqKQoreworfQorCit2
b2lkIElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2ZW50KikKIHsKLSAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVu
dCkKQEAgLTMyMSw2ICszMzAsMTEgQEAgYm9vbCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxp
Y2l0bHkoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiBldmVudC0+aXNLZXlib2FyZEV2ZW50KCkg
JiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBzdGF0aWNf
Y2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5jaGFyQ29kZSgpID09ICdccic7CiB9CiAKK1Bh
c3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJbnB1dFR5cGU6OmZvcm1Gb3JTdWJtaXNzaW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudCgpLT5mb3JtKCk7Cit9CisKIFJlbmRlck9iamVj
dCogSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QoZWxl
bWVudCgpLCBzdHlsZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggZjI3NWFlODE0ZDBhOTU3M2Y5ZGEzODJjMmQ2
MzI2MDY3YWIzZWViNy4uNzY3YzY3NTMyZDM5NjgyODcxMGE2NDI0ZGYwNjZhZjJlNTY5NDA1YyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaApAQCAtMzcsMTUgKzM3LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ7CiBjbGFzcyBEYXRlQ29tcG9uZW50czsKIGNs
YXNzIEV2ZW50OwogY2xhc3MgRm9ybURhdGFMaXN0OworY2xhc3MgSFRNTEZvcm1FbGVtZW50Owog
Y2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBNb3Vz
ZUV2ZW50OwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJTdHlsZTsKK2NsYXNzIFdoZWVsRXZlbnQ7CiAKIC8vIEFuIElucHV0VHlwZSBvYmplY3Qg
cmVwcmVzZW50cyB0aGUgdHlwZS1zcGVjaWZpYyBwYXJ0IG9mIGFuIEhUTUxJbnB1dEVsZW1lbnQu
CiAvLyBEbyBub3QgZXhwb3NlIGluc3RhbmNlcyBvZiBJbnB1dFR5cGUgYW5kIGNsYXNzZXMgZGVy
aXZlZCBmcm9tIGl0IHRvIGNsYXNzZXMKQEAgLTEwNSwxNyArMTA4LDE4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3Q7CiAKICAgICAvLyBFdmVu
dCBoYW5kbGVycwotICAgIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSwgZG8gbm8gZnVy
dGhlciBkZWZhdWx0IGV2ZW50IGhhbmRsaW5nIGluIHRoZQotICAgIC8vIGRlZmF1bHQgZXZlbnQg
aGFuZGxlci4gSWYgYW4gZXZlbnQgaGFuZGxlciBjYWxscyBFdmVudDo6c2V0RGVmYXVsdEhhbmRs
ZWQoKSwKLSAgICAvLyBpdHMgcmV0dXJuIHZhbHVlIG11c3QgYmUgdHJ1ZS4KLQotICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVDbGlja0V2ZW50KE1vdXNlRXZlbnQqKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCopOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVL
ZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlw
cmVzc0V2ZW50KEtleWJvYXJkRXZlbnQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5dXBF
dmVudChLZXlib2FyZEV2ZW50Kik7Ci0gICAgLy8gQSBoZWxwZXIgZm9yIGV2ZW50IGhhbmRsZXJz
LgorCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVLZXl1cEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50Kik7CisgICAgdmlydHVh
bCB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOworICAgIC8vIEhlbHBlcnMgZm9yIGV2ZW50IGhh
bmRsZXJzLgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50Kik7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUZvclN1Ym1pc3Np
b24oKSBjb25zdDsKIAogICAgIC8vIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBlLmNwcCBiL1dlYkNvcmUvaHRtbC9Jc0lu
ZGV4SW5wdXRUeXBlLmNwcAppbmRleCBjM2NmZjQxZWY1OTY5NmVjMmNlZmYxNmFjMTg2ZWRkNWNk
ZmNhMDYwLi4zMWVlMzU4MzQzOWYwZmVlZWY3MGE0MGRkZWFkZTBhNjRmNDk3NmRkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlwZS5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0lzSW5kZXhJbnB1dFR5cGUuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSXNJbmRleElucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsNCArNTIsMjIgQEAgYm9vbCBJc0lu
ZGV4SW5wdXRUeXBlOjpzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJc0luZGV4SW5wdXRUeXBlOjpmb3Jt
Rm9yU3VibWlzc2lvbigpIGNvbnN0Cit7CisgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9y
bSA9IElucHV0VHlwZTo6Zm9ybUZvclN1Ym1pc3Npb24oKTsKKyAgICBpZiAoZm9ybSkKKyAgICAg
ICAgcmV0dXJuIGZvcm0ucmVsZWFzZSgpOworICAgIC8vIElmIHRoZXJlIGlzIG5vIGZvcm0sIHRo
ZW4gY3JlYXRlIGEgdGVtcG9yYXJ5IGZvcm0ganVzdCB0byBiZSB1c2VkIGZvciBzdWJtaXNzaW9u
LgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQoKTsKKyAgICBm
b3JtID0gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGZvcm0tPnJlZ2lz
dGVyRm9ybUVsZW1lbnQoZWxlbWVudCgpKTsKKyAgICBmb3JtLT5zZXRNZXRob2QoIkdFVCIpOwor
ICAgIGlmICghZG9jdW1lbnQtPmJhc2VVUkwoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gV2Ug
dHJlYXQgdGhlIGhyZWYgcHJvcGVydHkgb2YgdGhlIDxiYXNlPiBlbGVtZW50IGFzIHRoZSBmb3Jt
IGFjdGlvbiwgYXMgcGVyIHNlY3Rpb24gNy41CisgICAgICAgIC8vICJRdWVyaWVzIGFuZCBJbmRl
eGVzIiBvZiB0aGUgSFRNTCAyLjAgc3BlYy4gPGh0dHA6Ly93d3cudzMub3JnL01hcmtVcC9odG1s
LXNwZWMvaHRtbC1zcGVjXzcuaHRtbCNTRUM3LjU+LgorICAgICAgICBmb3JtLT5zZXRBY3Rpb24o
ZG9jdW1lbnQtPmJhc2VVUkwoKS5zdHJpbmcoKSk7CisgICAgfQorICAgIHJldHVybiBmb3JtLnJl
bGVhc2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0lzSW5kZXhJbnB1dFR5cGUuaCBiL1dlYkNvcmUvaHRtbC9Jc0luZGV4SW5wdXRUeXBl
LmgKaW5kZXggMmQ0ZTE5Mzc2ZjI3MjVkMWEwZmM0NjQ5YjYzZWIzYjU4M2U1OGMxMC4uZjVlMTRh
ZjRmMTNkOGY4MDQ3OGY2ZDczYjYxOWUyZWU0ZDM5YjQzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0lzSW5kZXhJbnB1dFR5cGUuaAorKysgYi9XZWJDb3JlL2h0bWwvSXNJbmRleElucHV0VHlw
ZS5oCkBAIC00NCw2ICs0NCw3IEBAIHByaXZhdGU6CiAgICAgSXNJbmRleElucHV0VHlwZShIVE1M
SW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IFRleHRGaWVsZElucHV0VHlwZShlbGVtZW50KSB7IH07
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9O
dW1iZXJJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAKaW5k
ZXggZTI5MGU1MGUzMWQzZDgwYTJjMjkxMjk5MmM0MmU4NzdiMmRiMDE0Yy4uMzJhMDJmMTllNTIx
Y2FmOTcwYjRhNjcxNjQ5Nzk4MWQxNzc5YWZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL051
bWJlcklucHV0VHlwZS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL051bWJlcklucHV0VHlwZS5jcHAK
QEAgLTMxLDkgKzMxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTnVtYmVy
SW5wdXRUeXBlLmgiCiAKKyNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC00OSw2ICs1MSwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIG51
bWJlckRlZmF1bHRNYXhpbXVtID0gRkxUX01BWDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbnVtYmVy
RGVmYXVsdFN0ZXAgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG51bWJlclN0ZXBTY2FsZUZh
Y3RvciA9IDEuMDsKIAorc3RhdGljIGJvb2wgaXNOdW1iZXJDaGFyYWN0ZXIoVUNoYXIgY2gpCit7
CisgICAgcmV0dXJuIGNoID09ICcrJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJy4nIHx8IGNoID09
ICdlJyB8fCBjaCA9PSAnRScgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworfQorCiBQYXNz
T3duUHRyPElucHV0VHlwZT4gTnVtYmVySW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE51bWJlcklucHV0VHlwZShl
bGVtZW50KSk7CkBAIC0xNTUsOSArMTYyLDQwIEBAIGRvdWJsZSBOdW1iZXJJbnB1dFR5cGU6OnN0
ZXBTY2FsZUZhY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bWJlclN0ZXBTY2FsZUZhY3RvcjsK
IH0KIAotYm9vbCBOdW1iZXJJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKK3ZvaWQgTnVtYmVySW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRv
bihldmVudCk7CisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgVGV4
dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE51
bWJlcklucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV2ZW50LT50ZXh0
KCkubGVuZ3RoKCk7CisgICAgYm9vbCBoYXNJbnZhbGlkQ2hhciA9IGZhbHNlOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWlzTnVtYmVy
Q2hhcmFjdGVyKGV2ZW50LT50ZXh0KClbaV0pKSB7CisgICAgICAgICAgICBoYXNJbnZhbGlkQ2hh
ciA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
aGFzSW52YWxpZENoYXIpIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICAg
ICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgVUNoYXIgY2ggPSBldmVu
dC0+dGV4dCgpW2ldOworICAgICAgICAgICAgaWYgKCFpc051bWJlckNoYXJhY3RlcihjaCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2gp
OworICAgICAgICB9CisgICAgICAgIGV2ZW50LT5zZXRUZXh0KFN0cmluZzo6YWRvcHQoc3RyaXBw
ZWQpKTsKKyAgICB9CisgICAgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChldmVudCk7Cit9CisKK3ZvaWQgTnVtYmVySW5wdXRUeXBlOjpoYW5kbGVXaGVl
bEV2ZW50KFdoZWVsRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBoYW5kbGVLZXlkb3duRXZl
bnRGb3JTcGluQnV0dG9uKGV2ZW50KSB8fCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudEZvclNwaW5CdXR0b24oZXZlbnQpOworICAgIGhhbmRsZVdoZWVsRXZlbnRGb3JTcGlu
QnV0dG9uKGV2ZW50KTsKIH0KIAogZG91YmxlIE51bWJlcklucHV0VHlwZTo6cGFyc2VUb0RvdWJs
ZShjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3QKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9OdW1iZXJJbnB1dFR5cGUuaCBiL1dlYkNvcmUvaHRtbC9OdW1iZXJJ
bnB1dFR5cGUuaAppbmRleCBkYzZlMDIwNWFkZTQ5YzRmMWFiNzQzMDdhZDg1YzRlNzhkYTllYjQw
Li5lZTFhMGU1YzdhMmRiMTQyZTM0YTk2ZWRlY2E5NDhjYmNkMzFhZGE2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvTnVtYmVySW5wdXRUeXBlLmgKKysrIGIvV2ViQ29yZS9odG1sL051bWJlcklu
cHV0VHlwZS5oCkBAIC01NSw3ICs1NSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUg
c3RlcEJhc2VXaXRoRGVjaW1hbFBsYWNlcyh1bnNpZ25lZCopIGNvbnN0OwogICAgIHZpcnR1YWwg
ZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcFNjYWxl
RmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUtleWRvd25FdmVudChLZXli
b2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2Fy
ZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVs
RXZlbnQoV2hlZWxFdmVudCopOwogICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlVG9Eb3VibGUoY29u
c3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZVRvRG91
YmxlV2l0aERlY2ltYWxQbGFjZXMoY29uc3QgU3RyaW5nJiwgZG91YmxlLCB1bnNpZ25lZCopIGNv
bnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcCBiL1dlYkNvcmUvaHRtbC9SYWRp
b0lucHV0VHlwZS5jcHAKaW5kZXggNGM0NTliZWEwNTRkODUyZTdkMmI2ZWY2MmYyNTE0MzMwMzJj
ODMyYi4uYzVkZmQ3ODJjOTVlNzQ0ZGNmYjNlMjFlZTExNTIxNTY0OGYwYzliYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvUmFk
aW9JbnB1dFR5cGUuY3BwCkBAIC01NiwxOSArNTYsMTkgQEAgU3RyaW5nIFJhZGlvSW5wdXRUeXBl
Ojp2YWx1ZU1pc3NpbmdUZXh0KCkgY29uc3QKICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VW
YWx1ZU1pc3NpbmdGb3JSYWRpb1RleHQoKTsKIH0KIAotYm9vbCBSYWRpb0lucHV0VHlwZTo6aGFu
ZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3ZvaWQgUmFkaW9JbnB1dFR5cGU6Omhh
bmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7CiAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmFkaW9JbnB1dFR5cGU6
OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgUmFkaW9JbnB1
dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBp
ZiAoQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KGV2ZW50KSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6aGFuZGxlS2V5
ZG93bkV2ZW50KGV2ZW50KTsKKyAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAg
ICAgIHJldHVybjsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9IGV2ZW50LT5rZXlJZGVudGlmaWVy
KCk7CiAgICAgaWYgKGtleSAhPSAiVXAiICYmIGtleSAhPSAiRG93biIgJiYga2V5ICE9ICJMZWZ0
IiAmJiBrZXkgIT0gIlJpZ2h0IikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm47CiAKICAgICAvLyBMZWZ0IGFuZCB1cCBtZWFuICJwcmV2aW91cyByYWRpbyBidXR0b24iLgog
ICAgIC8vIFJpZ2h0IGFuZCBkb3duIG1lYW4gIm5leHQgcmFkaW8gYnV0dG9uIi4KQEAgLTc3LDcg
Kzc3LDcgQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogICAgIC8vIEhvd2V2ZXIsIHdoZW4gdXNpbmcgU3BhdGlhbCBOYXZpZ2F0
aW9uLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbmF2aWdhdGUgd2l0aG91dCBjaGFuZ2luZyB0aGUg
c2VsZWN0aW9uLgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQoKS0+ZG9jdW1lbnQo
KTsKICAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQtPmZyYW1lKCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKICAgICBib29sIGZvcndh
cmQgPSAoa2V5ID09ICJEb3duIiB8fCBrZXkgPT0gIlJpZ2h0Iik7CiAKICAgICAvLyBXZSBjYW4g
b25seSBzdGF5IHdpdGhpbiB0aGUgZm9ybSdzIGNoaWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBi
ZWVuIGRlbW90ZWQgdG8gYSBsZWFmIGJlY2F1c2UKQEAgLTk4LDIzICs5OCwyMSBAQCBib29sIFJh
ZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAg
ICAgICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoaW5wdXRFbGVtZW50KTsKICAgICAg
ICAgICAgIGlucHV0RWxlbWVudC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCwgZmFsc2Us
IGZhbHNlKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXl1
cEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxl
S2V5dXBFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcmIGtl
eSA9IGV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CiAgICAgaWYgKGtleSAhPSAiVSswMDIwIikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAgICAgLy8gSWYgYW4gdW5zZWxl
Y3RlZCByYWRpbyBpcyB0YWJiZWQgaW50byAoYmVjYXVzZSB0aGUgZW50aXJlIGdyb3VwIGhhcyBu
b3RoaW5nCiAgICAgLy8gY2hlY2tlZCwgb3IgYmVjYXVzZSBvZiBzb21lIGV4cGxpY2l0IC5mb2N1
cygpIGNhbGwpLCB0aGVuIGFsbG93IHNwYWNlIHRvIGNoZWNrIGl0LgogICAgIGlmIChlbGVtZW50
KCktPmNoZWNrZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAg
ICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlja0lmQWN0aXZlKGV2ZW50KTsKLSAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L1JhZGlvSW5wdXRUeXBlLmggYi9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaAppbmRleCA2
MmJlY2Y2NjljOTFhYWY2ZmQzZjZjZTE1ZDIxMDU5NWIxOWYxYmE1Li44NmRiYzQ3NmJiZjcxYzhj
MDlmNzVhZDUxZTY1MjdjZjIyZTczZDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvUmFkaW9J
bnB1dFR5cGUuaAorKysgYi9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuaApAQCAtNDQsOSAr
NDQsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29u
dHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0
cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlTWlzc2luZ1RleHQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ2xpY2tFdmVudChNb3VzZUV2ZW50Kik7Ci0gICAg
dmlydHVhbCBib29sIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7Ci0gICAgdmly
dHVhbCBib29sIGhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVDbGlja0V2ZW50KE1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
S2V5dXBFdmVudChLZXlib2FyZEV2ZW50Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwIGIvV2ViQ29yZS9o
dG1sL1JhbmdlSW5wdXRUeXBlLmNwcAppbmRleCA1MDUyMGNkMWZiYTBiNGRmOTI0ZDBkNjZhMmMy
Y2IwZjc5MTliZTUyLi42ZGVkNTA4ZDY2MmYzZGE3MTA2OGJmNjMzNzY2MjlhOGE0Y2M3NThiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKQEAgLTEzMywxMSArMTMzLDExIEBAIGRvdWJsZSBSYW5n
ZUlucHV0VHlwZTo6c3RlcFNjYWxlRmFjdG9yKCkgY29uc3QKICAgICByZXR1cm4gcmFuZ2VTdGVw
U2NhbGVGYWN0b3I7CiB9CiAKLWJvb2wgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVu
dChLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgUmFuZ2VJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBjb25zdCBTdHJpbmcmIGtleSA9
IGV2ZW50LT5rZXlJZGVudGlmaWVyKCk7CiAgICAgaWYgKGtleSAhPSAiVXAiICYmIGtleSAhPSAi
UmlnaHQiICYmIGtleSAhPSAiRG93biIgJiYga2V5ICE9ICJMZWZ0IikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIp
LCAiYW55IikpIHsKQEAgLTE3MSw3ICsxNzEsMTIgQEAgYm9vbCBSYW5nZUlucHV0VHlwZTo6aGFu
ZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBlbGVtZW50KCkt
PnN0ZXBVcEZyb21SZW5kZXJlcihzdGVwTWFnbmlmaWNhdGlvbik7CiAgICAgfQogICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJhbmdl
SW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChlbGVtZW50
KCktPnJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFn
RXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkpKQorICAgICAgICB0b1JlbmRlclNsaWRl
cihlbGVtZW50KCktPnJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOwogfQogCiBSZW5k
ZXJPYmplY3QqIFJhbmdlSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9SYW5nZUlu
cHV0VHlwZS5oIGIvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKaW5kZXggMTQyODBlODZl
YWJmMzlhZWE5OTQ2MWZlM2IxNGVhMTkyYmE1MGZkNS4uNDQwYWJiNjcyNjE1YjEyZWE3ZTIxZGRk
Njk1NTlmMjI4N2Y1NWUwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBl
LmgKKysrIGIvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmgKQEAgLTU0LDcgKzU0LDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGRvdWJsZSBzdGVwQmFzZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgZG91YmxlIGRlZmF1bHRTdGVwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgc3RlcFNj
YWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUtleWRvd25FdmVudChL
ZXlib2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXli
b2FyZEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgcGFyc2VUb0RvdWJsZShjb25zdCBT
dHJpbmcmLCBkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3Vi
bGUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcCBi
L1dlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5jcHAKaW5kZXggYjkxMWRlZTMzMGVlMjAwOGYy
YmFkYzlmMjg1NTk2NWY3ZTc1NzFkOS4uMjdiZjhlYTllMDE1YTE5NTlkZjhhOTQ4MmY1ODNiN2Q1
YTJlNjAzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL1Jlc2V0SW5wdXRUeXBlLmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuY3BwCkBAIC01MiwxMyArNTIsMTIgQEAgYm9v
bCBSZXNldElucHV0VHlwZTo6c3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVzZXRJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQo
RXZlbnQqIGV2ZW50KQordm9pZCBSZXNldElucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVu
dChFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSB8fCAhZWxl
bWVudCgpLT5mb3JtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGVsZW1lbnQoKS0+Zm9ybSgpLT5yZXNldCgpOwogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwotICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvUmVzZXRJbnB1dFR5cGUuaCBiL1dlYkNvcmUvaHRtbC9S
ZXNldElucHV0VHlwZS5oCmluZGV4IDE1M2FmYWMxOTJjZjcyZjM1MmUwM2EwODllY2VhZGNiODA5
YTIwZmUuLjY1MWFlNTA2MDJkZDkwOGQ4ODc2ZWQ3YTQ3OTg4YzVlODZiOGQzYmEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9SZXNldElucHV0VHlwZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9SZXNl
dElucHV0VHlwZS5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgUmVzZXRJbnB1dFR5
cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgOiBCYXNlQnV0dG9uSW5wdXRUeXBlKGVsZW1l
bnQpIHsgfQogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCopOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5j
cHAgYi9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAppbmRleCBiYWQ1MWNmMDE4MTkw
ODIwZjFhNzM0ZDJhNTQ5NzQxNGYzNWM4MGY3Li5kN2I4MjM0Y2VlYjliOGZmOTU1NTM4Mjc3MzEy
ZDk2NWE3ZTFmYzgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcApAQCAtNjEsMTYgKzYxLDE1
IEBAIGJvb2wgU3VibWl0SW5wdXRUeXBlOjpzdXBwb3J0c1JlcXVpcmVkKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU3VibWl0SW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0
ZUV2ZW50KEV2ZW50KiBldmVudCkKK3ZvaWQgU3VibWl0SW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
ZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKICAgICBpZiAoZWxlbWVudC0+ZGlzYWJsZWQoKSB8
fCAhZWxlbWVudC0+Zm9ybSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKICAgICBlbGVtZW50LT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CiAgICAgZWxlbWVudC0+
Zm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2ZW50KTsgLy8gRXZlbnQgaGFuZGxlcnMgY2FuIHJ1bi4K
ICAgICBlbGVtZW50LT5zZXRBY3RpdmF0ZWRTdWJtaXQoZmFsc2UpOwogICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwotICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmggYi9XZWJD
b3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmgKaW5kZXggNDg2NDJkYzVhZTE4YTBmNWZkNzAyYTUx
OGYyMWFiMzZlMmQ5YWNiMC4uN2VjMTEyMDM3MWNkNGZmY2Q1YWYxNjZkYjBiMjhmMWMxYWY3Mjgz
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCisrKyBiL1dlYkNv
cmUvaHRtbC9TdWJtaXRJbnB1dFR5cGUuaApAQCAtNDQsNyArNDQsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzUmVxdWlyZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDhiNzQzNTk1NzU1MDJjMGY4
NzA2NWNiMDUwODRjMDcwNDJkMTg5NWMuLmEyNDk0MjAzN2IyZDlkMDhmNjgzNDEwYmUyZTVkNzE1
ZDNmZWIwY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIldoZWVs
RXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTAsMTggKzUxLDE3IEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjp2YWx1
ZU1pc3NpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKICAgICByZXR1cm4gdmFsdWUuaXNF
bXB0eSgpOwogfQogCi1ib29sIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtl
eWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQoKS0+
Zm9jdXNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKICAgICBG
cmFtZSogZnJhbWUgPSBlbGVtZW50KCktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSB8fCAhZnJhbWUtPmVkaXRvcigpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoZWxl
bWVudCgpLCBldmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRvbihL
ZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlk
b3duRXZlbnRGb3JTcGluQnV0dG9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGNvbnN0
IFN0cmluZyYga2V5ID0gZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKICAgICBpbnQgc3RlcCA9IDA7
CkBAIC03MCwxMCArNzAsMjggQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRv
d25FdmVudEZvclNwaW5CdXR0b24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgZWxzZSBpZiAo
a2V5ID09ICJEb3duIikKICAgICAgICAgc3RlcCA9IC0xOwogICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAgICAgZWxlbWVudCgpLT5zdGVwVXBGcm9tUmVu
ZGVyZXIoc3RlcCk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVXaGVlbEV2ZW50Rm9y
U3BpbkJ1dHRvbihXaGVlbEV2ZW50KiBldmVudCkKK3sKKyAgICBpbnQgc3RlcCA9IDA7CisgICAg
aWYgKGV2ZW50LT53aGVlbERlbHRhWSgpID4gMCkKKyAgICAgICAgc3RlcCA9IDE7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPndoZWVsRGVsdGFZKCkgPCAwKQorICAgICAgICBzdGVwID0gLTE7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm47CisgICAgZWxlbWVudCgpLT5zdGVwVXBGcm9tUmVuZGVyZXIo
c3RlcCk7CisgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChlbGVt
ZW50KCktPnJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNE
cmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpKQorICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50
KCktPnJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOwogfQogCiBib29sIFRleHRGaWVs
ZElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmggYi9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmgKaW5kZXggMDdmMDZlOWE5MTM1NmE0NDkyYTQyMGZkM2NhYmM5YmM3
NGJkMmFkZC4uODMzM2IyNzExNjQ2ZTM0OTY5ZTc4ZTBjNDMzYzY2ZmJlYTY4NzA4YSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCisrKyBiL1dlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuaApAQCAtNDIsOCArNDIsMTAgQEAgcHJvdGVjdGVkOgogICAg
IFRleHRGaWVsZElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSA6IElucHV0VHlw
ZShlbGVtZW50KSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopOwotICAgIGJvb2wg
aGFuZGxlS2V5ZG93bkV2ZW50Rm9yU3BpbkJ1dHRvbihLZXlib2FyZEV2ZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBo
YW5kbGVLZXlkb3duRXZlbnRGb3JTcGluQnV0dG9uKEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lk
IGhhbmRsZVdoZWVsRXZlbnRGb3JTcGluQnV0dG9uKFdoZWVsRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFN1Ym1p
dEltcGxpY2l0bHkoRXZlbnQqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogfTsK
</data>
<flag name="review"
          id="67604"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>