<?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>77875</bug_id>
          
          <creation_ts>2012-02-06 08:13:30 -0800</creation_ts>
          <short_desc>Web Inspector: add generic support for undo-ing DOM edits.</short_desc>
          <delta_ts>2012-02-08 01:47:07 -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>Web Inspector (Deprecated)</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77988</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rakuco</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>550013</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-06 08:13:30 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550019</commentid>
    <comment_count>1</comment_count>
      <attachid>125652</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-06 08:26:51 -0800</bug_when>
    <thetext>Created attachment 125652
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550804</commentid>
    <comment_count>2</comment_count>
      <attachid>125652</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-02-07 03:50:30 -0800</bug_when>
    <thetext>Comment on attachment 125652
Patch

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

&gt; Source/WebCore/ChangeLog:5
&gt; +

Could you provide a high level overview of the undo approach?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:108
&gt; +        if (!inspectorStyleSheet-&gt;text(&amp;m_oldText))

text -&gt; getText?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:161
&gt; +        return &quot;SetPropertyText&quot; + m_styleSheetId + &quot;:&quot; + String::number(m_propertyIndex) + &quot;:&quot; + (m_overwrite ? &quot;true&quot; : &quot;false&quot;);

Use String::format?

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:169
&gt; +        m_text = other-&gt;m_text;

This is not only needed for toString, right?

&gt; Source/WebCore/inspector/InspectorCSSAgent.h:101
&gt; +    friend class SetStyleSheetTextAction;

You can make these classes nested and just forward declare them here.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:135
&gt; +class RemoveChildAction : public DOMAction {

All actions should be marked as WTF_MAKE_NONCOPYABLE

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:290
&gt; +private:

style: blank like above private:

&gt; Source/WebCore/inspector/InspectorHistory.cpp:106
&gt; +    while (!m_history.isEmpty() &amp;&amp; m_history.first()-&gt;isUndoableStateMark())

Instead of marking end of action, you could mark its beginning which would be simpler.

&gt; Source/WebCore/inspector/InspectorHistory.cpp:107
&gt; +        m_history.takeFirst();

removeFirst

&gt; Source/WebCore/inspector/InspectorHistory.h:50
&gt; +class InspectorHistory {

WTF_MAKE_NONCOPYABLE

&gt; Source/WebCore/inspector/InspectorStyleSheet.h:177
&gt; +    bool setPropertyText(ErrorString*, const InspectorCSSId&amp;, unsigned propertyIndex, const String&amp; text, bool overwrite, String* oldPropertyText);

oldPropertyText -&gt; oldText as in other places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550861</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 04:53:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 125652 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125652&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; +
&gt; 
&gt; Could you provide a high level overview of the undo approach?

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:108
&gt; &gt; +        if (!inspectorStyleSheet-&gt;text(&amp;m_oldText))
&gt; 
&gt; text -&gt; getText?
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:161
&gt; &gt; +        return &quot;SetPropertyText&quot; + m_styleSheetId + &quot;:&quot; + String::number(m_propertyIndex) + &quot;:&quot; + (m_overwrite ? &quot;true&quot; : &quot;false&quot;);
&gt; 
&gt; Use String::format?
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:169
&gt; &gt; +        m_text = other-&gt;m_text;
&gt; 
&gt; This is not only needed for toString, right?
&gt; 

This will also be used in redo.

&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.h:101
&gt; &gt; +    friend class SetStyleSheetTextAction;
&gt; 
&gt; You can make these classes nested and just forward declare them here.

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:135
&gt; &gt; +class RemoveChildAction : public DOMAction {
&gt; 
&gt; All actions should be marked as WTF_MAKE_NONCOPYABLE

Done.


&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:290
&gt; &gt; +private:
&gt; 
&gt; style: blank like above private:
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/InspectorHistory.cpp:106
&gt; &gt; +    while (!m_history.isEmpty() &amp;&amp; m_history.first()-&gt;isUndoableStateMark())
&gt; 
&gt; Instead of marking end of action, you could mark its beginning which would be simpler.

This would make the code harder due to minor (non-major) style edits.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorHistory.cpp:107
&gt; &gt; +        m_history.takeFirst();
&gt; 
&gt; removeFirst

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorHistory.h:50
&gt; &gt; +class InspectorHistory {
&gt; 
&gt; WTF_MAKE_NONCOPYABLE
&gt; 

Done.


&gt; &gt; Source/WebCore/inspector/InspectorStyleSheet.h:177
&gt; &gt; +    bool setPropertyText(ErrorString*, const InspectorCSSId&amp;, unsigned propertyIndex, const String&amp; text, bool overwrite, String* oldPropertyText);
&gt; 
&gt; oldPropertyText -&gt; oldText as in other places

In other places this method is defined on style, not stylesheet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550864</commentid>
    <comment_count>4</comment_count>
      <attachid>125819</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 04:54:42 -0800</bug_when>
    <thetext>Created attachment 125819
[Patch] for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550910</commentid>
    <comment_count>5</comment_count>
      <attachid>125829</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 05:57:36 -0800</bug_when>
    <thetext>Created attachment 125829
[Patch] with tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550913</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 06:00:48 -0800</bug_when>
    <thetext>Committed r106932: &lt;http://trac.webkit.org/changeset/106932&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550983</commentid>
    <comment_count>7</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-07 07:57:46 -0800</bug_when>
    <thetext>Hi. I think there&apos;s a chance this broke mac build see in http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Build%29/builds/38577/steps/compile-webkit/logs/stdio (look for &quot;OwnPtr&quot; in the file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550986</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-07 07:59:54 -0800</bug_when>
    <thetext>Reopen, because the build is still broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551036</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-02-07 09:01:00 -0800</bug_when>
    <thetext>Committed r106953: &lt;http://trac.webkit.org/changeset/106953&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125652</attachid>
            <date>2012-02-06 08:26:51 -0800</date>
            <delta_ts>2012-02-07 04:54:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77875-20120206202649.patch</filename>
            <type>text/plain</type>
            <size>51796</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM0NjI1NDQzMTMxZGZh
MTdmODc4YTljNWZjNWRkNTVmNmM1MDIyMy4uNzRhYjc4ZDFjODRkZDQxOTQ1ZjljZDJjZDI3Njhk
OTIyZWI0NWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTAyLTA2ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciB1bmRvLWluZyBET00gZWRpdHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg3NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JBbGxJbk9uZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcDoKKyAgICAgICAgKFN0eWxlU2hlZXRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVTaGVldEFjdGlvbjo6U3R5bGVTaGVldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRBY3Rp
b246OnVuZG8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTZXRTdHlsZVNoZWV0VGV4
dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjo6U2V0
U3R5bGVTaGVldFRleHRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0U3R5bGVTaGVldFRl
eHRBY3Rpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U2V0U3R5bGVTaGVldFRleHRB
Y3Rpb246OnVuZG8pOgorICAgICAgICAoU2V0UHJvcGVydHlUZXh0QWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6U2V0UHJvcGVydHlUZXh0QWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6dG9TdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2V0UHJvcGVydHlUZXh0QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6dW5kbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXRQcm9wZXJ0eVRleHRBY3Rpb246Om1lcmdlSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0
UHJvcGVydHlUZXh0QWN0aW9uOjptZXJnZSk6CisgICAgICAgIChUb2dnbGVQcm9wZXJ0eUFjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpUb2dnbGVQcm9wZXJ0eUFjdGlvbjo6VG9nZ2xlUHJvcGVy
dHlBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VG9nZ2xlUHJvcGVydHlBY3Rpb246OnBlcmZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6VG9nZ2xlUHJvcGVydHlBY3Rpb246OnVuZG8pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckNT
U0FnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50Ojptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVu
ZG8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6bWFya1VuZG9hYmxlU3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omhpc3RvcnkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JIaXN0b3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0
b3J5OjpBY3Rpb246OkFjdGlvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6fkFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6aXNVbmRvYWJsZVN0YXRlTWFyayk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246Om1lcmdlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JIaXN0b3J5OjpJbnNwZWN0b3JIaXN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckhpc3Rvcnk6On5JbnNwZWN0b3JIaXN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckhpc3Rvcnk6OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGlzdG9yeTo6bWFya1VuZG9hYmxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGlzdG9yeTo6dW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5Ojpy
ZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEluc3BlY3Rvckhpc3RvcnkpOgorICAgICAgICAo
QWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKEluc3BlY3Rv
clN0eWxlKToKKyAgICAgICAgKEluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0VGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFu
ZWwucHJvdG90eXBlLl9zZWxlY3RlZE5vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5fdXBkYXRlU2lkZWJhcnMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLmhhbmRsZVNob3J0Y3V0KToKKwogMjAx
Mi0wMi0wNiAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gSW1wbGVtZW50IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6
OkRvbnRDb3B5QmFja2luZ1N0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3NWUzZmZhYjEx
YjIxOTdmZjQyM2UzN2RjODlkYWMwYjBiMzQ0NjM0Li5kZDA0Y2Y2ZmI3YWYyMjIxMzQ2Mzg1NmFi
NjZjM2QyMWZjNDdjYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTAxLDYgKzkwMSw3IEBA
IFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFn
ZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0lu
c3BlY3Rvckhpc3RvcnkuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCiAgICAgaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggMzAwNmU4MzZlZTc0ZTJhZjUxMDg1Y2M4NDA4ZWNhYjY2ZjI1YTc4ZS4uM2IzYzVk
NGMyZWNiNzgzMDU4NjM1ZTE1ZmI0NjMxZjViNzRlNjg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC0yMzkwLDYgKzIzOTAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAog
CVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAorCVNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmNwcCBcCisJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGM2YTJlY2Vl
YjBmOGQ3MTAxNWFiZTIxNjEyZmUyNGM4ZGRkNDNiNDEuLmQzNGM2ZDk3ODU0NTFhODcxZDY3YWI1
ZmNlZGEwMDgzNTZlNjQwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
KysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtODc3LDYgKzg3Nyw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVj
dG9ySGlzdG9yeS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBcCkBAIC0xOTQzLDYgKzE5NDQsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9y
eS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE5NTlkZGYxMjg4MGViYTZiY2U0NjE1
MTUzNThiYzgxODNiNGQzNWQuLjA3YTM0MGY4YjYyZmYxNDFlYTdiZmQ1NDczOTc1MTc2OTVjZTYz
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIzODYsNiArMjM4Niw4IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9ySGlzdG9yeS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JI
aXN0b3J5LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDM1
ZDQ2ZGE0MTc2MzgwYzJkOTZlNGU3MjEyM2FjZTI2MjVhYzljOWMuLjBmNGRjNDdjOWZiNTNhZDJi
N2Q4MzI5N2NiZjc1MzFiMDg3MmIyMjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCkBAIC03MTY1OCw2ICs3MTY1OCwzMCBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
SGlzdG9yeS5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9k
dWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JIaXN0b3J5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZkNmQ4NTBlNDUz
YzUxOTVhMTFjZjg5MjgyZWFiNWNkMGY1MzI5ZjEuLjcwYTM3MTZmZTA1YTc5MjkyYzY0ZTcyNTI3
OWM2Y2E1Yjk5MTI2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE4ODEsNiArMTg4MSw4IEBACiAJCTdBMUYyQjUyMTI2QzYx
QjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0ExRjJCNTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3Bl
Y3RvckNsaWVudC5jcHAgKi87IH07CiAJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNw
ZWN0b3JET01BZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTI0NTg3OTEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
ICovOyB9OwogCQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMjQ1ODdB
MTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdBNTQ4NTdGMTRFMDJENTEwMDZBRTA1
QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdBNTQ4NTdEMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0
b3J5LmNwcCAqLzsgfTsKKwkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhp
c3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
NTQ4NTdFMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmggKi87IH07CiAJCTdB
Njc0QkRCMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCRDkwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi87IH07CiAJCTdBNjc0QkRD
MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5
OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAqLzsgfTsKIAkJN0E3NEVDQkExMDE4MzlBNjAw
QkY5MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCODEwMTgzOUE1MDBCRjkzOUUgLyog
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCAqLzsgfTsKQEAgLTg3NTYsNiArODc1OCw4IEBA
CiAJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EyNDU4NzkxMDIxRUFGNDAwMEEwMEFBIC8qIElu
c3BlY3RvckRPTUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluc3BlY3RvckRPTUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ey
NDU4N0ExMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBNTQ4NTdEMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0
b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvckhp
c3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTU0ODU3RTE0RTAyRDUx
MDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBNTYzRTU0MTJERTMyQjAwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdFNvdXJjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU2M0Y5NTEyREY1QzkxMDBGNDUzNkQgLyogSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSBJbmplY3RlZFNjcmlwdFNvdXJjZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNDUsNiArMTQwNDksOCBA
QAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmlkbCAqLywKKwkJCQk3QTU0ODU3RDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVj
dG9ySGlzdG9yeS5jcHAgKi8sCisJCQkJN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3Bl
Y3Rvckhpc3RvcnkuaCAqLywKIAkJCQk3QUNEODhEMTE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwICovLAogCQkJCTdBQ0Q4OEQyMTRDMDhCRDYwMDg0RUREMiAv
KiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oICovLAogCQkJCTIwRDYyOTI0MTI1MzY5MEIwMDA4
MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovLApAQCAtMjQxMjcsNiArMjQx
MzMsNyBAQAogCQkJCTFBQUFEREJGMTREQzY0MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3Jv
bGxpbmdUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQURERTkxNERDOERGODAwQUY2
NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTU0ODU4
MDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNzA2MCw2ICsyNzA2Nyw3IEBACiAJCQkJMUFBQUREREExNERDNzRFQzAwQUY2NEIzIC8qIFNj
cm9sbGluZ1RyZWVTdGF0ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREUzMTREQzhD
OEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUFBRERFODE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gaW4gU291
cmNlcyAqLywKKwkJCQk3QTU0ODU3RjE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgppbmRleCA3ZjBkYzQ0ZDBjYjE2NDk5YTg1OGRiMmU0MTAyMThiYjI3MGVjZjY2Li44Y2NiNmEx
MDFjNjlhOTU1YjdjZTUxNjQwZjQ1N2FlZTI2MDYwMjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNTA4LDYgKzE1MDgsMTYgQEAKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiLCAiZGVzY3JpcHRpb24i
OiAiTmV3IGlkIG9mIHRoZSBtb3ZlZCBub2RlLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk1vdmVzIG5vZGUgaW50byB0aGUgbmV3IGNvbnRh
aW5lciwgcGxhY2VzIGl0IGJlZm9yZSB0aGUgZ2l2ZW4gYW5jaG9yLiIKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAidW5kbyIsCisgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuZG9lcyB0aGUgbGFzdCBwZXJmb3JtZWQgYWN0aW9u
LiIsCisgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAibWFya1VuZG9hYmxlU3RhdGUiLAor
ICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJNYXJrcyBsYXN0IHVuZG9hYmxlIHN0YXRl
LiIsCisgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKICAgICAgICAgICAgIH0KICAgICAg
ICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQWxsSW5PbmUuY3BwCmluZGV4IDc4OWEyNzE4ZWQ1MzFkMjY3ODcyZDJjNzkxNTUw
ZTQ5ZDg5MWUxYTQuLjM1MTczY2I5ZTAzNjdiZmFmNjBlMjkxZDE3NTI2ZjJhNDFiMzlhZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcApAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCIKKyNpbmNsdWRlICJJbnNwZWN0b3JIaXN0b3J5LmNwcCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JNZW1vcnlBZ2VudC5j
cHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApp
bmRleCAwMTNmNGYzMjM4ZGUyMWVmMWE2ZTViZDUyMTE0Y2EyY2RlOThmMjExLi5hMDVmMzJjYTJk
NGI1OTdjOWMyYTQyNzIxNzAzOGNhN2MxY2Q3MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2lu
Y2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTYwLDYgKzYxLDE0OCBAQCBzdGF0aWMg
Y29uc3QgY2hhciBpc1NlbGVjdG9yUHJvZmlsaW5nW10gPSAiaXNTZWxlY3RvclByb2ZpbGluZyI7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU3R5bGVTaGVldEFjdGlvbiA6IHB1Ymxp
YyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24geworcHVibGljOgorICAgIFN0eWxlU2hlZXRBY3Rp
b24oY29uc3QgU3RyaW5nJiBuYW1lLCBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkKQorICAgICAgICA6IEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlv
bihuYW1lKQorICAgICAgICAsIG1fY3NzQWdlbnQoY3NzQWdlbnQpCisgICAgICAgICwgbV9zdHls
ZVNoZWV0SWQoc3R5bGVTaGVldElkKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
cGVyZm9ybShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbV9jc3NBZ2VudC0+YXNzZXJ0U3R5bGVTaGVldEZv
cklkKGVycm9yU3RyaW5nLCBtX3N0eWxlU2hlZXRJZCk7CisgICAgICAgIGlmICghc3R5bGVTaGVl
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHBlcmZvcm0oc3R5
bGVTaGVldCwgZXJyb3JTdHJpbmcpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQgPSBtX2Nzc0FnZW50LT5hc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JT
dHJpbmcsIG1fc3R5bGVTaGVldElkKTsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdW5kbyhzdHlsZVNoZWV0LCBlcnJv
clN0cmluZyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oSW5zcGVjdG9yU3R5
bGVTaGVldCosIEVycm9yU3RyaW5nKikgPSAwOworCisgICAgdmlydHVhbCBib29sIHVuZG8oSW5z
cGVjdG9yU3R5bGVTaGVldCosIEVycm9yU3RyaW5nKikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAg
SW5zcGVjdG9yQ1NTQWdlbnQqIG1fY3NzQWdlbnQ7CisgICAgU3RyaW5nIG1fc3R5bGVTaGVldElk
OworfTsKKworY2xhc3MgU2V0U3R5bGVTaGVldFRleHRBY3Rpb24gOiBwdWJsaWMgU3R5bGVTaGVl
dEFjdGlvbiB7CitwdWJsaWM6CisgICAgU2V0U3R5bGVTaGVldFRleHRBY3Rpb24oSW5zcGVjdG9y
Q1NTQWdlbnQqIGNzc0FnZW50LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQorICAgICAgICA6IFN0eWxlU2hlZXRBY3Rpb24oIlNldFN0eWxlU2hlZXRUZXh0
IiwgY3NzQWdlbnQsIHN0eWxlU2hlZXRJZCkKKyAgICAgICAgLCBtX3RleHQodGV4dCkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oSW5zcGVjdG9yU3R5bGVTaGVldCog
aW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqKQorICAgIHsKKyAgICAgICAgaWYgKCFp
bnNwZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCZtX29sZFRleHQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmIChpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRUZXh0KG1fdGV4
dCkpIHsKKyAgICAgICAgICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnJlcGFyc2VTdHlsZVNoZWV0
KG1fdGV4dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5
bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqKQorICAgIHsKKyAgICAg
ICAgaWYgKGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQobV9vbGRUZXh0KSkgeworICAgICAg
ICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+cmVwYXJzZVN0eWxlU2hlZXQobV9vbGRUZXh0KTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcgbV9v
bGRUZXh0OworfTsKKworY2xhc3MgU2V0UHJvcGVydHlUZXh0QWN0aW9uIDogcHVibGljIFN0eWxl
U2hlZXRBY3Rpb24geworcHVibGljOgorICAgIFNldFByb3BlcnR5VGV4dEFjdGlvbihJbnNwZWN0
b3JDU1NBZ2VudCogY3NzQWdlbnQsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBJ
bnNwZWN0b3JDU1NJZCYgY3NzSWQsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUpCisgICAgICAgIDogU3R5bGVTaGVldEFjdGlvbigiU2V0
UHJvcGVydHlUZXh0IiwgY3NzQWdlbnQsIHN0eWxlU2hlZXRJZCkKKyAgICAgICAgLCBtX2Nzc0lk
KGNzc0lkKQorICAgICAgICAsIG1fcHJvcGVydHlJbmRleChwcm9wZXJ0eUluZGV4KQorICAgICAg
ICAsIG1fdGV4dCh0ZXh0KQorICAgICAgICAsIG1fb3ZlcndyaXRlKG92ZXJ3cml0ZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1lcmdlSWQoKSArICI6IiArIG1fdGV4dDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgcGVyZm9ybShJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0LCBFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5
bGVTaGVldC0+c2V0UHJvcGVydHlUZXh0KGVycm9yU3RyaW5nLCBtX2Nzc0lkLCBtX3Byb3BlcnR5
SW5kZXgsIG1fdGV4dCwgbV9vdmVyd3JpdGUsICZtX29sZFRleHQpOworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCB1bmRvKEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQs
IEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIFN0cmluZyBwbGFjZWhv
bGRlcjsKKyAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFByb3BlcnR5VGV4
dChlcnJvclN0cmluZywgbV9jc3NJZCwgbV9wcm9wZXJ0eUluZGV4LCBtX292ZXJ3cml0ZSA/IG1f
b2xkVGV4dCA6ICIiLCB0cnVlLCAmcGxhY2Vob2xkZXIpOworICAgIH0KKworICAgIHZpcnR1YWwg
U3RyaW5nIG1lcmdlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJTZXRQcm9wZXJ0eVRleHQi
ICsgbV9zdHlsZVNoZWV0SWQgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihtX3Byb3BlcnR5SW5kZXgp
ICsgIjoiICsgKG1fb3ZlcndyaXRlID8gInRydWUiIDogImZhbHNlIik7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIG1lcmdlKFBhc3NPd25QdHI8QWN0aW9uPiBhY3Rpb24pCisgICAgeworICAg
ICAgICBBU1NFUlQoYWN0aW9uLT5tZXJnZUlkKCkgPT0gbWVyZ2VJZCgpKTsKKworICAgICAgICBT
ZXRQcm9wZXJ0eVRleHRBY3Rpb24qIG90aGVyID0gc3RhdGljX2Nhc3Q8U2V0UHJvcGVydHlUZXh0
QWN0aW9uKj4oYWN0aW9uLmdldCgpKTsKKyAgICAgICAgbV90ZXh0ID0gb3RoZXItPm1fdGV4dDsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ1NTSWQgbV9jc3NJZDsKKyAgICB1bnNp
Z25lZCBtX3Byb3BlcnR5SW5kZXg7CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcgbV9v
bGRUZXh0OworICAgIGJvb2wgbV9vdmVyd3JpdGU7Cit9OworCitjbGFzcyBUb2dnbGVQcm9wZXJ0
eUFjdGlvbiA6IHB1YmxpYyBTdHlsZVNoZWV0QWN0aW9uIHsKK3B1YmxpYzoKKyAgICBUb2dnbGVQ
cm9wZXJ0eUFjdGlvbihJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBjb25zdCBJbnNwZWN0b3JDU1NJZCYgY3NzSWQsIHVuc2lnbmVkIHByb3Bl
cnR5SW5kZXgsIGJvb2wgZGlzYWJsZSkKKyAgICAgICAgOiBTdHlsZVNoZWV0QWN0aW9uKCJUb2dn
bGVQcm9wZXJ0eSIsIGNzc0FnZW50LCBzdHlsZVNoZWV0SWQpCisgICAgICAgICwgbV9jc3NJZChj
c3NJZCkKKyAgICAgICAgLCBtX3Byb3BlcnR5SW5kZXgocHJvcGVydHlJbmRleCkKKyAgICAgICAg
LCBtX2Rpc2FibGUoZGlzYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBl
cmZvcm0oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hl
ZXQtPnRvZ2dsZVByb3BlcnR5KGVycm9yU3RyaW5nLCBtX2Nzc0lkLCBtX3Byb3BlcnR5SW5kZXgs
IG1fZGlzYWJsZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5
bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQor
ICAgIHsKKyAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShl
cnJvclN0cmluZywgbV9jc3NJZCwgbV9wcm9wZXJ0eUluZGV4LCAhbV9kaXNhYmxlKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ1NTSWQgbV9jc3NJZDsKKyAgICB1bnNpZ25lZCBt
X3Byb3BlcnR5SW5kZXg7CisgICAgYm9vbCBtX2Rpc2FibGU7Cit9OworCiBlbnVtIEZvcmNlUHNl
dWRvQ2xhc3NGbGFncyB7CiAgICAgUHNldWRvTm9uZSA9IDAsCiAgICAgUHNldWRvSG92ZXIgPSAx
IDw8IDAsCkBAIC00NDMsMTQgKzU4Niw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0
eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAKIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkK
IHsKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0
U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0SWQpOwotICAgIGlmICghaW5z
cGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGluc3BlY3RvclN0
eWxlU2hlZXQtPnNldFRleHQodGV4dCkpCi0gICAgICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnJl
cGFyc2VTdHlsZVNoZWV0KHRleHQpOwotICAgIGVsc2UKLSAgICAgICAgKmVycm9yU3RyaW5nID0g
IkludGVybmFsIGVycm9yIHNldHRpbmcgc3R5bGUgc2hlZXQgdGV4dCI7CisgICAgbV9kb21BZ2Vu
dC0+aGlzdG9yeSgpLT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRTdHlsZVNoZWV0VGV4dEFjdGlv
bih0aGlzLCBzdHlsZVNoZWV0SWQsIHRleHQpKSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9tQWdl
bnQtPmhpc3RvcnkoKS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mIHJlc3VsdCkKQEAgLTQ2Miw3ICs1OTksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpz
ZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SQog
ICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9v
bCBzdWNjZXNzID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UHJvcGVydHlUZXh0KGVycm9yU3Ry
aW5nLCBjb21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCB0ZXh0LCBvdmVyd3JpdGUpOworICAgIGJv
b2wgc3VjY2VzcyA9IG1fZG9tQWdlbnQtPmhpc3RvcnkoKS0+cGVyZm9ybShhZG9wdFB0cihuZXcg
U2V0UHJvcGVydHlUZXh0QWN0aW9uKHRoaXMsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCksIGNv
bXBvdW5kSWQsIHByb3BlcnR5SW5kZXgsIHRleHQsIG92ZXJ3cml0ZSkpLCBlcnJvclN0cmluZyk7
CiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CkBAIC00NzYsOSArNjEzLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPElu
CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47CiAKLSAgICBi
b29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShlcnJvclN0
cmluZywgY29tcG91bmRJZCwgcHJvcGVydHlJbmRleCwgZGlzYWJsZSk7CisgICAgYm9vbCBzdWNj
ZXNzID0gbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBUb2dnbGVQ
cm9wZXJ0eUFjdGlvbih0aGlzLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpLCBjb21wb3VuZElk
LCBwcm9wZXJ0eUluZGV4LCBkaXNhYmxlKSksIGVycm9yU3RyaW5nKTsKICAgICBpZiAoc3VjY2Vz
cykKICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JT
dHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICBt
X2RvbUFnZW50LT5oaXN0b3J5KCktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA2NGUyNzI0MmMyMWFiNjJm
ZTRkZWI0ZTI2NGU1N2MyYWRiZGEyNWEzLi5hMzE4MzFlZDViMDRkZTE2YjcwMGQ1Mjg0OTc5ZGZk
Y2RmNDQzMTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuaApAQCAtOTgsNiArOTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm9jZXNzUnVsZSgp
OwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjsK
KyAgICBmcmllbmQgY2xhc3MgU3R5bGVTaGVldEFjdGlvbjsKKwogICAgIEluc3BlY3RvckNTU0Fn
ZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JTdGF0ZSosIEluc3BlY3RvckRPTUFn
ZW50Kik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGI0MzA3ZjkzNWQ0NzdmMTI4MTE1
ZDgxZGNhNzI3ZjQzMDQwNDRhYWUuLjMxZDVhYmZhMzA1ZDE1OTJhNzJjZGIzZjg0OGI4NTcwMDE3
NDQwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtOTQsNiArOTQsMjM2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNw
YWNlIHsKKworY2xhc3MgRE9NQWN0aW9uIDogcHVibGljIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlv
biB7CitwdWJsaWM6CisgICAgRE9NQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkgOiBJbnNwZWN0
b3JIaXN0b3J5OjpBY3Rpb24obmFtZSkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcpCisgICAgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBwZXJmb3JtKGVjKTsKKyAgICAgICAgaWYgKGVj
KSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gZGVzY3JpcHRpb24ubmFtZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0ICYmICFlYzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgdW5kbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCisgICAgeworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSB1bmRvKGVjKTsKKyAgICAgICAg
aWYgKGVjKSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24oZWMpOworICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gZGVzY3JpcHRpb24ubmFtZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICYmICFlYzsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgcGVyZm9ybShFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgdmlydHVhbCBib29s
IHVuZG8oRXhjZXB0aW9uQ29kZSYpID0gMDsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4g
bV9wYXJlbnROb2RlOworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPE5vZGU+
IG1fYW5jaG9yTm9kZTsKK307CisKK2NsYXNzIFJlbW92ZUNoaWxkQWN0aW9uIDogcHVibGljIERP
TUFjdGlvbiB7CitwdWJsaWM6CisgICAgUmVtb3ZlQ2hpbGRBY3Rpb24oTm9kZSogcGFyZW50Tm9k
ZSwgTm9kZSogbm9kZSkKKyAgICAgICAgOiBET01BY3Rpb24oIlJlbW92ZUNoaWxkIikKKyAgICAg
ICAgLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMp
CisgICAgeworICAgICAgICBtX2FuY2hvck5vZGUgPSBtX25vZGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIHJldHVybiBtX3BhcmVudE5vZGUtPnJlbW92ZUNoaWxkKG1fbm9kZS5nZXQoKSwgZWMp
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQo
KSwgbV9hbmNob3JOb2RlLmdldCgpLCBlYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0
cjxOb2RlPiBtX3BhcmVudE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9hbmNob3JOb2RlOworfTsKKworY2xhc3MgSW5zZXJ0QmVmb3JlQWN0aW9uIDog
cHVibGljIERPTUFjdGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0QmVmb3JlQWN0aW9uKE5vZGUq
IHBhcmVudE5vZGUsIE5vZGUqIG5vZGUsIE5vZGUqIGFuY2hvck5vZGUpCisgICAgICAgIDogRE9N
QWN0aW9uKCJJbnNlcnRCZWZvcmUiKQorICAgICAgICAsIG1fcGFyZW50Tm9kZShwYXJlbnROb2Rl
KQorICAgICAgICAsIG1fbm9kZShub2RlKQorICAgICAgICAsIG1fYW5jaG9yTm9kZShhbmNob3JO
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShFeGNlcHRpb25D
b2RlJiBlYykKKyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICAgICAgbV9yZW1vdmVDaGlsZEFjdGlvbiA9IGFkb3B0UHRyKG5ldyBSZW1vdmVDaGlsZEFj
dGlvbihtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLmdldCgpKSk7CisgICAgICAgICAgICBp
ZiAoIW1fcmVtb3ZlQ2hpbGRBY3Rpb24tPnBlcmZvcm0oZWMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wYXJlbnROb2RlLT5pbnNl
cnRCZWZvcmUobV9ub2RlLmdldCgpLCBtX2FuY2hvck5vZGUuZ2V0KCksIGVjKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAg
IGlmIChtX3JlbW92ZUNoaWxkQWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fcmVtb3ZlQ2hp
bGRBY3Rpb24tPnVuZG8oZWMpOworCisgICAgICAgIHJldHVybiBtX3BhcmVudE5vZGUtPnJlbW92
ZUNoaWxkKG1fbm9kZS5nZXQoKSwgZWMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
Tm9kZT4gbV9wYXJlbnROb2RlOworICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRy
PE5vZGU+IG1fYW5jaG9yTm9kZTsKKyAgICBPd25QdHI8UmVtb3ZlQ2hpbGRBY3Rpb24+IG1fcmVt
b3ZlQ2hpbGRBY3Rpb247Cit9OworCitjbGFzcyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24gOiBwdWJs
aWMgRE9NQWN0aW9uIHsKK3B1YmxpYzoKKyAgICBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IERPTUFjdGlvbigiUmVt
b3ZlQXR0cmlidXRlIikKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCBt
X25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhj
ZXB0aW9uQ29kZSYpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRy
aWJ1dGUobV9uYW1lKTsKKyAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobV9uYW1l
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8o
RXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0
ZShtX25hbWUsIG1fdmFsdWUsIGVjKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgU3RyaW5nIG1fbmFt
ZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKK307CisKK2NsYXNzIFNldEF0dHJpYnV0ZUFjdGlvbiA6
IHB1YmxpYyBET01BY3Rpb24geworcHVibGljOgorICAgIFNldEF0dHJpYnV0ZUFjdGlvbihFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIDogRE9NQWN0aW9uKCJTZXRBdHRyaWJ1dGUiKQorICAgICAgICAsIG1fZWxlbWVudChl
bGVtZW50KQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CisgICAgICAgICwgbV9oYWRBdHRyaWJ1dGUoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9o
YWRBdHRyaWJ1dGUgPSBtX2VsZW1lbnQtPmhhc0F0dHJpYnV0ZShtX25hbWUpOworICAgICAgICBp
ZiAobV9oYWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX29sZFZhbHVlID0gbV9lbGVtZW50LT5n
ZXRBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9u
YW1lLCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIHJldHVybiAhZWM7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBpZiAobV9o
YWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUs
IG1fb2xkVmFsdWUsIGVjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9lbGVtZW50LT5y
ZW1vdmVBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgU3RyaW5nIG1fbmFt
ZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBib29sIG1faGFkQXR0cmlidXRlOworICAgIFN0
cmluZyBtX29sZFZhbHVlOworfTsKKworY2xhc3MgU2V0T3V0ZXJIVE1MQWN0aW9uIDogcHVibGlj
IERPTUFjdGlvbiB7CitwdWJsaWM6CisgICAgU2V0T3V0ZXJIVE1MQWN0aW9uKE5vZGUqIG5vZGUs
IGNvbnN0IFN0cmluZyYgaHRtbCkKKyAgICAgICAgOiBET01BY3Rpb24oIlNldE91dGVySFRNTCIp
CisgICAgICAgICwgbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV9odG1sKGh0bWwpCisgICAgICAg
ICwgbV9uZXdOb2RlKDApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3Jt
KEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9vbGRIVE1MID0gY3JlYXRlTWFy
a3VwKG1fbm9kZS5nZXQoKSk7CisgICAgICAgIERPTUVkaXRvciBkb21FZGl0b3IobV9ub2RlLT5v
d25lckRvY3VtZW50KCkpOworICAgICAgICBtX25ld05vZGUgPSBkb21FZGl0b3IucGF0Y2hOb2Rl
KG1fbm9kZS5nZXQoKSwgbV9odG1sLCBlYyk7CisgICAgICAgIHJldHVybiAhZWM7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAg
ICBET01FZGl0b3IgZG9tRWRpdG9yKG1fbm9kZS0+b3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAg
ZG9tRWRpdG9yLnBhdGNoTm9kZShtX25vZGUuZ2V0KCksIG1fb2xkSFRNTCwgZWMpOworICAgICAg
ICByZXR1cm4gIWVjOworICAgIH0KKworICAgIE5vZGUqIG5ld05vZGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbmV3Tm9kZTsKKyAgICB9Citwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBt
X25vZGU7CisgICAgU3RyaW5nIG1faHRtbDsKKyAgICBTdHJpbmcgbV9vbGRIVE1MOworICAgIE5v
ZGUqIG1fbmV3Tm9kZTsKK307CisKK2NsYXNzIFJlcGxhY2VXaG9sZVRleHRBY3Rpb24gOiBwdWJs
aWMgRE9NQWN0aW9uIHsKK3B1YmxpYzoKKyAgICBSZXBsYWNlV2hvbGVUZXh0QWN0aW9uKFRleHQq
IHRleHROb2RlLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgICAgIDogRE9NQWN0aW9uKCJSZXBs
YWNlV2hvbGVUZXh0IikKKyAgICAgICAgLCBtX3RleHROb2RlKHRleHROb2RlKQorICAgICAgICAs
IG1fdGV4dCh0ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShF
eGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIG1fb2xkVGV4dCA9IG1fdGV4dE5vZGUt
Pndob2xlVGV4dCgpOworICAgICAgICBtX3RleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG1fdGV4
dCwgZWMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
dW5kbyhFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIG1fdGV4dE5vZGUtPnJlcGxh
Y2VXaG9sZVRleHQobV9vbGRUZXh0LCBlYyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8VGV4dD4gbV90ZXh0Tm9kZTsKKyAgICBTdHJpbmcgbV90
ZXh0OworICAgIFN0cmluZyBtX29sZFRleHQ7Cit9OworCit9CisKIG5hbWVzcGFjZSBET01BZ2Vu
dFN0YXRlIHsKIHN0YXRpYyBjb25zdCBjaGFyIGRvY3VtZW50UmVxdWVzdGVkW10gPSAiZG9jdW1l
bnRSZXF1ZXN0ZWQiOwogfTsKQEAgLTE4MSw2ICs0MTEsNyBAQCBJbnNwZWN0b3JET01BZ2VudDo6
SW5zcGVjdG9yRE9NQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSQogICAgICwgbV9kb21MaXN0ZW5lcigwKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCiAgICAg
LCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCisgICAgLCBtX2hpc3RvcnkoYWRvcHRQdHIobmV3
IEluc3BlY3Rvckhpc3RvcnkoKSkpCiB7CiB9CiAKQEAgLTI0Miw3ICs0NzMsNyBAQCBOb2RlKiBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0ZWROb2RlKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cmVzZXQoKQogewotICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIG1faGlz
dG9yeS0+cmVzZXQoKTsKICAgICBtX3NlYXJjaFJlc3VsdHMuY2xlYXIoKTsKICAgICBkaXNjYXJk
QmluZGluZ3MoKTsKICAgICBpZiAobV9yZXZhbGlkYXRlU3R5bGVBdHRyVGFzaykKQEAgLTQ5OSwx
MCArNzMwLDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudEkKICAgICBpZiAoIWVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGVsZW1lbnQt
PnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgKmVy
cm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBjb3VsZCBub3Qgc2V0IGF0dHJpYnV0ZSB2YWx1
ZSI7CisgICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRBdHRyaWJ1dGVBY3Rp
b24oZWxlbWVudCwgbmFtZSwgdmFsdWUpKSwgZXJyb3JTdHJpbmcpOworICAgIG1faGlzdG9yeS0+
bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nKiBjb25zdCBuYW1lKQpAQCAtNTMyLDcgKzc2
MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVuCiAKICAgICBjb25zdCBOYW1lZE5vZGVNYXAq
IGF0dHJNYXAgPSB0b0hUTUxFbGVtZW50KGNoaWxkKS0+dXBkYXRlZEF0dHJpYnV0ZXMoKTsKICAg
ICBpZiAoIWF0dHJNYXAgJiYgbmFtZSkgewotICAgICAgICBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1
dGUoKm5hbWUpOworICAgICAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92
ZUF0dHJpYnV0ZUFjdGlvbihlbGVtZW50LCAqbmFtZSkpLCBlcnJvclN0cmluZyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU0MiwyMCArNzcxLDI0IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQg
ZWxlbWVuCiAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgogICAgICAgICBjb25zdCBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChuYW1lICYm
IGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCkgPT0gKm5hbWUpOwotICAgICAgICBlbGVtZW50
LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7Cisg
ICAgICAgIGlmICghbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRBdHRyaWJ1dGVB
Y3Rpb24oZWxlbWVudCwgYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmlidXRlLT52
YWx1ZSgpKSksIGVycm9yU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgJiYgbmFtZSkgewotICAgICAgICBlbGVtZW50
LT5yZW1vdmVBdHRyaWJ1dGUoKm5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiBuYW1lICYmICFuYW1lLT5zdHJpcFdoaXRlU3Bh
Y2UoKS5pc0VtcHR5KCkpCisgICAgICAgIG1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcg
UmVtb3ZlQXR0cmlidXRlQWN0aW9uKGVsZW1lbnQsICpuYW1lKSksIGVycm9yU3RyaW5nKTsKKwor
ICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGVs
ZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBh
c3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwotICAgIGlmIChlbGVtZW50KQot
ICAgICAgICBlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3
IFJlbW92ZUF0dHJpYnV0ZUFjdGlvbihlbGVtZW50LCBuYW1lKSksIGVycm9yU3RyaW5nKTsKKyAg
ICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQpA
QCAtNTcwLDEzICs4MDMsMTEgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBwYXJlbnROb2RlLT5yZW1vdmVD
aGlsZChub2RlLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiQ291
bGQgbm90IHJlbW92ZSBub2RlIGR1ZSB0byBET00gZXhjZXB0aW9uIjsKKyAgICBtX2hpc3Rvcnkt
PnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUNoaWxkQWN0aW9uKHBhcmVudE5vZGUsIG5vZGUp
KSwgZXJyb3JTdHJpbmcpOworICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqLCBpbnQg
bm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGludCogbmV3SWQpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgaW50KiBuZXdJZCkKIHsKICAgICAqbmV3SWQgPSAw
OwogCkBAIC01OTQsMTYgKzgyNSwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2Rl
TmFtZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTgogCiAgICAg
Ly8gQ29weSBvdmVyIHRoZSBvcmlnaW5hbCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgTm9kZSogY2hp
bGQ7Ci0gICAgd2hpbGUgKChjaGlsZCA9IG9sZE5vZGUtPmZpcnN0Q2hpbGQoKSkpCi0gICAgICAg
IG5ld0VsZW0tPmFwcGVuZENoaWxkKGNoaWxkLCBlYyk7CisgICAgd2hpbGUgKChjaGlsZCA9IG9s
ZE5vZGUtPmZpcnN0Q2hpbGQoKSkpIHsKKyAgICAgICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0o
YWRvcHRQdHIobmV3IEluc2VydEJlZm9yZUFjdGlvbihuZXdFbGVtLmdldCgpLCBjaGlsZCwgMCkp
LCBlcnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gUmVw
bGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUgbmV3IG5vZGUKICAgICBDb250YWluZXJOb2RlKiBw
YXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgcGFyZW50LT5pbnNlcnRCZWZvcmUo
bmV3RWxlbSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZWMpOwotICAgIHBhcmVudC0+cmVtb3Zl
Q2hpbGQob2xkTm9kZSwgZWMpOwotCi0gICAgaWYgKGVjKQorICAgIGlmICghbV9oaXN0b3J5LT5w
ZXJmb3JtKGFkb3B0UHRyKG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24ocGFyZW50LCBuZXdFbGVtLmdl
dCgpLCBvbGROb2RlLT5uZXh0U2libGluZygpKSksIGVycm9yU3RyaW5nKSkKICAgICAgICAgcmV0
dXJuOworICAgIGlmICghbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVDaGls
ZEFjdGlvbihwYXJlbnQsIG9sZE5vZGUpKSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm47
CisgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogCiAgICAgKm5ld0lkID0gcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChuZXdFbGVtLmdldCgpKTsKICAgICBpZiAobV9jaGlsZHJlblJl
cXVlc3RlZC5jb250YWlucyhub2RlSWQpKQpAQCAtNjM5LDEzICs4NzIsMTQgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgY29uc3QKIAogICAgIERPTUVkaXRvciBkb21FZGl0b3IoZG9jdW1lbnQpOwogCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogbmV3Tm9kZSA9IGRvbUVkaXRvci5w
YXRjaE5vZGUobm9kZSwgb3V0ZXJIVE1MLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIEV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Ci0gICAgICAgICplcnJvclN0
cmluZyA9IGRlc2NyaXB0aW9uLm5hbWU7CisgICAgT3duUHRyPFNldE91dGVySFRNTEFjdGlvbj4g
YWN0aW9uID0gYWRvcHRQdHIobmV3IFNldE91dGVySFRNTEFjdGlvbihub2RlLCBvdXRlckhUTUwp
KTsKKyAgICBTZXRPdXRlckhUTUxBY3Rpb24qIHJhd0FjdGlvbiA9IGFjdGlvbi5nZXQoKTsKKyAg
ICBOb2RlKiBuZXdOb2RlID0gMDsKKyAgICBpZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhY3Rpb24u
cmVsZWFzZSgpLCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9o
aXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAgbmV3Tm9kZSA9IHJhd0FjdGlvbi0+
bmV3Tm9kZSgpOwogCiAgICAgaWYgKCFuZXdOb2RlKSB7CiAgICAgICAgIC8vIFRoZSBvbmx5IGNo
aWxkIG5vZGUgaGFzIGJlZW4gZGVsZXRlZC4KQEAgLTY3MCwxMSArOTA0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIHRleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVj
KQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxlIHNldHRpbmcgdGhlIG5v
ZGUgdmFsdWUiOworICAgIG1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgUmVwbGFjZVdo
b2xlVGV4dEFjdGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSksIHZhbHVlKSksIGVycm9yU3Ry
aW5nKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlz
dGVuZXJzQXJyYXkpCkBAIC0xMDExLDM2ICsxMjQxLDQ0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcqKQogICAgIG1fY2xpZW50LT5oaWRlSGlnaGxp
Z2h0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyog
ZXJyb3IsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogY29uc3Qg
YW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1v
dmVUbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGludCB0YXJnZXRFbGVt
ZW50SWQsIGNvbnN0IGludCogY29uc3QgYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCkKIHsK
LSAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvciwgbm9kZUlkKTsKKyAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFbGVt
ZW50KGVycm9yLCB0YXJnZXRFbGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQg
PSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRFbGVtZW50SWQpOwogICAgIGlmICgh
dGFyZ2V0RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogYW5jaG9yTm9kZSA9
IDA7CiAgICAgaWYgKGFuY2hvck5vZGVJZCAmJiAqYW5jaG9yTm9kZUlkKSB7Ci0gICAgICAgIGFu
Y2hvck5vZGUgPSBhc3NlcnROb2RlKGVycm9yLCAqYW5jaG9yTm9kZUlkKTsKKyAgICAgICAgYW5j
aG9yTm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICphbmNob3JOb2RlSWQpOwogICAgICAg
ICBpZiAoIWFuY2hvck5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChhbmNo
b3JOb2RlLT5wYXJlbnROb2RlKCkgIT0gdGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgKmVy
cm9yID0gIkFuY2hvciBub2RlIG11c3QgYmUgY2hpbGQgb2YgdGhlIHRhcmdldCBlbGVtZW50IjsK
KyAgICAgICAgICAgICplcnJvclN0cmluZyA9ICJBbmNob3Igbm9kZSBtdXN0IGJlIGNoaWxkIG9m
IHRoZSB0YXJnZXQgZWxlbWVudCI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29sIHN1Y2Nlc3MgPSB0YXJn
ZXRFbGVtZW50LT5pbnNlcnRCZWZvcmUobm9kZSwgYW5jaG9yTm9kZSwgZWMpOwotICAgIGlmIChl
YyB8fCAhc3VjY2VzcykgewotICAgICAgICAqZXJyb3IgPSAiQ291bGQgbm90IGRyb3Agbm9kZSI7
CisgICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IEluc2VydEJlZm9yZUFj
dGlvbih0YXJnZXRFbGVtZW50LCBub2RlLCBhbmNob3JOb2RlKSksIGVycm9yU3RyaW5nKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7
CisKICAgICAqbmV3Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKIH0KIAor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCit7
CisgICAgbV9oaXN0b3J5LT51bmRvKGVycm9yU3RyaW5nKTsKK30KKwordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcqKQoreworICAgIG1faGlzdG9y
eS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVz
b2x2ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIGNv
bnN0IG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQogewogICAg
IFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6ICIi
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA0
M2QwODgxNGE4ZmQ5OWM1Mjk1ZTNlNzFhOGU2MGJhMmEzOTEwYzRkLi4yZDllMmY5NzZkMDhiZDg5
NmNmZjllMThlNWM0MWM3OWNhMmJhMGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTE0
Miw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodE5vZGUoRXJy
b3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaGln
aGxpZ2h0Q29uZmlnKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBjb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dGxpbmVDb2xvcik7CiAg
ICAgdmlydHVhbCB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyosIGludCBub2RlSWQsIGludCB0YXJn
ZXROb2RlSWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05vZGVJZCk7CisgICAg
dmlydHVhbCB2b2lkIHVuZG8oRXJyb3JTdHJpbmcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1Vu
ZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcqKTsKIAogICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgp
IGNvbnN0OwogCkBAIC0xNzUsNiArMTc4LDggQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0hpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdo
bGlnaHQqKSBjb25zdDsKIAorICAgIEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVy
biBtX2hpc3RvcnkuZ2V0KCk7IH0KKwogICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21z
IGFzIGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVu
IG9mIGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KICAgICAvLyBXZSBhbHNvIHNraXAgd2hpdGVz
cGFjZSB0ZXh0IG5vZGVzIGNvbmRpdGlvbmFsbHkuIEZvbGxvd2luZyBtZXRob2RzIGVuY2Fwc3Vs
YXRlIHRoZXNlIHNwZWNpZmljcy4KICAgICBzdGF0aWMgTm9kZSogaW5uZXJGaXJzdENoaWxkKE5v
ZGUqKTsKQEAgLTIzNSw2ICsyNDAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxIaWdobGlnaHRE
YXRhPiBtX2hpZ2hsaWdodERhdGE7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAg
ICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGU7CisgICAgT3duUHRyPEluc3BlY3Rvckhpc3Rvcnk+
IG1faGlzdG9yeTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMmJh
NGZiMDAyYWE1ZWM2MWY3NmM5ODFlZTlkYjhlMzBiNTQ0MWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAKQEAgLTAsMCArMSwx
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitjbGFzcyBVbmRvYWJsZVN0YXRlTWFyayA6IHB1
YmxpYyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24geworcHVibGljOgorICAgIFVuZG9hYmxlU3Rh
dGVNYXJrKCkgOiBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24oIltVbmRvYWJsZVN0YXRlXSIpIHsg
fQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXJyb3JTdHJpbmcqKSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFcnJvclN0cmluZyopIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1VuZG9hYmxlU3RhdGVNYXJrKCkgeyByZXR1cm4gdHJ1
ZTsgfQorfTsKKworfQorCitJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246OkFjdGlvbihjb25zdCBT
dHJpbmcmIG5hbWUpIDogbV9uYW1lKG5hbWUpCit7Cit9CisKK0luc3BlY3Rvckhpc3Rvcnk6OkFj
dGlvbjo6fkFjdGlvbigpCit7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246
OnRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4gbV9uYW1lOworfQorCitib29sIEluc3BlY3Rvckhp
c3Rvcnk6OkFjdGlvbjo6aXNVbmRvYWJsZVN0YXRlTWFyaygpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitTdHJpbmcgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZUlkKCkKK3sKKyAg
ICByZXR1cm4gIiI7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZShQ
YXNzT3duUHRyPEFjdGlvbj4pCit7Cit9CisKK0luc3BlY3Rvckhpc3Rvcnk6Okluc3BlY3Rvckhp
c3RvcnkoKSB7IH0KKworSW5zcGVjdG9ySGlzdG9yeTo6fkluc3BlY3Rvckhpc3RvcnkoKSB7IH0K
KworYm9vbCBJbnNwZWN0b3JIaXN0b3J5OjpwZXJmb3JtKFBhc3NPd25QdHI8QWN0aW9uPiBhY3Rp
b24sIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKK3sKKyAgICBpZiAoIWFjdGlvbi0+cGVyZm9y
bShlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9oaXN0
b3J5LmlzRW1wdHkoKSAmJiAhYWN0aW9uLT5tZXJnZUlkKCkuaXNFbXB0eSgpICYmIGFjdGlvbi0+
bWVyZ2VJZCgpID09IG1faGlzdG9yeS5maXJzdCgpLT5tZXJnZUlkKCkpCisgICAgICAgIG1faGlz
dG9yeS5maXJzdCgpLT5tZXJnZShhY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9oaXN0b3J5
LnByZXBlbmQoYWN0aW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3Rv
ckhpc3Rvcnk6Om1hcmtVbmRvYWJsZVN0YXRlKCkKK3sKKyAgICBtX2hpc3RvcnkucHJlcGVuZChh
ZG9wdFB0cihuZXcgVW5kb2FibGVTdGF0ZU1hcmsoKSkpOworfQorCitib29sIEluc3BlY3Rvckhp
c3Rvcnk6OnVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIHdoaWxlICghbV9o
aXN0b3J5LmlzRW1wdHkoKSAmJiBtX2hpc3RvcnkuZmlyc3QoKS0+aXNVbmRvYWJsZVN0YXRlTWFy
aygpKQorICAgICAgICBtX2hpc3RvcnkudGFrZUZpcnN0KCk7CisKKyAgICB3aGlsZSAoIW1faGlz
dG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPEFjdGlvbj4gZmlyc3QgPSBtX2hpc3Rv
cnkudGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghZmlyc3QtPnVuZG8oZXJyb3JTdHJpbmcpKSB7
CisgICAgICAgICAgICBtX2hpc3RvcnkuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdC0+aXNVbmRvYWJsZVN0YXRlTWFyaygp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgSW5zcGVjdG9ySGlzdG9yeTo6cmVzZXQoKQoreworICAgIG1faGlzdG9yeS5jbGVhcigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3Rvcnku
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjhiNmQ1YjdlZTYwODczY2I1MGU5ZmMyOGRkN2I2YzVlOTk1NWQ0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmgKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9ySGlzdG9yeV9oCisjZGVmaW5lIEluc3BlY3Rvckhp
c3RvcnlfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhaW5lck5vZGU7Citj
bGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCitjbGFzcyBJbnNwZWN0b3JIaXN0b3J5IHsKK3B1
YmxpYzoKKyAgICBjbGFzcyBBY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIHZpcnR1YWwgfkFjdGlvbigpOworICAgICAgICB2
aXJ0dWFsIFN0cmluZyB0b1N0cmluZygpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1VuZG9h
YmxlU3RhdGVNYXJrKCk7CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgbWVyZ2VJZCgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgbWVyZ2UoUGFzc093blB0cjxBY3Rpb24+KTsKKworICAgICAgICB2
aXJ0dWFsIGJvb2wgcGVyZm9ybShFcnJvclN0cmluZyopID0gMDsKKyAgICAgICAgdmlydHVhbCBi
b29sIHVuZG8oRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5n
IG1fbmFtZTsKKyAgICB9OworCisgICAgSW5zcGVjdG9ySGlzdG9yeSgpOworICAgIHZpcnR1YWwg
fkluc3BlY3Rvckhpc3RvcnkoKTsKKworICAgIGJvb2wgcGVyZm9ybShQYXNzT3duUHRyPEFjdGlv
bj4sIEVycm9yU3RyaW5nKik7CisgICAgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
Ym9vbCB1bmRvKEVycm9yU3RyaW5nKik7CisgICAgdm9pZCByZXNldCgpOworCitwcml2YXRlOgor
ICAgIERlcXVlPE93blB0cjxBY3Rpb24+ID4gbV9oaXN0b3J5OworfTsKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3Rvckhpc3RvcnlfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA1N2RmOTkyZTk5MmI3NmFiMTQ1NTIwZjZj
ZmJlZTU1MmRlMDY5YTFkLi45OWQ4NGNlNzBjZGUxZDM2MTI1ZGE2ZmY2YTRkYmE1NmZjMjE1MDJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCkBAIC0yODAsNyArMjgwLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVj
dG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKIC8vCiAvLyBUaGUg
cHJvcGVydHlUZXh0IChpZiBub3QgZW1wdHkpIGlzIGNoZWNrZWQgdG8gYmUgYSB2YWxpZCBzdHls
ZSBkZWNsYXJhdGlvbiAoY29udGFpbmluZyBhdCBsZWFzdCBvbmUgcHJvcGVydHkpLiBJZiBub3Qs
CiAvLyB0aGUgbWV0aG9kIHJldHVybnMgZmFsc2UgKGRlbm90aW5nIGFuIGVycm9yKS4KLWJvb2wg
SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwgYm9vbCBvdmVyd3Jp
dGUpCitib29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsIGJv
b2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFRleHQpCiB7CiAgICAgQVNTRVJUKG1fcGFyZW50U3R5
bGVTaGVldCk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJvZ3VzUHJvcGVydHlO
YW1lLCAoIi13ZWJraXQtYm9ndXotcHJvcGVydGVlIikpOwpAQCAtMzI4LDkgKzMyOCwxMCBAQCBi
b29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCB1bnNpZ25lZCBpbmRleCwgYwogICAgIH0KIAogICAgIEluc3BlY3RvclN0eWxlVGV4dEVk
aXRvciBlZGl0b3IoJmFsbFByb3BlcnRpZXMsICZtX2Rpc2FibGVkUHJvcGVydGllcywgdGV4dCwg
bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJzKCkpOwotICAgIGlmIChvdmVyd3JpdGUpCisg
ICAgaWYgKG92ZXJ3cml0ZSkgeworICAgICAgICAqb2xkVGV4dCA9IGFsbFByb3BlcnRpZXMuYXQo
aW5kZXgpLnJhd1RleHQ7CiAgICAgICAgIGVkaXRvci5yZXBsYWNlUHJvcGVydHkoaW5kZXgsIHBy
b3BlcnR5VGV4dCk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBlZGl0b3IuaW5zZXJ0
UHJvcGVydHkoaW5kZXgsIHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4gYXBwbHlTdHlsZVRleHQo
ZWRpdG9yLnN0eWxlVGV4dCgpKTsKQEAgLTg2Nyw3ICs4NjgsNyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NT
dHlsZURlYwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1ib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IEluc3BlY3RvckNTU0lkJiBpZCwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSkKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0
UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIGlkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wg
b3ZlcndyaXRlLCBTdHJpbmcqIG9sZFRleHQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxl
PiBpbnNwZWN0b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQoaWQpOwogICAgIGlmICghaW5z
cGVjdG9yU3R5bGUpIHsKQEAgLTg3NSw3ICs4NzYsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IEluc3Bl
YwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGluc3BlY3RvclN0
eWxlLT5zZXRQcm9wZXJ0eVRleHQoZXJyb3JTdHJpbmcsIHByb3BlcnR5SW5kZXgsIHRleHQsIG92
ZXJ3cml0ZSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5zZXRQcm9wZXJ0eVRleHQoZXJy
b3JTdHJpbmcsIHByb3BlcnR5SW5kZXgsIHRleHQsIG92ZXJ3cml0ZSwgb2xkVGV4dCk7CiB9CiAK
IGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIHVuc2lnbmVkIHByb3BlcnR5SW5k
ZXgsIGJvb2wgZGlzYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCmluZGV4IGYzMTk1ZTg4OWU3YzIwYmMyYTg3Nzk0MWZkYzg3ZDU1M2JkM2Jk
MjAuLmZiNjZhM2Y2OGY0ZjdkYmM3MTgwYTY4MDI5OWFmY2MzZjg2ZTgxMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMTMxLDcgKzEz
MSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNEaXNhYmxlZFByb3Bl
cnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9kaXNhYmxlZFByb3BlcnRpZXMuaXNFbXB0eSgpOyB9
Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCB1bnNpZ25lZCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0
eVRleHQoRXJyb3JTdHJpbmcqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBi
b29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0KTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5
KEVycm9yU3RyaW5nKiwgdW5zaWduZWQgaW5kZXgsIGJvb2wgZGlzYWJsZSk7CiAKIHByaXZhdGU6
CkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7CiAgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKICAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKik7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBJ
bnNwZWN0b3JDU1NJZCYsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4
dCwgYm9vbCBvdmVyd3JpdGUpOworICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5n
KiwgY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFByb3BlcnR5VGV4dCk7CiAg
ICAgYm9vbCB0b2dnbGVQcm9wZXJ0eShFcnJvclN0cmluZyosIGNvbnN0IEluc3BlY3RvckNTU0lk
JiwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCAxZWI3ZDAzMmZhYWQ1
YTVjMDEyM2E2NzVhNTZkOGJlMmU5ODZkMmExLi43YjQ4NzJlNzRhMWYyNGVmNjcwNTc5MGIxYmJk
OTkyNjNjZWNhNjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC02NDMsNiArNjQzLDggQEAgV2ViSW5zcGVjdG9yLkNT
U1Byb3BlcnR5LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBBbiBpbmRleCBwYXN0IGFsbCB0
aGUgcHJvcGVydGllcyBhZGRzIGEgbmV3IHByb3BlcnR5IHRvIHRoZSBzdHlsZS4KICAgICAgICAg
Q1NTQWdlbnQuc2V0UHJvcGVydHlUZXh0KHRoaXMub3duZXJTdHlsZS5pZCwgdGhpcy5pbmRleCwg
cHJvcGVydHlUZXh0LCB0aGlzLmluZGV4IDwgdGhpcy5vd25lclN0eWxlLnBhc3RMYXN0U291cmNl
UHJvcGVydHlJbmRleCgpLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKG1ham9y
Q2hhbmdlKQorICAgICAgICAgICAgRE9NQWdlbnQubWFya1VuZG9hYmxlU3RhdGUoKTsKICAgICB9
LAogCiAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uKG5ld1ZhbHVlLCBtYWpvckNoYW5nZSwgdXNlckNh
bGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1BhbmVsLmpzCmluZGV4IDUyNTZiZDEwNDM5MmNkMjc3YzQ2MWE0NmIxNDM4NDIyOTJiMjZi
YTQuLmNhYWU3ZTg4N2M2Y2Q2NGNjY2U2OWI4Mjg0YjQxMWU5ZTdkYjE3ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAg
LTE2Nyw2ICsxNjcsMTYgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0g
ewogCiAgICAgICAgIHRoaXMudXBkYXRlQnJlYWRjcnVtYihmYWxzZSk7CiAKKyAgICAgICAgdGhp
cy5fdXBkYXRlU2lkZWJhcnMoKTsKKworICAgICAgICBpZiAoc2VsZWN0ZWROb2RlKSB7CisgICAg
ICAgICAgICBDb25zb2xlQWdlbnQuYWRkSW5zcGVjdGVkTm9kZShzZWxlY3RlZE5vZGUuaWQpOwor
ICAgICAgICAgICAgdGhpcy5fbGFzdFZhbGlkU2VsZWN0ZWROb2RlID0gc2VsZWN0ZWROb2RlOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRhdGVTaWRlYmFyczogZnVuY3Rpb24oKQorICAg
IHsKICAgICAgICAgZm9yICh2YXIgcGFuZSBpbiB0aGlzLnNpZGViYXJQYW5lcykKICAgICAgICAg
ICAgdGhpcy5zaWRlYmFyUGFuZXNbcGFuZV0ubmVlZHNVcGRhdGUgPSB0cnVlOwogCkBAIC0xNzQs
MTEgKzE4NCw2IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKCk7CiAgICAgICAgIHRoaXMudXBkYXRlUHJvcGVydGll
cygpOwogICAgICAgICB0aGlzLnVwZGF0ZUV2ZW50TGlzdGVuZXJzKCk7Ci0KLSAgICAgICAgaWYg
KHNlbGVjdGVkTm9kZSkgewotICAgICAgICAgICAgQ29uc29sZUFnZW50LmFkZEluc3BlY3RlZE5v
ZGUoc2VsZWN0ZWROb2RlLmlkKTsKLSAgICAgICAgICAgIHRoaXMuX2xhc3RWYWxpZFNlbGVjdGVk
Tm9kZSA9IHNlbGVjdGVkTm9kZTsKLSAgICAgICAgfQogICAgIH0sCiAKICAgICBfcmVzZXQ6IGZ1
bmN0aW9uKCkKQEAgLTkwNyw3ICs5MTIsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICAvLyBDbWQvQ29udHJvbCArIFNoaWZ0ICsgQyBz
aG91bGQgYmUgYSBzaG9ydGN1dCB0byBjbGlja2luZyB0aGUgTm9kZSBTZWFyY2ggQnV0dG9uLgog
ICAgICAgICAvLyBUaGlzIHNob3J0Y3V0IG1hdGNoZXMgRmlyZWJ1Zy4KLSAgICAgICAgaWYgKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwNDMiKSB7ICAgICAvLyBDIGtleQorICAgICAgICBp
ZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDA0MyIpIHsgLy8gQyBrZXkKICAgICAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IuaXNNYWMoKSkKICAgICAgICAgICAgICAgICB2YXIgaXNOb2Rl
U2VhcmNoS2V5ID0gZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0
S2V5ICYmIGV2ZW50LnNoaWZ0S2V5OwogICAgICAgICAgICAgZWxzZQpAQCAtOTE4LDcgKzkyMywx
MCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGlmIChX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5ldmVudEhhc0N0cmxPck1ldGEoZXZlbnQpICYm
IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwNUEiKSAgLy8gWiBrZXkKKyAgICAgICAgICAg
IERPTUFnZW50LnVuZG8odGhpcy5fdXBkYXRlU2lkZWJhcnMuYmluZCh0aGlzKSk7CiAgICAgfSwK
IAogICAgIGhhbmRsZUNvcHlFdmVudDogZnVuY3Rpb24oZXZlbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125819</attachid>
            <date>2012-02-07 04:54:42 -0800</date>
            <delta_ts>2012-02-07 05:57:25 -0800</delta_ts>
            <desc>[Patch] for landing</desc>
            <filename>bug-77875-20120207165440.patch</filename>
            <type>text/plain</type>
            <size>64817</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2OTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYzI0ZDAwMjFjYjAy
Y2QxNGNkMzdlNTYyNzUxY2UyODE4ODVjMS4uMTVmMmUwODllMThjNTJjYWY0ZmY4MmQxZjZkMDU3
NzJjMDZiMzczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDEyLTAyLTA2ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciB1bmRvLWluZyBET00gZWRpdHMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg3NQorCisgICAgICAgIFRo
aXMgY2hhbmdlIGludHJvZHVjZXMgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uIHRoYXQgZW5jYXBz
dWxhdGVzIGFsbCBET00gbW9kaWZpY2F0aW9ucworICAgICAgICBpbml0aWF0ZWQgYnkgdGhlIGlu
c3BlY3Rvci4gVGhlcmUgaXMgYSB3YXkgdG8gdW5kbyB0aGVzZSBhY3Rpb25zIHVwIHVudGlsIHRo
ZSB1bmRvYWJsZQorICAgICAgICBzdGF0ZSBtYXJrZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAg
ICAgICAoU3R5bGVTaGVldEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0QWN0
aW9uOjpTdHlsZVNoZWV0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRBY3Rp
b246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEFjdGlvbjo6dW5kbyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNldFN0eWxlU2hlZXRUZXh0QWN0aW9uOjpTZXRTdHlsZVNoZWV0
VGV4dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjo6dW5k
byk6CisgICAgICAgIChTZXRQcm9wZXJ0eVRleHRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2V0UHJvcGVydHlUZXh0QWN0aW9uOjpTZXRQcm9wZXJ0eVRleHRBY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2V0UHJvcGVydHlUZXh0QWN0aW9uOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTZXRQcm9wZXJ0eVRleHRBY3Rpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
U2V0UHJvcGVydHlUZXh0QWN0aW9uOjp1bmRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNldFByb3Bl
cnR5VGV4dEFjdGlvbjo6bWVyZ2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXRQcm9wZXJ0eVRl
eHRBY3Rpb246Om1lcmdlKToKKyAgICAgICAgKFRvZ2dsZVByb3BlcnR5QWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRvZ2dsZVByb3BlcnR5QWN0aW9uOjpUb2dnbGVQcm9wZXJ0eUFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpUb2dnbGVQcm9wZXJ0eUFjdGlvbjo6cGVyZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUb2dnbGVQcm9wZXJ0eUFjdGlvbjo6dW5kbyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yQ1NTQWdlbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpzZXROb2RlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpzZXROb2RlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om1v
dmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6dW5kbyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjptYXJr
VW5kb2FibGVTdGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6
CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6aGlzdG9yeSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckhpc3Rv
cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlv
bjo6QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGlzdG9yeTo6QWN0aW9uOjp+QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckhpc3Rvcnk6OkFjdGlvbjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SGlzdG9yeTo6QWN0aW9uOjppc1VuZG9hYmxlU3RhdGVNYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6bWVyZ2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckhpc3Rvcnk6Okluc3BlY3Rvckhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGlzdG9yeTo6fkluc3BlY3Rvckhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGlzdG9yeTo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5
OjptYXJrVW5kb2FibGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5
Ojp1bmRvKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckhpc3Rvcnk6OnJlc2V0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9ySGlzdG9yeSk6CisgICAgICAgIChBY3Rpb24pOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAgICAgICAoSW5zcGVjdG9yU3R5bGUpOgor
ICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9DU1NTdHlsZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5
LnByb3RvdHlwZS5zZXRUZXh0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5
cGUuX3NlbGVjdGVkTm9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlLl91cGRhdGVTaWRlYmFycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RWxlbWVudHNQYW5lbC5wcm90b3R5cGUuaGFuZGxlU2hvcnRjdXQpOgorCiAyMDEyLTAyLTA3ICBN
aWNoYWVsIEJyw7xuaW5nICA8bWljaGFlbC5icnVuaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBb
UXRdW1dLMl0gQ29tcHV0ZSBhbmQgc2V0IGNhY2hlIGNhcGFjaXRpZXMgdXNpbmcgdGhlIGN1cnJl
bnQgQ2FjaGVNb2RlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3NWUzZmZhYjExYjIxOTdmZjQy
M2UzN2RjODlkYWMwYjBiMzQ0NjM0Li5kZDA0Y2Y2ZmI3YWYyMjIxMzQ2Mzg1NmFiNjZjM2QyMWZj
NDdjYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTAxLDYgKzkwMSw3IEBAIFNFVChXZWJD
b3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3Rvckhp
c3RvcnkuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
YzFlYzcwYzQ5MWM4YmQ5NWQ1ZmQ2MTNhODBhZWU0NjkyMTE5Zjk4ZS4uZjU3NjJkZjdiY2QwZDgy
OTM2MjdiMjJhZmZjZjVlZmZkMDQ4MjcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0yMzkwLDYgKzIzOTAsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAorCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmNwcCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckhpc3RvcnkuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGM2YTJlY2VlYjBmOGQ3MTAx
NWFiZTIxNjEyZmUyNGM4ZGRkNDNiNDEuLmQzNGM2ZDk3ODU0NTFhODcxZDY3YWI1ZmNlZGEwMDgz
NTZlNjQwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtODc3LDYgKzg3Nyw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9y
eS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcCBcCkBAIC0xOTQzLDYgKzE5NDQsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5oIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE5NTlkZGYxMjg4MGViYTZiY2U0NjE1MTUzNThiYzgx
ODNiNGQzNWQuLjA3YTM0MGY4YjYyZmYxNDFlYTdiZmQ1NDczOTc1MTc2OTVjZTYzMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTIzODYsNiArMjM4Niw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
SGlzdG9yeS5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5Lmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDM1ZDQ2ZGE0MTc2
MzgwYzJkOTZlNGU3MjEyM2FjZTI2MjVhYzljOWMuLjBmNGRjNDdjOWZiNTNhZDJiN2Q4MzI5N2Ni
Zjc1MzFiMDg3MmIyMjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC03MTY1OCw2ICs3MTY1OCwzMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9ySGlzdG9yeS5j
cHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdp
bjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdp
bjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JIaXN0b3J5LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAi
CiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRiZDdmMGIyODkzYzBmZGMwMzY0
ZWE5MjJjYzE5ODZiZjkzZTc1ZjQuLjRhNzk4MDM0MmQzYjNmZGQ0ZGI0MmU3NDNkZTY5N2M2YWMx
NTc5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTE4ODcsNiArMTg4Nyw4IEBACiAJCTdBMUYyQjUyMTI2QzYxQjIwMDA2QTdF
NiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0ExRjJCNTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVu
dC5jcHAgKi87IH07CiAJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01B
Z2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QTI0NTg3OTEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3BwICovOyB9Owog
CQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMjQ1ODdBMTAyMUVBRjQw
MDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTdBNTQ4NTdGMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNw
ZWN0b3JIaXN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBNTQ4NTdEMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmNwcCAq
LzsgfTsKKwkJN0E1NDg1ODAxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNTQ4NTdFMTRF
MDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmggKi87IH07CiAJCTdBNjc0QkRCMEY5
RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5
IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi87IH07CiAJCTdBNjc0QkRDMEY5RUJGNEUw
MDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdl
R3JvdXBMb2FkRGVmZXJyZXIuaCAqLzsgfTsKIAkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8q
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCODEwMTgzOUE1MDBCRjkzOUUgLyogSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcCAqLzsgfTsKQEAgLTg3NjgsNiArODc3MCw4IEBACiAJCTdBMUYy
QjUxMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0EyNDU4NzkxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRP
TUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckRPTUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EyNDU4N0ExMDIx
RUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdBNTQ4NTdEMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rvckhpc3RvcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTU0ODU3RTE0RTAyRDUxMDA2QUUwNUEg
LyogSW5zcGVjdG9ySGlzdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnNwZWN0b3JIaXN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBNTYzRTU0
MTJERTMyQjAwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdFNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTU2M0Y5NTEyREY1QzkxMDBGNDUzNkQgLyogSW5qZWN0ZWRTY3Jp
cHRTb3VyY2UuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbmpl
Y3RlZFNjcmlwdFNvdXJjZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRC
RDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNTcsNiArMTQwNjEsOCBAQAogCQkJCTdB
MEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwICovLAog
CQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCAq
LywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmlkbCAqLywKKwkJCQk3QTU0ODU3RDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9y
eS5jcHAgKi8sCisJCQkJN0E1NDg1N0UxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3Rv
cnkuaCAqLywKIAkJCQk3QUNEODhEMTE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwICovLAogCQkJCTdBQ0Q4OEQyMTRDMDhCRDYwMDg0RUREMiAvKiBJbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5oICovLAogCQkJCTIwRDYyOTI0MTI1MzY5MEIwMDA4MTU0MyAvKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwICovLApAQCAtMjQxNDgsNiArMjQxNTQsNyBAQAog
CQkJCTFBQUFEREJGMTREQzY0MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVl
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQURERTkxNERDOERGODAwQUY2NEIzIC8qIFNj
cm9sbGluZ1RyZWVOb2RlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTU0ODU4MDE0RTAyRDUx
MDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzA4NCw2
ICsyNzA5MSw3IEBACiAJCQkJMUFBQUREREExNERDNzRFQzAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWVTdGF0ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREUzMTREQzhDOEYwMEFGNjRC
MyAvKiBTY3JvbGxpbmdUcmVlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFBRERFODE0
REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gaW4gU291cmNlcyAqLywK
KwkJCQk3QTU0ODU3RjE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCAz
MWU4ZDhhMTEwMmRiZWE4MmViMjkzNjAwZjNkNTNkN2NhMjU3NTcyLi5lMjA0ZDljYTA5NTgzZDU3
Nzc1OGMyZmUxMWJhZmZhM2M3OGEyMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCkBAIC0xNTE2LDYgKzE1MTYsMTYgQEAKICAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUb2dnbGVzIG1vdXNlIGV2ZW50LWJhc2VkIHRv
dWNoIGV2ZW50IGVtdWxhdGlvbi4iLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInVu
ZG8iLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmRvZXMgdGhlIGxhc3QgcGVy
Zm9ybWVkIGFjdGlvbi4iLAorICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogIm1hcmtVbmRv
YWJsZVN0YXRlIiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTWFya3MgbGFzdCB1
bmRvYWJsZSBzdGF0ZS4iLAorICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCiAgICAgICAg
ICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAppbmRleCA3ODlhMjcxOGVkNTMxZDI2
Nzg3MmQyYzc5MTU1MGU0OWQ4OTFlMWE0Li4zNTE3M2NiOWUwMzY3YmZhZjYwZTI5MWQxNzUyNmYy
YTQxYjM5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJ
bk9uZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIgog
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAiCisjaW5jbHVkZSAiSW5zcGVjdG9y
SGlzdG9yeS5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKaW5kZXggMDEzZjRmMzIzOGRlMjFlZjFhNmU1YmQ1MjExNGNhMmNkZTk4ZjIx
MS4uYTE4NjNmMjc1YzIwNDI3ZGI0Y2FjMDAxNTFjNDIxZWNkNTM5NjJhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCkBAIC0yMTcsNiArMjE4
LDE1MiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gU2VsZWN0b3JQcm9maWxlOjp0b0lu
c3BlY3Rvck9iamVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
K2NsYXNzIEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIDogcHVibGljIEluc3Bl
Y3Rvckhpc3Rvcnk6OkFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3R5bGVTaGVl
dEFjdGlvbik7CitwdWJsaWM6CisgICAgU3R5bGVTaGVldEFjdGlvbihjb25zdCBTdHJpbmcmIG5h
bWUsIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQpCisgICAgICAgIDogSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uKG5hbWUpCisgICAgICAgICwg
bV9jc3NBZ2VudChjc3NBZ2VudCkKKyAgICAgICAgLCBtX3N0eWxlU2hlZXRJZChzdHlsZVNoZWV0
SWQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxl
U2hlZXQgPSBtX2Nzc0FnZW50LT5hc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIG1f
c3R5bGVTaGVldElkKTsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcGVyZm9ybShzdHlsZVNoZWV0LCBlcnJvclN0cmlu
Zyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IG1f
Y3NzQWdlbnQtPmFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgbV9zdHlsZVNoZWV0
SWQpOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiB1bmRvKHN0eWxlU2hlZXQsIGVycm9yU3RyaW5nKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybShJbnNwZWN0b3JTdHlsZVNoZWV0KiwgRXJyb3JTdHJp
bmcqKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhJbnNwZWN0b3JTdHlsZVNoZWV0Kiwg
RXJyb3JTdHJpbmcqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJbnNwZWN0b3JDU1NBZ2VudCog
bV9jc3NBZ2VudDsKKyAgICBTdHJpbmcgbV9zdHlsZVNoZWV0SWQ7Cit9OworCitjbGFzcyBJbnNw
ZWN0b3JDU1NBZ2VudDo6U2V0U3R5bGVTaGVldFRleHRBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9y
Q1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNl
dFN0eWxlU2hlZXRUZXh0QWN0aW9uKTsKK3B1YmxpYzoKKyAgICBTZXRTdHlsZVNoZWV0VGV4dEFj
dGlvbihJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgICAgIDogSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0
eWxlU2hlZXRBY3Rpb24oIlNldFN0eWxlU2hlZXRUZXh0IiwgY3NzQWdlbnQsIHN0eWxlU2hlZXRJ
ZCkKKyAgICAgICAgLCBtX3RleHQodGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIHBlcmZvcm0oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJy
b3JTdHJpbmcqKQorICAgIHsKKyAgICAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0LT5nZXRU
ZXh0KCZtX29sZFRleHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
IChpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRUZXh0KG1fdGV4dCkpIHsKKyAgICAgICAgICAgIGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJlcGFyc2VTdHlsZVNoZWV0KG1fdGV4dCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5
bGVTaGVldCwgRXJyb3JTdHJpbmcqKQorICAgIHsKKyAgICAgICAgaWYgKGluc3BlY3RvclN0eWxl
U2hlZXQtPnNldFRleHQobV9vbGRUZXh0KSkgeworICAgICAgICAgICAgaW5zcGVjdG9yU3R5bGVT
aGVldC0+cmVwYXJzZVN0eWxlU2hlZXQobV9vbGRUZXh0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcgbV9vbGRUZXh0OworfTsKKworY2xhc3Mg
SW5zcGVjdG9yQ1NTQWdlbnQ6OlNldFByb3BlcnR5VGV4dEFjdGlvbiA6IHB1YmxpYyBJbnNwZWN0
b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2V0UHJvcGVydHlUZXh0QWN0aW9uKTsKK3B1YmxpYzoKKyAgICBTZXRQcm9wZXJ0eVRleHRBY3Rp
b24oSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGNzc0lkLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBj
b25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlKQorICAgICAgICA6IEluc3BlY3RvckNT
U0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKCJTZXRQcm9wZXJ0eVRleHQiLCBjc3NBZ2VudCwgc3R5
bGVTaGVldElkKQorICAgICAgICAsIG1fY3NzSWQoY3NzSWQpCisgICAgICAgICwgbV9wcm9wZXJ0
eUluZGV4KHByb3BlcnR5SW5kZXgpCisgICAgICAgICwgbV90ZXh0KHRleHQpCisgICAgICAgICwg
bV9vdmVyd3JpdGUob3ZlcndyaXRlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gbWVyZ2VJZCgpICsgIjoiICsgbV90
ZXh0OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEluc3BlY3RvclN0eWxlU2hl
ZXQqIGluc3BlY3RvclN0eWxlU2hlZXQsIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAgICB7
CisgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRQcm9wZXJ0eVRleHQoZXJy
b3JTdHJpbmcsIG1fY3NzSWQsIG1fcHJvcGVydHlJbmRleCwgbV90ZXh0LCBtX292ZXJ3cml0ZSwg
Jm1fb2xkVGV4dCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5
bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHBsYWNlaG9sZGVyOworICAgICAgICByZXR1cm4gaW5zcGVj
dG9yU3R5bGVTaGVldC0+c2V0UHJvcGVydHlUZXh0KGVycm9yU3RyaW5nLCBtX2Nzc0lkLCBtX3By
b3BlcnR5SW5kZXgsIG1fb3ZlcndyaXRlID8gbV9vbGRUZXh0IDogIiIsIHRydWUsICZwbGFjZWhv
bGRlcik7CisgICAgfQorCisgICAgdmlydHVhbCBTdHJpbmcgbWVyZ2VJZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlNldFByb3BlcnR5VGV4dCAlczoldTolcyIsIG1f
c3R5bGVTaGVldElkLnV0ZjgoKS5kYXRhKCksIG1fcHJvcGVydHlJbmRleCwgbV9vdmVyd3JpdGUg
PyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWVyZ2UoUGFz
c093blB0cjxBY3Rpb24+IGFjdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChhY3Rpb24tPm1l
cmdlSWQoKSA9PSBtZXJnZUlkKCkpOworCisgICAgICAgIFNldFByb3BlcnR5VGV4dEFjdGlvbiog
b3RoZXIgPSBzdGF0aWNfY2FzdDxTZXRQcm9wZXJ0eVRleHRBY3Rpb24qPihhY3Rpb24uZ2V0KCkp
OworICAgICAgICBtX3RleHQgPSBvdGhlci0+bV90ZXh0OworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBJbnNwZWN0b3JDU1NJZCBtX2Nzc0lkOworICAgIHVuc2lnbmVkIG1fcHJvcGVydHlJbmRleDsK
KyAgICBTdHJpbmcgbV90ZXh0OworICAgIFN0cmluZyBtX29sZFRleHQ7CisgICAgYm9vbCBtX292
ZXJ3cml0ZTsKK307CisKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50OjpUb2dnbGVQcm9wZXJ0eUFj
dGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVG9nZ2xlUHJvcGVydHlBY3Rpb24pOworcHVibGljOgorICAg
IFRvZ2dsZVByb3BlcnR5QWN0aW9uKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IEluc3BlY3RvckNTU0lkJiBjc3NJZCwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKQorICAgICAgICA6IEluc3BlY3RvckNTU0Fn
ZW50OjpTdHlsZVNoZWV0QWN0aW9uKCJUb2dnbGVQcm9wZXJ0eSIsIGNzc0FnZW50LCBzdHlsZVNo
ZWV0SWQpCisgICAgICAgICwgbV9jc3NJZChjc3NJZCkKKyAgICAgICAgLCBtX3Byb3BlcnR5SW5k
ZXgocHJvcGVydHlJbmRleCkKKyAgICAgICAgLCBtX2Rpc2FibGUoZGlzYWJsZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5z
cGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQtPnRvZ2dsZVByb3BlcnR5KGVycm9yU3RyaW5n
LCBtX2Nzc0lkLCBtX3Byb3BlcnR5SW5kZXgsIG1fZGlzYWJsZSk7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwg
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAgIHJldHVybiBpbnNwZWN0b3JT
dHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShlcnJvclN0cmluZywgbV9jc3NJZCwgbV9wcm9wZXJ0
eUluZGV4LCAhbV9kaXNhYmxlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ1NT
SWQgbV9jc3NJZDsKKyAgICB1bnNpZ25lZCBtX3Byb3BlcnR5SW5kZXg7CisgICAgYm9vbCBtX2Rp
c2FibGU7Cit9OworCiAvLyBzdGF0aWMKIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzQ1NTU3R5bGVSdWxlKENTU1J1bGUqIHJ1bGUpCiB7CkBAIC00MzgsMTkgKzU4NSwxMyBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4dChyZXN1bHQpOwor
ICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPmdldFRleHQocmVzdWx0KTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNo
ZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaW5zcGVjdG9yU3R5bGVTaGVl
dC0+c2V0VGV4dCh0ZXh0KSkKLSAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+cmVwYXJzZVN0
eWxlU2hlZXQodGV4dCk7Ci0gICAgZWxzZQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJu
YWwgZXJyb3Igc2V0dGluZyBzdHlsZSBzaGVldCB0ZXh0IjsKKyAgICBtX2RvbUFnZW50LT5oaXN0
b3J5KCktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uKHRoaXMs
IHN0eWxlU2hlZXRJZCwgdGV4dCkpLCBlcnJvclN0cmluZyk7CisgICAgbV9kb21BZ2VudC0+aGlz
dG9yeSgpLT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVz
dWx0KQpAQCAtNDYyLDcgKzYwMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJCiAgICAgaWYg
KCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHN1Y2Nl
c3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRQcm9wZXJ0eVRleHQoZXJyb3JTdHJpbmcsIGNv
bXBvdW5kSWQsIHByb3BlcnR5SW5kZXgsIHRleHQsIG92ZXJ3cml0ZSk7CisgICAgYm9vbCBzdWNj
ZXNzID0gbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRQcm9w
ZXJ0eVRleHRBY3Rpb24odGhpcywgY29tcG91bmRJZC5zdHlsZVNoZWV0SWQoKSwgY29tcG91bmRJ
ZCwgcHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRlKSksIGVycm9yU3RyaW5nKTsKICAgICBp
ZiAoc3VjY2VzcykKICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQp
KTsKIH0KQEAgLTQ3Niw5ICs2MTcsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xl
UHJvcGVydHkoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW4KICAgICBp
ZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgc3Vj
Y2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRvZ2dsZVByb3BlcnR5KGVycm9yU3RyaW5nLCBj
b21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCBkaXNhYmxlKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBt
X2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFRvZ2dsZVByb3BlcnR5
QWN0aW9uKHRoaXMsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCksIGNvbXBvdW5kSWQsIHByb3Bl
cnR5SW5kZXgsIGRpc2FibGUpKSwgZXJyb3JTdHJpbmcpOwogICAgIGlmIChzdWNjZXNzKQogICAg
ICAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGlu
c3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOworICAgIG1fZG9tQWdl
bnQtPmhpc3RvcnkoKS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IDY0ZTI3MjQyYzIxYWI2MmZlNGRlYjRl
MjY0ZTU3YzJhZGJkYTI1YTMuLmViYjMxMzZiYTAzNzg2ODkyOWI2ODMwNWIyNjVkY2Q1MTNmNDkz
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBA
IC05OCw2ICs5OCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRQcm9jZXNzUnVsZSgpOwogCiBw
cml2YXRlOgorICAgIGNsYXNzIFN0eWxlU2hlZXRBY3Rpb247CisgICAgY2xhc3MgU2V0U3R5bGVT
aGVldFRleHRBY3Rpb247CisgICAgY2xhc3MgU2V0UHJvcGVydHlUZXh0QWN0aW9uOworICAgIGNs
YXNzIFRvZ2dsZVByb3BlcnR5QWN0aW9uOworCiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0YXRlKiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKIAog
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+
IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNDkwZDFjOTE2NmM1MzU4NTQ4MjEwNjc1YmJiZDJk
NTU1MDA4ZDY1OC4uOTQ2NTZjMmQyNGQ3OGUxNWQxY2NlMjczYWMxMmU2ZTdkNDQzMmQ5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC05
NSw2ICs5NSwyNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCitj
bGFzcyBET01BY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uIHsKK3B1Ymxp
YzoKKyAgICBET01BY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lKSA6IEluc3BlY3Rvckhpc3Rvcnk6
OkFjdGlvbihuYW1lKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
ICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm0oZWMpOworICAgICAgICBpZiAoZWMpIHsKKyAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
ICAgICAqZXJyb3JTdHJpbmcgPSBkZXNjcmlwdGlvbi5uYW1lOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQgJiYgIWVjOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgICAgICBib29sIHJlc3VsdCA9IHVuZG8oZWMpOworICAgICAgICBpZiAoZWMpIHsK
KyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Cisg
ICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSBkZXNjcmlwdGlvbi5uYW1lOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXN1bHQgJiYgIWVjOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtKEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNl
cHRpb25Db2RlJikgPSAwOworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3BhcmVudE5v
ZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9hbmNob3JO
b2RlOworfTsKKworY2xhc3MgUmVtb3ZlQ2hpbGRBY3Rpb24gOiBwdWJsaWMgRE9NQWN0aW9uIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdmVDaGlsZEFjdGlvbik7CitwdWJsaWM6Cisg
ICAgUmVtb3ZlQ2hpbGRBY3Rpb24oTm9kZSogcGFyZW50Tm9kZSwgTm9kZSogbm9kZSkKKyAgICAg
ICAgOiBET01BY3Rpb24oIlJlbW92ZUNoaWxkIikKKyAgICAgICAgLCBtX3BhcmVudE5vZGUocGFy
ZW50Tm9kZSkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX2Fu
Y2hvck5vZGUgPSBtX25vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIHJldHVybiBtX3BhcmVu
dE5vZGUtPnJlbW92ZUNoaWxkKG1fbm9kZS5nZXQoKSwgZWMpOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
cGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG1fbm9kZS5nZXQoKSwgbV9hbmNob3JOb2RlLmdldCgp
LCBlYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3BhcmVudE5vZGU7
CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9hbmNob3JOb2Rl
OworfTsKKworY2xhc3MgSW5zZXJ0QmVmb3JlQWN0aW9uIDogcHVibGljIERPTUFjdGlvbiB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zZXJ0QmVmb3JlQWN0aW9uKTsKK3B1YmxpYzoKKyAg
ICBJbnNlcnRCZWZvcmVBY3Rpb24oTm9kZSogcGFyZW50Tm9kZSwgTm9kZSogbm9kZSwgTm9kZSog
YW5jaG9yTm9kZSkKKyAgICAgICAgOiBET01BY3Rpb24oIkluc2VydEJlZm9yZSIpCisgICAgICAg
ICwgbV9wYXJlbnROb2RlKHBhcmVudE5vZGUpCisgICAgICAgICwgbV9ub2RlKG5vZGUpCisgICAg
ICAgICwgbV9hbmNob3JOb2RlKGFuY2hvck5vZGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgaWYgKG1f
bm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBtX3JlbW92ZUNoaWxkQWN0aW9uID0g
YWRvcHRQdHIobmV3IFJlbW92ZUNoaWxkQWN0aW9uKG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25v
ZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghbV9yZW1vdmVDaGlsZEFjdGlvbi0+cGVyZm9y
bShlYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX3BhcmVudE5vZGUtPmluc2VydEJlZm9yZShtX25vZGUuZ2V0KCksIG1fYW5jaG9y
Tm9kZS5nZXQoKSwgZWMpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlv
bkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3ZlQ2hpbGRBY3Rpb24pCisgICAg
ICAgICAgICByZXR1cm4gbV9yZW1vdmVDaGlsZEFjdGlvbi0+dW5kbyhlYyk7CisKKyAgICAgICAg
cmV0dXJuIG1fcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobV9ub2RlLmdldCgpLCBlYyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX3BhcmVudE5vZGU7CisgICAgUmVmUHRy
PE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9hbmNob3JOb2RlOworICAgIE93blB0
cjxSZW1vdmVDaGlsZEFjdGlvbj4gbV9yZW1vdmVDaGlsZEFjdGlvbjsKK307CisKK2NsYXNzIFJl
bW92ZUF0dHJpYnV0ZUFjdGlvbiA6IHB1YmxpYyBET01BY3Rpb24geworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJlbW92ZUF0dHJpYnV0ZUFjdGlvbik7CitwdWJsaWM6CisgICAgUmVtb3ZlQXR0
cmlidXRlQWN0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAg
ICAgOiBET01BY3Rpb24oIlJlbW92ZUF0dHJpYnV0ZSIpCisgICAgICAgICwgbV9lbGVtZW50KGVs
ZW1lbnQpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9
IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKG1fbmFtZSk7CisgICAgICAgIG1fZWxlbWVudC0+cmVt
b3ZlQXR0cmlidXRlKG1fbmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9l
bGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50
OworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7Cit9OworCitjbGFzcyBT
ZXRBdHRyaWJ1dGVBY3Rpb24gOiBwdWJsaWMgRE9NQWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTZXRBdHRyaWJ1dGVBY3Rpb24pOworcHVibGljOgorICAgIFNldEF0dHJpYnV0ZUFj
dGlvbihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIDogRE9NQWN0aW9uKCJTZXRBdHRyaWJ1dGUiKQorICAgICAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCisgICAgICAgICwgbV9oYWRBdHRyaWJ1dGUoZmFsc2UpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAg
ICAgICAgbV9oYWRBdHRyaWJ1dGUgPSBtX2VsZW1lbnQtPmhhc0F0dHJpYnV0ZShtX25hbWUpOwor
ICAgICAgICBpZiAobV9oYWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX29sZFZhbHVlID0gbV9l
bGVtZW50LT5nZXRBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRy
aWJ1dGUobV9uYW1lLCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIHJldHVybiAhZWM7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAg
ICBpZiAobV9oYWRBdHRyaWJ1dGUpCisgICAgICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0
ZShtX25hbWUsIG1fb2xkVmFsdWUsIGVjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9l
bGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBib29sIG1faGFkQXR0cmlidXRl
OworICAgIFN0cmluZyBtX29sZFZhbHVlOworfTsKKworY2xhc3MgU2V0T3V0ZXJIVE1MQWN0aW9u
IDogcHVibGljIERPTUFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0T3V0ZXJI
VE1MQWN0aW9uKTsKK3B1YmxpYzoKKyAgICBTZXRPdXRlckhUTUxBY3Rpb24oTm9kZSogbm9kZSwg
Y29uc3QgU3RyaW5nJiBodG1sKQorICAgICAgICA6IERPTUFjdGlvbigiU2V0T3V0ZXJIVE1MIikK
KyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX2h0bWwoaHRtbCkKKyAgICAgICAg
LCBtX25ld05vZGUoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0o
RXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX29sZEhUTUwgPSBjcmVhdGVNYXJr
dXAobV9ub2RlLmdldCgpKTsKKyAgICAgICAgRE9NRWRpdG9yIGRvbUVkaXRvcihtX25vZGUtPm93
bmVyRG9jdW1lbnQoKSk7CisgICAgICAgIG1fbmV3Tm9kZSA9IGRvbUVkaXRvci5wYXRjaE5vZGUo
bV9ub2RlLmdldCgpLCBtX2h0bWwsIGVjKTsKKyAgICAgICAgcmV0dXJuICFlYzsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAg
IERPTUVkaXRvciBkb21FZGl0b3IobV9ub2RlLT5vd25lckRvY3VtZW50KCkpOworICAgICAgICBk
b21FZGl0b3IucGF0Y2hOb2RlKG1fbm9kZS5nZXQoKSwgbV9vbGRIVE1MLCBlYyk7CisgICAgICAg
IHJldHVybiAhZWM7CisgICAgfQorCisgICAgTm9kZSogbmV3Tm9kZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9uZXdOb2RlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOworICAgIFN0cmluZyBtX2h0bWw7CisgICAgU3RyaW5nIG1fb2xkSFRNTDsKKyAgICBO
b2RlKiBtX25ld05vZGU7Cit9OworCitjbGFzcyBSZXBsYWNlV2hvbGVUZXh0QWN0aW9uIDogcHVi
bGljIERPTUFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGFjZVdob2xlVGV4
dEFjdGlvbik7CitwdWJsaWM6CisgICAgUmVwbGFjZVdob2xlVGV4dEFjdGlvbihUZXh0KiB0ZXh0
Tm9kZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQorICAgICAgICA6IERPTUFjdGlvbigiUmVwbGFjZVdo
b2xlVGV4dCIpCisgICAgICAgICwgbV90ZXh0Tm9kZSh0ZXh0Tm9kZSkKKyAgICAgICAgLCBtX3Rl
eHQodGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0
aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX29sZFRleHQgPSBtX3RleHROb2RlLT53aG9s
ZVRleHQoKTsKKyAgICAgICAgbV90ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4dChtX3RleHQsIGVj
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8o
RXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBtX3RleHROb2RlLT5yZXBsYWNlV2hv
bGVUZXh0KG1fb2xkVGV4dCwgZWMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPFRleHQ+IG1fdGV4dE5vZGU7CisgICAgU3RyaW5nIG1fdGV4dDsK
KyAgICBTdHJpbmcgbV9vbGRUZXh0OworfTsKKworfQorCiBuYW1lc3BhY2UgRE9NQWdlbnRTdGF0
ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBkb2N1bWVudFJlcXVlc3RlZFtdID0gImRvY3VtZW50UmVx
dWVzdGVkIjsKIApAQCAtMTg2LDYgKzQyMyw3IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0
b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJCiAg
ICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKICAgICAsIG1fc2Vh
cmNoaW5nRm9yTm9kZShmYWxzZSkKKyAgICAsIG1faGlzdG9yeShhZG9wdFB0cihuZXcgSW5zcGVj
dG9ySGlzdG9yeSgpKSkKIHsKIH0KIApAQCAtMjUzLDcgKzQ5MSw3IEBAIE5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRlZE5vZGUoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpyZXNldCgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgbV9oaXN0b3J5LT5y
ZXNldCgpOwogICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigpOwogICAgIGRpc2NhcmRCaW5kaW5n
cygpOwogICAgIGlmIChtX3JldmFsaWRhdGVTdHlsZUF0dHJUYXNrKQpAQCAtNTE4LDEwICs3NTYs
OCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZWxlbWVudC0+c2V0QXR0
cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICAqZXJyb3JTdHJp
bmcgPSAiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBzZXQgYXR0cmlidXRlIHZhbHVlIjsKKyAg
ICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFNldEF0dHJpYnV0ZUFjdGlvbihlbGVt
ZW50LCBuYW1lLCB2YWx1ZSkpLCBlcnJvclN0cmluZyk7CisgICAgbV9oaXN0b3J5LT5tYXJrVW5k
b2FibGVTdGF0ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVz
QXNUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNvbnN0IG5hbWUpCkBAIC01NTEsNyArNzg3LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KIAogICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRv
RWxlbWVudChjaGlsZCk7CiAgICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIGVsZW1lbnQtPnJlbW92ZUF0dHJpYnV0ZSgqbmFtZSk7CisgICAg
ICAgIG1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgUmVtb3ZlQXR0cmlidXRlQWN0aW9u
KGVsZW1lbnQsICpuYW1lKSksIGVycm9yU3RyaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTYxLDIwICs3OTcsMjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmli
dXRlc0FzVGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KICAgICAgICAg
Ly8gQWRkIGF0dHJpYnV0ZSBwYWlyCiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gY2hpbGRFbGVtZW50LT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBmb3VuZE9yaWdpbmFs
QXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUt
Pm5hbWUoKS50b1N0cmluZygpID09ICpuYW1lKTsKLSAgICAgICAgZWxlbWVudC0+c2V0QXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOworICAgICAgICBpZiAo
IW1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgU2V0QXR0cmlidXRlQWN0aW9uKGVsZW1l
bnQsIGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSkpLCBl
cnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFmb3Vu
ZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUpIHsKLSAgICAgICAgZWxlbWVudC0+cmVtb3ZlQXR0
cmlidXRlKCpuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWZvdW5kT3Jp
Z2luYWxBdHRyaWJ1dGUgJiYgbmFtZSAmJiAhbmFtZS0+c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0
eSgpKQorICAgICAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUF0dHJp
YnV0ZUFjdGlvbihlbGVtZW50LCAqbmFtZSkpLCBlcnJvclN0cmluZyk7CisKKyAgICBtX2hpc3Rv
cnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
bW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWxlbWVu
dChlcnJvclN0cmluZywgZWxlbWVudElkKTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgZWxl
bWVudC0+cmVtb3ZlQXR0cmlidXRlKG5hbWUpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVBdHRy
aWJ1dGVBY3Rpb24oZWxlbWVudCwgbmFtZSkpLCBlcnJvclN0cmluZyk7CisgICAgbV9oaXN0b3J5
LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKQEAgLTU4OSwxMyAr
ODI5LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobm9kZSwg
ZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZW1v
dmUgbm9kZSBkdWUgdG8gRE9NIGV4Y2VwdGlvbiI7CisgICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFk
b3B0UHRyKG5ldyBSZW1vdmVDaGlsZEFjdGlvbihwYXJlbnROb2RlLCBub2RlKSksIGVycm9yU3Ry
aW5nKTsKKyAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0YWdOYW1lLCBpbnQqIG5ld0lkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHRhZ05hbWUsIGludCogbmV3SWQpCiB7CiAgICAgKm5ld0lkID0gMDsKIApAQCAtNjEz
LDE2ICs4NTEsMTggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JT
dHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ04KIAogICAgIC8vIENvcHkgb3Zl
ciB0aGUgb3JpZ2luYWwgbm9kZSdzIGNoaWxkcmVuLgogICAgIE5vZGUqIGNoaWxkOwotICAgIHdo
aWxlICgoY2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKQotICAgICAgICBuZXdFbGVtLT5h
cHBlbmRDaGlsZChjaGlsZCwgZWMpOworICAgIHdoaWxlICgoY2hpbGQgPSBvbGROb2RlLT5maXJz
dENoaWxkKCkpKSB7CisgICAgICAgIGlmICghbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5l
dyBJbnNlcnRCZWZvcmVBY3Rpb24obmV3RWxlbS5nZXQoKSwgY2hpbGQsIDApKSwgZXJyb3JTdHJp
bmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFJlcGxhY2UgdGhlIG9s
ZCBub2RlIHdpdGggdGhlIG5ldyBub2RlCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gb2xk
Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld0VsZW0sIG9s
ZE5vZGUtPm5leHRTaWJsaW5nKCksIGVjKTsKLSAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG9sZE5v
ZGUsIGVjKTsKLQotICAgIGlmIChlYykKKyAgICBpZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9w
dFB0cihuZXcgSW5zZXJ0QmVmb3JlQWN0aW9uKHBhcmVudCwgbmV3RWxlbS5nZXQoKSwgb2xkTm9k
ZS0+bmV4dFNpYmxpbmcoKSkpLCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgUmVtb3ZlQ2hpbGRBY3Rpb24ocGFy
ZW50LCBvbGROb2RlKSksIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGlz
dG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKIAogICAgICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQobmV3RWxlbS5nZXQoKSk7CiAgICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29u
dGFpbnMobm9kZUlkKSkKQEAgLTY1OCwxMyArODk4LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0CiAKICAgICBET01FZGl0b3IgZG9tRWRpdG9yKGRvY3VtZW50KTsKIAotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld05vZGUgPSBkb21FZGl0b3IucGF0Y2hOb2RlKG5v
ZGUsIG91dGVySFRNTCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAgICAgICAqZXJyb3JTdHJpbmcgPSBkZXNj
cmlwdGlvbi5uYW1lOworICAgIE93blB0cjxTZXRPdXRlckhUTUxBY3Rpb24+IGFjdGlvbiA9IGFk
b3B0UHRyKG5ldyBTZXRPdXRlckhUTUxBY3Rpb24obm9kZSwgb3V0ZXJIVE1MKSk7CisgICAgU2V0
T3V0ZXJIVE1MQWN0aW9uKiByYXdBY3Rpb24gPSBhY3Rpb24uZ2V0KCk7CisgICAgTm9kZSogbmV3
Tm9kZSA9IDA7CisgICAgaWYgKCFtX2hpc3RvcnktPnBlcmZvcm0oYWN0aW9uLnJlbGVhc2UoKSwg
ZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1faGlzdG9yeS0+bWFy
a1VuZG9hYmxlU3RhdGUoKTsKKworICAgIG5ld05vZGUgPSByYXdBY3Rpb24tPm5ld05vZGUoKTsK
IAogICAgIGlmICghbmV3Tm9kZSkgewogICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhh
cyBiZWVuIGRlbGV0ZWQuCkBAIC02ODksMTEgKzkzMCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRp
Y19jYXN0PFRleHQqPihub2RlKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB0ZXh0
Tm9kZS0+cmVwbGFjZVdob2xlVGV4dCh2YWx1ZSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAg
KmVycm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBub2RlIHZhbHVlIjsK
KyAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlcGxhY2VXaG9sZVRleHRBY3Rp
b24oc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpLCB2YWx1ZSkpLCBlcnJvclN0cmluZyk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0
cmluZyosIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGxpc3RlbmVyc0FycmF5
KQpAQCAtMTAzMCwzMyArMTI2NywzMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGln
aGxpZ2h0KEVycm9yU3RyaW5nKikKICAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQg
bm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJ
ZCwgaW50KiBuZXdOb2RlSWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25z
dCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCiB7Ci0gICAgTm9kZSog
bm9kZSA9IGFzc2VydE5vZGUoZXJyb3IsIG5vZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IGFzc2Vy
dE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvciwg
dGFyZ2V0RWxlbWVudElkKTsKKyAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgdGFyZ2V0RWxlbWVudElkKTsKICAgICBpZiAoIXRhcmdldEVsZW1l
bnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIGFuY2hvck5vZGUgPSAwOwogICAgIGlm
IChhbmNob3JOb2RlSWQgJiYgKmFuY2hvck5vZGVJZCkgewotICAgICAgICBhbmNob3JOb2RlID0g
YXNzZXJ0Tm9kZShlcnJvciwgKmFuY2hvck5vZGVJZCk7CisgICAgICAgIGFuY2hvck5vZGUgPSBh
c3NlcnROb2RlKGVycm9yU3RyaW5nLCAqYW5jaG9yTm9kZUlkKTsKICAgICAgICAgaWYgKCFhbmNo
b3JOb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoYW5jaG9yTm9kZS0+cGFy
ZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgICAgICplcnJvciA9ICJBbmNo
b3Igbm9kZSBtdXN0IGJlIGNoaWxkIG9mIHRoZSB0YXJnZXQgZWxlbWVudCI7CisgICAgICAgICAg
ICAqZXJyb3JTdHJpbmcgPSAiQW5jaG9yIG5vZGUgbXVzdCBiZSBjaGlsZCBvZiB0aGUgdGFyZ2V0
IGVsZW1lbnQiOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYm9vbCBzdWNjZXNzID0gdGFyZ2V0RWxlbWVudC0+
aW5zZXJ0QmVmb3JlKG5vZGUsIGFuY2hvck5vZGUsIGVjKTsKLSAgICBpZiAoZWMgfHwgIXN1Y2Nl
c3MpIHsKLSAgICAgICAgKmVycm9yID0gIkNvdWxkIG5vdCBkcm9wIG5vZGUiOworICAgIGlmICgh
bV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24odGFyZ2V0
RWxlbWVudCwgbm9kZSwgYW5jaG9yTm9kZSkpLCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCiAgICAgKm5l
d05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CiB9CiAKQEAgLTEwNzMsNiAr
MTMwOCwxNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRUb3VjaEVtdWxhdGlvbkVuYWJs
ZWQoRXJyb3JTdHJpbmcqIGVycm9yLCBib29sIGVuYWJsZQogI2VuZGlmCiB9CiAKK3ZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIG1f
aGlzdG9yeS0+dW5kbyhlcnJvclN0cmluZyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nKikKK3sKKyAgICBtX2hpc3RvcnktPm1hcmtV
bmRvYWJsZVN0YXRlKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmpl
Y3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJlc3VsdCkKIHsKICAgICBTdHJpbmcg
b2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiAiIjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggMjU5ZmVmNjQz
ZTA1OTEwNDhkYjlmYzhlMzc2MWM4ZjYyYzdiMDNkMS4uODZlM2M2N2UxODJhYjBlOGVmZjc3MmE2
M2ViYTdjYzdjNDUwNzJiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1h
bmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCkBAIC0xNDMsNiArMTQ0
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgaW50IHRhcmdl
dE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCk7
CisgICAgdmlydHVhbCB2b2lkIHVuZG8oRXJyb3JTdHJpbmcqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcqKTsKIAogICAgIE5vZGUqIGhpZ2hsaWdodGVk
Tm9kZSgpIGNvbnN0OwogCkBAIC0xNzYsNiArMTc5LDggQEAgcHVibGljOgogICAgIHZvaWQgZHJh
d0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKICAgICB2b2lkIGdldEhpZ2hsaWdo
dChIaWdobGlnaHQqKSBjb25zdDsKIAorICAgIEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7
IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0KKwogICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRl
ZCBkb21zIGFzIGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNo
aWxkcmVuIG9mIGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KICAgICAvLyBXZSBhbHNvIHNraXAg
d2hpdGVzcGFjZSB0ZXh0IG5vZGVzIGNvbmRpdGlvbmFsbHkuIEZvbGxvd2luZyBtZXRob2RzIGVu
Y2Fwc3VsYXRlIHRoZXNlIHNwZWNpZmljcy4KICAgICBzdGF0aWMgTm9kZSogaW5uZXJGaXJzdENo
aWxkKE5vZGUqKTsKQEAgLTI0MCw2ICsyNDUsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxIaWdo
bGlnaHREYXRhPiBtX2hpZ2hsaWdodERhdGE7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9j
dXM7CiAgICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGU7CisgICAgT3duUHRyPEluc3BlY3Rvckhp
c3Rvcnk+IG1faGlzdG9yeTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJmNjhjMWZmNWQxYTNkYTI2NWQ3MjI4MmUyODliYWU0MDRlNzM4YWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAKQEAgLTAs
MCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9y
eS5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIk5vZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitjbGFzcyBVbmRvYWJsZVN0YXRlTWFy
ayA6IHB1YmxpYyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24geworcHVibGljOgorICAgIFVuZG9h
YmxlU3RhdGVNYXJrKCkgOiBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24oIltVbmRvYWJsZVN0YXRl
XSIpIHsgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXJyb3JTdHJpbmcqKSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFcnJvclN0cmluZyopIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1VuZG9hYmxlU3RhdGVNYXJrKCkgeyByZXR1
cm4gdHJ1ZTsgfQorfTsKKworfQorCitJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246OkFjdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUpIDogbV9uYW1lKG5hbWUpCit7Cit9CisKK0luc3BlY3Rvckhpc3Rv
cnk6OkFjdGlvbjo6fkFjdGlvbigpCit7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JIaXN0b3J5OjpB
Y3Rpb246OnRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4gbV9uYW1lOworfQorCitib29sIEluc3Bl
Y3Rvckhpc3Rvcnk6OkFjdGlvbjo6aXNVbmRvYWJsZVN0YXRlTWFyaygpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitTdHJpbmcgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZUlkKCkK
K3sKKyAgICByZXR1cm4gIiI7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjpt
ZXJnZShQYXNzT3duUHRyPEFjdGlvbj4pCit7Cit9CisKK0luc3BlY3Rvckhpc3Rvcnk6Okluc3Bl
Y3Rvckhpc3RvcnkoKSB7IH0KKworSW5zcGVjdG9ySGlzdG9yeTo6fkluc3BlY3Rvckhpc3Rvcnko
KSB7IH0KKworYm9vbCBJbnNwZWN0b3JIaXN0b3J5OjpwZXJmb3JtKFBhc3NPd25QdHI8QWN0aW9u
PiBhY3Rpb24sIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKK3sKKyAgICBpZiAoIWFjdGlvbi0+
cGVyZm9ybShlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bV9oaXN0b3J5LmlzRW1wdHkoKSAmJiAhYWN0aW9uLT5tZXJnZUlkKCkuaXNFbXB0eSgpICYmIGFj
dGlvbi0+bWVyZ2VJZCgpID09IG1faGlzdG9yeS5maXJzdCgpLT5tZXJnZUlkKCkpCisgICAgICAg
IG1faGlzdG9yeS5maXJzdCgpLT5tZXJnZShhY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9o
aXN0b3J5LnByZXBlbmQoYWN0aW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElu
c3BlY3Rvckhpc3Rvcnk6Om1hcmtVbmRvYWJsZVN0YXRlKCkKK3sKKyAgICBtX2hpc3RvcnkucHJl
cGVuZChhZG9wdFB0cihuZXcgVW5kb2FibGVTdGF0ZU1hcmsoKSkpOworfQorCitib29sIEluc3Bl
Y3Rvckhpc3Rvcnk6OnVuZG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIHdoaWxl
ICghbV9oaXN0b3J5LmlzRW1wdHkoKSAmJiBtX2hpc3RvcnkuZmlyc3QoKS0+aXNVbmRvYWJsZVN0
YXRlTWFyaygpKQorICAgICAgICBtX2hpc3RvcnkucmVtb3ZlRmlyc3QoKTsKKworICAgIHdoaWxl
ICghbV9oaXN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8QWN0aW9uPiBmaXJzdCA9
IG1faGlzdG9yeS50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCFmaXJzdC0+dW5kbyhlcnJvclN0
cmluZykpIHsKKyAgICAgICAgICAgIG1faGlzdG9yeS5jbGVhcigpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpcnN0LT5pc1VuZG9hYmxlU3Rh
dGVNYXJrKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBJbnNwZWN0b3JIaXN0b3J5OjpyZXNldCgpCit7CisgICAgbV9oaXN0b3J5LmNs
ZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45Y2VkODdhYjdjODFlNWU5Y2FlZGVlYjZiN2Y4MzA3ZTY0YmYxM2I1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3Rvcnku
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JIaXN0b3J5X2gKKyNkZWZpbmUgSW5z
cGVjdG9ySGlzdG9yeV9oCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVy
Tm9kZTsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBOb2RlOworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK2NsYXNzIEluc3BlY3Rvckhpc3Rv
cnkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvckhpc3RvcnkpOworcHVibGlj
OgorICAgIGNsYXNzIEFjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBBY3Rpb24oY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdmlydHVhbCB+QWN0aW9uKCk7CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIHRvU3RyaW5nKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzVW5kb2FibGVT
dGF0ZU1hcmsoKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyBtZXJnZUlkKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBtZXJnZShQYXNzT3duUHRyPEFjdGlvbj4pOworCisgICAgICAgIHZpcnR1
YWwgYm9vbCBwZXJmb3JtKEVycm9yU3RyaW5nKikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wg
dW5kbyhFcnJvclN0cmluZyopID0gMDsKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9u
YW1lOworICAgIH07CisKKyAgICBJbnNwZWN0b3JIaXN0b3J5KCk7CisgICAgdmlydHVhbCB+SW5z
cGVjdG9ySGlzdG9yeSgpOworCisgICAgYm9vbCBwZXJmb3JtKFBhc3NPd25QdHI8QWN0aW9uPiwg
RXJyb3JTdHJpbmcqKTsKKyAgICB2b2lkIG1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICBib29s
IHVuZG8oRXJyb3JTdHJpbmcqKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKK3ByaXZhdGU6CisgICAg
RGVxdWU8T3duUHRyPEFjdGlvbj4gPiBtX2hpc3Rvcnk7Cit9OworCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRlZmlu
ZWQoSW5zcGVjdG9ySGlzdG9yeV9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDU3ZGY5OTJlOTkyYjc2YWIxNDU1MjBmNmNmYmVl
NTUyZGUwNjlhMWQuLmM3YzRlZGI3N2EzODk0YjJiNGJlNjJlNDgxZDU0ZTczOWVlNGEyYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAK
QEAgLTI4MCw3ICsyODAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JT
dHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAogLy8KIC8vIFRoZSBwcm9w
ZXJ0eVRleHQgKGlmIG5vdCBlbXB0eSkgaXMgY2hlY2tlZCB0byBiZSBhIHZhbGlkIHN0eWxlIGRl
Y2xhcmF0aW9uIChjb250YWluaW5nIGF0IGxlYXN0IG9uZSBwcm9wZXJ0eSkuIElmIG5vdCwKIC8v
IHRoZSBtZXRob2QgcmV0dXJucyBmYWxzZSAoZGVub3RpbmcgYW4gZXJyb3IpLgotYm9vbCBJbnNw
ZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgdW5z
aWduZWQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlUZXh0LCBib29sIG92ZXJ3cml0ZSkK
K2Jvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwgYm9vbCBv
dmVyd3JpdGUsIFN0cmluZyogb2xkVGV4dCkKIHsKICAgICBBU1NFUlQobV9wYXJlbnRTdHlsZVNo
ZWV0KTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYm9ndXNQcm9wZXJ0eU5hbWUs
ICgiLXdlYmtpdC1ib2d1ei1wcm9wZXJ0ZWUiKSk7CkBAIC0zMjgsOSArMzI4LDEwIEBAIGJvb2wg
SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IHVuc2lnbmVkIGluZGV4LCBjCiAgICAgfQogCiAgICAgSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9y
IGVkaXRvcigmYWxsUHJvcGVydGllcywgJm1fZGlzYWJsZWRQcm9wZXJ0aWVzLCB0ZXh0LCBuZXdM
aW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMoKSk7Ci0gICAgaWYgKG92ZXJ3cml0ZSkKKyAgICBp
ZiAob3ZlcndyaXRlKSB7CisgICAgICAgICpvbGRUZXh0ID0gYWxsUHJvcGVydGllcy5hdChpbmRl
eCkucmF3VGV4dDsKICAgICAgICAgZWRpdG9yLnJlcGxhY2VQcm9wZXJ0eShpbmRleCwgcHJvcGVy
dHlUZXh0KTsKLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIGVkaXRvci5pbnNlcnRQcm9w
ZXJ0eShpbmRleCwgcHJvcGVydHlUZXh0LCBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBhcHBseVN0eWxlVGV4dChlZGl0
b3Iuc3R5bGVUZXh0KCkpOwpAQCAtMzg1LDcgKzM4Niw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6
OnN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgU3RyaW5nIHN0eWxlU2hlZXRUZXh0OwotICAgIGJvb2wgc3VjY2VzcyA9IG1fcGFyZW50
U3R5bGVTaGVldC0+dGV4dCgmc3R5bGVTaGVldFRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9IG1f
cGFyZW50U3R5bGVTaGVldC0+Z2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MjksNyArNzMwLDcgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
IGlkLCBjb25zdCBTdHJpbmcKIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRk
UnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4
dDsKLSAgICBib29sIHN1Y2Nlc3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CisgICAgYm9vbCBz
dWNjZXNzID0gZ2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTc3Nyw3ICs3NzgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkK
ICAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7CiAKICAg
ICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gdGV4dCgmc3R5bGVT
aGVldFRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnN0eWxlU2hlZXRUZXh0KTsK
ICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCBzdHls
ZVNoZWV0VGV4dCk7CiAKQEAgLTg1Nyw3ICs4NTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURl
YwogICAgIC8vIFN0eWxlIHRleHQgY2Fubm90IGJlIHJldHJpZXZlZCB3aXRob3V0IHN0eWxlc2hl
ZXQsIHNvIHNldCBjc3NUZXh0IGhlcmUuCiAgICAgaWYgKHNvdXJjZURhdGEpIHsKICAgICAgICAg
U3RyaW5nIHNoZWV0VGV4dDsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gdGV4dCgmc2hlZXRUZXh0
KTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc2hlZXRUZXh0KTsKICAgICAgICAg
aWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlJiBib2R5UmFuZ2Ug
PSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOwogICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImNzc1RleHQiLCBzaGVldFRleHQuc3Vic3RyaW5nKGJvZHlS
YW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOwpAQCAtODY3LDcg
Kzg2OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25l
ZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlKQorYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgs
IGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFN0cmluZyogb2xkVGV4dCkKIHsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5
bGVGb3JJZChpZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZSkgewpAQCAtODc1LDcgKzg3Niw3
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUtPnNldFByb3BlcnR5VGV4dChlcnJvclN0cmlu
ZywgcHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRlKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGUtPnNldFByb3BlcnR5VGV4dChlcnJvclN0cmluZywgcHJvcGVydHlJbmRleCwgdGV4dCwg
b3ZlcndyaXRlLCBvbGRUZXh0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojp0b2dn
bGVQcm9wZXJ0eShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IEluc3BlY3RvckNTU0lk
JiBpZCwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKQpAQCAtODk2LDcgKzg5
Nyw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBJbnNwZWN0CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAK
LWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK2Jv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6Z2V0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBpZiAoIWVuc3VyZVRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI0MSw3
ICsxMjQyLDcgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmRpZE1v
ZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKQogICAgIG1fcnVsZVNvdXJjZURhdGEuY2xlYXIoKTsKIH0K
IAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnRleHQoU3RyaW5nKiBy
ZXN1bHQpIGNvbnN0Citib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNTdHlsZVRleHRWYWxp
ZCkgewogICAgICAgICBtX3N0eWxlVGV4dCA9IGVsZW1lbnRTdHlsZVRleHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IGYzMTk1ZTg4
OWU3YzIwYmMyYTg3Nzk0MWZkYzg3ZDU1M2JkM2JkMjAuLmQ2MjdiMWRkYWUxZDM3MjdlY2I3ZGFi
YzYwMjY0ZjA3YTJhODM3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaApAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29u
c3Q7CiAgICAgYm9vbCBoYXNEaXNhYmxlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9k
aXNhYmxlZFByb3BlcnRpZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQo
RXJyb3JTdHJpbmcqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92
ZXJ3cml0ZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCB1bnNpZ25l
ZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRU
ZXh0KTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiwgdW5zaWduZWQgaW5k
ZXgsIGJvb2wgZGlzYWJsZSk7CiAKIHByaXZhdGU6CkBAIC0xNzQsMTAgKzE3NCwxMCBAQCBwdWJs
aWM6CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVT
aGVldEluZm8oKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RG
b3JSdWxlKENTU1N0eWxlUnVsZSopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICBib29sIHNldFBy
b3BlcnR5VGV4dChFcnJvclN0cmluZyosIGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWduZWQg
cHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7CisgICAg
Ym9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBJbnNwZWN0b3JDU1NJZCYs
IHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3Jp
dGUsIFN0cmluZyogb2xkUHJvcGVydHlUZXh0KTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5KEVy
cm9yU3RyaW5nKiwgY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4
LCBib29sIGRpc2FibGUpOwogCi0gICAgdmlydHVhbCBib29sIHRleHQoU3RyaW5nKiByZXN1bHQp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsK
ICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjI4LDcgKzIyOCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgb3JpZ2luKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJp
YnV0ZSgpOwotICAgIHZpcnR1YWwgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVh
bCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBp
ZCkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQub3JkaW5hbCgpKTsgcmV0dXJuIGlubGlu
ZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCmluZGV4IDFlYjdkMDMyZmFhZDVhNWMwMTIz
YTY3NWE1NmQ4YmUyZTk4NmQyYTEuLjdiNDg3MmU3NGExZjI0ZWY2NzA1NzkwYjFiYmQ5OTI2M2Nl
Y2E2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NT
U3R5bGVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NT
U1N0eWxlTW9kZWwuanMKQEAgLTY0Myw2ICs2NDMsOCBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVy
dHkucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIEFuIGluZGV4IHBhc3QgYWxsIHRoZSBwcm9w
ZXJ0aWVzIGFkZHMgYSBuZXcgcHJvcGVydHkgdG8gdGhlIHN0eWxlLgogICAgICAgICBDU1NBZ2Vu
dC5zZXRQcm9wZXJ0eVRleHQodGhpcy5vd25lclN0eWxlLmlkLCB0aGlzLmluZGV4LCBwcm9wZXJ0
eVRleHQsIHRoaXMuaW5kZXggPCB0aGlzLm93bmVyU3R5bGUucGFzdExhc3RTb3VyY2VQcm9wZXJ0
eUluZGV4KCksIGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBpZiAobWFqb3JDaGFuZ2Up
CisgICAgICAgICAgICBET01BZ2VudC5tYXJrVW5kb2FibGVTdGF0ZSgpOwogICAgIH0sCiAKICAg
ICBzZXRWYWx1ZTogZnVuY3Rpb24obmV3VmFsdWUsIG1ham9yQ2hhbmdlLCB1c2VyQ2FsbGJhY2sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRz
UGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFu
ZWwuanMKaW5kZXggNTI1NmJkMTA0MzkyY2QyNzdjNDYxYTQ2YjE0Mzg0MjI5MmIyNmJhNC4uY2Fh
ZTdlODg3YzZjZDY0Y2NjZTY5YjgyODRiNDExZTllN2RiMTdlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtMTY3LDYg
KzE2NywxNiBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1iKGZhbHNlKTsKIAorICAgICAgICB0aGlzLl91cGRh
dGVTaWRlYmFycygpOworCisgICAgICAgIGlmIChzZWxlY3RlZE5vZGUpIHsKKyAgICAgICAgICAg
IENvbnNvbGVBZ2VudC5hZGRJbnNwZWN0ZWROb2RlKHNlbGVjdGVkTm9kZS5pZCk7CisgICAgICAg
ICAgICB0aGlzLl9sYXN0VmFsaWRTZWxlY3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgX3VwZGF0ZVNpZGViYXJzOiBmdW5jdGlvbigpCisgICAgewogICAg
ICAgICBmb3IgKHZhciBwYW5lIGluIHRoaXMuc2lkZWJhclBhbmVzKQogICAgICAgICAgICB0aGlz
LnNpZGViYXJQYW5lc1twYW5lXS5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKQEAgLTE3NCwxMSArMTg0
LDYgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLnVwZGF0ZU1ldHJpY3MoKTsKICAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKCk7CiAg
ICAgICAgIHRoaXMudXBkYXRlRXZlbnRMaXN0ZW5lcnMoKTsKLQotICAgICAgICBpZiAoc2VsZWN0
ZWROb2RlKSB7Ci0gICAgICAgICAgICBDb25zb2xlQWdlbnQuYWRkSW5zcGVjdGVkTm9kZShzZWxl
Y3RlZE5vZGUuaWQpOwotICAgICAgICAgICAgdGhpcy5fbGFzdFZhbGlkU2VsZWN0ZWROb2RlID0g
c2VsZWN0ZWROb2RlOwotICAgICAgICB9CiAgICAgfSwKIAogICAgIF9yZXNldDogZnVuY3Rpb24o
KQpAQCAtOTA3LDcgKzkxMiw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICB7CiAgICAgICAgIC8vIENtZC9Db250cm9sICsgU2hpZnQgKyBDIHNob3VsZCBi
ZSBhIHNob3J0Y3V0IHRvIGNsaWNraW5nIHRoZSBOb2RlIFNlYXJjaCBCdXR0b24uCiAgICAgICAg
IC8vIFRoaXMgc2hvcnRjdXQgbWF0Y2hlcyBGaXJlYnVnLgotICAgICAgICBpZiAoZXZlbnQua2V5
SWRlbnRpZmllciA9PT0gIlUrMDA0MyIpIHsgICAgIC8vIEMga2V5CisgICAgICAgIGlmIChldmVu
dC5rZXlJZGVudGlmaWVyID09PSAiVSswMDQzIikgeyAvLyBDIGtleQogICAgICAgICAgICAgaWYg
KFdlYkluc3BlY3Rvci5pc01hYygpKQogICAgICAgICAgICAgICAgIHZhciBpc05vZGVTZWFyY2hL
ZXkgPSBldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgJiYg
ZXZlbnQuc2hpZnRLZXk7CiAgICAgICAgICAgICBlbHNlCkBAIC05MTgsNyArOTIzLDEwIEBAIFdl
Ykluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBl
dmVudC5oYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LmV2ZW50SGFzQ3RybE9yTWV0YShldmVudCkgJiYgZXZlbnQu
a2V5SWRlbnRpZmllciA9PT0gIlUrMDA1QSIpICAvLyBaIGtleQorICAgICAgICAgICAgRE9NQWdl
bnQudW5kbyh0aGlzLl91cGRhdGVTaWRlYmFycy5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAg
aGFuZGxlQ29weUV2ZW50OiBmdW5jdGlvbihldmVudCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzCmluZGV4IDJkYzk5N2M1ZTA0ZjRkZmFl
NjU0YzhhNWRjZDQ1M2E2ODJlYzA0ZjQuLmU5YWE2NjBiMmVmOTNiODIzYzYwMWFkZjZlMWRkN2Jh
ZjRiMzMzZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxl
bWVudHMtdGVzdC5qcwpAQCAtMzgxLDYgKzM4MSwzNyBAQCBJbnNwZWN0b3JUZXN0LnJhbmdlVGV4
dCA9IGZ1bmN0aW9uKHJhbmdlKQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAiW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIjsKICAgICByZXR1cm4gIlsiICsgcmFuZ2Uuc3RhcnQgKyAiLSIg
KyByYW5nZS5lbmQgKyAiXSI7Ci19OworfQorCitJbnNwZWN0b3JUZXN0LmdlbmVyYXRlVW5kb1Rl
c3QgPSBmdW5jdGlvbih0ZXN0Qm9keSkKK3sKKyAgICBmdW5jdGlvbiByZXN1bHQobmV4dCkKKyAg
ICB7CisgICAgICAgIHZhciB0ZXN0Tm9kZSA9IEluc3BlY3RvclRlc3QuZXhwYW5kZWROb2RlV2l0
aElkKC9mdW5jdGlvblxzKFteKF0qKS8uZXhlYyh0ZXN0Qm9keSlbMV0pOworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiSW5pdGlhbDoiKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5k
dW1wRWxlbWVudHNUcmVlKHRlc3ROb2RlKTsKKworICAgICAgICB0ZXN0Qm9keShzdGVwMSk7CisK
KyAgICAgICAgZnVuY3Rpb24gc3RlcDEoKQorICAgICAgICB7CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiUG9zdC1hY3Rpb246Iik7CisgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmR1bXBFbGVtZW50c1RyZWUodGVzdE5vZGUpOworICAgICAgICAgICAgRE9NQWdlbnQudW5k
byhzdGVwMik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdGVwMigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJQb3N0LXVuZG8gKGluaXRp
YWwpOiIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wRWxlbWVudHNUcmVlKHRlc3RO
b2RlKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQu
dG9TdHJpbmcgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGVzdEJvZHkudG9T
dHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogfTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91bmRvLWRvbS1lZGl0cy0yLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91bmRvLWRvbS1lZGl0cy0yLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDFhZWQ2OTRiYTQ5ZGU4OGI4ZTE4MGEzZDgwYWIwYmYy
NjhmYTljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRz
L3VuZG8tZG9tLWVkaXRzLTItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK1Rlc3RzIHRo
YXQgRE9NIG1vZGlmaWNhdGlvbnMgZG9uZSBpbiB0aGUgRWxlbWVudHMgcGFuZWwgYXJlIHVuZG9h
YmxlIChQYXJ0IDIpLgorCisKK1J1bm5pbmc6IHRlc3RTZXRVcAorCitSdW5uaW5nOiB0ZXN0U2V0
QXR0cmlidXRlCitJbml0aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRlIj4KKyAgICAg
IDxkaXYgZm9vPSJhdHRyaWJ1dGUgdmFsdWUiIGlkPSJub2RlLXRvLXNldC1hdHRyaWJ1dGUiPjwv
ZGl2PgorICA8L2Rpdj4KK1Bvc3QtYWN0aW9uOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRl
Ij4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0LWF0dHJpYnV0ZSIgYmFyPSJlZGl0ZWQgYXR0
cmlidXRlIj48L2Rpdj4KKyAgPC9kaXY+CitQb3N0LXVuZG8gKGluaXRpYWwpOgorLSA8ZGl2IGlk
PSJ0ZXN0U2V0QXR0cmlidXRlIj4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0LWF0dHJpYnV0
ZSIgZm9vPSJhdHRyaWJ1dGUgdmFsdWUiPjwvZGl2PgorICA8L2Rpdj4KKworUnVubmluZzogdGVz
dFJlbW92ZUF0dHJpYnV0ZQorSW5pdGlhbDoKKy0gPGRpdiBpZD0idGVzdFJlbW92ZUF0dHJpYnV0
ZSI+CisgICAgICA8ZGl2IGZvbz0iYXR0cmlidXRlIHZhbHVlIiBpZD0ibm9kZS10by1yZW1vdmUt
YXR0cmlidXRlIj48L2Rpdj4KKyAgPC9kaXY+CitQb3N0LWFjdGlvbjoKKy0gPGRpdiBpZD0idGVz
dFJlbW92ZUF0dHJpYnV0ZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXJlbW92ZS1hdHRyaWJ1
dGUiPjwvZGl2PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRl
c3RSZW1vdmVBdHRyaWJ1dGUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1yZW1vdmUtYXR0cmli
dXRlIiBmb289ImF0dHJpYnV0ZSB2YWx1ZSI+PC9kaXY+CisgIDwvZGl2PgorCitSdW5uaW5nOiB0
ZXN0QWRkQXR0cmlidXRlCitJbml0aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0QWRkQXR0cmlidXRlIj4K
KyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tYWRkLWF0dHJpYnV0ZSI+PC9kaXY+CisgIDwvZGl2Pgor
UG9zdC1hY3Rpb246CistIDxkaXYgaWQ9InRlc3RBZGRBdHRyaWJ1dGUiPgorICAgICAgPGRpdiBp
ZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIiBuZXdhdHRyPSJuZXctdmFsdWUiPjwvZGl2PgorICA8
L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRlc3RBZGRBdHRyaWJ1dGUi
PgorICAgICAgPGRpdiBpZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIj48L2Rpdj4KKyAgPC9kaXY+
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91bmRvLWRvbS1l
ZGl0cy0yLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMvdW5kby1kb20tZWRp
dHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNzg2YzFiMzM4MDg4NmZkOWQ5ZWE1Yzk3YjI5NDg0ZjI5
MDMxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMv
dW5kby1kb20tZWRpdHMtMi5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1l
bnRzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdCgpCit7Cisg
ICAgdmFyIHRlc3RTdWl0ZSA9IFtdOworCisgICAgZnVuY3Rpb24gdGVzdFNldFVwKG5leHQpCisg
ICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGFuZEVsZW1lbnRzVHJlZShuZXh0KTsKKyAg
ICB9CisgICAgdGVzdFN1aXRlLnB1c2godGVzdFNldFVwKTsKKworCisgICAgZnVuY3Rpb24gdGVz
dFNldEF0dHJpYnV0ZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBub2RlID0gSW5zcGVj
dG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQoIm5vZGUtdG8tc2V0LWF0dHJpYnV0ZSIpOyAKKyAg
ICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbyIsICJiYXI9XCJlZGl0ZWQgYXR0cmlidXRlXCIi
LCBjYWxsYmFjayk7CisgICAgfQorICAgIHRlc3RTdWl0ZS5wdXNoKEluc3BlY3RvclRlc3QuZ2Vu
ZXJhdGVVbmRvVGVzdCh0ZXN0U2V0QXR0cmlidXRlKSk7CisKKworICAgIGZ1bmN0aW9uIHRlc3RS
ZW1vdmVBdHRyaWJ1dGUoY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgbm9kZSA9IEluc3Bl
Y3RvclRlc3QuZXhwYW5kZWROb2RlV2l0aElkKCJub2RlLXRvLXJlbW92ZS1hdHRyaWJ1dGUiKTsg
CisgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCJmb28iLCBjYWxsYmFjayk7CisgICAgfQor
ICAgIHRlc3RTdWl0ZS5wdXNoKEluc3BlY3RvclRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0UmVt
b3ZlQXR0cmlidXRlKSk7CisKKworICAgIGZ1bmN0aW9uIHRlc3RBZGRBdHRyaWJ1dGUoY2FsbGJh
Y2spCisgICAgeworICAgICAgICB2YXIgbm9kZSA9IEluc3BlY3RvclRlc3QuZXhwYW5kZWROb2Rl
V2l0aElkKCJub2RlLXRvLWFkZC1hdHRyaWJ1dGUiKTsgCisgICAgICAgIG5vZGUuc2V0QXR0cmli
dXRlKCIiLCAibmV3YXR0cj1cIm5ldy12YWx1ZVwiIiwgY2FsbGJhY2spOworICAgIH0KKyAgICB0
ZXN0U3VpdGUucHVzaChJbnNwZWN0b3JUZXN0LmdlbmVyYXRlVW5kb1Rlc3QodGVzdEFkZEF0dHJp
YnV0ZSkpOworCisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZSh0ZXN0U3VpdGUpOwor
fQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+
CitUZXN0cyB0aGF0IERPTSBtb2RpZmljYXRpb25zIGRvbmUgaW4gdGhlIEVsZW1lbnRzIHBhbmVs
IGFyZSB1bmRvYWJsZSAoUGFydCAyKS4KKzwvcD4KKworPGRpdiBzdHlsZT0iZGlzcGxheTpub25l
Ij4KKyAgICA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRlIj4KKyAgICAgICAgPGRpdiBmb289ImF0
dHJpYnV0ZSB2YWx1ZSIgaWQ9Im5vZGUtdG8tc2V0LWF0dHJpYnV0ZSI+PC9kaXY+CisgICAgPC9k
aXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0UmVtb3ZlQXR0cmlidXRlIj4KKyAgICAgICAgPGRpdiBm
b289ImF0dHJpYnV0ZSB2YWx1ZSIgaWQ9Im5vZGUtdG8tcmVtb3ZlLWF0dHJpYnV0ZSI+PC9kaXY+
CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0QWRkQXR0cmlidXRlIj4KKyAgICAgICAg
PGRpdiBpZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIj48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvZGl2
PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZWxlbWVudHMvdW5kby1kb20tZWRpdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTYx
YjczOTIyNjk5MDUxNGUwNzgwNmRhYTE5NDgwZjVkN2RkNGY1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDY2IEBACitUZXN0cyB0aGF0IERPTSBtb2RpZmljYXRpb25zIGRvbmUgaW4g
dGhlIEVsZW1lbnRzIHBhbmVsIGFyZSB1bmRvYWJsZS4KKworCitSdW5uaW5nOiB0ZXN0U2V0VXAK
KworUnVubmluZzogdGVzdFJlbW92ZQorSW5pdGlhbDoKKy0gPGRpdiBpZD0idGVzdFJlbW92ZSI+
CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXJlbW92ZSI+PC9kaXY+CisgIDwvZGl2PgorUG9zdC1h
Y3Rpb246CistIDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5p
dGlhbCk6CistIDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1y
ZW1vdmUiPjwvZGl2PgorICA8L2Rpdj4KKworUnVubmluZzogdGVzdFNldE5vZGVOYW1lCitJbml0
aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0Tm9kZU5hbWUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10
by1zZXQtbmFtZSI+PC9kaXY+CisgIDwvZGl2PgorUG9zdC1hY3Rpb246CistIDxkaXYgaWQ9InRl
c3RTZXROb2RlTmFtZSI+CisgICAgICA8c3BhbiBpZD0ibm9kZS10by1zZXQtbmFtZSI+PC9zcGFu
PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRlc3RTZXROb2Rl
TmFtZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC1uYW1lIj48L2Rpdj4KKyAgPC9kaXY+
CisKK1J1bm5pbmc6IHRlc3RTZXROb2RlVmFsdWUKK0luaXRpYWw6CistIDxkaXYgaWQ9InRlc3RT
ZXROb2RlVmFsdWUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1zZXQtdmFsdWUiPlRleHQ8L2Rp
dj4KKyAgPC9kaXY+CitQb3N0LWFjdGlvbjoKKy0gPGRpdiBpZD0idGVzdFNldE5vZGVWYWx1ZSI+
CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC12YWx1ZSI+TmV3IFRleHQ8L2Rpdj4KKyAgPC9k
aXY+CitQb3N0LXVuZG8gKGluaXRpYWwpOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0Tm9kZVZhbHVlIj4K
KyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0LXZhbHVlIj5UZXh0PC9kaXY+CisgIDwvZGl2Pgor
CitSdW5uaW5nOiB0ZXN0RWRpdEFzSFRNTAorSW5pdGlhbDoKKy0gPGRpdiBpZD0idGVzdEVkaXRB
c0hUTUwiPgorICAgIC0gPGRpdiBpZD0ibm9kZS10by1lZGl0LWFzLWh0bWwiPgorICAgICAgICAg
IDxzcGFuIGlkPSJzcGFuIj5UZXh0PC9zcGFuPgorICAgICAgPC9kaXY+CisgIDwvZGl2PgorUG9z
dC1hY3Rpb246CistIDxkaXYgaWQ9InRlc3RFZGl0QXNIVE1MIj4KKyAgICAtIDxkaXYgaWQ9Im5v
ZGUtdG8tZWRpdC1hcy1odG1sIj4KKyAgICAgICAgICA8ZGl2IGlkPSJzcGFuMiI+VGV4dDI8L2Rp
dj4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYg
aWQ9InRlc3RFZGl0QXNIVE1MIj4KKyAgICAtIDxkaXYgaWQ9Im5vZGUtdG8tZWRpdC1hcy1odG1s
Ij4KKyAgICAgICAgICA8c3BhbiBpZD0ic3BhbiI+VGV4dDwvc3Bhbj4KKyAgICAgIDwvZGl2Pgor
ICA8L2Rpdj4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzL3Vu
ZG8tZG9tLWVkaXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMvdW5kby1k
b20tZWRpdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmQ5MmRlNjA1NzQ1ODQxNTEzZmYzNTU4NWVkMjAz
YjZiNTNlNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1l
bnRzL3VuZG8tZG9tLWVkaXRzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxl
bWVudHMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICB2YXIgdGVzdFN1aXRlID0gW107CisKKyAgICBmdW5jdGlvbiB0ZXN0U2V0VXAobmV4dCkK
KyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuZXhwYW5kRWxlbWVudHNUcmVlKG5leHQpOwor
ICAgIH0KKyAgICB0ZXN0U3VpdGUucHVzaCh0ZXN0U2V0VXApOworCisKKyAgICBmdW5jdGlvbiB0
ZXN0UmVtb3ZlKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUgPSBJbnNwZWN0b3JU
ZXN0LmV4cGFuZGVkTm9kZVdpdGhJZCgibm9kZS10by1yZW1vdmUiKTsgCisgICAgICAgIG5vZGUu
cmVtb3ZlTm9kZShjYWxsYmFjayk7CisgICAgfQorICAgIHRlc3RTdWl0ZS5wdXNoKEluc3BlY3Rv
clRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0UmVtb3ZlKSk7CisKKworICAgIGZ1bmN0aW9uIHRl
c3RTZXROb2RlTmFtZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBub2RlID0gSW5zcGVj
dG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQoIm5vZGUtdG8tc2V0LW5hbWUiKTsgCisgICAgICAg
IG5vZGUuc2V0Tm9kZU5hbWUoInNwYW4iLCBjYWxsYmFjayk7CisgICAgfQorICAgIHRlc3RTdWl0
ZS5wdXNoKEluc3BlY3RvclRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0U2V0Tm9kZU5hbWUpKTsK
KworCisgICAgZnVuY3Rpb24gdGVzdFNldE5vZGVWYWx1ZShjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIHZhciBub2RlID0gSW5zcGVjdG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQoIm5vZGUtdG8t
c2V0LXZhbHVlIik7IAorICAgICAgICBub2RlLmZpcnN0Q2hpbGQuc2V0Tm9kZVZhbHVlKCJOZXcg
VGV4dCIsIGNhbGxiYWNrKTsKKyAgICB9CisgICAgdGVzdFN1aXRlLnB1c2goSW5zcGVjdG9yVGVz
dC5nZW5lcmF0ZVVuZG9UZXN0KHRlc3RTZXROb2RlVmFsdWUpKTsKKworICAgIGZ1bmN0aW9uIHRl
c3RFZGl0QXNIVE1MKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUgPSBJbnNwZWN0
b3JUZXN0LmV4cGFuZGVkTm9kZVdpdGhJZCgibm9kZS10by1lZGl0LWFzLWh0bWwiKTsgCisgICAg
ICAgIG5vZGUuc2V0T3V0ZXJIVE1MKCI8ZGl2IGlkPVwibm9kZS10by1lZGl0LWFzLWh0bWxcIj48
ZGl2IGlkPVwic3BhbjJcIj5UZXh0MjwvZGl2PjwvZGl2PiIsIGNhbGxiYWNrKTsKKyAgICB9Cisg
ICAgdGVzdFN1aXRlLnB1c2goSW5zcGVjdG9yVGVzdC5nZW5lcmF0ZVVuZG9UZXN0KHRlc3RFZGl0
QXNIVE1MKSk7CisKKworICAgIEluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRlKHRlc3RTdWl0ZSk7
Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8
cD4KK1Rlc3RzIHRoYXQgRE9NIG1vZGlmaWNhdGlvbnMgZG9uZSBpbiB0aGUgRWxlbWVudHMgcGFu
ZWwgYXJlIHVuZG9hYmxlLgorPC9wPgorCis8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAg
IDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRvLXJlbW92ZSI+
PC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0U2V0Tm9kZU5hbWUiPgorICAg
ICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC1uYW1lIj48L2Rpdj4KKyAgICA8L2Rpdj4KKworICAg
IDxkaXYgaWQ9InRlc3RTZXROb2RlVmFsdWUiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNl
dC12YWx1ZSI+VGV4dDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGRpdiBpZD0idGVzdEVkaXRB
c0hUTUwiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRvLWVkaXQtYXMtaHRtbCI+PHNwYW4gaWQ9
InNwYW4iPlRleHQ8L3NwYW4+PC9kaXY+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125829</attachid>
            <date>2012-02-07 05:57:36 -0800</date>
            <delta_ts>2012-02-08 01:47:07 -0800</delta_ts>
            <desc>[Patch] with tests.</desc>
            <filename>bug-77875-20120207175734.patch</filename>
            <type>text/plain</type>
            <size>79503</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2OTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYzI0ZDAwMjFjYjAy
Y2QxNGNkMzdlNTYyNzUxY2UyODE4ODVjMS4uMTViNzgxYTAzNWRkOTM0Y2Q0ZTFkODFmMjA5ZWFh
YjhlYjc2YjRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAxMi0wMi0wNyAgUGF2
ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgdW5kby1pbmcgRE9NIGVkaXRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbnRyb2R1
Y2VzIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbiB0aGF0IGVuY2Fwc3VsYXRlcyBhbGwgRE9NIG1v
ZGlmaWNhdGlvbnMKKyAgICAgICAgaW5pdGlhdGVkIGJ5IHRoZSBpbnNwZWN0b3IuIFRoZXJlIGlz
IGEgd2F5IHRvIHVuZG8gdGhlc2UgYWN0aW9ucyB1cCB1bnRpbCB0aGUgdW5kb2FibGUKKyAgICAg
ICAgc3RhdGUgbWFya2VyLgorCisgICAgICAgIFRlc3RzOiBpbnNwZWN0b3IvZWxlbWVudHMvdW5k
by1kb20tZWRpdHMtMi5odG1sCisgICAgICAgICAgICAgICBpbnNwZWN0b3IvZWxlbWVudHMvdW5k
by1kb20tZWRpdHMuaHRtbAorICAgICAgICAgICAgICAgaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFk
ZC1wcm9wZXJ0eS5odG1sCisgICAgICAgICAgICAgICBpbnNwZWN0b3Ivc3R5bGVzL3VuZG8tY2hh
bmdlLXByb3BlcnR5Lmh0bWwKKyAgICAgICAgICAgICAgIGluc3BlY3Rvci9zdHlsZXMvdW5kby1w
cm9wZXJ0eS10b2dnbGUuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
bGxJbk9uZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoK
KyAgICAgICAgKEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uOjpTdHlsZVNoZWV0
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0
QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpT
dHlsZVNoZWV0QWN0aW9uOjp1bmRvKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5z
cGVjdG9yQ1NTQWdlbnQ6OlNldFN0eWxlU2hlZXRUZXh0QWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjo6U2V0U3R5bGVT
aGVldFRleHRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlNl
dFN0eWxlU2hlZXRUZXh0QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU0FnZW50OjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbjo6dW5kbyk6CisgICAgICAgIChJ
bnNwZWN0b3JDU1NBZ2VudDo6U2V0UHJvcGVydHlUZXh0QWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpTZXRQcm9wZXJ0eVRleHRBY3Rpb246OlNldFByb3BlcnR5
VGV4dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2V0UHJv
cGVydHlUZXh0QWN0aW9uOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6U2V0UHJvcGVydHlUZXh0QWN0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpTZXRQcm9wZXJ0eVRleHRBY3Rpb246OnVuZG8pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlNldFByb3BlcnR5VGV4dEFjdGlvbjo6
bWVyZ2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6U2V0UHJvcGVy
dHlUZXh0QWN0aW9uOjptZXJnZSk6CisgICAgICAgIChJbnNwZWN0b3JDU1NBZ2VudDo6VG9nZ2xl
UHJvcGVydHlBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlRv
Z2dsZVByb3BlcnR5QWN0aW9uOjpUb2dnbGVQcm9wZXJ0eUFjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6VG9nZ2xlUHJvcGVydHlBY3Rpb246OnBlcmZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OlRvZ2dsZVByb3BlcnR5QWN0aW9u
Ojp1bmRvKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVT
aGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJv
cGVydHkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAg
ICAoSW5zcGVjdG9yQ1NTQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6dW5kbyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2FibGVTdGF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JET01BZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlzdG9yeSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjp+QWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6dG9TdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjppc1VuZG9hYmxlU3RhdGVN
YXJrKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6bWVyZ2VJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246Om1lcmdlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckhpc3Rvcnk6Okluc3BlY3Rvckhpc3RvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySGlzdG9yeTo6fkluc3BlY3Rvckhpc3RvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySGlzdG9yeTo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5OjptYXJrVW5kb2FibGVTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JIaXN0b3J5Ojp1bmRvKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckhpc3Rvcnk6OnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9y
eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5zcGVjdG9ySGlzdG9y
eSk6CisgICAgICAgIChBY3Rpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0
eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjphZGRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFByb3BlcnR5
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpnZXRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
VGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAg
ICAgKEluc3BlY3RvclN0eWxlKToKKyAgICAgICAgKEluc3BlY3RvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTUHJvcGVydHkucHJvdG90eXBlLnNldFRleHQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1Bh
bmVsLnByb3RvdHlwZS5fc2VsZWN0ZWROb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZVNpZGViYXJzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5oYW5kbGVTaG9ydGN1dCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5vbnBvcHVsYXRl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlw
ZS5hZGROZXdCbGFua1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db21wdXRlZFN0
eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm9ucG9wdWxhdGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSk6CisKIDIwMTItMDItMDcgIE1p
Y2hhZWwgQnLDvG5pbmcgIDxtaWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgogCiAgICAgICAgIFtR
dF1bV0syXSBDb21wdXRlIGFuZCBzZXQgY2FjaGUgY2FwYWNpdGllcyB1c2luZyB0aGUgY3VycmVu
dCBDYWNoZU1vZGVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc1ZTNmZmFiMTFiMjE5N2ZmNDIz
ZTM3ZGM4OWRhYzBiMGIzNDQ2MzQuLmRkMDRjZjZmYjdhZjIyMjEzNDYzODU2YWI2NmMzZDIxZmM0
N2NhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05MDEsNiArOTAxLDcgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySGlz
dG9yeS5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBj
MWVjNzBjNDkxYzhiZDk1ZDVmZDYxM2E4MGFlZTQ2OTIxMTlmOThlLi5mNTc2MmRmN2JjZDBkODI5
MzYyN2IyMmFmZmNmNWVmZmQwNDgyNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
QEAgLTIzOTAsNiArMjM5MCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAJU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBcCisJU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySGlzdG9yeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggYzZhMmVjZWViMGY4ZDcxMDE1
YWJlMjE2MTJmZTI0YzhkZGQ0M2I0MS4uZDM0YzZkOTc4NTQ1MWE4NzFkNjdhYjVmY2VkYTAwODM1
NmU2NDA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC04NzcsNiArODc3LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwIFwKQEAgLTE5NDMsNiArMTk0NCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JIaXN0b3J5LmggXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTk1OWRkZjEyODgwZWJhNmJjZTQ2MTUxNTM1OGJjODE4
M2I0ZDM1ZC4uMDdhMzQwZjhiNjJmZjE0MWVhN2JmZDU0NzM5NzUxNzY5NWNlNjMzNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjM4Niw2ICsyMzg2LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JI
aXN0b3J5LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMzVkNDZkYTQxNzYz
ODBjMmQ5NmU0ZTcyMTIzYWNlMjYyNWFjOWM5Yy4uMGY0ZGM0N2M5ZmI1M2FkMmI3ZDgzMjk3Y2Jm
NzUzMWIwODcyYjIyNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTcxNjU4LDYgKzcxNjU4LDMwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JIaXN0b3J5LmNw
cCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVj
dG9yXEluc3BlY3Rvckhpc3RvcnkuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCIK
IAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGJkN2YwYjI4OTNjMGZkYzAzNjRl
YTkyMmNjMTk4NmJmOTNlNzVmNC4uNGE3OTgwMzQyZDNiM2ZkZDRkYjQyZTc0M2RlNjk3YzZhYzE1
Nzk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTg4Nyw2ICsxODg3LDggQEAKIAkJN0ExRjJCNTIxMjZDNjFCMjAwMDZBN0U2
IC8qIEluc3BlY3RvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QTFGMkI1MTEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50
LmNwcCAqLzsgfTsKIAkJN0EyNDU4N0IxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
MjQ1ODc5MTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5jcHAgKi87IH07CiAJ
CTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EyNDU4N0ExMDIxRUFGNDAw
MEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0E1NDg1N0YxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3Bl
Y3Rvckhpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E1NDg1N0QxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwICov
OyB9OworCQk3QTU0ODU4MDE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9yeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1NDg1N0UxNEUw
MkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuaCAqLzsgfTsKIAkJN0E2NzRCREIwRjlF
QkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkg
LyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJN0E2NzRCREMwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VH
cm91cExvYWREZWZlcnJlci5oICovOyB9OwogCQk3QTc0RUNCQTEwMTgzOUE2MDBCRjkzOUUgLyog
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQuY3BwICovOyB9OwpAQCAtODc2OCw2ICs4NzcwLDggQEAKIAkJN0ExRjJC
NTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTI0NTg3OTEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9N
QWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
RE9NQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTI0NTg3QTEwMjFF
QUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yRE9NQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0E1NDg1N0QxNEUwMkQ1MTAwNkFFMDVBIC8qIEluc3BlY3Rvckhpc3RvcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySGlzdG9yeS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNTQ4NTdFMTRFMDJENTEwMDZBRTA1QSAv
KiBJbnNwZWN0b3JIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3Rvckhpc3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E1NjNFNTQx
MkRFMzJCMDAwRjQ1MzZEIC8qIEluamVjdGVkU2NyaXB0U291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0U291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdBNTYzRjk1MTJERjVDOTEwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlw
dFNvdXJjZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluamVj
dGVkU2NyaXB0U291cmNlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA1Nyw2ICsxNDA2MSw4IEBACiAJCQkJN0Ew
RTc3MEIxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgKi8sCiAJ
CQkJN0EwRTc3MEMxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oICov
LAogCQkJCTdBMEU3NzBEMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aWRsICovLAorCQkJCTdBNTQ4NTdEMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5
LmNwcCAqLywKKwkJCQk3QTU0ODU3RTE0RTAyRDUxMDA2QUUwNUEgLyogSW5zcGVjdG9ySGlzdG9y
eS5oICovLAogCQkJCTdBQ0Q4OEQxMTRDMDhCRDYwMDg0RUREMiAvKiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAgKi8sCiAJCQkJN0FDRDg4RDIxNEMwOEJENjAwODRFREQyIC8qIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmggKi8sCiAJCQkJMjBENjI5MjQxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgKi8sCkBAIC0yNDE0OCw2ICsyNDE1NCw3IEBACiAJ
CQkJMUFBQUREQkYxNERDNjQwNzAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVO
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFBRERFOTE0REM4REY4MDBBRjY0QjMgLyogU2Ny
b2xsaW5nVHJlZU5vZGVNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBNTQ4NTgwMTRFMDJENTEw
MDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3MDg0LDYg
KzI3MDkxLDcgQEAKIAkJCQkxQUFBREREQTE0REM3NEVDMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJl
ZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIz
IC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUFEREU4MTRE
QzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTdBNTQ4NTdGMTRFMDJENTEwMDZBRTA1QSAvKiBJbnNwZWN0b3JIaXN0b3J5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDMx
ZThkOGExMTAyZGJlYTgyZWIyOTM2MDBmM2Q1M2Q3Y2EyNTc1NzIuLmUyMDRkOWNhMDk1ODNkNTc3
NzU4YzJmZTExYmFmZmEzYzc4YTIzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KQEAgLTE1MTYsNiArMTUxNiwxNiBAQAogICAgICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRvZ2dsZXMgbW91c2UgZXZlbnQtYmFzZWQgdG91
Y2ggZXZlbnQgZW11bGF0aW9uLiIsCiAgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAidW5k
byIsCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuZG9lcyB0aGUgbGFzdCBwZXJm
b3JtZWQgYWN0aW9uLiIsCisgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAibWFya1VuZG9h
YmxlU3RhdGUiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJNYXJrcyBsYXN0IHVu
ZG9hYmxlIHN0YXRlLiIsCisgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKICAgICAgICAg
ICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCmluZGV4IDc4OWEyNzE4ZWQ1MzFkMjY3
ODcyZDJjNzkxNTUwZTQ5ZDg5MWUxYTQuLjM1MTczY2I5ZTAzNjdiZmFmNjBlMjkxZDE3NTI2ZjJh
NDFiMzlhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
bGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbElu
T25lLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZpbGVTeXN0ZW1B
Z2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCIKKyNpbmNsdWRlICJJbnNwZWN0b3JI
aXN0b3J5LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JN
ZW1vcnlBZ2VudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAppbmRleCAwMTNmNGYzMjM4ZGUyMWVmMWE2ZTViZDUyMTE0Y2EyY2RlOThmMjEx
Li40ZTQyYWM0NDAxZjQyY2M4ZTQ3ZmE5MjU2YzdlY2JjNjQ3MmQyZjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckhpc3Rv
cnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTIxNyw2ICsyMTgs
MTU4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTZWxlY3RvclByb2ZpbGU6OnRvSW5z
cGVjdG9yT2JqZWN0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAor
Y2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24gOiBwdWJsaWMgSW5zcGVj
dG9ySGlzdG9yeTo6QWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVNoZWV0
QWN0aW9uKTsKK3B1YmxpYzoKKyAgICBTdHlsZVNoZWV0QWN0aW9uKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50LCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCkKKyAgICAgICAgOiBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24obmFtZSkKKyAgICAgICAgLCBt
X2Nzc0FnZW50KGNzc0FnZW50KQorICAgICAgICAsIG1fc3R5bGVTaGVldElkKHN0eWxlU2hlZXRJ
ZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IG1fY3NzQWdlbnQtPmFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgbV9z
dHlsZVNoZWV0SWQpOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBwZXJmb3JtKHN0eWxlU2hlZXQsIGVycm9yU3RyaW5n
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcpCisgICAgeworICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbV9j
c3NBZ2VudC0+YXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBtX3N0eWxlU2hlZXRJ
ZCk7CisgICAgICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHVuZG8oc3R5bGVTaGVldCwgZXJyb3JTdHJpbmcpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEluc3BlY3RvclN0eWxlU2hlZXQqLCBFcnJvclN0cmlu
ZyopID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEluc3BlY3RvclN0eWxlU2hlZXQqLCBF
cnJvclN0cmluZyopID0gMDsKKworcHJvdGVjdGVkOgorICAgIEluc3BlY3RvckNTU0FnZW50KiBt
X2Nzc0FnZW50OworICAgIFN0cmluZyBtX3N0eWxlU2hlZXRJZDsKK307CisKK2NsYXNzIEluc3Bl
Y3RvckNTU0FnZW50OjpTZXRTdHlsZVNoZWV0VGV4dEFjdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JD
U1NBZ2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0
U3R5bGVTaGVldFRleHRBY3Rpb24pOworcHVibGljOgorICAgIFNldFN0eWxlU2hlZXRUZXh0QWN0
aW9uKEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICAgICAgOiBJbnNwZWN0b3JDU1NBZ2VudDo6U3R5
bGVTaGVldEFjdGlvbigiU2V0U3R5bGVTaGVldFRleHQiLCBjc3NBZ2VudCwgc3R5bGVTaGVldElk
KQorICAgICAgICAsIG1fdGV4dCh0ZXh0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgcGVyZm9ybShJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0LCBFcnJv
clN0cmluZyopCisgICAgeworICAgICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQtPmdldFRl
eHQoJm1fb2xkVGV4dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFRleHQobV90ZXh0KSkgeworICAgICAgICAgICAgaW5z
cGVjdG9yU3R5bGVTaGVldC0+cmVwYXJzZVN0eWxlU2hlZXQobV90ZXh0KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHls
ZVNoZWV0LCBFcnJvclN0cmluZyopCisgICAgeworICAgICAgICBpZiAoaW5zcGVjdG9yU3R5bGVT
aGVldC0+c2V0VGV4dChtX29sZFRleHQpKSB7CisgICAgICAgICAgICBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5yZXBhcnNlU3R5bGVTaGVldChtX29sZFRleHQpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV90ZXh0OworICAgIFN0cmluZyBtX29sZFRleHQ7Cit9OworCitjbGFzcyBJ
bnNwZWN0b3JDU1NBZ2VudDo6U2V0UHJvcGVydHlUZXh0QWN0aW9uIDogcHVibGljIEluc3BlY3Rv
ckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
ZXRQcm9wZXJ0eVRleHRBY3Rpb24pOworcHVibGljOgorICAgIFNldFByb3BlcnR5VGV4dEFjdGlv
bihJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBjb25zdCBJbnNwZWN0b3JDU1NJZCYgY3NzSWQsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNv
bnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUpCisgICAgICAgIDogSW5zcGVjdG9yQ1NT
QWdlbnQ6OlN0eWxlU2hlZXRBY3Rpb24oIlNldFByb3BlcnR5VGV4dCIsIGNzc0FnZW50LCBzdHls
ZVNoZWV0SWQpCisgICAgICAgICwgbV9jc3NJZChjc3NJZCkKKyAgICAgICAgLCBtX3Byb3BlcnR5
SW5kZXgocHJvcGVydHlJbmRleCkKKyAgICAgICAgLCBtX3RleHQodGV4dCkKKyAgICAgICAgLCBt
X292ZXJ3cml0ZShvdmVyd3JpdGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgU3RyaW5n
IHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZUlkKCkgKyAiOiAiICsgbV9v
bGRUZXh0ICsgIiAtPiAiICsgbV90ZXh0OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtKEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQsIEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZykKKyAgICB7CisgICAgICAgIFN0cmluZyBvbGRUZXh0OworICAgICAgICBi
b29sIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnNldFByb3BlcnR5VGV4dChlcnJvclN0
cmluZywgbV9jc3NJZCwgbV9wcm9wZXJ0eUluZGV4LCBtX3RleHQsIG1fb3ZlcndyaXRlLCAmb2xk
VGV4dCk7CisgICAgICAgIG1fb2xkVGV4dCA9IG9sZFRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7Cisg
ICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIHRoZSBtb2RlbCBoYW5kbGVzIHRoaXMg
Y2FzZS4KKyAgICAgICAgaWYgKCFtX29sZFRleHQuZW5kc1dpdGgoIjsiKSkKKyAgICAgICAgICAg
IG1fb2xkVGV4dCArPSAiOyI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVl
dCwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHBsYWNl
aG9sZGVyOworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UHJvcGVydHlU
ZXh0KGVycm9yU3RyaW5nLCBtX2Nzc0lkLCBtX3Byb3BlcnR5SW5kZXgsIG1fb3ZlcndyaXRlID8g
bV9vbGRUZXh0IDogIiIsIHRydWUsICZwbGFjZWhvbGRlcik7CisgICAgfQorCisgICAgdmlydHVh
bCBTdHJpbmcgbWVyZ2VJZCgpCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQo
IlNldFByb3BlcnR5VGV4dCAlczoldTolcyIsIG1fc3R5bGVTaGVldElkLnV0ZjgoKS5kYXRhKCks
IG1fcHJvcGVydHlJbmRleCwgbV9vdmVyd3JpdGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgbWVyZ2UoUGFzc093blB0cjxBY3Rpb24+IGFjdGlvbikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChhY3Rpb24tPm1lcmdlSWQoKSA9PSBtZXJnZUlkKCkpOworCisg
ICAgICAgIFNldFByb3BlcnR5VGV4dEFjdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxTZXRQcm9w
ZXJ0eVRleHRBY3Rpb24qPihhY3Rpb24uZ2V0KCkpOworICAgICAgICBtX3RleHQgPSBvdGhlci0+
bV90ZXh0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JDU1NJZCBtX2Nzc0lkOwor
ICAgIHVuc2lnbmVkIG1fcHJvcGVydHlJbmRleDsKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIFN0
cmluZyBtX29sZFRleHQ7CisgICAgYm9vbCBtX292ZXJ3cml0ZTsKK307CisKK2NsYXNzIEluc3Bl
Y3RvckNTU0FnZW50OjpUb2dnbGVQcm9wZXJ0eUFjdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JDU1NB
Z2VudDo6U3R5bGVTaGVldEFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVG9nZ2xl
UHJvcGVydHlBY3Rpb24pOworcHVibGljOgorICAgIFRvZ2dsZVByb3BlcnR5QWN0aW9uKEluc3Bl
Y3RvckNTU0FnZW50KiBjc3NBZ2VudCwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0
IEluc3BlY3RvckNTU0lkJiBjc3NJZCwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNh
YmxlKQorICAgICAgICA6IEluc3BlY3RvckNTU0FnZW50OjpTdHlsZVNoZWV0QWN0aW9uKCJUb2dn
bGVQcm9wZXJ0eSIsIGNzc0FnZW50LCBzdHlsZVNoZWV0SWQpCisgICAgICAgICwgbV9jc3NJZChj
c3NJZCkKKyAgICAgICAgLCBtX3Byb3BlcnR5SW5kZXgocHJvcGVydHlJbmRleCkKKyAgICAgICAg
LCBtX2Rpc2FibGUoZGlzYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBl
cmZvcm0oSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hl
ZXQtPnRvZ2dsZVByb3BlcnR5KGVycm9yU3RyaW5nLCBtX2Nzc0lkLCBtX3Byb3BlcnR5SW5kZXgs
IG1fZGlzYWJsZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oSW5zcGVjdG9yU3R5
bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQor
ICAgIHsKKyAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT50b2dnbGVQcm9wZXJ0eShl
cnJvclN0cmluZywgbV9jc3NJZCwgbV9wcm9wZXJ0eUluZGV4LCAhbV9kaXNhYmxlKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ1NTSWQgbV9jc3NJZDsKKyAgICB1bnNpZ25lZCBt
X3Byb3BlcnR5SW5kZXg7CisgICAgYm9vbCBtX2Rpc2FibGU7Cit9OworCiAvLyBzdGF0aWMKIENT
U1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKENTU1J1bGUqIHJ1
bGUpCiB7CkBAIC00MzgsMTkgKzU5MSwxMyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRT
dHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAg
IGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5zcGVj
dG9yU3R5bGVTaGVldC0+dGV4dChyZXN1bHQpOworICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPmdl
dFRleHQocmVzdWx0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVl
dFRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxl
U2hlZXRJZCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0VGV4dCh0ZXh0KSkKLSAgICAgICAg
aW5zcGVjdG9yU3R5bGVTaGVldC0+cmVwYXJzZVN0eWxlU2hlZXQodGV4dCk7Ci0gICAgZWxzZQot
ICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBzdHlsZSBzaGVl
dCB0ZXh0IjsKKyAgICBtX2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oYWRvcHRQdHIobmV3
IFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uKHRoaXMsIHN0eWxlU2hlZXRJZCwgdGV4dCkpLCBlcnJv
clN0cmluZyk7CisgICAgbV9kb21BZ2VudC0+aGlzdG9yeSgpLT5tYXJrVW5kb2FibGVTdGF0ZSgp
OwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxl
SWQsIGludCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRl
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQpAQCAtNDYyLDcgKzYwOSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJCiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5z
ZXRQcm9wZXJ0eVRleHQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQsIHByb3BlcnR5SW5kZXgsIHRl
eHQsIG92ZXJ3cml0ZSk7CisgICAgYm9vbCBzdWNjZXNzID0gbV9kb21BZ2VudC0+aGlzdG9yeSgp
LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBTZXRQcm9wZXJ0eVRleHRBY3Rpb24odGhpcywgY29tcG91
bmRJZC5zdHlsZVNoZWV0SWQoKSwgY29tcG91bmRJZCwgcHJvcGVydHlJbmRleCwgdGV4dCwgb3Zl
cndyaXRlKSksIGVycm9yU3RyaW5nKTsKICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgcmVzdWx0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHls
ZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KQEAgLTQ3Niw5ICs2MjMsMTAgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW4KICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgc3VjY2VzcyA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PnRvZ2dsZVByb3BlcnR5KGVycm9yU3RyaW5nLCBjb21wb3VuZElkLCBwcm9wZXJ0eUluZGV4LCBk
aXNhYmxlKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2RvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZv
cm0oYWRvcHRQdHIobmV3IFRvZ2dsZVByb3BlcnR5QWN0aW9uKHRoaXMsIGNvbXBvdW5kSWQuc3R5
bGVTaGVldElkKCksIGNvbXBvdW5kSWQsIHByb3BlcnR5SW5kZXgsIGRpc2FibGUpKSwgZXJyb3JT
dHJpbmcpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHls
ZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9y
SWQoY29tcG91bmRJZCkpOworICAgIG1fZG9tQWdlbnQtPmhpc3RvcnkoKS0+bWFya1VuZG9hYmxl
U3RhdGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1
bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
CmluZGV4IDY0ZTI3MjQyYzIxYWI2MmZlNGRlYjRlMjY0ZTU3YzJhZGJkYTI1YTMuLmViYjMxMzZi
YTAzNzg2ODkyOWI2ODMwNWIyNjVkY2Q1MTNmNDkzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC05OCw2ICs5OCwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRQcm9jZXNzUnVsZSgpOwogCiBwcml2YXRlOgorICAgIGNsYXNzIFN0eWxlU2hl
ZXRBY3Rpb247CisgICAgY2xhc3MgU2V0U3R5bGVTaGVldFRleHRBY3Rpb247CisgICAgY2xhc3Mg
U2V0UHJvcGVydHlUZXh0QWN0aW9uOworICAgIGNsYXNzIFRvZ2dsZVByb3BlcnR5QWN0aW9uOwor
CiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclN0
YXRlKiwgSW5zcGVjdG9yRE9NQWdlbnQqKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXgg
NDkwZDFjOTE2NmM1MzU4NTQ4MjEwNjc1YmJiZDJkNTU1MDA4ZDY1OC4uOTQ2NTZjMmQyNGQ3OGUx
NWQxY2NlMjczYWMxMmU2ZTdkNDQzMmQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC05NSw2ICs5NSwyNDMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCitjbGFzcyBET01BY3Rpb24gOiBwdWJsaWMgSW5z
cGVjdG9ySGlzdG9yeTo6QWN0aW9uIHsKK3B1YmxpYzoKKyAgICBET01BY3Rpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKSA6IEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbihuYW1lKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAgICB7CisgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm0o
ZWMpOworICAgICAgICBpZiAoZWMpIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSBkZXNjcmlw
dGlvbi5uYW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgJiYgIWVjOworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKKyAg
ICB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBib29sIHJlc3VsdCA9
IHVuZG8oZWMpOworICAgICAgICBpZiAoZWMpIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSBk
ZXNjcmlwdGlvbi5uYW1lOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQgJiYgIWVj
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNlcHRpb25Db2RlJikgPSAwOworCitwcml2YXRl
OgorICAgIFJlZlB0cjxOb2RlPiBtX3BhcmVudE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9hbmNob3JOb2RlOworfTsKKworY2xhc3MgUmVtb3ZlQ2hp
bGRBY3Rpb24gOiBwdWJsaWMgRE9NQWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
ZW1vdmVDaGlsZEFjdGlvbik7CitwdWJsaWM6CisgICAgUmVtb3ZlQ2hpbGRBY3Rpb24oTm9kZSog
cGFyZW50Tm9kZSwgTm9kZSogbm9kZSkKKyAgICAgICAgOiBET01BY3Rpb24oIlJlbW92ZUNoaWxk
IikKKyAgICAgICAgLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSkKKyAgICAgICAgLCBtX25vZGUo
bm9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9u
Q29kZSYgZWMpCisgICAgeworICAgICAgICBtX2FuY2hvck5vZGUgPSBtX25vZGUtPm5leHRTaWJs
aW5nKCk7CisgICAgICAgIHJldHVybiBtX3BhcmVudE5vZGUtPnJlbW92ZUNoaWxkKG1fbm9kZS5n
ZXQoKSwgZWMpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUm
IGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Tm9kZS0+aW5zZXJ0QmVmb3JlKG1f
bm9kZS5nZXQoKSwgbV9hbmNob3JOb2RlLmdldCgpLCBlYyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFJlZlB0cjxOb2RlPiBtX3BhcmVudE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsK
KyAgICBSZWZQdHI8Tm9kZT4gbV9hbmNob3JOb2RlOworfTsKKworY2xhc3MgSW5zZXJ0QmVmb3Jl
QWN0aW9uIDogcHVibGljIERPTUFjdGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
ZXJ0QmVmb3JlQWN0aW9uKTsKK3B1YmxpYzoKKyAgICBJbnNlcnRCZWZvcmVBY3Rpb24oTm9kZSog
cGFyZW50Tm9kZSwgTm9kZSogbm9kZSwgTm9kZSogYW5jaG9yTm9kZSkKKyAgICAgICAgOiBET01B
Y3Rpb24oIkluc2VydEJlZm9yZSIpCisgICAgICAgICwgbV9wYXJlbnROb2RlKHBhcmVudE5vZGUp
CisgICAgICAgICwgbV9ub2RlKG5vZGUpCisgICAgICAgICwgbV9hbmNob3JOb2RlKGFuY2hvck5v
ZGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNv
ZGUmIGVjKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgICAgICBtX3JlbW92ZUNoaWxkQWN0aW9uID0gYWRvcHRQdHIobmV3IFJlbW92ZUNoaWxkQWN0
aW9uKG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlm
ICghbV9yZW1vdmVDaGlsZEFjdGlvbi0+cGVyZm9ybShlYykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3BhcmVudE5vZGUtPmluc2Vy
dEJlZm9yZShtX25vZGUuZ2V0KCksIG1fYW5jaG9yTm9kZS5nZXQoKSwgZWMpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAg
aWYgKG1fcmVtb3ZlQ2hpbGRBY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbV9yZW1vdmVDaGls
ZEFjdGlvbi0+dW5kbyhlYyk7CisKKyAgICAgICAgcmV0dXJuIG1fcGFyZW50Tm9kZS0+cmVtb3Zl
Q2hpbGQobV9ub2RlLmdldCgpLCBlYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxO
b2RlPiBtX3BhcmVudE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8
Tm9kZT4gbV9hbmNob3JOb2RlOworICAgIE93blB0cjxSZW1vdmVDaGlsZEFjdGlvbj4gbV9yZW1v
dmVDaGlsZEFjdGlvbjsKK307CisKK2NsYXNzIFJlbW92ZUF0dHJpYnV0ZUFjdGlvbiA6IHB1Ymxp
YyBET01BY3Rpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW92ZUF0dHJpYnV0ZUFj
dGlvbik7CitwdWJsaWM6CisgICAgUmVtb3ZlQXR0cmlidXRlQWN0aW9uKEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBET01BY3Rpb24oIlJlbW92ZUF0dHJp
YnV0ZSIpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwgbV9uYW1lKG5h
bWUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEV4Y2VwdGlvbkNv
ZGUmKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKG1f
bmFtZSk7CisgICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlKG1fbmFtZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB1bmRvKEV4Y2VwdGlv
bkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1l
LCBtX3ZhbHVlLCBlYyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFN0cmluZyBtX25hbWU7CisgICAg
U3RyaW5nIG1fdmFsdWU7Cit9OworCitjbGFzcyBTZXRBdHRyaWJ1dGVBY3Rpb24gOiBwdWJsaWMg
RE9NQWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXRBdHRyaWJ1dGVBY3Rpb24p
OworcHVibGljOgorICAgIFNldEF0dHJpYnV0ZUFjdGlvbihFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIDogRE9NQWN0aW9u
KCJTZXRBdHRyaWJ1dGUiKQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICAgICAs
IG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9oYWRB
dHRyaWJ1dGUoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3Jt
KEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgbV9oYWRBdHRyaWJ1dGUgPSBtX2Vs
ZW1lbnQtPmhhc0F0dHJpYnV0ZShtX25hbWUpOworICAgICAgICBpZiAobV9oYWRBdHRyaWJ1dGUp
CisgICAgICAgICAgICBtX29sZFZhbHVlID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUobV9uYW1l
KTsKKyAgICAgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUobV9uYW1lLCBtX3ZhbHVlLCBlYyk7
CisgICAgICAgIHJldHVybiAhZWM7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oRXhj
ZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBpZiAobV9oYWRBdHRyaWJ1dGUpCisgICAg
ICAgICAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZShtX25hbWUsIG1fb2xkVmFsdWUsIGVjKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUobV9u
YW1lKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0
cjxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92
YWx1ZTsKKyAgICBib29sIG1faGFkQXR0cmlidXRlOworICAgIFN0cmluZyBtX29sZFZhbHVlOwor
fTsKKworY2xhc3MgU2V0T3V0ZXJIVE1MQWN0aW9uIDogcHVibGljIERPTUFjdGlvbiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0T3V0ZXJIVE1MQWN0aW9uKTsKK3B1YmxpYzoKKyAgICBT
ZXRPdXRlckhUTUxBY3Rpb24oTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sKQorICAgICAg
ICA6IERPTUFjdGlvbigiU2V0T3V0ZXJIVE1MIikKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAg
ICAgICAgLCBtX2h0bWwoaHRtbCkKKyAgICAgICAgLCBtX25ld05vZGUoMCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgewor
ICAgICAgICBtX29sZEhUTUwgPSBjcmVhdGVNYXJrdXAobV9ub2RlLmdldCgpKTsKKyAgICAgICAg
RE9NRWRpdG9yIGRvbUVkaXRvcihtX25vZGUtPm93bmVyRG9jdW1lbnQoKSk7CisgICAgICAgIG1f
bmV3Tm9kZSA9IGRvbUVkaXRvci5wYXRjaE5vZGUobV9ub2RlLmdldCgpLCBtX2h0bWwsIGVjKTsK
KyAgICAgICAgcmV0dXJuICFlYzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFeGNl
cHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIERPTUVkaXRvciBkb21FZGl0b3IobV9ub2Rl
LT5vd25lckRvY3VtZW50KCkpOworICAgICAgICBkb21FZGl0b3IucGF0Y2hOb2RlKG1fbm9kZS5n
ZXQoKSwgbV9vbGRIVE1MLCBlYyk7CisgICAgICAgIHJldHVybiAhZWM7CisgICAgfQorCisgICAg
Tm9kZSogbmV3Tm9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdOb2RlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFN0cmluZyBtX2h0bWw7
CisgICAgU3RyaW5nIG1fb2xkSFRNTDsKKyAgICBOb2RlKiBtX25ld05vZGU7Cit9OworCitjbGFz
cyBSZXBsYWNlV2hvbGVUZXh0QWN0aW9uIDogcHVibGljIERPTUFjdGlvbiB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUmVwbGFjZVdob2xlVGV4dEFjdGlvbik7CitwdWJsaWM6CisgICAgUmVw
bGFjZVdob2xlVGV4dEFjdGlvbihUZXh0KiB0ZXh0Tm9kZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQor
ICAgICAgICA6IERPTUFjdGlvbigiUmVwbGFjZVdob2xlVGV4dCIpCisgICAgICAgICwgbV90ZXh0
Tm9kZSh0ZXh0Tm9kZSkKKyAgICAgICAgLCBtX3RleHQodGV4dCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIHBlcmZvcm0oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAg
ICBtX29sZFRleHQgPSBtX3RleHROb2RlLT53aG9sZVRleHQoKTsKKyAgICAgICAgbV90ZXh0Tm9k
ZS0+cmVwbGFjZVdob2xlVGV4dChtX3RleHQsIGVjKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIHVuZG8oRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgewor
ICAgICAgICBtX3RleHROb2RlLT5yZXBsYWNlV2hvbGVUZXh0KG1fb2xkVGV4dCwgZWMpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFRleHQ+IG1f
dGV4dE5vZGU7CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcgbV9vbGRUZXh0OworfTsK
KworfQorCiBuYW1lc3BhY2UgRE9NQWdlbnRTdGF0ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBkb2N1
bWVudFJlcXVlc3RlZFtdID0gImRvY3VtZW50UmVxdWVzdGVkIjsKIApAQCAtMTg2LDYgKzQyMyw3
IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJCiAgICAgLCBtX2RvbUxpc3RlbmVyKDApCiAgICAg
LCBtX2xhc3ROb2RlSWQoMSkKICAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKKyAgICAs
IG1faGlzdG9yeShhZG9wdFB0cihuZXcgSW5zcGVjdG9ySGlzdG9yeSgpKSkKIHsKIH0KIApAQCAt
MjUzLDcgKzQ5MSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRlZE5vZGUo
KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiB7Ci0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgbV9oaXN0b3J5LT5yZXNldCgpOwogICAgIG1fc2VhcmNoUmVzdWx0
cy5jbGVhcigpOwogICAgIGRpc2NhcmRCaW5kaW5ncygpOwogICAgIGlmIChtX3JldmFsaWRhdGVT
dHlsZUF0dHJUYXNrKQpAQCAtNTE4LDEwICs3NTYsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW50
SQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGNvdWxk
IG5vdCBzZXQgYXR0cmlidXRlIHZhbHVlIjsKKyAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQ
dHIobmV3IFNldEF0dHJpYnV0ZUFjdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1ZSkpLCBlcnJvclN0
cmluZyk7CisgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogfQogCiB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIGNv
bnN0IG5hbWUpCkBAIC01NTEsNyArNzg3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0
QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBlbGVtZW4KIAog
ICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvRWxlbWVudChjaGlsZCk7CiAgICAgaWYgKCFj
aGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAmJiBuYW1lKSB7Ci0gICAgICAgIGVsZW1lbnQt
PnJlbW92ZUF0dHJpYnV0ZSgqbmFtZSk7CisgICAgICAgIG1faGlzdG9yeS0+cGVyZm9ybShhZG9w
dFB0cihuZXcgUmVtb3ZlQXR0cmlidXRlQWN0aW9uKGVsZW1lbnQsICpuYW1lKSksIGVycm9yU3Ry
aW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTYxLDIwICs3OTcsMjQgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBlbGVtZW4KICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCiAgICAg
ICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gY2hpbGRFbGVtZW50LT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0
dHJpYnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpID09ICpuYW1l
KTsKLSAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRy
aWJ1dGUtPnZhbHVlKCkpOworICAgICAgICBpZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0
cihuZXcgU2V0QXR0cmlidXRlQWN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZS0+bmFtZSgpLnRvU3Ry
aW5nKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSkpLCBlcnJvclN0cmluZykpCisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUp
IHsKLSAgICAgICAgZWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlKCpuYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgJiYgbmFtZSAmJiAh
bmFtZS0+c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQorICAgICAgICBtX2hpc3RvcnktPnBl
cmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUF0dHJpYnV0ZUFjdGlvbihlbGVtZW50LCAqbmFtZSkp
LCBlcnJvclN0cmluZyk7CisKKyAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBF
bGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElkKTsK
LSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgZWxlbWVudC0+cmVtb3ZlQXR0cmlidXRlKG5hbWUp
OworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oaXN0b3J5LT5w
ZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oZWxlbWVudCwgbmFtZSkp
LCBlcnJvclN0cmluZyk7CisgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgaW50IG5vZGVJZCkKQEAgLTU4OSwxMyArODI5LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobm9kZSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAg
KmVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZW1vdmUgbm9kZSBkdWUgdG8gRE9NIGV4Y2VwdGlv
biI7CisgICAgbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVDaGlsZEFjdGlv
bihwYXJlbnROb2RlLCBub2RlKSksIGVycm9yU3RyaW5nKTsKKyAgICBtX2hpc3RvcnktPm1hcmtV
bmRvYWJsZVN0YXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1l
KEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBpbnQqIG5l
d0lkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGludCogbmV3SWQp
CiB7CiAgICAgKm5ld0lkID0gMDsKIApAQCAtNjEzLDE2ICs4NTEsMTggQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHRhZ04KIAogICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGNoaWxk
cmVuLgogICAgIE5vZGUqIGNoaWxkOwotICAgIHdoaWxlICgoY2hpbGQgPSBvbGROb2RlLT5maXJz
dENoaWxkKCkpKQotICAgICAgICBuZXdFbGVtLT5hcHBlbmRDaGlsZChjaGlsZCwgZWMpOworICAg
IHdoaWxlICgoY2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CisgICAgICAgIGlmICgh
bV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24obmV3RWxl
bS5nZXQoKSwgY2hpbGQsIDApKSwgZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBub2RlIHdpdGggdGhlIG5ldyBub2RlCiAg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIHBh
cmVudC0+aW5zZXJ0QmVmb3JlKG5ld0VsZW0sIG9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGVjKTsK
LSAgICBwYXJlbnQtPnJlbW92ZUNoaWxkKG9sZE5vZGUsIGVjKTsKLQotICAgIGlmIChlYykKKyAg
ICBpZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgSW5zZXJ0QmVmb3JlQWN0aW9u
KHBhcmVudCwgbmV3RWxlbS5nZXQoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSkpLCBlcnJvclN0
cmluZykpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1faGlzdG9yeS0+cGVyZm9ybShhZG9w
dFB0cihuZXcgUmVtb3ZlQ2hpbGRBY3Rpb24ocGFyZW50LCBvbGROb2RlKSksIGVycm9yU3RyaW5n
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsK
IAogICAgICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobmV3RWxlbS5nZXQoKSk7CiAg
ICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKSkKQEAgLTY1OCwxMyAr
ODk4LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAKICAgICBET01FZGl0b3IgZG9tRWRp
dG9yKGRvY3VtZW50KTsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5l
d05vZGUgPSBkb21FZGl0b3IucGF0Y2hOb2RlKG5vZGUsIG91dGVySFRNTCwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OwotICAgICAgICAqZXJyb3JTdHJpbmcgPSBkZXNjcmlwdGlvbi5uYW1lOworICAgIE93blB0cjxT
ZXRPdXRlckhUTUxBY3Rpb24+IGFjdGlvbiA9IGFkb3B0UHRyKG5ldyBTZXRPdXRlckhUTUxBY3Rp
b24obm9kZSwgb3V0ZXJIVE1MKSk7CisgICAgU2V0T3V0ZXJIVE1MQWN0aW9uKiByYXdBY3Rpb24g
PSBhY3Rpb24uZ2V0KCk7CisgICAgTm9kZSogbmV3Tm9kZSA9IDA7CisgICAgaWYgKCFtX2hpc3Rv
cnktPnBlcmZvcm0oYWN0aW9uLnJlbGVhc2UoKSwgZXJyb3JTdHJpbmcpKQogICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUoKTsKKworICAgIG5l
d05vZGUgPSByYXdBY3Rpb24tPm5ld05vZGUoKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewogICAg
ICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCkBAIC02ODksMTEg
KzkzMCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2RlKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB0ZXh0Tm9kZS0+cmVwbGFjZVdob2xlVGV4dCh2YWx1
ZSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIkRPTSBFcnJvciB3
aGlsZSBzZXR0aW5nIHRoZSBub2RlIHZhbHVlIjsKKyAgICBtX2hpc3RvcnktPnBlcmZvcm0oYWRv
cHRQdHIobmV3IFJlcGxhY2VXaG9sZVRleHRBY3Rpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUp
LCB2YWx1ZSkpLCBlcnJvclN0cmluZyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4mIGxpc3RlbmVyc0FycmF5KQpAQCAtMTAzMCwzMyArMTI2NywzMSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikKICAgICBt
X2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpt
b3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElk
LCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCit2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGNvbnN0IGFuY2hvck5vZGVJZCwg
aW50KiBuZXdOb2RlSWQpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3IsIG5v
ZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiB0YXJnZXRF
bGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvciwgdGFyZ2V0RWxlbWVudElkKTsKKyAgICBFbGVt
ZW50KiB0YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgdGFyZ2V0RWxl
bWVudElkKTsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IE5vZGUqIGFuY2hvck5vZGUgPSAwOwogICAgIGlmIChhbmNob3JOb2RlSWQgJiYgKmFuY2hvck5v
ZGVJZCkgewotICAgICAgICBhbmNob3JOb2RlID0gYXNzZXJ0Tm9kZShlcnJvciwgKmFuY2hvck5v
ZGVJZCk7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqYW5j
aG9yTm9kZUlkKTsKICAgICAgICAgaWYgKCFhbmNob3JOb2RlKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBpZiAoYW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQp
IHsKLSAgICAgICAgICAgICplcnJvciA9ICJBbmNob3Igbm9kZSBtdXN0IGJlIGNoaWxkIG9mIHRo
ZSB0YXJnZXQgZWxlbWVudCI7CisgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSAiQW5jaG9yIG5v
ZGUgbXVzdCBiZSBjaGlsZCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQiOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gdGFyZ2V0RWxlbWVudC0+aW5zZXJ0QmVmb3JlKG5vZGUsIGFuY2hvck5v
ZGUsIGVjKTsKLSAgICBpZiAoZWMgfHwgIXN1Y2Nlc3MpIHsKLSAgICAgICAgKmVycm9yID0gIkNv
dWxkIG5vdCBkcm9wIG5vZGUiOworICAgIGlmICghbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRy
KG5ldyBJbnNlcnRCZWZvcmVBY3Rpb24odGFyZ2V0RWxlbWVudCwgbm9kZSwgYW5jaG9yTm9kZSkp
LCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9oaXN0b3J5LT5t
YXJrVW5kb2FibGVTdGF0ZSgpOworCiAgICAgKm5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSk7CiB9CiAKQEAgLTEwNzMsNiArMTMwOCwxNiBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcqIGVycm9yLCBib29s
IGVuYWJsZQogI2VuZGlmCiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuZG8oRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIG1faGlzdG9yeS0+dW5kbyhlcnJvclN0cmluZyk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3Ry
aW5nKikKK3sKKyAgICBtX2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7Cit9CisKIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKEVycm9yU3RyaW5nKiBlcnJvciwgaW50IG5v
ZGVJZCwgY29uc3QgU3RyaW5nKiBjb25zdCBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdCkKIHsKICAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3Jv
dXAgPyAqb2JqZWN0R3JvdXAgOiAiIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKaW5kZXggMjU5ZmVmNjQzZTA1OTEwNDhkYjlmYzhlMzc2MWM4ZjYyYzdi
MDNkMS4uODZlM2M2N2UxODJhYjBlOGVmZjc3MmE2M2ViYTdjYzdjNDUwNzJiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JCYXNlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUg
Ikluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogCkBAIC0xNDMsNiArMTQ0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9y
U3RyaW5nKiwgaW50IG5vZGVJZCwgaW50IHRhcmdldE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JO
b2RlSWQsIGludCogbmV3Tm9kZUlkKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VG91Y2hFbXVsYXRp
b25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHVuZG8oRXJy
b3JTdHJpbmcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJp
bmcqKTsKIAogICAgIE5vZGUqIGhpZ2hsaWdodGVkTm9kZSgpIGNvbnN0OwogCkBAIC0xNzYsNiAr
MTc5LDggQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0hpZ2hsaWdodChHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKICAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQqKSBjb25zdDsKIAorICAg
IEluc3BlY3Rvckhpc3RvcnkqIGhpc3RvcnkoKSB7IHJldHVybiBtX2hpc3RvcnkuZ2V0KCk7IH0K
KwogICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBvZiB0aGUgc2Ft
ZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93bmVycyBkaWZm
ZXJlbnRseS4KICAgICAvLyBXZSBhbHNvIHNraXAgd2hpdGVzcGFjZSB0ZXh0IG5vZGVzIGNvbmRp
dGlvbmFsbHkuIEZvbGxvd2luZyBtZXRob2RzIGVuY2Fwc3VsYXRlIHRoZXNlIHNwZWNpZmljcy4K
ICAgICBzdGF0aWMgTm9kZSogaW5uZXJGaXJzdENoaWxkKE5vZGUqKTsKQEAgLTI0MCw2ICsyNDUs
NyBAQCBwcml2YXRlOgogICAgIE93blB0cjxIaWdobGlnaHREYXRhPiBtX2hpZ2hsaWdodERhdGE7
CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgYm9vbCBtX3NlYXJjaGluZ0Zv
ck5vZGU7CisgICAgT3duUHRyPEluc3BlY3Rvckhpc3Rvcnk+IG1faGlzdG9yeTsKIH07CiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckhpc3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmNjhjMWZmNWQxYTNkYTI2NWQ3MjI4MmUy
ODliYWU0MDRlNzM4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySGlzdG9yeS5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySGlzdG9yeS5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBVbmRvYWJsZVN0YXRlTWFyayA6IHB1YmxpYyBJbnNwZWN0b3JIaXN0b3J5
OjpBY3Rpb24geworcHVibGljOgorICAgIFVuZG9hYmxlU3RhdGVNYXJrKCkgOiBJbnNwZWN0b3JI
aXN0b3J5OjpBY3Rpb24oIltVbmRvYWJsZVN0YXRlXSIpIHsgfQorCisgICAgdmlydHVhbCBib29s
IHBlcmZvcm0oRXJyb3JTdHJpbmcqKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgdW5kbyhFcnJvclN0cmluZyopIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc1VuZG9hYmxlU3RhdGVNYXJrKCkgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQorCitJbnNw
ZWN0b3JIaXN0b3J5OjpBY3Rpb246OkFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUpIDogbV9uYW1l
KG5hbWUpCit7Cit9CisKK0luc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6fkFjdGlvbigpCit7Cit9
CisKK1N0cmluZyBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb246OnRvU3RyaW5nKCkKK3sKKyAgICBy
ZXR1cm4gbV9uYW1lOworfQorCitib29sIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbjo6aXNVbmRv
YWJsZVN0YXRlTWFyaygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgSW5zcGVj
dG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZUlkKCkKK3sKKyAgICByZXR1cm4gIiI7Cit9CisKK3Zv
aWQgSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uOjptZXJnZShQYXNzT3duUHRyPEFjdGlvbj4pCit7
Cit9CisKK0luc3BlY3Rvckhpc3Rvcnk6Okluc3BlY3Rvckhpc3RvcnkoKSB7IH0KKworSW5zcGVj
dG9ySGlzdG9yeTo6fkluc3BlY3Rvckhpc3RvcnkoKSB7IH0KKworYm9vbCBJbnNwZWN0b3JIaXN0
b3J5OjpwZXJmb3JtKFBhc3NPd25QdHI8QWN0aW9uPiBhY3Rpb24sIEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZykKK3sKKyAgICBpZiAoIWFjdGlvbi0+cGVyZm9ybShlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9oaXN0b3J5LmlzRW1wdHkoKSAmJiAhYWN0
aW9uLT5tZXJnZUlkKCkuaXNFbXB0eSgpICYmIGFjdGlvbi0+bWVyZ2VJZCgpID09IG1faGlzdG9y
eS5maXJzdCgpLT5tZXJnZUlkKCkpCisgICAgICAgIG1faGlzdG9yeS5maXJzdCgpLT5tZXJnZShh
Y3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9oaXN0b3J5LnByZXBlbmQoYWN0aW9uKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3Rvckhpc3Rvcnk6Om1hcmtVbmRvYWJs
ZVN0YXRlKCkKK3sKKyAgICBtX2hpc3RvcnkucHJlcGVuZChhZG9wdFB0cihuZXcgVW5kb2FibGVT
dGF0ZU1hcmsoKSkpOworfQorCitib29sIEluc3BlY3Rvckhpc3Rvcnk6OnVuZG8oRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQoreworICAgIHdoaWxlICghbV9oaXN0b3J5LmlzRW1wdHkoKSAmJiBt
X2hpc3RvcnkuZmlyc3QoKS0+aXNVbmRvYWJsZVN0YXRlTWFyaygpKQorICAgICAgICBtX2hpc3Rv
cnkucmVtb3ZlRmlyc3QoKTsKKworICAgIHdoaWxlICghbV9oaXN0b3J5LmlzRW1wdHkoKSkgewor
ICAgICAgICBPd25QdHI8QWN0aW9uPiBmaXJzdCA9IG1faGlzdG9yeS50YWtlRmlyc3QoKTsKKyAg
ICAgICAgaWYgKCFmaXJzdC0+dW5kbyhlcnJvclN0cmluZykpIHsKKyAgICAgICAgICAgIG1faGlz
dG9yeS5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZpcnN0LT5pc1VuZG9hYmxlU3RhdGVNYXJrKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnNwZWN0b3JIaXN0b3J5
OjpyZXNldCgpCit7CisgICAgbV9oaXN0b3J5LmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTA2ZTA1YjkwMjYyZjcz
NTE0ZTRmYzVhMmFjMWI3ZjdmNDVlZDUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckhpc3RvcnkuaApAQCAtMCwwICsxLDg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
bnNwZWN0b3JIaXN0b3J5X2gKKyNkZWZpbmUgSW5zcGVjdG9ySGlzdG9yeV9oCisKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIEVsZW1lbnQ7CitjbGFz
cyBOb2RlOworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKK2NsYXNzIEluc3BlY3Rvckhpc3RvcnkgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3Rvckhpc3RvcnkpOworcHVibGljOgorICAgIGNsYXNzIEFjdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdmly
dHVhbCB+QWN0aW9uKCk7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRvU3RyaW5nKCk7CisKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzVW5kb2FibGVTdGF0ZU1hcmsoKTsKKworICAgICAgICB2aXJ0
dWFsIFN0cmluZyBtZXJnZUlkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtZXJnZShQYXNzT3du
UHRyPEFjdGlvbj4pOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtKEVycm9yU3RyaW5n
KikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgdW5kbyhFcnJvclN0cmluZyopID0gMDsKKyAg
ICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgIH07CisKKyAgICBJbnNwZWN0
b3JIaXN0b3J5KCk7CisgICAgdmlydHVhbCB+SW5zcGVjdG9ySGlzdG9yeSgpOworCisgICAgYm9v
bCBwZXJmb3JtKFBhc3NPd25QdHI8QWN0aW9uPiwgRXJyb3JTdHJpbmcqKTsKKyAgICB2b2lkIG1h
cmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICBib29sIHVuZG8oRXJyb3JTdHJpbmcqKTsKKyAgICB2
b2lkIHJlc2V0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wKCk7CisgICAgRGVxdWU8T3du
UHRyPEFjdGlvbj4gPiBtX2hpc3Rvcnk7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9ySGlzdG9yeV9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCmluZGV4IDU3ZGY5OTJlOTkyYjc2YWIxNDU1MjBmNmNmYmVlNTUyZGUwNjlh
MWQuLmM3YzRlZGI3N2EzODk0YjJiNGJlNjJlNDgxZDU0ZTczOWVlNGEyYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTI4MCw3
ICsyODAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JTdHlsZTo6YnVp
bGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAogLy8KIC8vIFRoZSBwcm9wZXJ0eVRleHQg
KGlmIG5vdCBlbXB0eSkgaXMgY2hlY2tlZCB0byBiZSBhIHZhbGlkIHN0eWxlIGRlY2xhcmF0aW9u
IChjb250YWluaW5nIGF0IGxlYXN0IG9uZSBwcm9wZXJ0eSkuIElmIG5vdCwKIC8vIHRoZSBtZXRo
b2QgcmV0dXJucyBmYWxzZSAoZGVub3RpbmcgYW4gZXJyb3IpLgotYm9vbCBJbnNwZWN0b3JTdHls
ZTo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgdW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlUZXh0LCBib29sIG92ZXJ3cml0ZSkKK2Jvb2wgSW5z
cGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIHVu
c2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwgYm9vbCBvdmVyd3JpdGUs
IFN0cmluZyogb2xkVGV4dCkKIHsKICAgICBBU1NFUlQobV9wYXJlbnRTdHlsZVNoZWV0KTsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYm9ndXNQcm9wZXJ0eU5hbWUsICgiLXdlYmtp
dC1ib2d1ei1wcm9wZXJ0ZWUiKSk7CkBAIC0zMjgsOSArMzI4LDEwIEBAIGJvb2wgSW5zcGVjdG9y
U3R5bGU6OnNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIHVuc2lnbmVk
IGluZGV4LCBjCiAgICAgfQogCiAgICAgSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yIGVkaXRvcigm
YWxsUHJvcGVydGllcywgJm1fZGlzYWJsZWRQcm9wZXJ0aWVzLCB0ZXh0LCBuZXdMaW5lQW5kV2hp
dGVzcGFjZURlbGltaXRlcnMoKSk7Ci0gICAgaWYgKG92ZXJ3cml0ZSkKKyAgICBpZiAob3Zlcndy
aXRlKSB7CisgICAgICAgICpvbGRUZXh0ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCkucmF3VGV4
dDsKICAgICAgICAgZWRpdG9yLnJlcGxhY2VQcm9wZXJ0eShpbmRleCwgcHJvcGVydHlUZXh0KTsK
LSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIGVkaXRvci5pbnNlcnRQcm9wZXJ0eShpbmRl
eCwgcHJvcGVydHlUZXh0LCBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJh
bmdlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBhcHBseVN0eWxlVGV4dChlZGl0b3Iuc3R5bGVU
ZXh0KCkpOwpAQCAtMzg1LDcgKzM4Niw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4
dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3Ry
aW5nIHN0eWxlU2hlZXRUZXh0OwotICAgIGJvb2wgc3VjY2VzcyA9IG1fcGFyZW50U3R5bGVTaGVl
dC0+dGV4dCgmc3R5bGVTaGVldFRleHQpOworICAgIGJvb2wgc3VjY2VzcyA9IG1fcGFyZW50U3R5
bGVTaGVldC0+Z2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MjksNyArNzMwLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25z
dCBTdHJpbmcKIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25z
dCBTdHJpbmcmIHNlbGVjdG9yKQogewogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKLSAgICBi
b29sIHN1Y2Nlc3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CisgICAgYm9vbCBzdWNjZXNzID0g
Z2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTc3Nyw3ICs3NzgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKICAgICByZXN1
bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7CiAKICAgICBTdHJpbmcg
c3R5bGVTaGVldFRleHQ7Ci0gICAgYm9vbCBzdWNjZXNzID0gdGV4dCgmc3R5bGVTaGVldFRleHQp
OworICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnN0eWxlU2hlZXRUZXh0KTsKICAgICBpZiAo
c3VjY2VzcykKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCBzdHlsZVNoZWV0VGV4
dCk7CiAKQEAgLTg1Nyw3ICs4NTgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlYwogICAgIC8v
IFN0eWxlIHRleHQgY2Fubm90IGJlIHJldHJpZXZlZCB3aXRob3V0IHN0eWxlc2hlZXQsIHNvIHNl
dCBjc3NUZXh0IGhlcmUuCiAgICAgaWYgKHNvdXJjZURhdGEpIHsKICAgICAgICAgU3RyaW5nIHNo
ZWV0VGV4dDsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gdGV4dCgmc2hlZXRUZXh0KTsKKyAgICAg
ICAgYm9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc2hlZXRUZXh0KTsKICAgICAgICAgaWYgKHN1Y2Nl
c3MpIHsKICAgICAgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VE
YXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOwogICAgICAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoImNzc1RleHQiLCBzaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFy
dCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOwpAQCAtODY3LDcgKzg2OCw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9
CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wZXJ0
eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlKQorYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0
cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFN0cmluZyogb2xkVGV4dCkKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVGb3JJZChp
ZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZSkgewpAQCAtODc1LDcgKzg3Niw3IEBAIGJvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgY29uc3QgSW5zcGVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gaW5zcGVjdG9yU3R5bGUtPnNldFByb3BlcnR5VGV4dChlcnJvclN0cmluZywgcHJvcGVy
dHlJbmRleCwgdGV4dCwgb3ZlcndyaXRlKTsKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUtPnNl
dFByb3BlcnR5VGV4dChlcnJvclN0cmluZywgcHJvcGVydHlJbmRleCwgdGV4dCwgb3ZlcndyaXRl
LCBvbGRUZXh0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojp0b2dnbGVQcm9wZXJ0
eShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCwgdW5z
aWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKQpAQCAtODk2LDcgKzg5Nyw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBJbnNwZWN0CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLWJvb2wgSW5z
cGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6Z2V0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAo
IWVuc3VyZVRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI0MSw3ICsxMjQyLDcg
QEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmRpZE1vZGlmeUVsZW1l
bnRBdHRyaWJ1dGUoKQogICAgIG1fcnVsZVNvdXJjZURhdGEuY2xlYXIoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0Citib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0VGV4dChTdHJp
bmcqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNTdHlsZVRleHRWYWxpZCkgewogICAg
ICAgICBtX3N0eWxlVGV4dCA9IGVsZW1lbnRTdHlsZVRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IGYzMTk1ZTg4OWU3YzIwYmMy
YTg3Nzk0MWZkYzg3ZDU1M2JkM2JkMjAuLmQ2MjdiMWRkYWUxZDM3MjdlY2I3ZGFiYzYwMjY0ZjA3
YTJhODM3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuaApAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNEaXNhYmxlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9kaXNhYmxlZFBy
b3BlcnRpZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJp
bmcqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7
CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCB1bnNpZ25lZCBpbmRleCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5nKiBvbGRUZXh0KTsKICAg
ICBib29sIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiwgdW5zaWduZWQgaW5kZXgsIGJvb2wg
ZGlzYWJsZSk7CiAKIHByaXZhdGU6CkBAIC0xNzQsMTAgKzE3NCwxMCBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8o
KTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENT
U1N0eWxlUnVsZSopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVj
dEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICBib29sIHNldFByb3BlcnR5VGV4
dChFcnJvclN0cmluZyosIGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWduZWQgcHJvcGVydHlJ
bmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSk7CisgICAgYm9vbCBzZXRQ
cm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBJbnNwZWN0b3JDU1NJZCYsIHVuc2lnbmVk
IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFN0cmlu
Zyogb2xkUHJvcGVydHlUZXh0KTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5n
KiwgY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRp
c2FibGUpOwogCi0gICAgdmlydHVhbCBib29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
KSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjI4LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgb3JpZ2luKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwot
ICAgIHZpcnR1YWwgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3Qg
eyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQub3JkaW5hbCgpKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7
IH0KIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9DU1NTdHlsZU1vZGVsLmpzCmluZGV4IDFlYjdkMDMyZmFhZDVhNWMwMTIzYTY3NWE1NmQ4
YmUyZTk4NmQyYTEuLjdiNDg3MmU3NGExZjI0ZWY2NzA1NzkwYjFiYmQ5OTI2M2NlY2E2N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2Rl
bC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9k
ZWwuanMKQEAgLTY0Myw2ICs2NDMsOCBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90
eXBlID0gewogCiAgICAgICAgIC8vIEFuIGluZGV4IHBhc3QgYWxsIHRoZSBwcm9wZXJ0aWVzIGFk
ZHMgYSBuZXcgcHJvcGVydHkgdG8gdGhlIHN0eWxlLgogICAgICAgICBDU1NBZ2VudC5zZXRQcm9w
ZXJ0eVRleHQodGhpcy5vd25lclN0eWxlLmlkLCB0aGlzLmluZGV4LCBwcm9wZXJ0eVRleHQsIHRo
aXMuaW5kZXggPCB0aGlzLm93bmVyU3R5bGUucGFzdExhc3RTb3VyY2VQcm9wZXJ0eUluZGV4KCks
IGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBpZiAobWFqb3JDaGFuZ2UpCisgICAgICAg
ICAgICBET01BZ2VudC5tYXJrVW5kb2FibGVTdGF0ZSgpOwogICAgIH0sCiAKICAgICBzZXRWYWx1
ZTogZnVuY3Rpb24obmV3VmFsdWUsIG1ham9yQ2hhbmdlLCB1c2VyQ2FsbGJhY2spCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5k
ZXggNTI1NmJkMTA0MzkyY2QyNzdjNDYxYTQ2YjE0Mzg0MjI5MmIyNmJhNC4uY2FhZTdlODg3YzZj
ZDY0Y2NjZTY5YjgyODRiNDExZTllN2RiMTdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtMTY3LDYgKzE2NywxNiBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhp
cy51cGRhdGVCcmVhZGNydW1iKGZhbHNlKTsKIAorICAgICAgICB0aGlzLl91cGRhdGVTaWRlYmFy
cygpOworCisgICAgICAgIGlmIChzZWxlY3RlZE5vZGUpIHsKKyAgICAgICAgICAgIENvbnNvbGVB
Z2VudC5hZGRJbnNwZWN0ZWROb2RlKHNlbGVjdGVkTm9kZS5pZCk7CisgICAgICAgICAgICB0aGlz
Ll9sYXN0VmFsaWRTZWxlY3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgX3VwZGF0ZVNpZGViYXJzOiBmdW5jdGlvbigpCisgICAgewogICAgICAgICBmb3Ig
KHZhciBwYW5lIGluIHRoaXMuc2lkZWJhclBhbmVzKQogICAgICAgICAgICB0aGlzLnNpZGViYXJQ
YW5lc1twYW5lXS5uZWVkc1VwZGF0ZSA9IHRydWU7CiAKQEAgLTE3NCwxMSArMTg0LDYgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnVwZGF0
ZU1ldHJpY3MoKTsKICAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHRo
aXMudXBkYXRlRXZlbnRMaXN0ZW5lcnMoKTsKLQotICAgICAgICBpZiAoc2VsZWN0ZWROb2RlKSB7
Ci0gICAgICAgICAgICBDb25zb2xlQWdlbnQuYWRkSW5zcGVjdGVkTm9kZShzZWxlY3RlZE5vZGUu
aWQpOwotICAgICAgICAgICAgdGhpcy5fbGFzdFZhbGlkU2VsZWN0ZWROb2RlID0gc2VsZWN0ZWRO
b2RlOwotICAgICAgICB9CiAgICAgfSwKIAogICAgIF9yZXNldDogZnVuY3Rpb24oKQpAQCAtOTA3
LDcgKzkxMiw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAg
ICB7CiAgICAgICAgIC8vIENtZC9Db250cm9sICsgU2hpZnQgKyBDIHNob3VsZCBiZSBhIHNob3J0
Y3V0IHRvIGNsaWNraW5nIHRoZSBOb2RlIFNlYXJjaCBCdXR0b24uCiAgICAgICAgIC8vIFRoaXMg
c2hvcnRjdXQgbWF0Y2hlcyBGaXJlYnVnLgotICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmll
ciA9PT0gIlUrMDA0MyIpIHsgICAgIC8vIEMga2V5CisgICAgICAgIGlmIChldmVudC5rZXlJZGVu
dGlmaWVyID09PSAiVSswMDQzIikgeyAvLyBDIGtleQogICAgICAgICAgICAgaWYgKFdlYkluc3Bl
Y3Rvci5pc01hYygpKQogICAgICAgICAgICAgICAgIHZhciBpc05vZGVTZWFyY2hLZXkgPSBldmVu
dC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgJiYgZXZlbnQuc2hp
ZnRLZXk7CiAgICAgICAgICAgICBlbHNlCkBAIC05MTgsNyArOTIzLDEwIEBAIFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBldmVudC5oYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0LmV2ZW50SGFzQ3RybE9yTWV0YShldmVudCkgJiYgZXZlbnQua2V5SWRlbnRp
ZmllciA9PT0gIlUrMDA1QSIpICAvLyBaIGtleQorICAgICAgICAgICAgRE9NQWdlbnQudW5kbyh0
aGlzLl91cGRhdGVTaWRlYmFycy5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgaGFuZGxlQ29w
eUV2ZW50OiBmdW5jdGlvbihldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDZiZWM2MTA4M2U5MmE5
MzI4MTRiMDg1ZDBjNzU4M2Y5YzQwZTBjYWIuLmY0M2FhNTg5YzY4ZDY1NzQxZGRmMWIyZmU5MWI4
MjAzZDI5ZWEwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dmFyIGluaGVyaXRlZCA9IHRoaXMuaXNQcm9wZXJ0eUluaGVyaXRlZChwcm9wZXJ0eS5uYW1lKTsK
ICAgICAgICAgICAgIHZhciBvdmVybG9hZGVkID0gdGhpcy5pc1Byb3BlcnR5T3ZlcmxvYWRlZChw
cm9wZXJ0eS5uYW1lLCBpc1Nob3J0aGFuZCk7CiAKLSAgICAgICAgICAgIHZhciBpdGVtID0gbmV3
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhpcy5fcGFyZW50UGFuZSwg
dGhpcy5zdHlsZVJ1bGUsIHN0eWxlLCBwcm9wZXJ0eSwgaXNTaG9ydGhhbmQsIGluaGVyaXRlZCwg
b3ZlcmxvYWRlZCk7CisgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMsIHRoaXMuX3BhcmVudFBhbmUsIHRoaXMuc3R5bGVS
dWxlLCBzdHlsZSwgcHJvcGVydHksIGlzU2hvcnRoYW5kLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQp
OwogICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaXRl
bSk7CiAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHByb3Bl
cnR5OwogICAgICAgICB9CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQ
cm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgc3R5bGUg
PSB0aGlzLnN0eWxlUnVsZS5zdHlsZTsKICAgICAgICAgdmFyIHByb3BlcnR5ID0gc3R5bGUubmV3
QmxhbmtQcm9wZXJ0eSgpOwotICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMuX3BhcmVudFBhbmUsIHRoaXMuc3R5bGVSdWxlLCBz
dHlsZSwgcHJvcGVydHksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICAgICAgICB2YXIgaXRlbSA9
IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMsIHRoaXMuX3Bh
cmVudFBhbmUsIHRoaXMuc3R5bGVSdWxlLCBzdHlsZSwgcHJvcGVydHksIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOwogICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZChp
dGVtKTsKICAgICAgICAgaXRlbS5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQgPSAiIjsKICAg
ICAgICAgaXRlbS5fbmV3UHJvcGVydHkgPSB0cnVlOwpAQCAtMTI5OCw3ICsxMjk4LDcgQEAgV2Vi
SW5zcGVjdG9yLkNvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pcXVlUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdW5pcXVlUHJvcGVydGllc1tpXTsKICAgICAg
ICAgICAgIHZhciBpbmhlcml0ZWQgPSB0aGlzLl9pc1Byb3BlcnR5SW5oZXJpdGVkKHByb3BlcnR5
Lm5hbWUpOwotICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJv
cGVydHlUcmVlRWxlbWVudChudWxsLCB0aGlzLnN0eWxlUnVsZSwgc3R5bGUsIHByb3BlcnR5LCBm
YWxzZSwgaW5oZXJpdGVkLCBmYWxzZSk7CisgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMsIG51bGwsIHRoaXMuc3R5bGVS
dWxlLCBzdHlsZSwgcHJvcGVydHksIGZhbHNlLCBpbmhlcml0ZWQsIGZhbHNlKTsKICAgICAgICAg
ICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAg
ICAgICAgdGhpcy5fcHJvcGVydHlUcmVlRWxlbWVudHNbcHJvcGVydHkubmFtZV0gPSBpdGVtOwog
ICAgICAgICB9CkBAIC0xNDI0LDggKzE0MjQsOSBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVBy
b3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU3R5bAog
ICogQGV4dGVuZHMge1RyZWVFbGVtZW50fQogICogQHBhcmFtIHs/V2ViSW5zcGVjdG9yLlN0eWxl
c1NpZGViYXJQYW5lfSBwYXJlbnRQYW5lCiAgKi8KLVdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwYXJlbnRQYW5lLCBzdHlsZVJ1bGUsIHN0eWxlLCBwcm9w
ZXJ0eSwgc2hvcnRoYW5kLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpCitXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc2VjdGlvbiwgcGFyZW50UGFuZSwgc3R5
bGVSdWxlLCBzdHlsZSwgcHJvcGVydHksIHNob3J0aGFuZCwgaW5oZXJpdGVkLCBvdmVybG9hZGVk
KQogeworICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247CiAgICAgdGhpcy5fcGFyZW50UGFuZSA9
IHBhcmVudFBhbmU7CiAgICAgdGhpcy5fc3R5bGVSdWxlID0gc3R5bGVSdWxlOwogICAgIHRoaXMu
c3R5bGUgPSBzdHlsZTsKQEAgLTE4MTksNyArMTgyMCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB2YXIgbGl2ZVByb3BlcnR5ID0gdGhpcy5zdHlsZS5nZXRMaXZlUHJvcGVydHkobmFtZSk7
Ci0gICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50KHRoaXMuX3BhcmVudFBhbmUsIHRoaXMuX3N0eWxlUnVsZSwgdGhpcy5zdHlsZSwg
bGl2ZVByb3BlcnR5LCBmYWxzZSwgaW5oZXJpdGVkLCBvdmVybG9hZGVkKTsKKyAgICAgICAgICAg
IHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhp
cywgdGhpcy5fcGFyZW50UGFuZSwgdGhpcy5fc3R5bGVSdWxlLCB0aGlzLnN0eWxlLCBsaXZlUHJv
cGVydHksIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpOwogICAgICAgICAgICAgdGhpcy5h
cHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgfQogICAgIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2ViYzc3OTMxZWRi
MzhlNWJlYzg2MTEyMjQxNTE5YjQyNDc3YmE0ZS4uZTUyYjVmOGMyNzMzMDdjNDZhYjc2NjIyYThi
NDY2MWQ0NzI0OTA5YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTA3ICBQYXZlbCBG
ZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBh
ZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciB1bmRvLWluZyBET00gZWRpdHMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZWxlbWVudHMtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfRWxlbWVudFRlc3QuSW5zcGVj
dG9yVGVzdC5yYW5nZVRleHQpOgorICAgICAgICAoaW5pdGlhbGl6ZV9FbGVtZW50VGVzdC5JbnNw
ZWN0b3JUZXN0LmdlbmVyYXRlVW5kb1Rlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9lbGVtZW50
cy91bmRvLWRvbS1lZGl0cy0yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVj
dG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLTIuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9zdHlsZXMvdW5kby1hZGQtcHJvcGVydHktZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzL3VuZG8tYWRkLXByb3BlcnR5Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvdW5kby1jaGFuZ2UtcHJvcGVydHkt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzL3VuZG8tY2hh
bmdlLXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvdW5k
by1wcm9wZXJ0eS10b2dnbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc3R5bGVzL3VuZG8tcHJvcGVydHktdG9nZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTA3
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCBHVEsgc3ZnIHJlYmFzZWxpbmUgYWZ0ZXIgcjEwNjkxOC4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3QuanMgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzCmluZGV4IDJkYzk5N2M1
ZTA0ZjRkZmFlNjU0YzhhNWRjZDQ1M2E2ODJlYzA0ZjQuLmU5YWE2NjBiMmVmOTNiODIzYzYwMWFk
ZjZlMWRkN2JhZjRiMzMzZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2VsZW1lbnRzLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZWxlbWVudHMtdGVzdC5qcwpAQCAtMzgxLDYgKzM4MSwzNyBAQCBJbnNwZWN0b3JUZXN0
LnJhbmdlVGV4dCA9IGZ1bmN0aW9uKHJhbmdlKQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiAiW3VuZGVmaW5lZC11bmRlZmluZWRdIjsKICAgICByZXR1cm4gIlsiICsgcmFuZ2Uuc3Rh
cnQgKyAiLSIgKyByYW5nZS5lbmQgKyAiXSI7Ci19OworfQorCitJbnNwZWN0b3JUZXN0LmdlbmVy
YXRlVW5kb1Rlc3QgPSBmdW5jdGlvbih0ZXN0Qm9keSkKK3sKKyAgICBmdW5jdGlvbiByZXN1bHQo
bmV4dCkKKyAgICB7CisgICAgICAgIHZhciB0ZXN0Tm9kZSA9IEluc3BlY3RvclRlc3QuZXhwYW5k
ZWROb2RlV2l0aElkKC9mdW5jdGlvblxzKFteKF0qKS8uZXhlYyh0ZXN0Qm9keSlbMV0pOworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiSW5pdGlhbDoiKTsKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5kdW1wRWxlbWVudHNUcmVlKHRlc3ROb2RlKTsKKworICAgICAgICB0ZXN0Qm9keShz
dGVwMSk7CisKKyAgICAgICAgZnVuY3Rpb24gc3RlcDEoKQorICAgICAgICB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiUG9zdC1hY3Rpb246Iik7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmR1bXBFbGVtZW50c1RyZWUodGVzdE5vZGUpOworICAgICAgICAgICAgRE9N
QWdlbnQudW5kbyhzdGVwMik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdGVwMigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJQb3N0LXVu
ZG8gKGluaXRpYWwpOiIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wRWxlbWVudHNU
cmVlKHRlc3ROb2RlKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXN1bHQudG9TdHJpbmcgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGVz
dEJvZHkudG9TdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAogfTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91bmRvLWRvbS1lZGl0cy0y
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91bmRvLWRvbS1l
ZGl0cy0yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDFhZWQ2OTRiYTQ5ZGU4OGI4ZTE4MGEz
ZDgwYWIwYmYyNjhmYTljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLTItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDcgQEAK
K1Rlc3RzIHRoYXQgRE9NIG1vZGlmaWNhdGlvbnMgZG9uZSBpbiB0aGUgRWxlbWVudHMgcGFuZWwg
YXJlIHVuZG9hYmxlIChQYXJ0IDIpLgorCisKK1J1bm5pbmc6IHRlc3RTZXRVcAorCitSdW5uaW5n
OiB0ZXN0U2V0QXR0cmlidXRlCitJbml0aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRl
Ij4KKyAgICAgIDxkaXYgZm9vPSJhdHRyaWJ1dGUgdmFsdWUiIGlkPSJub2RlLXRvLXNldC1hdHRy
aWJ1dGUiPjwvZGl2PgorICA8L2Rpdj4KK1Bvc3QtYWN0aW9uOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0
QXR0cmlidXRlIj4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0LWF0dHJpYnV0ZSIgYmFyPSJl
ZGl0ZWQgYXR0cmlidXRlIj48L2Rpdj4KKyAgPC9kaXY+CitQb3N0LXVuZG8gKGluaXRpYWwpOgor
LSA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRlIj4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0
LWF0dHJpYnV0ZSIgZm9vPSJhdHRyaWJ1dGUgdmFsdWUiPjwvZGl2PgorICA8L2Rpdj4KKworUnVu
bmluZzogdGVzdFJlbW92ZUF0dHJpYnV0ZQorSW5pdGlhbDoKKy0gPGRpdiBpZD0idGVzdFJlbW92
ZUF0dHJpYnV0ZSI+CisgICAgICA8ZGl2IGZvbz0iYXR0cmlidXRlIHZhbHVlIiBpZD0ibm9kZS10
by1yZW1vdmUtYXR0cmlidXRlIj48L2Rpdj4KKyAgPC9kaXY+CitQb3N0LWFjdGlvbjoKKy0gPGRp
diBpZD0idGVzdFJlbW92ZUF0dHJpYnV0ZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXJlbW92
ZS1hdHRyaWJ1dGUiPjwvZGl2PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxk
aXYgaWQ9InRlc3RSZW1vdmVBdHRyaWJ1dGUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1yZW1v
dmUtYXR0cmlidXRlIiBmb289ImF0dHJpYnV0ZSB2YWx1ZSI+PC9kaXY+CisgIDwvZGl2PgorCitS
dW5uaW5nOiB0ZXN0QWRkQXR0cmlidXRlCitJbml0aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0QWRkQXR0
cmlidXRlIj4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tYWRkLWF0dHJpYnV0ZSI+PC9kaXY+Cisg
IDwvZGl2PgorUG9zdC1hY3Rpb246CistIDxkaXYgaWQ9InRlc3RBZGRBdHRyaWJ1dGUiPgorICAg
ICAgPGRpdiBpZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIiBuZXdhdHRyPSJuZXctdmFsdWUiPjwv
ZGl2PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRlc3RBZGRB
dHRyaWJ1dGUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIj48L2Rpdj4K
KyAgPC9kaXY+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy91
bmRvLWRvbS1lZGl0cy0yLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMvdW5k
by1kb20tZWRpdHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNzg2YzFiMzM4MDg4NmZkOWQ5ZWE1Yzk3
YjI5NDg0ZjI5MDMxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZWxlbWVudHMvdW5kby1kb20tZWRpdHMtMi5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9y
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2VsZW1lbnRzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVz
dCgpCit7CisgICAgdmFyIHRlc3RTdWl0ZSA9IFtdOworCisgICAgZnVuY3Rpb24gdGVzdFNldFVw
KG5leHQpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGFuZEVsZW1lbnRzVHJlZShu
ZXh0KTsKKyAgICB9CisgICAgdGVzdFN1aXRlLnB1c2godGVzdFNldFVwKTsKKworCisgICAgZnVu
Y3Rpb24gdGVzdFNldEF0dHJpYnV0ZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBub2Rl
ID0gSW5zcGVjdG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQoIm5vZGUtdG8tc2V0LWF0dHJpYnV0
ZSIpOyAKKyAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImZvbyIsICJiYXI9XCJlZGl0ZWQgYXR0
cmlidXRlXCIiLCBjYWxsYmFjayk7CisgICAgfQorICAgIHRlc3RTdWl0ZS5wdXNoKEluc3BlY3Rv
clRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0U2V0QXR0cmlidXRlKSk7CisKKworICAgIGZ1bmN0
aW9uIHRlc3RSZW1vdmVBdHRyaWJ1dGUoY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgbm9k
ZSA9IEluc3BlY3RvclRlc3QuZXhwYW5kZWROb2RlV2l0aElkKCJub2RlLXRvLXJlbW92ZS1hdHRy
aWJ1dGUiKTsgCisgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCJmb28iLCBjYWxsYmFjayk7
CisgICAgfQorICAgIHRlc3RTdWl0ZS5wdXNoKEluc3BlY3RvclRlc3QuZ2VuZXJhdGVVbmRvVGVz
dCh0ZXN0UmVtb3ZlQXR0cmlidXRlKSk7CisKKworICAgIGZ1bmN0aW9uIHRlc3RBZGRBdHRyaWJ1
dGUoY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgbm9kZSA9IEluc3BlY3RvclRlc3QuZXhw
YW5kZWROb2RlV2l0aElkKCJub2RlLXRvLWFkZC1hdHRyaWJ1dGUiKTsgCisgICAgICAgIG5vZGUu
c2V0QXR0cmlidXRlKCIiLCAibmV3YXR0cj1cIm5ldy12YWx1ZVwiIiwgY2FsbGJhY2spOworICAg
IH0KKyAgICB0ZXN0U3VpdGUucHVzaChJbnNwZWN0b3JUZXN0LmdlbmVyYXRlVW5kb1Rlc3QodGVz
dEFkZEF0dHJpYnV0ZSkpOworCisKKyAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZSh0ZXN0
U3VpdGUpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0
KCkiPgorPHA+CitUZXN0cyB0aGF0IERPTSBtb2RpZmljYXRpb25zIGRvbmUgaW4gdGhlIEVsZW1l
bnRzIHBhbmVsIGFyZSB1bmRvYWJsZSAoUGFydCAyKS4KKzwvcD4KKworPGRpdiBzdHlsZT0iZGlz
cGxheTpub25lIj4KKyAgICA8ZGl2IGlkPSJ0ZXN0U2V0QXR0cmlidXRlIj4KKyAgICAgICAgPGRp
diBmb289ImF0dHJpYnV0ZSB2YWx1ZSIgaWQ9Im5vZGUtdG8tc2V0LWF0dHJpYnV0ZSI+PC9kaXY+
CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0UmVtb3ZlQXR0cmlidXRlIj4KKyAgICAg
ICAgPGRpdiBmb289ImF0dHJpYnV0ZSB2YWx1ZSIgaWQ9Im5vZGUtdG8tcmVtb3ZlLWF0dHJpYnV0
ZSI+PC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0QWRkQXR0cmlidXRlIj4K
KyAgICAgICAgPGRpdiBpZD0ibm9kZS10by1hZGQtYXR0cmlidXRlIj48L2Rpdj4KKyAgICA8L2Rp
dj4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZWxlbWVudHMvdW5kby1kb20tZWRpdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YTYxYjczOTIyNjk5MDUxNGUwNzgwNmRhYTE5NDgwZjVkN2RkNGY1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDY2IEBACitUZXN0cyB0aGF0IERPTSBtb2RpZmljYXRpb25z
IGRvbmUgaW4gdGhlIEVsZW1lbnRzIHBhbmVsIGFyZSB1bmRvYWJsZS4KKworCitSdW5uaW5nOiB0
ZXN0U2V0VXAKKworUnVubmluZzogdGVzdFJlbW92ZQorSW5pdGlhbDoKKy0gPGRpdiBpZD0idGVz
dFJlbW92ZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXJlbW92ZSI+PC9kaXY+CisgIDwvZGl2
PgorUG9zdC1hY3Rpb246CistIDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICA8L2Rpdj4KK1Bvc3Qt
dW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICAgICAgPGRpdiBpZD0i
bm9kZS10by1yZW1vdmUiPjwvZGl2PgorICA8L2Rpdj4KKworUnVubmluZzogdGVzdFNldE5vZGVO
YW1lCitJbml0aWFsOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0Tm9kZU5hbWUiPgorICAgICAgPGRpdiBp
ZD0ibm9kZS10by1zZXQtbmFtZSI+PC9kaXY+CisgIDwvZGl2PgorUG9zdC1hY3Rpb246CistIDxk
aXYgaWQ9InRlc3RTZXROb2RlTmFtZSI+CisgICAgICA8c3BhbiBpZD0ibm9kZS10by1zZXQtbmFt
ZSI+PC9zcGFuPgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6CistIDxkaXYgaWQ9InRl
c3RTZXROb2RlTmFtZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC1uYW1lIj48L2Rpdj4K
KyAgPC9kaXY+CisKK1J1bm5pbmc6IHRlc3RTZXROb2RlVmFsdWUKK0luaXRpYWw6CistIDxkaXYg
aWQ9InRlc3RTZXROb2RlVmFsdWUiPgorICAgICAgPGRpdiBpZD0ibm9kZS10by1zZXQtdmFsdWUi
PlRleHQ8L2Rpdj4KKyAgPC9kaXY+CitQb3N0LWFjdGlvbjoKKy0gPGRpdiBpZD0idGVzdFNldE5v
ZGVWYWx1ZSI+CisgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC12YWx1ZSI+TmV3IFRleHQ8L2Rp
dj4KKyAgPC9kaXY+CitQb3N0LXVuZG8gKGluaXRpYWwpOgorLSA8ZGl2IGlkPSJ0ZXN0U2V0Tm9k
ZVZhbHVlIj4KKyAgICAgIDxkaXYgaWQ9Im5vZGUtdG8tc2V0LXZhbHVlIj5UZXh0PC9kaXY+Cisg
IDwvZGl2PgorCitSdW5uaW5nOiB0ZXN0RWRpdEFzSFRNTAorSW5pdGlhbDoKKy0gPGRpdiBpZD0i
dGVzdEVkaXRBc0hUTUwiPgorICAgIC0gPGRpdiBpZD0ibm9kZS10by1lZGl0LWFzLWh0bWwiPgor
ICAgICAgICAgIDxzcGFuIGlkPSJzcGFuIj5UZXh0PC9zcGFuPgorICAgICAgPC9kaXY+CisgIDwv
ZGl2PgorUG9zdC1hY3Rpb246CistIDxkaXYgaWQ9InRlc3RFZGl0QXNIVE1MIj4KKyAgICAtIDxk
aXYgaWQ9Im5vZGUtdG8tZWRpdC1hcy1odG1sIj4KKyAgICAgICAgICA8ZGl2IGlkPSJzcGFuMiI+
VGV4dDI8L2Rpdj4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KK1Bvc3QtdW5kbyAoaW5pdGlhbCk6
CistIDxkaXYgaWQ9InRlc3RFZGl0QXNIVE1MIj4KKyAgICAtIDxkaXYgaWQ9Im5vZGUtdG8tZWRp
dC1hcy1odG1sIj4KKyAgICAgICAgICA8c3BhbiBpZD0ic3BhbiI+VGV4dDwvc3Bhbj4KKyAgICAg
IDwvZGl2PgorICA8L2Rpdj4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzL3VuZG8tZG9tLWVkaXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVu
dHMvdW5kby1kb20tZWRpdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmQ5MmRlNjA1NzQ1ODQxNTEzZmYz
NTU4NWVkMjAzYjZiNTNlNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2VsZW1lbnRzL3VuZG8tZG9tLWVkaXRzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0
b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZWxlbWVudHMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICB2YXIgdGVzdFN1aXRlID0gW107CisKKyAgICBmdW5jdGlvbiB0ZXN0U2V0
VXAobmV4dCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuZXhwYW5kRWxlbWVudHNUcmVl
KG5leHQpOworICAgIH0KKyAgICB0ZXN0U3VpdGUucHVzaCh0ZXN0U2V0VXApOworCisKKyAgICBm
dW5jdGlvbiB0ZXN0UmVtb3ZlKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUgPSBJ
bnNwZWN0b3JUZXN0LmV4cGFuZGVkTm9kZVdpdGhJZCgibm9kZS10by1yZW1vdmUiKTsgCisgICAg
ICAgIG5vZGUucmVtb3ZlTm9kZShjYWxsYmFjayk7CisgICAgfQorICAgIHRlc3RTdWl0ZS5wdXNo
KEluc3BlY3RvclRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0UmVtb3ZlKSk7CisKKworICAgIGZ1
bmN0aW9uIHRlc3RTZXROb2RlTmFtZShjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBub2Rl
ID0gSW5zcGVjdG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQoIm5vZGUtdG8tc2V0LW5hbWUiKTsg
CisgICAgICAgIG5vZGUuc2V0Tm9kZU5hbWUoInNwYW4iLCBjYWxsYmFjayk7CisgICAgfQorICAg
IHRlc3RTdWl0ZS5wdXNoKEluc3BlY3RvclRlc3QuZ2VuZXJhdGVVbmRvVGVzdCh0ZXN0U2V0Tm9k
ZU5hbWUpKTsKKworCisgICAgZnVuY3Rpb24gdGVzdFNldE5vZGVWYWx1ZShjYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIHZhciBub2RlID0gSW5zcGVjdG9yVGVzdC5leHBhbmRlZE5vZGVXaXRoSWQo
Im5vZGUtdG8tc2V0LXZhbHVlIik7IAorICAgICAgICBub2RlLmZpcnN0Q2hpbGQuc2V0Tm9kZVZh
bHVlKCJOZXcgVGV4dCIsIGNhbGxiYWNrKTsKKyAgICB9CisgICAgdGVzdFN1aXRlLnB1c2goSW5z
cGVjdG9yVGVzdC5nZW5lcmF0ZVVuZG9UZXN0KHRlc3RTZXROb2RlVmFsdWUpKTsKKworICAgIGZ1
bmN0aW9uIHRlc3RFZGl0QXNIVE1MKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGUg
PSBJbnNwZWN0b3JUZXN0LmV4cGFuZGVkTm9kZVdpdGhJZCgibm9kZS10by1lZGl0LWFzLWh0bWwi
KTsgCisgICAgICAgIG5vZGUuc2V0T3V0ZXJIVE1MKCI8ZGl2IGlkPVwibm9kZS10by1lZGl0LWFz
LWh0bWxcIj48ZGl2IGlkPVwic3BhbjJcIj5UZXh0MjwvZGl2PjwvZGl2PiIsIGNhbGxiYWNrKTsK
KyAgICB9CisgICAgdGVzdFN1aXRlLnB1c2goSW5zcGVjdG9yVGVzdC5nZW5lcmF0ZVVuZG9UZXN0
KHRlc3RFZGl0QXNIVE1MKSk7CisKKworICAgIEluc3BlY3RvclRlc3QucnVuVGVzdFN1aXRlKHRl
c3RTdWl0ZSk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgRE9NIG1vZGlmaWNhdGlvbnMgZG9uZSBpbiB0aGUgRWxl
bWVudHMgcGFuZWwgYXJlIHVuZG9hYmxlLgorPC9wPgorCis8ZGl2IHN0eWxlPSJkaXNwbGF5Om5v
bmUiPgorICAgIDxkaXYgaWQ9InRlc3RSZW1vdmUiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRv
LXJlbW92ZSI+PC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0U2V0Tm9kZU5h
bWUiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRvLXNldC1uYW1lIj48L2Rpdj4KKyAgICA8L2Rp
dj4KKworICAgIDxkaXYgaWQ9InRlc3RTZXROb2RlVmFsdWUiPgorICAgICAgICA8ZGl2IGlkPSJu
b2RlLXRvLXNldC12YWx1ZSI+VGV4dDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGRpdiBpZD0i
dGVzdEVkaXRBc0hUTUwiPgorICAgICAgICA8ZGl2IGlkPSJub2RlLXRvLWVkaXQtYXMtaHRtbCI+
PHNwYW4gaWQ9InNwYW4iPlRleHQ8L3NwYW4+PC9kaXY+CisgICAgPC9kaXY+Cis8L2Rpdj4KKwor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxl
cy91bmRvLWFkZC1wcm9wZXJ0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzL3VuZG8tYWRkLXByb3BlcnR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmVlZTlh
MzFiOTUxZWEzZWM4ZTY0YjI3N2IwZTc5OTc0YWUwODBiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFkZC1wcm9wZXJ0eS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw0NiBAQAorVGVzdHMgdGhhdCBhZGRpbmcgYSBwcm9wZXJ0eSBpcyB1bmRvbmUg
cHJvcGVybHkuCisKK0luaXRpYWwgdmFsdWUKK1tleHBhbmRlZF0gCitlbGVtZW50LnN0eWxlICB7
ICgpCisKKz09PT09PT09IE1hdGNoZWQgQ1NTIFJ1bGVzID09PT09PT09CitbZXhwYW5kZWRdIAor
I2NvbnRhaW5lciAgeyAodW5kby1hZGQtcHJvcGVydHkuaHRtbDo3KQorZm9udC13ZWlnaHQ6IGJv
bGQ7CisKK1tleHBhbmRlZF0gCitkaXYgIHsgKHVzZXIgYWdlbnQgc3R5bGVzaGVldCkKK2Rpc3Bs
YXk6IGJsb2NrOworCisKK0FmdGVyIGFkZGluZyBwcm9wZXJ0eQorW2V4cGFuZGVkXSAKK2VsZW1l
bnQuc3R5bGUgIHsgKCkKKworPT09PT09PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tl
eHBhbmRlZF0gCisjY29udGFpbmVyICB7ICh1bmRvLWFkZC1wcm9wZXJ0eS5odG1sOjcpCitmb250
LXdlaWdodDogYm9sZDsKK21hcmdpbi1sZWZ0OiAxcHg7CisKK1tleHBhbmRlZF0gCitkaXYgIHsg
KHVzZXIgYWdlbnQgc3R5bGVzaGVldCkKK2Rpc3BsYXk6IGJsb2NrOworCisKK0FmdGVyIHVuZG8K
K1tleHBhbmRlZF0gCitlbGVtZW50LnN0eWxlICB7ICgpCisKKz09PT09PT09IE1hdGNoZWQgQ1NT
IFJ1bGVzID09PT09PT09CitbZXhwYW5kZWRdIAorI2NvbnRhaW5lciAgeyAodW5kby1hZGQtcHJv
cGVydHkuaHRtbDo3KQorZm9udC13ZWlnaHQ6IGJvbGQ7CisKK1tleHBhbmRlZF0gCitkaXYgIHsg
KHVzZXIgYWdlbnQgc3R5bGVzaGVldCkKK2Rpc3BsYXk6IGJsb2NrOworCisKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFkZC1wcm9wZXJ0eS5odG1sIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFkZC1wcm9wZXJ0eS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY5YmViNTk3YmJlNGFiZWIxNTMxZDY3MjMxNjg5OWE1MGU1ZjVkNzkKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3VuZG8tYWRkLXByb3BlcnR5
Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdC5qcyI+PC9z
Y3JpcHQ+CisKKzxzdHlsZT4KKyNjb250YWluZXIgeworICBmb250LXdlaWdodDogYm9sZAorfQor
PC9zdHlsZT4KKworPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgSW5zcGVjdG9y
VGVzdC5zZWxlY3ROb2RlQW5kV2FpdEZvclN0eWxlcygiY29udGFpbmVyIiwgc3RlcDEpOworCisg
ICAgZnVuY3Rpb24gc3RlcDEoKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIkluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wU2VsZWN0ZWRF
bGVtZW50U3R5bGVzKHRydWUpOworCisgICAgICAgIHZhciB0cmVlSXRlbSA9IEluc3BlY3RvclRl
c3QuZ2V0TWF0Y2hlZFN0eWxlUHJvcGVydHlUcmVlSXRlbSgiZm9udC13ZWlnaHQiKTsKKyAgICAg
ICAgdmFyIHRyZWVFbGVtZW50ID0gdHJlZUl0ZW0uc2VjdGlvbi5hZGROZXdCbGFua1Byb3BlcnR5
KCk7CisgICAgICAgIHRyZWVFbGVtZW50LnN0YXJ0RWRpdGluZygpOworICAgICAgICB0cmVlRWxl
bWVudC5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9ICJtYXJnaW4tbGVmdCI7CisgICAgICAgIHRy
ZWVFbGVtZW50Lm5hbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoSW5zcGVjdG9yVGVzdC5jcmVhdGVL
ZXlFdmVudCgiRW50ZXIiKSk7CisgICAgICAgIHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudC50ZXh0
Q29udGVudCA9ICIxcHgiOworICAgICAgICB0cmVlRWxlbWVudC5uYW1lRWxlbWVudC5kaXNwYXRj
aEV2ZW50KEluc3BlY3RvclRlc3QuY3JlYXRlS2V5RXZlbnQoIkVudGVyIikpOworICAgICAgICBJ
bnNwZWN0b3JUZXN0LnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoc3RlcDIpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHN0ZXAyKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJBZnRlciBhZGRpbmcgcHJvcGVydHkiKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1w
U2VsZWN0ZWRFbGVtZW50U3R5bGVzKHRydWUpOworICAgICAgICBET01BZ2VudC51bmRvKHN0ZXAz
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwMygpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JUZXN0LndhaXRGb3JTdHlsZXMoImNvbnRhaW5lciIsIHN0ZXA0KTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5lbGVtZW50cy5fdXBkYXRlU2lkZWJhcnMoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzdGVwNCgpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
QWZ0ZXIgdW5kbyIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmR1bXBTZWxlY3RlZEVsZW1lbnRT
dHlsZXModHJ1ZSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAg
fQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxw
PgorVGVzdHMgdGhhdCBhZGRpbmcgYSBwcm9wZXJ0eSBpcyB1bmRvbmUgcHJvcGVybHkuCis8L3A+
CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWNoYW5nZS1wcm9wZXJ0
eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3VuZG8tY2hhbmdl
LXByb3BlcnR5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWRjNDg1OGQxMjU2ZDNhNzczNDlj
MGYzYjFmNTI5YzViNjJjNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy91bmRvLWNoYW5nZS1wcm9wZXJ0eS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0
NSBAQAorVGVzdHMgdGhhdCBjaGFuZ2luZyBhIHByb3BlcnR5IGlzIHVuZG9uZSBwcm9wZXJseS4K
KworSW5pdGlhbCB2YWx1ZQorW2V4cGFuZGVkXSAKK2VsZW1lbnQuc3R5bGUgIHsgKCkKKworPT09
PT09PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tleHBhbmRlZF0gCisjY29udGFpbmVy
ICB7ICh1bmRvLWNoYW5nZS1wcm9wZXJ0eS5odG1sOjcpCitmb250LXdlaWdodDogYm9sZDsKKwor
W2V4cGFuZGVkXSAKK2RpdiAgeyAodXNlciBhZ2VudCBzdHlsZXNoZWV0KQorZGlzcGxheTogYmxv
Y2s7CisKKworQWZ0ZXIgY2hhbmdpbmcgcHJvcGVydHkKK1tleHBhbmRlZF0gCitlbGVtZW50LnN0
eWxlICB7ICgpCisKKz09PT09PT09IE1hdGNoZWQgQ1NTIFJ1bGVzID09PT09PT09CitbZXhwYW5k
ZWRdIAorI2NvbnRhaW5lciAgeyAodW5kby1jaGFuZ2UtcHJvcGVydHkuaHRtbDo3KQorZm9udC13
ZWlnaHQ6IG5vcm1hbDsKKworW2V4cGFuZGVkXSAKK2RpdiAgeyAodXNlciBhZ2VudCBzdHlsZXNo
ZWV0KQorZGlzcGxheTogYmxvY2s7CisKKworQWZ0ZXIgdW5kbworW2V4cGFuZGVkXSAKK2VsZW1l
bnQuc3R5bGUgIHsgKCkKKworPT09PT09PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tl
eHBhbmRlZF0gCisjY29udGFpbmVyICB7ICh1bmRvLWNoYW5nZS1wcm9wZXJ0eS5odG1sOjcpCitm
b250LXdlaWdodDogYm9sZDsKKworW2V4cGFuZGVkXSAKK2RpdiAgeyAodXNlciBhZ2VudCBzdHls
ZXNoZWV0KQorZGlzcGxheTogYmxvY2s7CisKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzL3VuZG8tY2hhbmdlLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzL3VuZG8tY2hhbmdlLXByb3BlcnR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM4
MjcyZmRiOGExZTAzYjZkMTAyMDViOWIwNWJjOWViMjBjMzg1MgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvdW5kby1jaGFuZ2UtcHJvcGVydHkuaHRtbApA
QCAtMCwwICsxLDYwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzIj48L3NjcmlwdD4K
KworPHN0eWxlPgorI2NvbnRhaW5lciB7CisgIGZvbnQtd2VpZ2h0OiBib2xkCit9Cis8L3N0eWxl
PgorCis8c2NyaXB0PgorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LnNl
bGVjdE5vZGVBbmRXYWl0Rm9yU3R5bGVzKCJjb250YWluZXIiLCBzdGVwMSk7CisKKyAgICBmdW5j
dGlvbiBzdGVwMSgpCisgICAgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiSW5p
dGlhbCB2YWx1ZSIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmR1bXBTZWxlY3RlZEVsZW1lbnRT
dHlsZXModHJ1ZSk7CisKKyAgICAgICAgdmFyIHRyZWVJdGVtID0gSW5zcGVjdG9yVGVzdC5nZXRN
YXRjaGVkU3R5bGVQcm9wZXJ0eVRyZWVJdGVtKCJmb250LXdlaWdodCIpOworICAgICAgICB0cmVl
SXRlbS5hcHBseVN0eWxlVGV4dCgiZm9udC13ZWlnaHQ6IG5vcm1hbCIsIHRydWUsIGZhbHNlKTsK
KyAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0Rm9yU3R5bGVzKCJjb250YWluZXIiLCBzdGVwMik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDIoKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9y
VGVzdC5hZGRSZXN1bHQoIkFmdGVyIGNoYW5naW5nIHByb3BlcnR5Iik7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuZHVtcFNlbGVjdGVkRWxlbWVudFN0eWxlcyh0cnVlKTsKKyAgICAgICAgRE9NQWdl
bnQudW5kbyhzdGVwMyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDMoKQorICAgIHsKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC53YWl0Rm9yU3R5bGVzKCJjb250YWluZXIiLCBzdGVwNCk7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuX3VwZGF0ZVNpZGViYXJzKCk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDQoKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRSZXN1bHQoIkFmdGVyIHVuZG8iKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wU2Vs
ZWN0ZWRFbGVtZW50U3R5bGVzKHRydWUpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRl
VGVzdCgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgY2hhbmdpbmcgYSBwcm9wZXJ0eSBpcyB1bmRvbmUg
cHJvcGVybHkuCis8L3A+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciI+Cis8L2Rpdj4KKworPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRv
LXByb3BlcnR5LXRvZ2dsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzL3VuZG8tcHJvcGVydHktdG9nZ2xlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzUxOGQ1
Y2I1ZDY0MDZkYTExZWI3NzMxYWM1NjJmZTcyOTljODA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLXByb3BlcnR5LXRvZ2dsZS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw5IEBACitUZXN0cyB0aGF0IGRpc2FibGluZyBzdHlsZSBpcyB1bmRvbmUg
cHJvcGVybHkuCisKK0JlZm9yZSBkaXNhYmxlCitmb250LXdlaWdodDogYm9sZDsKK0FmdGVyIGRp
c2FibGUKKy8tLSBvdmVybG9hZGVkIC0tLyAvLS0gZGlzYWJsZWQgLS0vIGZvbnQtd2VpZ2h0OiBi
b2xkOworQWZ0ZXIgdW5kbworZm9udC13ZWlnaHQ6IGJvbGQ7CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvdW5kby1wcm9wZXJ0eS10b2dnbGUuaHRtbCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvdW5kby1wcm9wZXJ0eS10b2dnbGUuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jYTJjZjAzNGVkNzlmNjI3MWQxMzhjMjEzYTA5MjBkYzkyZjk2OTQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLXByb3BlcnR5LXRvZ2ds
ZS5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgSW5zcGVjdG9yVGVz
dC5zZWxlY3ROb2RlQW5kV2FpdEZvclN0eWxlcygiY29udGFpbmVyIiwgc3RlcDEpOworCisgICAg
ZnVuY3Rpb24gc3RlcDEobm9kZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJCZWZvcmUgZGlzYWJsZSIpOworICAgICAgICB2YXIgdHJlZUl0ZW0gPSBJbnNwZWN0b3JU
ZXN0LmdldEVsZW1lbnRTdHlsZVByb3BlcnR5VHJlZUl0ZW0oImZvbnQtd2VpZ2h0Iik7CisgICAg
ICAgIEluc3BlY3RvclRlc3QuZHVtcFN0eWxlVHJlZUl0ZW0odHJlZUl0ZW0sICIiKTsKKworICAg
ICAgICB0cmVlSXRlbS50b2dnbGVFbmFibGVkKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0g
fSk7CisgICAgICAgIEluc3BlY3RvclRlc3Qud2FpdEZvclN0eWxlcygiY29udGFpbmVyIiwgc3Rl
cDIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXAyKCkKKyAgICB7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJBZnRlciBkaXNhYmxlIik7CisgICAgICAgIHZhciB0cmVlSXRl
bSA9IEluc3BlY3RvclRlc3QuZ2V0RWxlbWVudFN0eWxlUHJvcGVydHlUcmVlSXRlbSgiZm9udC13
ZWlnaHQiKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wU3R5bGVUcmVlSXRlbSh0cmVlSXRl
bSwgIiIpOworCisgICAgICAgIERPTUFnZW50LnVuZG8oKTsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC53YWl0Rm9yU3R5bGVzKCJjb250YWluZXIiLCBzdGVwMyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gc3RlcDMoKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkFmdGVy
IHVuZG8iKTsKKyAgICAgICAgdmFyIHRyZWVJdGVtID0gSW5zcGVjdG9yVGVzdC5nZXRFbGVtZW50
U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKCJmb250LXdlaWdodCIpOworICAgICAgICBJbnNwZWN0b3JU
ZXN0LmR1bXBTdHlsZVRyZWVJdGVtKHRyZWVJdGVtLCAiIik7CisKKyAgICAgICAgSW5zcGVjdG9y
VGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+CitUZXN0cyB0aGF0IGRpc2FibGluZyBzdHlsZSBp
cyB1bmRvbmUgcHJvcGVybHkuCis8L3A+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciIgc3R5bGU9ImZv
bnQtd2VpZ2h0OmJvbGQiPgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>