<?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>52294</bug_id>
          
          <creation_ts>2011-01-12 05:39:48 -0800</creation_ts>
          <short_desc>Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent.</short_desc>
          <delta_ts>2011-01-14 05:15:23 -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>52431</dependson>
    
    <dependson>52439</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</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>333047</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-12 05:39:48 -0800</bug_when>
    <thetext>%subj%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333070</commentid>
    <comment_count>1</comment_count>
      <attachid>78687</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-12 07:13:28 -0800</bug_when>
    <thetext>Created attachment 78687
]patch[ initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333071</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 07:15:49 -0800</bug_when>
    <thetext>Attachment 78687 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/inspector/InspectorDOMAgent.h:149:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:150:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:151:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:152:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:153:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:154:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:67:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:68:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:70:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:71:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:80:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:81:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333073</commentid>
    <comment_count>3</comment_count>
      <attachid>78689</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-12 07:24:40 -0800</bug_when>
    <thetext>Created attachment 78689
[patch] initial version. style errors were fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333074</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 07:27:29 -0800</bug_when>
    <thetext>Attachment 78689 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/inspector/InspectorDOMAgent.h:149:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:150:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:151:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:152:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:153:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorDOMAgent.h:154:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333075</commentid>
    <comment_count>5</comment_count>
      <attachid>78690</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-12 07:28:35 -0800</bug_when>
    <thetext>Created attachment 78690
[patch] next iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333080</commentid>
    <comment_count>6</comment_count>
      <attachid>78690</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-01-12 07:34:13 -0800</bug_when>
    <thetext>Comment on attachment 78690
[patch] next iteration.

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

&gt; Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

2011

&gt; Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h:49
&gt; +class InspectorBrowserDebuggerAgent : public Noncopyable {

InspectorDOMDebuggerAgent would better reflect intent of this class. Also it could be merged into InspectorDebuggerAgent, otherwise we need to rename InspectorDebuggerAgent to InspectorScriptDebuggerAgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333085</commentid>
    <comment_count>7</comment_count>
      <attachid>78690</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-01-12 07:43:57 -0800</bug_when>
    <thetext>Comment on attachment 78690
[patch] next iteration.

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

&gt; Source/WebCore/inspector/InspectorController.cpp:735
&gt; +        restoreStickyBreakpoints();

Why did this call move? Should it be done only in case there is at least one of the agents?

&gt; Source/WebCore/inspector/InspectorController.cpp:1270
&gt; +    if (type == eventListenerBreakpointType &amp;&amp; m_browserDebuggerAgent) {

This method should become a part of a debugger agent.

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:92
&gt; +    if (browserDebuggerAgent-&gt;shouldBreakOnNodeInsertion(node, parent, eventData)) {

This logic should move into the debugger agent, InspectorInstrumentation should do nothing but pure dispatching.

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:118
&gt;          eventData-&gt;setString(&quot;breakpointType&quot;, domNativeBreakpointType);

ditto

&gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:145
&gt;          eventData-&gt;setString(&quot;breakpointType&quot;, domNativeBreakpointType);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333650</commentid>
    <comment_count>8</comment_count>
      <attachid>78800</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-13 05:53:05 -0800</bug_when>
    <thetext>Created attachment 78800
[patch] another version

(In reply to comment #7)
&gt; (From update of attachment 78690 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78690&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.cpp:735
&gt; &gt; +        restoreStickyBreakpoints();
&gt; 
&gt; Why did this call move? Should it be done only in case there is at least one of the agents?

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorController.cpp:1270
&gt; &gt; +    if (type == eventListenerBreakpointType &amp;&amp; m_browserDebuggerAgent) {
&gt; 
&gt; This method should become a part of a debugger agent.

The idea was to extract DOM depended debugging things into separate class.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:92
&gt; &gt; +    if (browserDebuggerAgent-&gt;shouldBreakOnNodeInsertion(node, parent, eventData)) {
&gt; 
&gt; This logic should move into the debugger agent, InspectorInstrumentation should do nothing but pure dispatching.

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:118
&gt; &gt;          eventData-&gt;setString(&quot;breakpointType&quot;, domNativeBreakpointType);
&gt; 
&gt; ditto

done.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorInstrumentation.cpp:145
&gt; &gt;          eventData-&gt;setString(&quot;breakpointType&quot;, domNativeBreakpointType);
&gt; 
&gt; ditto


done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333658</commentid>
    <comment_count>9</comment_count>
      <attachid>78800</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-01-13 06:22:55 -0800</bug_when>
    <thetext>Comment on attachment 78800
[patch] another version

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

I still don&apos;t like InspectorBrowserDebuggerAgent name because there is no such thing as browser in terms of WebCore, otherwise the change looks good to me.

&gt; Source/WebCore/inspector/InspectorDOMAgent.h:147
&gt; +        // We represent embedded doms as a part of the same hierarchy. Hence we treat children of frame owners differently.

Consider moving these methods into a separate utility class.

&gt; Tools/ChangeLog:5
&gt; +        clean

Please provide a meaningful description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334149</commentid>
    <comment_count>10</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-14 00:26:28 -0800</bug_when>
    <thetext>Committed r75774
	M	Source/WebCore/WebCore.pro
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/WebCore.vcproj/WebCore.vcproj
	M	Source/WebCore/WebCore.gypi
	M	Source/WebCore/inspector/CodeGeneratorInspector.pm
	M	Source/WebCore/inspector/InspectorController.cpp
	M	Source/WebCore/inspector/Inspector.idl
	A	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
	M	Source/WebCore/inspector/InspectorController.h
	M	Source/WebCore/inspector/InspectorInstrumentation.cpp
	A	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
	M	Source/WebCore/inspector/InspectorDOMAgent.h
	M	Source/WebCore/inspector/InspectorDOMAgent.cpp
	M	Source/WebCore/CMakeLists.txt
	M	Source/WebCore/WebCore.xcodeproj/project.pbxproj
	M	Tools/ChangeLog
	M	Tools/Scripts/webkitpy/common/checkout/scm.py
r75774 = 741bf235dca296d278c65aca3864d15566998800 (refs/remotes/trunk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334162</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-14 00:59:54 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75774 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334184</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-14 01:50:15 -0800</bug_when>
    <thetext>That&apos;s not the right fix for scm.py, and it&apos;s not unit tested. :)  Thre is a separate bug on it.

I appreciate you looking at it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334213</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-14 02:30:33 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75783 might have broken SnowLeopard Intel Release (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334251</commentid>
    <comment_count>14</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-14 05:15:23 -0800</bug_when>
    <thetext>Committed r75788
	M	Source/WebCore/WebCore.pro
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/WebCore.vcproj/WebCore.vcproj
	M	Source/WebCore/GNUmakefile.am
	M	Source/WebCore/WebCore.gypi
	M	Source/WebCore/inspector/CodeGeneratorInspector.pm
	M	Source/WebCore/inspector/InspectorController.cpp
	M	Source/WebCore/inspector/Inspector.idl
	A	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
	M	Source/WebCore/inspector/InspectorController.h
	M	Source/WebCore/inspector/InspectorInstrumentation.cpp
	A	Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
	M	Source/WebCore/inspector/InspectorDOMAgent.h
	M	Source/WebCore/inspector/InspectorDOMAgent.cpp
	M	Source/WebCore/CMakeLists.txt
	M	Source/WebCore/WebCore.xcodeproj/project.pbxproj
r75788 = bd9c8cbc897d00f8cf96184dc5f330be0a6b4cfc (refs/remotes/trunk)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78687</attachid>
            <date>2011-01-12 07:13:28 -0800</date>
            <delta_ts>2011-01-12 07:24:40 -0800</delta_ts>
            <desc>]patch[ initial version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>50755</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjIxMmZiOC4uMmFmMzg1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTAsNiArMTE1MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAor
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA1YmYxMDczLi4wNzg4YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDEt
MTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJh
Y3QgQnJvd3NlckRlYnVnZ2VyQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JET01BZ2VudCBhbmQgSW5zcGVjdG9yRGVidWdnZXIgYWdlbnQuCisgICAgICAgIFdlIGhhdmUg
c29tZSBtZXRob2RzIG9mIERlYnVnZ2VyIHdoaWNoIGFyZSByZWxhdGVkIHRvIERPTS4KKyAgICAg
ICAgTGV0cyBleHRyYWN0IHRoZXNlIG1ldGhvZHMgdG8gQnJvd3NlckRlYnVnZ2VyIGFnZW50Lgor
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjk0CisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldERPTUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzaG91bGRCcmVha09uTm9k
ZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNob3VsZEJyZWFrT25BdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0Jy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZVhIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6Omhhc1hIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24pOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2Vy
RnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
c2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmlu
ZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERP
TU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURP
TU5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01O
b2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZCk6CisKIDIwMTAtMTItMjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA4M2U1NWQ0Li5jZWQxMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xOTk5LDYgKzE5OTksOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGll
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IDI3Y2Q1ODIuLjZkMGYyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDQyLDYgKzEwNDIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApAQCAtMTkzMyw2ICsxOTM0LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggXAogICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBiZmZjNmQ2Li42NWNjYTcwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjQ5NDIsNiArNjQ5NDIsMTQgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JDbGllbnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
MzhmODJkLi5jNDVkMzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjYwLDYgKzEyNjAsOCBAQAogCQk0RjcwN0E5QTExRUY2
Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk4MTFFRjY3OTQwMEFDREE2
OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovOyB9OwogCQk0RkEzQjkwQTEyNUNE
MTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZBM0I5MDgxMjVDRDEyMTAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmNwcCAqLzsgfTsKIAkJNEZBM0I5MEIxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLzsgfTsKKwkJ
NEZDMjg0MjQxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkMyODQy
MjEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCAqLzsg
fTsKKwkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGQzI4NDIzMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dC5jcHAgKi87IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhE
MEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQw
RjMxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBT
Y3JpcHRHQ0V2ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNo
ZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjMwLDYgKzc2MzIsOCBAQAogCQk0
RjcwN0E5ODExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZBM0I5MDgxMjVDRDEyMTAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
RkMyODQyMzEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RkQ4RDBG
MDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVk
UGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkwMCw2ICsxMjkwNCw4IEBACiAJCQkJN0Ew
RTc2RjgxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5pZGwgKi8sCiAJCQkJ
Qjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAgKi8sCiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oICovLAorCQkJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oICovLAorCQkJCTRGQzI4NDIzMTJEREYyN0Uw
MEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgKi8sCiAJCQkJN0Ex
RjJCNTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgKi8sCiAJCQkJMUM4
MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTFDODFC
OTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKQEAgLTIy
MjkzLDYgKzIyMjk5LDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQzI4NDI0MTJEREYy
N0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNDk3Niw2ICsyNDk4Myw3IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJD
IC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJE
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBiOGFlYTBlLi4zMGNjNTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQpAQCAtMjUsNiArMjUsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7CiAg
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCiAgICAgImRvbWFpbkFj
Y2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQiLAogfTsK
KyR0eXBlVHJhbnNmb3JteyJCcm93c2VyRGVidWdnZXIifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9p
bnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1Z2dlckFnZW50IiwKK307CiAkdHlwZVRy
YW5zZm9ybXsiRGF0YWJhc2UifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRhdGFi
YXNlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBlZDAwY2M3Li43ZWFlNTM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjI0LDYgKzIyNCw5
IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBlbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIGRpc2FibGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CisK
KyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4g
T2JqZWN0IGJyZWFrcG9pbnRzKTsKKwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJd
IHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAKQEAgLTIzOCwxNiArMjQxLDEyIEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzZXRCcmVha3Bv
aW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGluIFN0
cmluZyBjb25kaXRpb24sIGluIGJvb2xlYW4gZW5hYmxlZCwgb3V0IFN0cmluZyBicmVha3BvaW50
SWQsIG91dCB1bnNpZ25lZCBpbnQgYWN0dWFsTGluZU51bWJlcik7CiAgICAgICAgIFtkb21haW49
RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsK
IAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRTdGlja3lCcmVha3BvaW50cyhp
biBPYmplY3QgYnJlYWtwb2ludHMpOyAvLyBGSVhNRTogTW92ZSB0byBuZXdseSBpbnRyb2R1Y2Vk
IEJyb3dzZXJEZWJ1Z2dlci4KLQotICAgICAgICBbZG9tYWluPURPTV0gdm9pZCBzZXRET01CcmVh
a3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOyAvLyBGSVhNRTogTW92ZSB0byBu
ZXdseSBpbnRyb2R1Y2VkIEJyb3dzZXJEZWJ1Z2dlci4KLSAgICAgICAgW2RvbWFpbj1ET01dIHZv
aWQgcmVtb3ZlRE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsgLy8g
RklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAg
ICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4g
U3RyaW5nIGV2ZW50TmFtZSk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJv
d3NlckRlYnVnZ2VyLgotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsgLy8gRklYTUU6IE1vdmUg
dG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAgICAgW2RvbWFpbj1J
bnNwZWN0b3JdIHZvaWQgc2V0WEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJsKTsgLy8gRklYTUU6
IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0gICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7IC8v
IEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3NlckRlYnVnZ2VyLgorICAgICAg
ICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRET01CcmVha3BvaW50KGluIGxvbmcg
bm9kZUlkLCBpbiBsb25nIHR5cGUpOworICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0g
dm9pZCByZW1vdmVET01CcmVha3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOwor
ICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRFdmVudExpc3RlbmVyQnJl
YWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsKKyAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVi
dWdnZXJdIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50
TmFtZSk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHNldFhIUkJyZWFr
cG9pbnQoaW4gU3RyaW5nIHVybCk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2
b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7CiAKICAgICAgICAgW2RvbWFp
bj1EZWJ1Z2dlcl0gdm9pZCBzdGVwT3ZlcigpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2
b2lkIHN0ZXBJbnRvKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ODdhMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtMCwwICsxLDI3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworbmFtZXNwYWNlIHsKKworZW51bSBET01CcmVha3Bv
aW50VHlwZSB7CisgICAgU3VidHJlZU1vZGlmaWVkID0gMCwKKyAgICBBdHRyaWJ1dGVNb2RpZmll
ZCwKKyAgICBOb2RlUmVtb3ZlZCwKKyAgICBET01CcmVha3BvaW50VHlwZXNDb3VudAorfTsKKwor
Y29uc3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwg
U3VidHJlZU1vZGlmaWVkKTsKK2NvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlm
dCA9IDE2OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIpCisgICAgOiBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAs
IG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChmYWxzZSkKK3sKK30KKworSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpCit7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5n
cygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigpOworfQorCit2b2lkIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKK3sKKyAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZl
bnROYW1lKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAg
bV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgdWludDMyX3Qg
bWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5v
ZGUobm9kZSkpOworICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNr
IHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxl
RE9NQnJlYWtwb2ludFR5cGVzTWFzazsKKyAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNr
KQorICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxl
VHlwZXNNYXNrLCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9icmVh
a3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMu
CisgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOworICAgICAgICBWZWN0b3I8Tm9k
ZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSkpOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhY2subGFzdCgpOworICAg
ICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUo
bm9kZSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
Rmlyc3RDaGlsZChub2RlKSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcobm9kZSkpOworICAgICAgICB9IHdoaWxlICghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2Rl
KiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAx
IDw8IHR5cGU7CisgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwgbV9icmVha3BvaW50cy5nZXQo
bm9kZSkgfCByb290Qml0KTsKKyAgICBpZiAocm9vdEJpdCAmIGluaGVyaXRhYmxlRE9NQnJlYWtw
b2ludFR5cGVzTWFzaykgeworICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICAgICAgdXBkYXRlU3VidHJl
ZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2Rl
SWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2RlKiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFn
ZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CisgICAgdWludDMyX3QgbWFzayA9
IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RCaXQ7CisgICAgaWYgKG1hc2spCisgICAg
ICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2spOworICAgIGVsc2UKKyAgICAgICAgbV9i
cmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisKKyAgICBpZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJs
ZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFzayAmIChyb290Qml0IDw8IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKGNoaWxkKSkKKyAgICAgICAgICAgIHVw
ZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgcm9vdEJpdCwgZmFsc2UpOworICAgIH0KK30K
KworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVJ
bnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZp
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVlTW9k
aWZpZWQsIHRydWUsIGRldGFpbHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpz
aG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQs
IGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICho
YXNCcmVha3BvaW50KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVt
ZW50LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKK3sKKyAgICBpZiAoaGFz
QnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3Jp
cHRpb25Gb3JET01FdmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGRldGFp
bHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2
ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoaGFz
QnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7CisKKyAgICBOb2RlKiBicmVha3Bv
aW50T3duZXIgPSB0YXJnZXQ7CisgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVy
aXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgeworICAgICAgICAvLyBGb3IgaW5oZXJpdGFi
bGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFz
IHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCisgICAgICAgIC8vIFRhcmdldCBub2Rl
IG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3Qu
CisgICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5w
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKHRhcmdldCk7CisgICAgICAgIEFTU0VSVCh0YXJnZXROb2Rl
SWQpOworICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJn
ZXROb2RlSWQpOworCisgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgorICAg
ICAgICBpZiAoIWluc2VydGlvbikKKyAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IEluc3Bl
Y3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGJy
ZWFrcG9pbnRPd25lcik7CisgICAgICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0KGJyZWFr
cG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7CisgICAgICAgICAgICBicmVh
a3BvaW50T3duZXIgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFrcG9p
bnRPd25lcik7CisgICAgICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCisgICAg
ICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsK
KyAgICB9CisKKyAgICBsb25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1fY29udHJvbGxlci0+
bV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChicmVha3BvaW50T3duZXIpOworICAg
IEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOworICAgIGRlc2NyaXB0aW9uLT5zZXROdW1i
ZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CisgICAgZGVzY3JpcHRpb24tPnNl
dE51bWJlcigidHlwZSIsIGJyZWFrcG9pbnRUeXBlKTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpCit7
CisgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEgPDwgdHlwZTsKKyAgICB1aW50MzJfdCBkZXJpdmVk
Qml0ID0gcm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKKyAgICByZXR1
cm4gbV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtw
b2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQoreworICAgIHVp
bnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKKyAgICB1aW50MzJfdCBk
ZXJpdmVkTWFzayA9IHJvb3RNYXNrIDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0Owor
ICAgIHVpbnQzMl90IG5ld01hc2sgPSBzZXQgPyBvbGRNYXNrIHwgZGVyaXZlZE1hc2sgOiBvbGRN
YXNrICYgfmRlcml2ZWRNYXNrOworICAgIGlmIChuZXdNYXNrKQorICAgICAgICBtX2JyZWFrcG9p
bnRzLnNldChub2RlLCBuZXdNYXNrKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpOworCisgICAgdWludDMyX3QgbmV3Um9vdE1hc2sgPSByb290TWFzayAmIH5u
ZXdNYXNrOworICAgIGlmICghbmV3Um9vdE1hc2spCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUp
OyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCisgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgbmV3Um9vdE1hc2ss
IHNldCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0V2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAgIHJldHVy
biBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUpOworfQorCit2
b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9YSFJC
cmVha3BvaW50cy5hZGQodXJsKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0g
ZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwor
fQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpoYXNYSFJCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpCit7CisgICAgaWYgKG1f
aGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCkgeworICAgICAgICAqYnJlYWtwb2ludFVSTCA9
ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChIYXNoU2V0PFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ID0gbV9YSFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJy
ZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICh1cmwuY29udGFpbnMoKml0KSkg
eworICAgICAgICAgICAgKmJyZWFrcG9pbnRVUkwgPSAqaXQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKQorewor
ICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3Bv
aW50cy5jbGVhcigpOworICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKSAmJiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg3MmM5MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5o
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
X2gKKyNkZWZpbmUgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaAorCisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXI7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBOb2RlOworCitjbGFzcyBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0
ZShJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChjb250cm9sbGVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsK
KworICAgIC8vIEJyb3dzZXJEZWJ1Z2dlciBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCisgICAg
dm9pZCBzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHJlbW92
ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0RXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgcmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIHJl
bW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisKKyAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCisgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUq
IG5vZGUpOworICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKTsKKyAgICBib29s
IHNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJlbnQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKTsKKyAgICBib29sIHNob3VsZEJyZWFrT25Ob2Rl
UmVtb3ZhbChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7
CisgICAgYm9vbCBzaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqIGVs
ZW1lbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKTsKKyAgICBib29sIGhh
c0V2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAgICBi
b29sIGhhc1hIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2lu
dFVSTCk7CisKKyAgICB2b2lkIGNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKK3ByaXZhdGU6Cisg
ICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciopOwor
CisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVh
a3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
ZXNjcmlwdGlvbik7CisgICAgdm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9k
ZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KTsKKyAgICBib29sIGhhc0JyZWFrcG9pbnQo
Tm9kZSogbm9kZSwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOworCisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIEhhc2hNYXA8Tm9kZSos
IHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2V2ZW50TGlz
dGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9YSFJCcmVha3BvaW50czsK
KyAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcAppbmRleCBlZTE1MzZmLi44NjRjMTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OCw2ICs1OCw3
IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlw
dEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01BZ2VudC5oIgpAQCAtMTQ3LDcgKzE0OCw2IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6
Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQp
CiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0
aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAsIG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlV
UkwoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC0xNzcsNiArMTc3LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIAogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOworICAgIG1fYnJv
d3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKICNlbmRpZgogICAgIEFTU0VSVChtX2luc3BlY3Rl
ZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CkBAIC03MjcsMTAgKzcyOCwxMSBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQotICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7CisgICAgICAgIGlmICht
X2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNsZWFyRm9yUGFn
ZU5hdmlnYXRpb24oKTsKLSAgICAgICAgICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50KQorICAgICAgICAg
ICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpOworICAg
ICAgICByZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCkBAIC0xMTgzLDYgKzExODUsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3
YXlzKQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCiAgICAgbV9kZWJ1Z2dlckFnZW50
ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkp
OworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJlc3RvcmVTdGlja3lCcmVha3BvaW50cygpOwogCiAg
ICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVkKCk7CkBAIC0xMjE1LDYgKzEyMTgsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cykK
ICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIG1fZGVidWdnZXJBZ2VudC5jbGVh
cigpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKIAogICAgIG1fYXR0YWNo
RGVidWdnZXJXaGVuU2hvd24gPSBmYWxzZTsKIApAQCAtMTIzNSwxMCArMTIzOSw2IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U3RpY2t5QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0
aWNreUJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jbGVh
cigpOwotICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX2hhc1hIUkJyZWFrcG9p
bnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKLQogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFs
bEJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpzdGlja3lC
cmVha3BvaW50cyk7CiAgICAgS1VSTCB1cmwgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgp
LT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwpA
QCAtMTI2NywxMyArMTI2NywxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVT
dGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicgogICAgIGlmICgh
Y29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodHlwZSA9PSBldmVudExpc3Rl
bmVyQnJlYWtwb2ludFR5cGUpIHsKKyAgICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyQnJlYWtw
b2ludFR5cGUgJiYgbV9icm93c2VyRGVidWdnZXJBZ2VudCkgewogICAgICAgICBpZiAoIWVuYWJs
ZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyBldmVudE5hbWU7Ci0gICAg
ICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygiZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCi0g
ICAgICAgICAgICBzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChldmVudE5hbWUpOwotICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBqYXZhU2NyaXB0QnJlYWtwb2ludFR5cGUpIHsKKyAgICAgICAgaWYg
KCFjb25kaXRpb24tPmdldFN0cmluZygiZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQtPnNldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IGphdmFT
Y3JpcHRCcmVha3BvaW50VHlwZSAmJiBtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgU3RyaW5n
IHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjgzLDYzICsxMjg0LDE2IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJyCiAgICAgICAgIFN0cmluZyBqYXZhU2NyaXB0Q29uZGl0aW9uOwogICAgICAgICBp
ZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmamF2YVNjcmlwdENvbmRpdGlv
bikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0g
ICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGphdmFTY3JpcHRDb25kaXRpb24sIGVuYWJs
ZWQpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSkgeworICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obGluZU51bWJlciksIGphdmFTY3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOworICAg
IH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSAmJiBtX2Jyb3dzZXJEZWJ1Z2dl
ckFnZW50KSB7CiAgICAgICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgaWYgKGNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwi
LCAmdXJsKSkKLSAgICAgICAgICAgIHNldFhIUkJyZWFrcG9pbnQodXJsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMu
YWRkKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7Ci19Ci0KLWJvb2wgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCi17Ci0gICAgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNv
bnRhaW5zKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0WEhS
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gdHJ1ZTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fWEhSQnJlYWtwb2ludHMuYWRkKHVybCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAg
ICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5
VVJMID0gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1
cmwpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Omhhc1hIUkJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2ludFVSTCkKLXsKLSAgICBpZiAobV9oYXNY
SFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKSB7Ci0gICAgICAgICpicmVha3BvaW50VVJMID0gIiI7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6
aXRlcmF0b3IgaXQgPSBtX1hIUkJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IG1fWEhSQnJlYWtw
b2ludHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKHVybC5jb250YWlucygqaXQpKSB7Ci0g
ICAgICAgICAgICAqYnJlYWtwb2ludFVSTCA9ICppdDsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1
cmwpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50
LT5zZXRYSFJCcmVha3BvaW50KHVybCk7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKIH0KLQog
I2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBmZWYyYTZkLi4zYmFmNTc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTU3LDYgKzU3LDcg
QEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFz
cyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOworY2xh
c3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7
CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwpAQCAt
MjM0LDEyICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWUoKTsKIAogICAgIHZvaWQg
c2V0U3RpY2t5QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnRzKTsKLSAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
ZXZlbnROYW1lKTsKLSAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICBib29sIGhhc0V2ZW50TGlzdGVuZXJCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lkIHNldFhIUkJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHVybCk7Ci0gICAgYm9vbCBoYXNYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBT
dHJpbmcqIGJyZWFrcG9pbnRVUkwpOwogI2VuZGlmCiAKICAgICB2b2lkIHNldEluamVjdGVkU2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsKQEAgLTI2Niw2ICsyNjEsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBmcmllbmQgY2xhc3Mg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjsKICAgICBmcmllbmQgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0Owog
CkBAIC0zNzIsMTAgKzM2OCw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgIE93blB0cjxJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7Ci0KLSAgICBIYXNoU2V0PFN0
cmluZz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1f
WEhSQnJlYWtwb2ludHM7Ci0gICAgYm9vbCBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkw7
CisgICAgT3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBtX2Jyb3dzZXJEZWJ1
Z2dlckFnZW50OwogCiAgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJvZmls
ZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKaW5kZXggNWQ4ZjQwOC4uMTlhZTMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0yMDQsMTYgKzIwNCw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4dEpvYigpIHsgfQogfTsKIAotZW51bSBE
T01CcmVha3BvaW50VHlwZSB7Ci0gICAgU3VidHJlZU1vZGlmaWVkID0gMCwKLSAgICBBdHRyaWJ1
dGVNb2RpZmllZCwKLSAgICBOb2RlUmVtb3ZlZCwKLSAgICBET01CcmVha3BvaW50VHlwZXNDb3Vu
dAotfTsKLQotY29uc3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNr
ID0gKDEgPDwgU3VidHJlZU1vZGlmaWVkKTsKLWNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZl
ZFR5cGVTaGlmdCA9IDE2OwotCiB9CiAKIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01B
Z2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCkBAIC00MDQsNyArMzk0LDYgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICByZWxlYXNlRGFuZ2xp
bmdOb2RlcygpOwogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKICAgICBtX2luc3Bl
Y3RlZE5vZGVzLmNsZWFyKCk7Ci0gICAgbV9icmVha3BvaW50cy5jbGVhcigpOwogfQogCiBOb2Rl
KiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxvbmcgaWQpCkBAIC03NjksMTAxICs3NTgs
NiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZWFyY2hDYW5jZWxlZCgpCiAgICAgbV9zZWFy
Y2hSZXN1bHRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUJy
ZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKLXsKLSAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1
aW50MzJfdCByb290Qml0ID0gMSA8PCB0eXBlOwotICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUs
IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpIHwgcm9vdEJpdCk7Ci0gICAgaWYgKHJvb3RCaXQgJiBp
bmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spIHsKLSAgICAgICAgZm9yIChOb2RlKiBj
aGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW5uZXJOZXh0U2li
bGluZyhjaGlsZCkpCi0gICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQs
IHJvb3RCaXQsIHRydWUpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVt
b3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQotewotICAgIE5vZGUqIG5v
ZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7Ci0gICAgdWludDMyX3QgbWFzayA9
IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RCaXQ7Ci0gICAgaWYgKG1hc2spCi0gICAg
ICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2spOwotICAgIGVsc2UKLSAgICAgICAgbV9i
cmVha3BvaW50cy5yZW1vdmUobm9kZSk7Ci0KLSAgICBpZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJs
ZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFzayAmIChyb290Qml0IDw8IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGlu
bmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCi0gICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQs
IGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFr
T25Ob2RlSW5zZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNCcmVha3BvaW50KHBhcmVudCwgU3VidHJl
ZU1vZGlmaWVkKSkgewotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KHBhcmVudCwgU3Vi
dHJlZU1vZGlmaWVkLCB0cnVlLCBkZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxk
QnJlYWtPbk5vZGVSZW1vdmFsKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSkg
ewotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxz
ZSwgZGV0YWlscyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoaGFzQnJl
YWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAg
ICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBTdWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBk
ZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlm
aWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0
YWlscykKLXsKLSAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmll
ZCkpIHsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChlbGVtZW50LCBBdHRyaWJ1dGVN
b2RpZmllZCwgZmFsc2UsIGRldGFpbHMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNl
cnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXNjcmlwdGlvbikKLXsKLSAgICBB
U1NFUlQoaGFzQnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7Ci0KLSAgICBOb2Rl
KiBicmVha3BvaW50T3duZXIgPSB0YXJnZXQ7Ci0gICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBl
KSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgewotICAgICAgICAvLyBGb3Ig
aW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRo
ZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCi0gICAgICAgIC8vIFRh
cmdldCBub2RlIG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2gg
aXQgZmlyc3QuCi0gICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZCh0YXJnZXQpOwotICAgICAgICBBU1NFUlQodGFyZ2V0Tm9kZUlkKTsKLSAgICAgICAgZGVz
Y3JpcHRpb24tPnNldE51bWJlcigidGFyZ2V0Tm9kZUlkIiwgdGFyZ2V0Tm9kZUlkKTsKLQotICAg
ICAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIgbm9kZS4KLSAgICAgICAgaWYgKCFpbnNlcnRp
b24pCi0gICAgICAgICAgICBicmVha3BvaW50T3duZXIgPSBpbm5lclBhcmVudE5vZGUodGFyZ2V0
KTsKLSAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lcik7Ci0gICAgICAgIHdoaWxlICghKG1f
YnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkp
KSB7Ci0gICAgICAgICAgICBicmVha3BvaW50T3duZXIgPSBpbm5lclBhcmVudE5vZGUoYnJlYWtw
b2ludE93bmVyKTsKLSAgICAgICAgICAgIEFTU0VSVChicmVha3BvaW50T3duZXIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFN1YnRyZWVNb2RpZmllZCkKLSAg
ICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCBpbnNlcnRpb24p
OwotICAgIH0KLQotICAgIGxvbmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9kb2N1bWVudE5v
ZGVUb0lkTWFwLmdldChicmVha3BvaW50T3duZXIpOwotICAgIEFTU0VSVChicmVha3BvaW50T3du
ZXJOb2RlSWQpOwotICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoIm5vZGVJZCIsIGJyZWFrcG9p
bnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24tPnNldE51bWJlcigidHlwZSIsIGJyZWFr
cG9pbnRUeXBlKTsKLX0KLQogU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0
cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCBk
b2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCkBAIC0xMDcwLDEzICs5NjQsNiBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGlzV2hp
dGVzcGFjZShub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fYnJlYWtwb2ludHMu
c2l6ZSgpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChpbm5l
clBhcmVudE5vZGUobm9kZSkpOwotICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFz
ayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSAmIGlu
aGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsKLSAgICAgICAgaWYgKGluaGVyaXRhYmxl
VHlwZXNNYXNrKQotICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKG5vZGUsIGlu
aGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKLSAgICB9Ci0KICAgICAvLyBXZSBjb3VsZCBiZSBh
dHRhY2hpbmcgZXhpc3Rpbmcgc3VidHJlZS4gRm9yZ2V0IHRoZSBiaW5kaW5ncy4KICAgICB1bmJp
bmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKQEAgLTExMDMsMjEgKzk5MCw2IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAg
ICBpZiAoaXNXaGl0ZXNwYWNlKG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9i
cmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2lu
dHMuCi0gICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOwotICAgICAgICBWZWN0b3I8
Tm9kZSo+IHN0YWNrKDEsIGlubmVyRmlyc3RDaGlsZChub2RlKSk7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBzdGFjay5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLSAgICAgICAg
ICAgIHN0YWNrLmFwcGVuZChpbm5lckZpcnN0Q2hpbGQobm9kZSkpOwotICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKGlubmVyTmV4dFNpYmxpbmcobm9kZSkpOwotICAgICAgICB9IHdoaWxlICghc3Rh
Y2suaXNFbXB0eSgpKTsKLSAgICB9Ci0KICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CiAgICAgbG9uZyBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5nZXQocGFyZW50KTsKICAgICAvLyBJZiBwYXJlbnQgaXMgbm90IG1hcHBlZCB5ZXQgLT4gaWdu
b3JlIHRoZSBldmVudC4KQEAgLTExNTcsMzEgKzEwMjksNiBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSogY2hhcmFjdGVyRGF0YSkK
ICAgICBtX2Zyb250ZW5kLT5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaWQsIGNoYXJhY3RlckRhdGEt
PmRhdGEoKSk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9k
ZSogbm9kZSwgbG9uZyB0eXBlKQotewotICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7
Ci0gICAgdWludDMyX3QgZGVyaXZlZEJpdCA9IHJvb3RCaXQgPDwgZG9tQnJlYWtwb2ludERlcml2
ZWRUeXBlU2hpZnQ7Ci0gICAgcmV0dXJuIG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgKHJvb3RC
aXQgfCBkZXJpdmVkQml0KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dXBkYXRlU3Vi
dHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHNldCkK
LXsKLSAgICB1aW50MzJfdCBvbGRNYXNrID0gbV9icmVha3BvaW50cy5nZXQobm9kZSk7Ci0gICAg
dWludDMyX3QgZGVyaXZlZE1hc2sgPSByb290TWFzayA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5
cGVTaGlmdDsKLSAgICB1aW50MzJfdCBuZXdNYXNrID0gc2V0ID8gb2xkTWFzayB8IGRlcml2ZWRN
YXNrIDogb2xkTWFzayAmIH5kZXJpdmVkTWFzazsKLSAgICBpZiAobmV3TWFzaykKLSAgICAgICAg
bV9icmVha3BvaW50cy5zZXQobm9kZSwgbmV3TWFzayk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jy
ZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLQotICAgIHVpbnQzMl90IG5ld1Jvb3RNYXNrID0gcm9v
dE1hc2sgJiB+bmV3TWFzazsKLSAgICBpZiAoIW5ld1Jvb3RNYXNrKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gaW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsg
Y2hpbGQgPSBpbm5lck5leHRTaWJsaW5nKGNoaWxkKSkKLSAgICAgICAgdXBkYXRlU3VidHJlZUJy
ZWFrcG9pbnRzKGNoaWxkLCBuZXdSb290TWFzaywgc2V0KTsKLX0KLQogTm9kZSogSW5zcGVjdG9y
RE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvLyBUaGUg
cGF0aCBpcyBvZiBmb3JtICIxLEhUTUwsMixCT0RZLDEsRElWIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAzNjYyN2Y1Li5hMDVmN2ZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTQ0LDgg
KzE0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIGRvY3VtZW50
VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRE
T01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwotICAgICAgICB2b2lkIHJlbW92
ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisgICAgICAgIC8vIFdlIHJl
cHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhl
bmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KKyAgICAg
ICAgLy8gV2UgYWxzbyBza2lwIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjb25kaXRpb25hbGx5LiBG
b2xsb3dpbmcgbWV0aG9kcyBlbmNhcHN1bGF0ZSB0aGVzZSBzcGVjaWZpY3MuCisgICAgICAgIHN0
YXRpYyBOb2RlKiBpbm5lckZpcnN0Q2hpbGQoTm9kZSogbm9kZSk7CisgICAgICAgIHN0YXRpYyBO
b2RlKiBpbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUpOworICAgICAgICBzdGF0aWMgTm9kZSog
aW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSogbm9kZSk7CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBpbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5vZGUpOworICAgICAgICBzdGF0aWMgTm9kZSog
aW5uZXJQYXJlbnROb2RlKE5vZGUqIG5vZGUpOworICAgICAgICBzdGF0aWMgYm9vbCBpc1doaXRl
c3BhY2UoTm9kZSogbm9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHN0YXJ0TGlz
dGVuaW5nRnJhbWVEb2N1bWVudChOb2RlKiBmcmFtZU93bmVyTm9kZSk7CkBAIC0xNzAsMTUgKzE3
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50
IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwogICAgICAgICBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIE5vZGUqIG5vZGUpOwogCi0gICAgICAgIC8vIFdlIHJlcHJlc2VudCBlbWJl
ZGRlZCBkb21zIGFzIGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0
IGNoaWxkcmVuIG9mIGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KLSAgICAgICAgLy8gV2UgYWxz
byBza2lwIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjb25kaXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0
aG9kcyBlbmNhcHN1bGF0ZSB0aGVzZSBzcGVjaWZpY3MuCi0gICAgICAgIE5vZGUqIGlubmVyRmly
c3RDaGlsZChOb2RlKiBub2RlKTsKLSAgICAgICAgTm9kZSogaW5uZXJOZXh0U2libGluZyhOb2Rl
KiBub2RlKTsKLSAgICAgICAgTm9kZSogaW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSogbm9kZSk7
Ci0gICAgICAgIHVuc2lnbmVkIGlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSk7Ci0gICAg
ICAgIE5vZGUqIGlubmVyUGFyZW50Tm9kZShOb2RlKiBub2RlKTsKLSAgICAgICAgYm9vbCBpc1do
aXRlc3BhY2UoTm9kZSogbm9kZSk7Ci0KICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3Vt
ZW50KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3Bl
Y3RvckRPTUFnZW50PiopOwpAQCAtMjAzLDcgKzIwMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fbWF0Y2hKb2JzVGltZXI7CiAgICAg
ICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgICAgICBWZWN0
b3I8bG9uZz4gbV9pbnNwZWN0ZWROb2RlczsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMy
X3Q+IG1fYnJlYWtwb2ludHM7CiAgICAgfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDkzOTVk
ZDUuLmQxYTIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKQEAg
LTg0LDExICs4NSwxMSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2Vy
dERPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlYwogICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVn
Z2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47
Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+
bV9kb21BZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFnZW50KQorICAgIEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xs
ZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdn
ZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGRvbUFnZW50LT5z
aG91bGRCcmVha09uTm9kZUluc2VydGlvbihub2RlLCBwYXJlbnQsIGV2ZW50RGF0YSkpIHsKKyAg
ICBpZiAoYnJvd3NlckRlYnVnZ2VyQWdlbnQtPnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKG5v
ZGUsIHBhcmVudCwgZXZlbnREYXRhKSkgewogICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygi
YnJlYWtwb2ludFR5cGUiLCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSk7CiAgICAgICAgIGRlYnVn
Z2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUs
IGV2ZW50RGF0YSk7CiAgICAgfQpAQCAtOTksNiArMTAwLDggQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3QKIHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9y
Q29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZEluc2Vy
dERPTU5vZGUobm9kZSk7CisgICAgaWYgKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBi
cm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVn
Z2VyQWdlbnQuZ2V0KCkpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT5kaWRJbnNlcnRE
T01Ob2RlKG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJl
bW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IE5vZGUqIG5vZGUpCkBAIC0xMDcsMTEgKzExMCwxMSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
YwogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JD
b250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50
KQogICAgICAgICByZXR1cm47Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5z
cGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFnZW50KQor
ICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9
IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAg
aWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZVJlbW92YWwobm9kZSwgZXZlbnREYXRh
KSkgeworICAgIGlmIChicm93c2VyRGVidWdnZXJBZ2VudC0+c2hvdWxkQnJlYWtPbk5vZGVSZW1v
dmFsKG5vZGUsIGV2ZW50RGF0YSkpIHsKICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJy
ZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1Z2dl
ckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBl
dmVudERhdGEpOwogICAgIH0KQEAgLTEyMCw2ICsxMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWMKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJ
bXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIE5vZGUqIG5vZGUp
CiB7CisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFn
ZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKTsK
KyAgICBpZiAoYnJvd3NlckRlYnVnZ2VyQWdlbnQpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFn
ZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOworCiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50
KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQuZ2V0KCkpCiAgICAg
ICAgIGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogfQpAQCAtMTMwLDExICsxMzcs
MTEgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRySW1w
bChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50Lmdl
dCgpOwogICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwotICAgIEluc3Bl
Y3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQu
Z2V0KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkKKyAgICBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudCogYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50LmdldCgpOworICAgIGlmICghYnJvd3NlckRlYnVnZ2VyQWdlbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxkQnJlYWtP
bkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50LCBldmVudERhdGEpKSB7CisgICAgaWYgKGJy
b3dzZXJEZWJ1Z2dlckFnZW50LT5zaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKGVs
ZW1lbnQsIGV2ZW50RGF0YSkpIHsKICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFr
cG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1Z2dlckFn
ZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVu
dERhdGEpOwogICAgIH0KQEAgLTE2MCw4ICsxNjcsMTIgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
IGkKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIEluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93
c2VyRGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgU3RyaW5nIGJyZWFrcG9p
bnRVUkw7Ci0gICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVyLT5oYXNYSFJCcmVha3BvaW50KHVy
bCwgJmJyZWFrcG9pbnRVUkwpKQorICAgIGlmICghYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmhhc1hI
UkJyZWFrcG9pbnQodXJsLCAmYnJlYWtwb2ludFVSTCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CkBAIC01NDksOSArNTYwLDE1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNwZWN0b3JDb250cm9sbGVyKiBpCiAgICAg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xs
ZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKKworICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2Vy
RGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgU3RyaW5nIGZ1bGxFdmVudE5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiJXM6JXMiLCBj
YXRlZ29yeVR5cGUudXRmOCgpLmRhdGEoKSwgZXZlbnROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
IGlmICghaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVs
bEV2ZW50TmFtZSkpCisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudC0+aGFzRXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoZnVsbEV2ZW50TmFtZSkpCiAgICAgICAgIHJldHVybjsKKwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZXZlbnRMaXN0
ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZl
bnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78689</attachid>
            <date>2011-01-12 07:24:40 -0800</date>
            <delta_ts>2011-01-12 07:28:35 -0800</delta_ts>
            <desc>[patch] initial version. style errors were fixed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>50722</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjIxMmZiOC4uMmFmMzg1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTAsNiArMTE1MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAor
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA1YmYxMDczLi4wNzg4YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDEt
MTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJh
Y3QgQnJvd3NlckRlYnVnZ2VyQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JET01BZ2VudCBhbmQgSW5zcGVjdG9yRGVidWdnZXIgYWdlbnQuCisgICAgICAgIFdlIGhhdmUg
c29tZSBtZXRob2RzIG9mIERlYnVnZ2VyIHdoaWNoIGFyZSByZWxhdGVkIHRvIERPTS4KKyAgICAg
ICAgTGV0cyBleHRyYWN0IHRoZXNlIG1ldGhvZHMgdG8gQnJvd3NlckRlYnVnZ2VyIGFnZW50Lgor
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjk0CisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldERPTUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzaG91bGRCcmVha09uTm9k
ZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNob3VsZEJyZWFrT25BdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0Jy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZVhIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6Omhhc1hIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24pOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2Vy
RnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
c2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmlu
ZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERP
TU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURP
TU5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01O
b2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZCk6CisKIDIwMTAtMTItMjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA4M2U1NWQ0Li5jZWQxMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xOTk5LDYgKzE5OTksOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGll
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IDI3Y2Q1ODIuLjZkMGYyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDQyLDYgKzEwNDIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApAQCAtMTkzMyw2ICsxOTM0LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggXAogICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBiZmZjNmQ2Li42NWNjYTcwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjQ5NDIsNiArNjQ5NDIsMTQgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JDbGllbnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
MzhmODJkLi5jNDVkMzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjYwLDYgKzEyNjAsOCBAQAogCQk0RjcwN0E5QTExRUY2
Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk4MTFFRjY3OTQwMEFDREE2
OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovOyB9OwogCQk0RkEzQjkwQTEyNUNE
MTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZBM0I5MDgxMjVDRDEyMTAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmNwcCAqLzsgfTsKIAkJNEZBM0I5MEIxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLzsgfTsKKwkJ
NEZDMjg0MjQxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkMyODQy
MjEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCAqLzsg
fTsKKwkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGQzI4NDIzMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dC5jcHAgKi87IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhE
MEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQw
RjMxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBT
Y3JpcHRHQ0V2ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNo
ZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjMwLDYgKzc2MzIsOCBAQAogCQk0
RjcwN0E5ODExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZBM0I5MDgxMjVDRDEyMTAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
RkMyODQyMzEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RkQ4RDBG
MDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVk
UGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkwMCw2ICsxMjkwNCw4IEBACiAJCQkJN0Ew
RTc2RjgxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5pZGwgKi8sCiAJCQkJ
Qjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAgKi8sCiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oICovLAorCQkJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oICovLAorCQkJCTRGQzI4NDIzMTJEREYyN0Uw
MEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgKi8sCiAJCQkJN0Ex
RjJCNTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgKi8sCiAJCQkJMUM4
MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTFDODFC
OTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKQEAgLTIy
MjkzLDYgKzIyMjk5LDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQzI4NDI0MTJEREYy
N0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNDk3Niw2ICsyNDk4Myw3IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJD
IC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJE
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBiOGFlYTBlLi4zMGNjNTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQpAQCAtMjUsNiArMjUsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7CiAg
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCiAgICAgImRvbWFpbkFj
Y2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQiLAogfTsK
KyR0eXBlVHJhbnNmb3JteyJCcm93c2VyRGVidWdnZXIifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9p
bnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1Z2dlckFnZW50IiwKK307CiAkdHlwZVRy
YW5zZm9ybXsiRGF0YWJhc2UifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRhdGFi
YXNlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBlZDAwY2M3Li43ZWFlNTM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjI0LDYgKzIyNCw5
IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBlbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIGRpc2FibGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CisK
KyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4g
T2JqZWN0IGJyZWFrcG9pbnRzKTsKKwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJd
IHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAKQEAgLTIzOCwxNiArMjQxLDEyIEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzZXRCcmVha3Bv
aW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGluIFN0
cmluZyBjb25kaXRpb24sIGluIGJvb2xlYW4gZW5hYmxlZCwgb3V0IFN0cmluZyBicmVha3BvaW50
SWQsIG91dCB1bnNpZ25lZCBpbnQgYWN0dWFsTGluZU51bWJlcik7CiAgICAgICAgIFtkb21haW49
RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsK
IAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRTdGlja3lCcmVha3BvaW50cyhp
biBPYmplY3QgYnJlYWtwb2ludHMpOyAvLyBGSVhNRTogTW92ZSB0byBuZXdseSBpbnRyb2R1Y2Vk
IEJyb3dzZXJEZWJ1Z2dlci4KLQotICAgICAgICBbZG9tYWluPURPTV0gdm9pZCBzZXRET01CcmVh
a3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOyAvLyBGSVhNRTogTW92ZSB0byBu
ZXdseSBpbnRyb2R1Y2VkIEJyb3dzZXJEZWJ1Z2dlci4KLSAgICAgICAgW2RvbWFpbj1ET01dIHZv
aWQgcmVtb3ZlRE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsgLy8g
RklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAg
ICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4g
U3RyaW5nIGV2ZW50TmFtZSk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJv
d3NlckRlYnVnZ2VyLgotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsgLy8gRklYTUU6IE1vdmUg
dG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAgICAgW2RvbWFpbj1J
bnNwZWN0b3JdIHZvaWQgc2V0WEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJsKTsgLy8gRklYTUU6
IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0gICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7IC8v
IEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3NlckRlYnVnZ2VyLgorICAgICAg
ICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRET01CcmVha3BvaW50KGluIGxvbmcg
bm9kZUlkLCBpbiBsb25nIHR5cGUpOworICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0g
dm9pZCByZW1vdmVET01CcmVha3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOwor
ICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRFdmVudExpc3RlbmVyQnJl
YWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsKKyAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVi
dWdnZXJdIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50
TmFtZSk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHNldFhIUkJyZWFr
cG9pbnQoaW4gU3RyaW5nIHVybCk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2
b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7CiAKICAgICAgICAgW2RvbWFp
bj1EZWJ1Z2dlcl0gdm9pZCBzdGVwT3ZlcigpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2
b2lkIHN0ZXBJbnRvKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ODdhMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtMCwwICsxLDI3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworbmFtZXNwYWNlIHsKKworZW51bSBET01CcmVha3Bv
aW50VHlwZSB7CisgICAgU3VidHJlZU1vZGlmaWVkID0gMCwKKyAgICBBdHRyaWJ1dGVNb2RpZmll
ZCwKKyAgICBOb2RlUmVtb3ZlZCwKKyAgICBET01CcmVha3BvaW50VHlwZXNDb3VudAorfTsKKwor
Y29uc3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwg
U3VidHJlZU1vZGlmaWVkKTsKK2NvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlm
dCA9IDE2OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIpCisgICAgOiBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAs
IG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChmYWxzZSkKK3sKK30KKworSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpCit7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5n
cygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigpOworfQorCit2b2lkIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKK3sKKyAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZl
bnROYW1lKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAg
bV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgdWludDMyX3Qg
bWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5v
ZGUobm9kZSkpOworICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNr
IHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxl
RE9NQnJlYWtwb2ludFR5cGVzTWFzazsKKyAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNr
KQorICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxl
VHlwZXNNYXNrLCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9icmVh
a3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMu
CisgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOworICAgICAgICBWZWN0b3I8Tm9k
ZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSkpOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhY2subGFzdCgpOworICAg
ICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUo
bm9kZSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
Rmlyc3RDaGlsZChub2RlKSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcobm9kZSkpOworICAgICAgICB9IHdoaWxlICghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2Rl
KiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAx
IDw8IHR5cGU7CisgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwgbV9icmVha3BvaW50cy5nZXQo
bm9kZSkgfCByb290Qml0KTsKKyAgICBpZiAocm9vdEJpdCAmIGluaGVyaXRhYmxlRE9NQnJlYWtw
b2ludFR5cGVzTWFzaykgeworICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICAgICAgdXBkYXRlU3VidHJl
ZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2Rl
SWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2RlKiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFn
ZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CisgICAgdWludDMyX3QgbWFzayA9
IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RCaXQ7CisgICAgaWYgKG1hc2spCisgICAg
ICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2spOworICAgIGVsc2UKKyAgICAgICAgbV9i
cmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisKKyAgICBpZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJs
ZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFzayAmIChyb290Qml0IDw8IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKGNoaWxkKSkKKyAgICAgICAgICAgIHVw
ZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgcm9vdEJpdCwgZmFsc2UpOworICAgIH0KK30K
KworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVJ
bnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZp
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVlTW9k
aWZpZWQsIHRydWUsIGRldGFpbHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpz
aG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQs
IGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICho
YXNCcmVha3BvaW50KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVt
ZW50LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKK3sKKyAgICBpZiAoaGFz
QnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3Jp
cHRpb25Gb3JET01FdmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGRldGFp
bHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2
ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoaGFz
QnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7CisKKyAgICBOb2RlKiBicmVha3Bv
aW50T3duZXIgPSB0YXJnZXQ7CisgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVy
aXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgeworICAgICAgICAvLyBGb3IgaW5oZXJpdGFi
bGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFz
IHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCisgICAgICAgIC8vIFRhcmdldCBub2Rl
IG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3Qu
CisgICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5w
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKHRhcmdldCk7CisgICAgICAgIEFTU0VSVCh0YXJnZXROb2Rl
SWQpOworICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJn
ZXROb2RlSWQpOworCisgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgorICAg
ICAgICBpZiAoIWluc2VydGlvbikKKyAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IEluc3Bl
Y3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGJy
ZWFrcG9pbnRPd25lcik7CisgICAgICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0KGJyZWFr
cG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7CisgICAgICAgICAgICBicmVh
a3BvaW50T3duZXIgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFrcG9p
bnRPd25lcik7CisgICAgICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCisgICAg
ICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsK
KyAgICB9CisKKyAgICBsb25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1fY29udHJvbGxlci0+
bV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChicmVha3BvaW50T3duZXIpOworICAg
IEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOworICAgIGRlc2NyaXB0aW9uLT5zZXROdW1i
ZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CisgICAgZGVzY3JpcHRpb24tPnNl
dE51bWJlcigidHlwZSIsIGJyZWFrcG9pbnRUeXBlKTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpCit7
CisgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEgPDwgdHlwZTsKKyAgICB1aW50MzJfdCBkZXJpdmVk
Qml0ID0gcm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKKyAgICByZXR1
cm4gbV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtw
b2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQoreworICAgIHVp
bnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKKyAgICB1aW50MzJfdCBk
ZXJpdmVkTWFzayA9IHJvb3RNYXNrIDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0Owor
ICAgIHVpbnQzMl90IG5ld01hc2sgPSBzZXQgPyBvbGRNYXNrIHwgZGVyaXZlZE1hc2sgOiBvbGRN
YXNrICYgfmRlcml2ZWRNYXNrOworICAgIGlmIChuZXdNYXNrKQorICAgICAgICBtX2JyZWFrcG9p
bnRzLnNldChub2RlLCBuZXdNYXNrKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpOworCisgICAgdWludDMyX3QgbmV3Um9vdE1hc2sgPSByb290TWFzayAmIH5u
ZXdNYXNrOworICAgIGlmICghbmV3Um9vdE1hc2spCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUp
OyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCisgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgbmV3Um9vdE1hc2ss
IHNldCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0V2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAgIHJldHVy
biBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUpOworfQorCit2
b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9YSFJC
cmVha3BvaW50cy5hZGQodXJsKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0g
ZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwor
fQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpoYXNYSFJCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpCit7CisgICAgaWYgKG1f
aGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCkgeworICAgICAgICAqYnJlYWtwb2ludFVSTCA9
ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChIYXNoU2V0PFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ID0gbV9YSFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJy
ZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICh1cmwuY29udGFpbnMoKml0KSkg
eworICAgICAgICAgICAgKmJyZWFrcG9pbnRVUkwgPSAqaXQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKQorewor
ICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3Bv
aW50cy5jbGVhcigpOworICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKSAmJiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjYjdhOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5o
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
X2gKKyNkZWZpbmUgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaAorCisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXI7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBOb2RlOworCitjbGFzcyBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0
ZShJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChjb250cm9sbGVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsK
KworICAgIC8vIEJyb3dzZXJEZWJ1Z2dlciBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCisgICAg
dm9pZCBzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHJlbW92
ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0RXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgcmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIHJl
bW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisKKyAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCisgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUq
KTsKKyAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOworICAgIGJvb2wgc2hvdWxkQnJl
YWtPbk5vZGVJbnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRldGFpbHMpOworICAgIGJvb2wgc2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKE5v
ZGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CisgICAgYm9vbCBzaG91
bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGV0YWlscyk7CisgICAgYm9vbCBoYXNFdmVudExpc3RlbmVyQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7CisgICAgYm9vbCBoYXNYSFJCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpOworCisgICAgdm9pZCBjbGVh
ckZvclBhZ2VOYXZpZ2F0aW9uKCk7Citwcml2YXRlOgorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgIHZvaWQgZGVzY3JpcHRpb25G
b3JET01FdmVudChOb2RlKiB0YXJnZXQsIGxvbmcgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0
aW9uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGVzY3JpcHRpb24pOworICAgIHZvaWQg
dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBz
ZXQpOworICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiwgbG9uZyB0eXBlKTsKKyAgICB2b2lk
IGRpc2NhcmRCaW5kaW5ncygpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9jb250cm9s
bGVyOworICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOworICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoU2V0PFN0
cmluZz4gbV9YSFJCcmVha3BvaW50czsKKyAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhF
bXB0eVVSTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBlZTE1MzZmLi44
NjRjMTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgpAQCAtMTQ3LDcgKzE0OCw2
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX2hh
c1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQo
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC0xNzcs
NiArMTc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkKCkKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJB
Z2VudC5jbGVhcigpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKICNlbmRp
ZgogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7
CkBAIC03MjcsMTAgKzcyOCwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1p
dExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsK
IAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICBpZiAobV9kZWJ1Z2dl
ckFnZW50KSB7CisgICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKLSAgICAgICAgICAgIHJlc3Rv
cmVTdGlja3lCcmVha3BvaW50cygpOwotICAgICAgICB9CisgICAgICAgIGlmIChtX2Jyb3dzZXJE
ZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+Y2xlYXJG
b3JQYWdlTmF2aWdhdGlvbigpOworICAgICAgICByZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCkBA
IC0xMTgzLDYgKzExODUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwogCiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJlc3RvcmVT
dGlja3lCcmVha3BvaW50cygpOwogCiAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVk
KCk7CkBAIC0xMjE1LDYgKzEyMTgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Fi
bGVEZWJ1Z2dlcihib29sIGFsd2F5cykKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAog
ICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y2xlYXIoKTsKIAogICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBmYWxzZTsKIApAQCAt
MTIzNSwxMCArMTIzOSw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U3RpY2t5QnJl
YWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrCiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX2V2ZW50
TGlzdGVuZXJCcmVha3BvaW50cy5jbGVhcigpOwotICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIo
KTsKLSAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKLQogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFsbEJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0
KEluc3BlY3RvclN0YXRlOjpzdGlja3lCcmVha3BvaW50cyk7CiAgICAgS1VSTCB1cmwgPSBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgdXJsLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOwpAQCAtMTI2NywxMyArMTI2NywxNCBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicgogICAgIGlmICghY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5cGUpIHsKKyAgICBpZiAodHlw
ZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5cGUgJiYgbV9icm93c2VyRGVidWdnZXJBZ2Vu
dCkgewogICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IFN0cmluZyBldmVudE5hbWU7Ci0gICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygiZXZl
bnROYW1lIiwgJmV2ZW50TmFtZSkpCi0gICAgICAgICAgICBzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludChldmVudE5hbWUpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBqYXZhU2NyaXB0QnJlYWtw
b2ludFR5cGUpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygiZXZlbnROYW1l
IiwgJmV2ZW50TmFtZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fYnJvd3NlckRl
YnVnZ2VyQWdlbnQtPnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7CisgICAg
fSBlbHNlIGlmICh0eXBlID09IGphdmFTY3JpcHRCcmVha3BvaW50VHlwZSAmJiBtX2RlYnVnZ2Vy
QWdlbnQpIHsKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdl
dFN0cmluZygidXJsIiwgJnVybCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjgzLDYzICsx
Mjg0LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9p
bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyCiAgICAgICAgIFN0cmluZyBqYXZhU2Ny
aXB0Q29uZGl0aW9uOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJjb25kaXRp
b24iLCAmamF2YVNjcmlwdENvbmRpdGlvbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0
aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGph
dmFTY3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJC
cmVha3BvaW50VHlwZSkgeworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0aWNreUJyZWFr
cG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGphdmFTY3JpcHRD
b25kaXRpb24sIGVuYWJsZWQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50
VHlwZSAmJiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50KSB7CiAgICAgICAgIGlmICghZW5hYmxlZCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgaWYgKGNv
bmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKLSAgICAgICAgICAgIHNldFhIUkJyZWFr
cG9pbnQodXJsKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMuYWRkKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCi17Ci0gICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2
ZW50TmFtZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgcmV0dXJuIG1fZXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNvbnRhaW5zKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0WEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKLXsK
LSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVt
cHR5VVJMID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIG1fWEhSQnJlYWtwb2ludHMuYWRkKHVy
bCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9o
YXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgICBt
X1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6Omhhc1hIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2lu
dFVSTCkKLXsKLSAgICBpZiAobV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKSB7Ci0gICAg
ICAgICpicmVha3BvaW50VVJMID0gIiI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJyZWFrcG9pbnRzLmJl
Z2luKCk7IGl0ICE9IG1fWEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYg
KHVybC5jb250YWlucygqaXQpKSB7Ci0gICAgICAgICAgICAqYnJlYWtwb2ludFVSTCA9ICppdDsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICghY29uZGl0
aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5zZXRYSFJCcmVha3BvaW50KHVybCk7CiAgICAgfQot
ICAgIHJldHVybiBmYWxzZTsKIH0KLQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBmZWYyYTZk
Li4zYmFmNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJ
bmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOworY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNz
IEluc3BlY3RvckRPTUFnZW50OwpAQCAtMjM0LDEyICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXN1bWUoKTsKIAogICAgIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKTsKLSAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICBib29sIGhh
c0V2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2
b2lkIHNldFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcmVtb3Zl
WEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgYm9vbCBoYXNYSFJCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsK
QEAgLTI2Niw2ICsyNjEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kOwogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjsKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKICAgICBmcmllbmQgY2xh
c3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogCkBAIC0zNzIsMTAgKzM2OCw3IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2Vy
V2hlblNob3duOwogICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2Vy
QWdlbnQ7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7
Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7Ci0gICAgYm9vbCBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkw7CisgICAgT3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50PiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50OwogCiAgICAgT3duUHRyPEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNWQ4ZjQwOC4uMTlhZTMw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CkBAIC0yMDQsMTYgKzIwNCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4
dEpvYigpIHsgfQogfTsKIAotZW51bSBET01CcmVha3BvaW50VHlwZSB7Ci0gICAgU3VidHJlZU1v
ZGlmaWVkID0gMCwKLSAgICBBdHRyaWJ1dGVNb2RpZmllZCwKLSAgICBOb2RlUmVtb3ZlZCwKLSAg
ICBET01CcmVha3BvaW50VHlwZXNDb3VudAotfTsKLQotY29uc3QgdWludDMyX3QgaW5oZXJpdGFi
bGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwgU3VidHJlZU1vZGlmaWVkKTsKLWNvbnN0
IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2OwotCiB9CiAKIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
CkBAIC00MDQsNyArMzk0LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRp
bmdzKCkKICAgICByZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogICAgIG1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY2xlYXIoKTsKICAgICBtX2luc3BlY3RlZE5vZGVzLmNsZWFyKCk7Ci0gICAgbV9icmVha3Bv
aW50cy5jbGVhcigpOwogfQogCiBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxv
bmcgaWQpCkBAIC03NjksMTAxICs3NTgsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZWFy
Y2hDYW5jZWxlZCgpCiAgICAgbV9zZWFyY2hSZXN1bHRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkK
LXsKLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB1aW50MzJfdCByb290Qml0ID0gMSA8PCB0eXBlOwotICAg
IG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpIHwgcm9vdEJp
dCk7Ci0gICAgaWYgKHJvb3RCaXQgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2sp
IHsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hp
bGQ7IGNoaWxkID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgICAgICB1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwotICAgIH0KLX0KLQotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9u
ZyB0eXBlKQotewotICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5
cGU7Ci0gICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RC
aXQ7Ci0gICAgaWYgKG1hc2spCi0gICAgICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2sp
OwotICAgIGVsc2UKLSAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7Ci0KLSAgICBp
ZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFz
ayAmIChyb290Qml0IDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKLSAgICAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxk
ID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJl
YWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJl
bnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNC
cmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICBkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBkZXRhaWxzKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
bnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNCcmVha3Bv
aW50KG5vZGUsIE5vZGVSZW1vdmVkKSkgewotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxzZSwgZGV0YWlscyk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hv
dWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKLXsKLSAgICBpZiAoaGFzQnJlYWtwb2ludChl
bGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01F
dmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGRldGFpbHMpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkZXNjcmlwdGlvbikKLXsKLSAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCh0YXJnZXQsIGJyZWFr
cG9pbnRUeXBlKSk7Ci0KLSAgICBOb2RlKiBicmVha3BvaW50T3duZXIgPSB0YXJnZXQ7Ci0gICAg
aWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVz
TWFzaykgewotICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFy
Z2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJy
ZWFrcG9pbnQuCi0gICAgICAgIC8vIFRhcmdldCBub2RlIG1heSBiZSB1bmtub3duIHRvIGZyb250
ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0gICAgICAgIGxvbmcgdGFyZ2V0Tm9k
ZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZCh0YXJnZXQpOwotICAgICAgICBBU1NFUlQodGFy
Z2V0Tm9kZUlkKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNldE51bWJlcigidGFyZ2V0Tm9kZUlk
IiwgdGFyZ2V0Tm9kZUlkKTsKLQotICAgICAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIgbm9k
ZS4KLSAgICAgICAgaWYgKCFpbnNlcnRpb24pCi0gICAgICAgICAgICBicmVha3BvaW50T3duZXIg
PSBpbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKLSAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25l
cik7Ci0gICAgICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikg
JiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7Ci0gICAgICAgICAgICBicmVha3BvaW50T3duZXIg
PSBpbm5lclBhcmVudE5vZGUoYnJlYWtwb2ludE93bmVyKTsKLSAgICAgICAgICAgIEFTU0VSVChi
cmVha3BvaW50T3duZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBl
ID09IFN1YnRyZWVNb2RpZmllZCkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRCb29sZWFu
KCJpbnNlcnRpb24iLCBpbnNlcnRpb24pOwotICAgIH0KLQotICAgIGxvbmcgYnJlYWtwb2ludE93
bmVyTm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChicmVha3BvaW50T3duZXIpOwot
ICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRlc2NyaXB0aW9uLT5zZXRO
dW1iZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24t
PnNldE51bWJlcigidHlwZSIsIGJyZWFrcG9pbnRUeXBlKTsKLX0KLQogU3RyaW5nIEluc3BlY3Rv
ckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCkBAIC0xMDcw
LDEzICs5NjQsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5v
ZGUqIG5vZGUpCiAgICAgaWYgKGlzV2hpdGVzcGFjZShub2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1hc2sg
PSBtX2JyZWFrcG9pbnRzLmdldChpbm5lclBhcmVudE5vZGUobm9kZSkpOwotICAgICAgICB1aW50
MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2lu
dERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsK
LSAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNrKQotICAgICAgICAgICAgdXBkYXRlU3Vi
dHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKLSAgICB9
Ci0KICAgICAvLyBXZSBjb3VsZCBiZSBhdHRhY2hpbmcgZXhpc3Rpbmcgc3VidHJlZS4gRm9yZ2V0
IHRoZSBiaW5kaW5ncy4KICAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7
CiAKQEAgLTExMDMsMjEgKzk5MCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXNXaGl0ZXNwYWNlKG5vZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgLy8g
UmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMuCi0gICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3Zl
KG5vZGUpOwotICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIGlubmVyRmlyc3RDaGlsZChu
b2RlKSk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFjay5sYXN0
KCk7Ci0gICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrcG9pbnRz
LnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChpbm5lckZpcnN0Q2hpbGQo
bm9kZSkpOwotICAgICAgICAgICAgc3RhY2suYXBwZW5kKGlubmVyTmV4dFNpYmxpbmcobm9kZSkp
OwotICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKLSAgICB9Ci0KICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgbG9uZyBwYXJlbnRJ
ZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBJZiBwYXJlbnQg
aXMgbm90IG1hcHBlZCB5ZXQgLT4gaWdub3JlIHRoZSBldmVudC4KQEAgLTExNTcsMzEgKzEwMjks
NiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFj
dGVyRGF0YSogY2hhcmFjdGVyRGF0YSkKICAgICBtX2Zyb250ZW5kLT5jaGFyYWN0ZXJEYXRhTW9k
aWZpZWQoaWQsIGNoYXJhY3RlckRhdGEtPmRhdGEoKSk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9N
QWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQotewotICAgIHVpbnQz
Ml90IHJvb3RCaXQgPSAxIDw8IHR5cGU7Ci0gICAgdWludDMyX3QgZGVyaXZlZEJpdCA9IHJvb3RC
aXQgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7Ci0gICAgcmV0dXJuIG1fYnJlYWtw
b2ludHMuZ2V0KG5vZGUpICYgKHJvb3RCaXQgfCBkZXJpdmVkQml0KTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQz
Ml90IHJvb3RNYXNrLCBib29sIHNldCkKLXsKLSAgICB1aW50MzJfdCBvbGRNYXNrID0gbV9icmVh
a3BvaW50cy5nZXQobm9kZSk7Ci0gICAgdWludDMyX3QgZGVyaXZlZE1hc2sgPSByb290TWFzayA8
PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKLSAgICB1aW50MzJfdCBuZXdNYXNrID0g
c2V0ID8gb2xkTWFzayB8IGRlcml2ZWRNYXNrIDogb2xkTWFzayAmIH5kZXJpdmVkTWFzazsKLSAg
ICBpZiAobmV3TWFzaykKLSAgICAgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwgbmV3TWFzayk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLQotICAgIHVp
bnQzMl90IG5ld1Jvb3RNYXNrID0gcm9vdE1hc2sgJiB+bmV3TWFzazsKLSAgICBpZiAoIW5ld1Jv
b3RNYXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gaW5uZXJG
aXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBpbm5lck5leHRTaWJsaW5nKGNoaWxkKSkK
LSAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCBuZXdSb290TWFzaywgc2V0
KTsKLX0KLQogTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICAvLyBUaGUgcGF0aCBpcyBvZiBmb3JtICIxLEhUTUwsMixCT0RZLDEs
RElWIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCAzNjYyN2Y1Li5hMDVmN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaApAQCAtMTQ0LDggKzE0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29u
c3Q7CiAKLSAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5
cGUpOwotICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcg
dHlwZSk7CisgICAgICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBv
ZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93
bmVycyBkaWZmZXJlbnRseS4KKyAgICAgICAgLy8gV2UgYWxzbyBza2lwIHdoaXRlc3BhY2UgdGV4
dCBub2RlcyBjb25kaXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0aG9kcyBlbmNhcHN1bGF0ZSB0aGVz
ZSBzcGVjaWZpY3MuCisgICAgICAgIHN0YXRpYyBOb2RlKiBpbm5lckZpcnN0Q2hpbGQoTm9kZSog
bm9kZSk7CisgICAgICAgIHN0YXRpYyBOb2RlKiBpbm5lck5leHRTaWJsaW5nKE5vZGUqIG5vZGUp
OworICAgICAgICBzdGF0aWMgTm9kZSogaW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSogbm9kZSk7
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5vZGUp
OworICAgICAgICBzdGF0aWMgTm9kZSogaW5uZXJQYXJlbnROb2RlKE5vZGUqIG5vZGUpOworICAg
ICAgICBzdGF0aWMgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSogbm9kZSk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nRnJhbWVEb2N1bWVudChOb2RlKiBmcmFtZU93
bmVyTm9kZSk7CkBAIC0xNzAsMTUgKzE3Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxk
cmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwog
ICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JFdmVudExp
c3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIG5vZGUpOwogCi0gICAg
ICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBvZiB0aGUgc2FtZSBo
aWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93bmVycyBkaWZmZXJl
bnRseS4KLSAgICAgICAgLy8gV2UgYWxzbyBza2lwIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjb25k
aXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0aG9kcyBlbmNhcHN1bGF0ZSB0aGVzZSBzcGVjaWZpY3Mu
Ci0gICAgICAgIE5vZGUqIGlubmVyRmlyc3RDaGlsZChOb2RlKiBub2RlKTsKLSAgICAgICAgTm9k
ZSogaW5uZXJOZXh0U2libGluZyhOb2RlKiBub2RlKTsKLSAgICAgICAgTm9kZSogaW5uZXJQcmV2
aW91c1NpYmxpbmcoTm9kZSogbm9kZSk7Ci0gICAgICAgIHVuc2lnbmVkIGlubmVyQ2hpbGROb2Rl
Q291bnQoTm9kZSogbm9kZSk7Ci0gICAgICAgIE5vZGUqIGlubmVyUGFyZW50Tm9kZShOb2RlKiBu
b2RlKTsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSogbm9kZSk7Ci0KICAgICAgICAg
RG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBvbk1h
dGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopOwpAQCAtMjAzLDcgKzIwMCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+
IG1fbWF0Y2hKb2JzVGltZXI7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9zZWFy
Y2hSZXN1bHRzOwogICAgICAgICBWZWN0b3I8bG9uZz4gbV9pbnNwZWN0ZWROb2RlczsKLSAgICAg
ICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fYnJlYWtwb2ludHM7CiAgICAgfTsKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCmluZGV4IDkzOTVkZDUuLmQxYTIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaCIKQEAgLTg0LDExICs4NSwxMSBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlYwogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNw
ZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dl
ckFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFn
ZW50KQorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJB
Z2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7
CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZUluc2VydGlvbihub2RlLCBw
YXJlbnQsIGV2ZW50RGF0YSkpIHsKKyAgICBpZiAoYnJvd3NlckRlYnVnZ2VyQWdlbnQtPnNob3Vs
ZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKG5vZGUsIHBhcmVudCwgZXZlbnREYXRhKSkgewogICAgICAg
ICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludFR5cGUiLCBkb21OYXRpdmVCcmVha3Bv
aW50VHlwZSk7CiAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVh
a3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CiAgICAgfQpAQCAtOTksNiArMTAw
LDggQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBs
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3QKIHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdl
bnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKSkKICAg
ICAgICAgZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgaWYgKEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNv
bnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCkpCisgICAgICAgIGJyb3dzZXJE
ZWJ1Z2dlckFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIE5vZGUqIG5vZGUpCkBAIC0xMDcsMTEgKzExMCwxMSBA
QCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlYwogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRl
YnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7
CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAgSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQo
KTsKLSAgICBpZiAoIWRvbUFnZW50KQorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRl
YnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAg
ICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9k
ZVJlbW92YWwobm9kZSwgZXZlbnREYXRhKSkgeworICAgIGlmIChicm93c2VyRGVidWdnZXJBZ2Vu
dC0+c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKG5vZGUsIGV2ZW50RGF0YSkpIHsKICAgICAgICAg
ZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2lu
dFR5cGUpOwogICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtw
b2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOwogICAgIH0KQEAgLTEyMCw2ICsxMjMs
MTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1w
bChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIsIE5vZGUqIG5vZGUpCiB7CisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93
c2VyRGVidWdnZXJBZ2VudC5nZXQoKTsKKyAgICBpZiAoYnJvd3NlckRlYnVnZ2VyQWdlbnQpCisg
ICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOworCiAg
ICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXIt
Pm1fZG9tQWdlbnQuZ2V0KCkpCiAgICAgICAgIGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5v
ZGUpOwogfQpAQCAtMTMwLDExICsxMzcsMTEgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxNb2RpZnlET01BdHRySW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKICAg
ICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJv
bGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOwogICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwotICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPm1fZG9tQWdlbnQuZ2V0KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkKKyAgICBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCogYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBpbnNw
ZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmdldCgpOworICAgIGlmICgh
YnJvd3NlckRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlm
IChkb21BZ2VudC0+c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50LCBl
dmVudERhdGEpKSB7CisgICAgaWYgKGJyb3dzZXJEZWJ1Z2dlckFnZW50LT5zaG91bGRCcmVha09u
QXR0cmlidXRlTW9kaWZpY2F0aW9uKGVsZW1lbnQsIGV2ZW50RGF0YSkpIHsKICAgICAgICAgZXZl
bnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5
cGUpOwogICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2lu
dERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOwogICAgIH0KQEAgLTE2MCw4ICsxNjcsMTIg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3RJ
bXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGkKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2Vy
RGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7Ci0gICAgaWYgKCFpbnNwZWN0b3JDb250cm9s
bGVyLT5oYXNYSFJCcmVha3BvaW50KHVybCwgJmJyZWFrcG9pbnRVUkwpKQorICAgIGlmICghYnJv
d3NlckRlYnVnZ2VyQWdlbnQtPmhhc1hIUkJyZWFrcG9pbnQodXJsLCAmYnJlYWtwb2ludFVSTCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CkBAIC01NDksOSArNTYwLDE1IEBAIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpCiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJB
Z2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKICAgICBp
ZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKKworICAgIEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xs
ZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdn
ZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgU3RyaW5nIGZ1bGxFdmVudE5hbWUgPSBT
dHJpbmc6OmZvcm1hdCgiJXM6JXMiLCBjYXRlZ29yeVR5cGUudXRmOCgpLmRhdGEoKSwgZXZlbnRO
YW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmICghaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVsbEV2ZW50TmFtZSkpCisgICAgaWYgKCFicm93c2VyRGVi
dWdnZXJBZ2VudC0+aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVsbEV2ZW50TmFtZSkpCiAg
ICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJy
ZWFrcG9pbnRUeXBlIiwgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKICAgICBl
dmVudERhdGEtPnNldFN0cmluZygiZXZlbnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78690</attachid>
            <date>2011-01-12 07:28:35 -0800</date>
            <delta_ts>2011-01-13 05:53:05 -0800</delta_ts>
            <desc>[patch] next iteration.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>50692</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjIxMmZiOC4uMmFmMzg1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTAsNiArMTE1MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAor
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA1YmYxMDczLi4wNzg4YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDEt
MTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJh
Y3QgQnJvd3NlckRlYnVnZ2VyQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JET01BZ2VudCBhbmQgSW5zcGVjdG9yRGVidWdnZXIgYWdlbnQuCisgICAgICAgIFdlIGhhdmUg
c29tZSBtZXRob2RzIG9mIERlYnVnZ2VyIHdoaWNoIGFyZSByZWxhdGVkIHRvIERPTS4KKyAgICAg
ICAgTGV0cyBleHRyYWN0IHRoZXNlIG1ldGhvZHMgdG8gQnJvd3NlckRlYnVnZ2VyIGFnZW50Lgor
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjk0CisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5J
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldERPTUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzaG91bGRCcmVha09uTm9k
ZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNob3VsZEJyZWFrT25BdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0Jy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZVhIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6Omhhc1hIUkJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24pOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2Vy
RnJvbUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRp
c2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkQmlu
ZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERP
TU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURP
TU5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZUltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01O
b2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondp
bGxSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9u
TmF0aXZlRXZlbnRJZk5lZWRlZCk6CisKIDIwMTAtMTItMjkgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA4M2U1NWQ0Li5jZWQxMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0xOTk5LDYgKzE5OTksOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDbGll
bnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IDI3Y2Q1ODIuLjZkMGYyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDQyLDYgKzEwNDIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXApAQCAtMTkzMyw2ICsxOTM0LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggXAogICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCBiZmZjNmQ2Li42NWNjYTcwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjQ5NDIsNiArNjQ5NDIsMTQgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JDbGllbnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
MzhmODJkLi5jNDVkMzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjYwLDYgKzEyNjAsOCBAQAogCQk0RjcwN0E5QTExRUY2
Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGNzA3QTk4MTFFRjY3OTQwMEFDREE2
OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovOyB9OwogCQk0RkEzQjkwQTEyNUNE
MTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZBM0I5MDgxMjVDRDEyMTAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmNwcCAqLzsgfTsKIAkJNEZBM0I5MEIxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3Bl
Y3RvclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0RkEzQjkwOTEyNUNEMTIyMDAzMDBCQUQgLyogSW5zcGVjdG9yU3RhdGUuaCAqLzsgfTsKKwkJ
NEZDMjg0MjQxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkMyODQy
MjEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCAqLzsg
fTsKKwkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGQzI4NDIzMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dC5jcHAgKi87IH07CiAJCTRGRDhEMEYyMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhE
MEYwMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLzsgfTsKIAkJNEZEOEQw
RjMxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAvKiBT
Y3JpcHRHQ0V2ZW50LmggKi87IH07CiAJCTUxMDE4NDY5MEIwODYwMkEwMDRBODI1RiAvKiBDYWNo
ZWRQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03NjMwLDYgKzc2MzIsOCBAQAogCQk0
RjcwN0E5ODExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEZBM0I5MDgxMjVDRDEyMTAwMzAw
QkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluc3BlY3RvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
RkMyODQyMzEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RkQ4RDBG
MDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRHQ0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0R0NFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxODQ2NzBCMDg2MDJBMDA0QTgyNUYgLyogQ2FjaGVk
UGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRQYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjkwMCw2ICsxMjkwNCw4IEBACiAJCQkJN0Ew
RTc2RjgxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5pZGwgKi8sCiAJCQkJ
Qjg4NUU4RDIxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAgKi8sCiAJCQkJQjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oICovLAorCQkJCTRGQzI4NDIyMTJEREYyN0UwMEJGNDJFNCAvKiBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oICovLAorCQkJCTRGQzI4NDIzMTJEREYyN0Uw
MEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgKi8sCiAJCQkJN0Ex
RjJCNTExMjZDNjFCMjAwMDZBN0U2IC8qIEluc3BlY3RvckNsaWVudC5jcHAgKi8sCiAJCQkJMUM4
MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTFDODFC
OTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKQEAgLTIy
MjkzLDYgKzIyMjk5LDcgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGQzI4NDI0MTJEREYy
N0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0yNDk3Niw2ICsyNDk4Myw3IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJD
IC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJE
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNEZDMjg0MjUxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBiOGFlYTBlLi4zMGNjNTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQpAQCAtMjUsNiArMjUsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7CiAg
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCiAgICAgImRvbWFpbkFj
Y2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdlbnQiLAogfTsK
KyR0eXBlVHJhbnNmb3JteyJCcm93c2VyRGVidWdnZXIifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9p
bnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1Z2dlckFnZW50IiwKK307CiAkdHlwZVRy
YW5zZm9ybXsiRGF0YWJhc2UifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRhdGFi
YXNlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBlZDAwY2M3Li43ZWFlNTM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjI0LDYgKzIyNCw5
IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBlbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIGRpc2FibGVEZWJ1Z2dlcihpbiBib29sZWFuIGFsd2F5cyk7CisK
KyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoaW4g
T2JqZWN0IGJyZWFrcG9pbnRzKTsKKwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJd
IHZvaWQgZGVidWdnZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAKQEAgLTIzOCwxNiArMjQxLDEyIEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzZXRCcmVha3Bv
aW50KGluIFN0cmluZyBzb3VyY2VJRCwgaW4gdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGluIFN0
cmluZyBjb25kaXRpb24sIGluIGJvb2xlYW4gZW5hYmxlZCwgb3V0IFN0cmluZyBicmVha3BvaW50
SWQsIG91dCB1bnNpZ25lZCBpbnQgYWN0dWFsTGluZU51bWJlcik7CiAgICAgICAgIFtkb21haW49
RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsK
IAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXRTdGlja3lCcmVha3BvaW50cyhp
biBPYmplY3QgYnJlYWtwb2ludHMpOyAvLyBGSVhNRTogTW92ZSB0byBuZXdseSBpbnRyb2R1Y2Vk
IEJyb3dzZXJEZWJ1Z2dlci4KLQotICAgICAgICBbZG9tYWluPURPTV0gdm9pZCBzZXRET01CcmVh
a3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOyAvLyBGSVhNRTogTW92ZSB0byBu
ZXdseSBpbnRyb2R1Y2VkIEJyb3dzZXJEZWJ1Z2dlci4KLSAgICAgICAgW2RvbWFpbj1ET01dIHZv
aWQgcmVtb3ZlRE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsgLy8g
RklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAg
ICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4g
U3RyaW5nIGV2ZW50TmFtZSk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJv
d3NlckRlYnVnZ2VyLgotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsgLy8gRklYTUU6IE1vdmUg
dG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAgICAgW2RvbWFpbj1J
bnNwZWN0b3JdIHZvaWQgc2V0WEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJsKTsgLy8gRklYTUU6
IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0gICAgICAgIFtkb21h
aW49SW5zcGVjdG9yXSB2b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7IC8v
IEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3NlckRlYnVnZ2VyLgorICAgICAg
ICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRET01CcmVha3BvaW50KGluIGxvbmcg
bm9kZUlkLCBpbiBsb25nIHR5cGUpOworICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0g
dm9pZCByZW1vdmVET01CcmVha3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOwor
ICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRFdmVudExpc3RlbmVyQnJl
YWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsKKyAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVi
dWdnZXJdIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50
TmFtZSk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHNldFhIUkJyZWFr
cG9pbnQoaW4gU3RyaW5nIHVybCk7CisgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2
b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoaW4gU3RyaW5nIHVybCk7CiAKICAgICAgICAgW2RvbWFp
bj1EZWJ1Z2dlcl0gdm9pZCBzdGVwT3ZlcigpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2
b2lkIHN0ZXBJbnRvKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ODdhMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtMCwwICsxLDI3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKworI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKworbmFtZXNwYWNlIHsKKworZW51bSBET01CcmVha3Bv
aW50VHlwZSB7CisgICAgU3VidHJlZU1vZGlmaWVkID0gMCwKKyAgICBBdHRyaWJ1dGVNb2RpZmll
ZCwKKyAgICBOb2RlUmVtb3ZlZCwKKyAgICBET01CcmVha3BvaW50VHlwZXNDb3VudAorfTsKKwor
Y29uc3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwg
U3VidHJlZU1vZGlmaWVkKTsKK2NvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlm
dCA9IDE2OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIpCisgICAgOiBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAs
IG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChmYWxzZSkKK3sKK30KKworSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCgpCit7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5n
cygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigpOworfQorCit2b2lkIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKK3sKKyAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZl
bnROYW1lKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit7CisgICAg
bV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgdWludDMyX3Qg
bWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5v
ZGUobm9kZSkpOworICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNr
IHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxl
RE9NQnJlYWtwb2ludFR5cGVzTWFzazsKKyAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNr
KQorICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxl
VHlwZXNNYXNrLCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9icmVh
a3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMu
CisgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOworICAgICAgICBWZWN0b3I8Tm9k
ZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSkpOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhY2subGFzdCgpOworICAg
ICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUo
bm9kZSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVy
Rmlyc3RDaGlsZChub2RlKSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcobm9kZSkpOworICAgICAgICB9IHdoaWxlICghc3RhY2su
aXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2Rl
KiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAx
IDw8IHR5cGU7CisgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwgbV9icmVha3BvaW50cy5nZXQo
bm9kZSkgfCByb290Qml0KTsKKyAgICBpZiAocm9vdEJpdCAmIGluaGVyaXRhYmxlRE9NQnJlYWtw
b2ludFR5cGVzTWFzaykgeworICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9N
QWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQorICAgICAgICAgICAgdXBkYXRlU3VidHJl
ZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2Rl
SWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2RlKiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFn
ZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CisgICAgdWludDMyX3QgbWFzayA9
IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RCaXQ7CisgICAgaWYgKG1hc2spCisgICAg
ICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2spOworICAgIGVsc2UKKyAgICAgICAgbV9i
cmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisKKyAgICBpZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJs
ZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFzayAmIChyb290Qml0IDw8IGRvbUJyZWFr
cG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IElu
c3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5nKGNoaWxkKSkKKyAgICAgICAgICAgIHVw
ZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgcm9vdEJpdCwgZmFsc2UpOworICAgIH0KK30K
KworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVJ
bnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZp
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQocGFyZW50LCBTdWJ0cmVlTW9k
aWZpZWQsIHRydWUsIGRldGFpbHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpz
aG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRldGFpbHMpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92
ZWQpKSB7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9kZVJlbW92ZWQs
IGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICho
YXNCcmVha3BvaW50KEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVt
ZW50LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKK3sKKyAgICBpZiAoaGFz
QnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKKyAgICAgICAgZGVzY3Jp
cHRpb25Gb3JET01FdmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGRldGFp
bHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2
ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoaGFz
QnJlYWtwb2ludCh0YXJnZXQsIGJyZWFrcG9pbnRUeXBlKSk7CisKKyAgICBOb2RlKiBicmVha3Bv
aW50T3duZXIgPSB0YXJnZXQ7CisgICAgaWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVy
aXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgeworICAgICAgICAvLyBGb3IgaW5oZXJpdGFi
bGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFz
IHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9pbnQuCisgICAgICAgIC8vIFRhcmdldCBub2Rl
IG1heSBiZSB1bmtub3duIHRvIGZyb250ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3Qu
CisgICAgICAgIGxvbmcgdGFyZ2V0Tm9kZUlkID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5w
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKHRhcmdldCk7CisgICAgICAgIEFTU0VSVCh0YXJnZXROb2Rl
SWQpOworICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJn
ZXROb2RlSWQpOworCisgICAgICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lciBub2RlLgorICAg
ICAgICBpZiAoIWluc2VydGlvbikKKyAgICAgICAgICAgIGJyZWFrcG9pbnRPd25lciA9IEluc3Bl
Y3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKKyAgICAgICAgQVNTRVJUKGJy
ZWFrcG9pbnRPd25lcik7CisgICAgICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0KGJyZWFr
cG9pbnRPd25lcikgJiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7CisgICAgICAgICAgICBicmVh
a3BvaW50T3duZXIgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKGJyZWFrcG9p
bnRPd25lcik7CisgICAgICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCisgICAg
ICAgICAgICBkZXNjcmlwdGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsK
KyAgICB9CisKKyAgICBsb25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1fY29udHJvbGxlci0+
bV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChicmVha3BvaW50T3duZXIpOworICAg
IEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOworICAgIGRlc2NyaXB0aW9uLT5zZXROdW1i
ZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CisgICAgZGVzY3JpcHRpb24tPnNl
dE51bWJlcigidHlwZSIsIGJyZWFrcG9pbnRUeXBlKTsKK30KKworYm9vbCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpCit7
CisgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEgPDwgdHlwZTsKKyAgICB1aW50MzJfdCBkZXJpdmVk
Qml0ID0gcm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKKyAgICByZXR1
cm4gbV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOworfQor
Cit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtw
b2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQoreworICAgIHVp
bnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKKyAgICB1aW50MzJfdCBk
ZXJpdmVkTWFzayA9IHJvb3RNYXNrIDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0Owor
ICAgIHVpbnQzMl90IG5ld01hc2sgPSBzZXQgPyBvbGRNYXNrIHwgZGVyaXZlZE1hc2sgOiBvbGRN
YXNrICYgfmRlcml2ZWRNYXNrOworICAgIGlmIChuZXdNYXNrKQorICAgICAgICBtX2JyZWFrcG9p
bnRzLnNldChub2RlLCBuZXdNYXNrKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpOworCisgICAgdWludDMyX3QgbmV3Um9vdE1hc2sgPSByb290TWFzayAmIH5u
ZXdNYXNrOworICAgIGlmICghbmV3Um9vdE1hc2spCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJGaXJzdENoaWxkKG5vZGUp
OyBjaGlsZDsgY2hpbGQgPSBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJOZXh0U2libGluZyhjaGls
ZCkpCisgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgbmV3Um9vdE1hc2ss
IHNldCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omhhc0V2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAgIHJldHVy
biBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUpOworfQorCit2
b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRYSFJCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9YSFJC
cmVha3BvaW50cy5hZGQodXJsKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0g
ZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwor
fQorCitib29sIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpoYXNYSFJCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpCit7CisgICAgaWYgKG1f
aGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCkgeworICAgICAgICAqYnJlYWtwb2ludFVSTCA9
ICIiOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChIYXNoU2V0PFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ID0gbV9YSFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJy
ZWFrcG9pbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICh1cmwuY29udGFpbnMoKml0KSkg
eworICAgICAgICAgICAgKmJyZWFrcG9pbnRVUkwgPSAqaXQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKQorewor
ICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3Bv
aW50cy5jbGVhcigpOworICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKSAmJiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjYjdhOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5o
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
X2gKKyNkZWZpbmUgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaAorCisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXI7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBOb2RlOworCitjbGFzcyBJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0
ZShJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChjb250cm9sbGVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsK
KworICAgIC8vIEJyb3dzZXJEZWJ1Z2dlciBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCisgICAg
dm9pZCBzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHJlbW92
ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0RXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgcmVtb3Zl
RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIHJl
bW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisKKyAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCisgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUq
KTsKKyAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOworICAgIGJvb2wgc2hvdWxkQnJl
YWtPbk5vZGVJbnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRldGFpbHMpOworICAgIGJvb2wgc2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKE5v
ZGUqLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CisgICAgYm9vbCBzaG91
bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGV0YWlscyk7CisgICAgYm9vbCBoYXNFdmVudExpc3RlbmVyQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7CisgICAgYm9vbCBoYXNYSFJCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpOworCisgICAgdm9pZCBjbGVh
ckZvclBhZ2VOYXZpZ2F0aW9uKCk7Citwcml2YXRlOgorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgIHZvaWQgZGVzY3JpcHRpb25G
b3JET01FdmVudChOb2RlKiB0YXJnZXQsIGxvbmcgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0
aW9uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGVzY3JpcHRpb24pOworICAgIHZvaWQg
dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBz
ZXQpOworICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiwgbG9uZyB0eXBlKTsKKyAgICB2b2lk
IGRpc2NhcmRCaW5kaW5ncygpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9jb250cm9s
bGVyOworICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOworICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoU2V0PFN0
cmluZz4gbV9YSFJCcmVha3BvaW50czsKKyAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhF
bXB0eVVSTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBlZTE1MzZmLi44
NjRjMTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgpAQCAtMTQ3LDcgKzE0OCw2
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX2hh
c1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQo
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC0xNzcs
NiArMTc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkKCkKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJB
Z2VudC5jbGVhcigpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKICNlbmRp
ZgogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7
CkBAIC03MjcsMTAgKzcyOCwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1p
dExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgbV9jb3VudHMuY2xlYXIoKTsK
IAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICBpZiAobV9kZWJ1Z2dl
ckFnZW50KSB7CisgICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKLSAgICAgICAgICAgIHJlc3Rv
cmVTdGlja3lCcmVha3BvaW50cygpOwotICAgICAgICB9CisgICAgICAgIGlmIChtX2Jyb3dzZXJE
ZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+Y2xlYXJG
b3JQYWdlTmF2aWdhdGlvbigpOworICAgICAgICByZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCkBA
IC0xMTgzLDYgKzExODUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwogCiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRl
KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOwogICAgIHJlc3RvcmVT
dGlja3lCcmVha3BvaW50cygpOwogCiAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVk
KCk7CkBAIC0xMjE1LDYgKzEyMTgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Fi
bGVEZWJ1Z2dlcihib29sIGFsd2F5cykKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAog
ICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOworICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y2xlYXIoKTsKIAogICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBmYWxzZTsKIApAQCAt
MTIzNSwxMCArMTIzOSw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U3RpY2t5QnJl
YWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrCiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX2V2ZW50
TGlzdGVuZXJCcmVha3BvaW50cy5jbGVhcigpOwotICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIo
KTsKLSAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKLQogICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFsbEJyZWFrcG9pbnRzID0gbV9zdGF0ZS0+Z2V0T2JqZWN0
KEluc3BlY3RvclN0YXRlOjpzdGlja3lCcmVha3BvaW50cyk7CiAgICAgS1VSTCB1cmwgPSBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCk7CiAgICAgdXJsLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOwpAQCAtMTI2NywxMyArMTI2NywxNCBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBicgogICAgIGlmICghY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5cGUpIHsKKyAgICBpZiAodHlw
ZSA9PSBldmVudExpc3RlbmVyQnJlYWtwb2ludFR5cGUgJiYgbV9icm93c2VyRGVidWdnZXJBZ2Vu
dCkgewogICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IFN0cmluZyBldmVudE5hbWU7Ci0gICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygiZXZl
bnROYW1lIiwgJmV2ZW50TmFtZSkpCi0gICAgICAgICAgICBzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludChldmVudE5hbWUpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBqYXZhU2NyaXB0QnJlYWtw
b2ludFR5cGUpIHsKKyAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygiZXZlbnROYW1l
IiwgJmV2ZW50TmFtZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fYnJvd3NlckRl
YnVnZ2VyQWdlbnQtPnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7CisgICAg
fSBlbHNlIGlmICh0eXBlID09IGphdmFTY3JpcHRCcmVha3BvaW50VHlwZSAmJiBtX2RlYnVnZ2Vy
QWdlbnQpIHsKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdl
dFN0cmluZygidXJsIiwgJnVybCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjgzLDYzICsx
Mjg0LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9p
bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyCiAgICAgICAgIFN0cmluZyBqYXZhU2Ny
aXB0Q29uZGl0aW9uOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJjb25kaXRp
b24iLCAmamF2YVNjcmlwdENvbmRpdGlvbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0
aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGph
dmFTY3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJC
cmVha3BvaW50VHlwZSkgeworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldFN0aWNreUJyZWFr
cG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGphdmFTY3JpcHRD
b25kaXRpb24sIGVuYWJsZWQpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50
VHlwZSAmJiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50KSB7CiAgICAgICAgIGlmICghZW5hYmxlZCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgaWYgKGNv
bmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKLSAgICAgICAgICAgIHNldFhIUkJyZWFr
cG9pbnQodXJsKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMuYWRkKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCi17Ci0gICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2
ZW50TmFtZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAgcmV0dXJuIG1fZXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNvbnRhaW5zKGV2ZW50TmFtZSk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0WEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKLXsK
LSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVt
cHR5VVJMID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIG1fWEhSQnJlYWtwb2ludHMuYWRkKHVy
bCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9o
YXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gZmFsc2U7Ci0gICAgZWxzZQotICAgICAgICBt
X1hIUkJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6Omhhc1hIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2lu
dFVSTCkKLXsKLSAgICBpZiAobV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKSB7Ci0gICAg
ICAgICpicmVha3BvaW50VVJMID0gIiI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJyZWFrcG9pbnRzLmJl
Z2luKCk7IGl0ICE9IG1fWEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYg
KHVybC5jb250YWlucygqaXQpKSB7Ci0gICAgICAgICAgICAqYnJlYWtwb2ludFVSTCA9ICppdDsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICghY29uZGl0
aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5zZXRYSFJCcmVha3BvaW50KHVybCk7CiAgICAgfQot
ICAgIHJldHVybiBmYWxzZTsKIH0KLQogI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBmZWYyYTZk
Li4zYmFmNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJ
bmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOworY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNz
IEluc3BlY3RvckRPTUFnZW50OwpAQCAtMjM0LDEyICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXN1bWUoKTsKIAogICAgIHZvaWQgc2V0U3RpY2t5QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKTsKLSAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICBib29sIGhh
c0V2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2
b2lkIHNldFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcmVtb3Zl
WEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgYm9vbCBoYXNYSFJCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsK
QEAgLTI2Niw2ICsyNjEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kOwogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjsKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjsKICAgICBmcmllbmQgY2xh
c3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogCkBAIC0zNzIsMTAgKzM2OCw3IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2Vy
V2hlblNob3duOwogICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2Vy
QWdlbnQ7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHM7
Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7Ci0gICAgYm9vbCBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkw7CisgICAgT3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50PiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50OwogCiAgICAgT3duUHRyPEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNWQ4ZjQwOC4uMTlhZTMw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CkBAIC0yMDQsMTYgKzIwNCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5NYXRjaFBsYWluVGV4
dEpvYigpIHsgfQogfTsKIAotZW51bSBET01CcmVha3BvaW50VHlwZSB7Ci0gICAgU3VidHJlZU1v
ZGlmaWVkID0gMCwKLSAgICBBdHRyaWJ1dGVNb2RpZmllZCwKLSAgICBOb2RlUmVtb3ZlZCwKLSAg
ICBET01CcmVha3BvaW50VHlwZXNDb3VudAotfTsKLQotY29uc3QgdWludDMyX3QgaW5oZXJpdGFi
bGVET01CcmVha3BvaW50VHlwZXNNYXNrID0gKDEgPDwgU3VidHJlZU1vZGlmaWVkKTsKLWNvbnN0
IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2OwotCiB9CiAKIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
CkBAIC00MDQsNyArMzk0LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRp
bmdzKCkKICAgICByZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogICAgIG1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY2xlYXIoKTsKICAgICBtX2luc3BlY3RlZE5vZGVzLmNsZWFyKCk7Ci0gICAgbV9icmVha3Bv
aW50cy5jbGVhcigpOwogfQogCiBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxv
bmcgaWQpCkBAIC03NjksMTAxICs3NTgsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZWFy
Y2hDYW5jZWxlZCgpCiAgICAgbV9zZWFyY2hSZXN1bHRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkK
LXsKLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB1aW50MzJfdCByb290Qml0ID0gMSA8PCB0eXBlOwotICAg
IG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpIHwgcm9vdEJp
dCk7Ci0gICAgaWYgKHJvb3RCaXQgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2sp
IHsKLSAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hp
bGQ7IGNoaWxkID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgICAgICB1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwotICAgIH0KLX0KLQotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9u
ZyB0eXBlKQotewotICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5
cGU7Ci0gICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RC
aXQ7Ci0gICAgaWYgKG1hc2spCi0gICAgICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2sp
OwotICAgIGVsc2UKLSAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7Ci0KLSAgICBp
ZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFz
ayAmIChyb290Qml0IDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKLSAgICAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxk
ID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCi0gICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJl
YWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJl
bnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNC
cmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICBkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkLCB0cnVlLCBkZXRhaWxzKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
bnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzKQotewotICAgIGlmIChoYXNCcmVha3Bv
aW50KG5vZGUsIE5vZGVSZW1vdmVkKSkgewotICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KG5vZGUsIE5vZGVSZW1vdmVkLCBmYWxzZSwgZGV0YWlscyk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBT
dWJ0cmVlTW9kaWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hv
dWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKLXsKLSAgICBpZiAoaGFzQnJlYWtwb2ludChl
bGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgZGVzY3JpcHRpb25Gb3JET01F
dmVudChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCwgZmFsc2UsIGRldGFpbHMpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBi
cmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkZXNjcmlwdGlvbikKLXsKLSAgICBBU1NFUlQoaGFzQnJlYWtwb2ludCh0YXJnZXQsIGJyZWFr
cG9pbnRUeXBlKSk7Ci0KLSAgICBOb2RlKiBicmVha3BvaW50T3duZXIgPSB0YXJnZXQ7Ci0gICAg
aWYgKCgxIDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVz
TWFzaykgewotICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFy
Z2V0IG5vZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJy
ZWFrcG9pbnQuCi0gICAgICAgIC8vIFRhcmdldCBub2RlIG1heSBiZSB1bmtub3duIHRvIGZyb250
ZW5kLCBzbyB3ZSBuZWVkIHRvIHB1c2ggaXQgZmlyc3QuCi0gICAgICAgIGxvbmcgdGFyZ2V0Tm9k
ZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZCh0YXJnZXQpOwotICAgICAgICBBU1NFUlQodGFy
Z2V0Tm9kZUlkKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNldE51bWJlcigidGFyZ2V0Tm9kZUlk
IiwgdGFyZ2V0Tm9kZUlkKTsKLQotICAgICAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIgbm9k
ZS4KLSAgICAgICAgaWYgKCFpbnNlcnRpb24pCi0gICAgICAgICAgICBicmVha3BvaW50T3duZXIg
PSBpbm5lclBhcmVudE5vZGUodGFyZ2V0KTsKLSAgICAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25l
cik7Ci0gICAgICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMuZ2V0KGJyZWFrcG9pbnRPd25lcikg
JiAoMSA8PCBicmVha3BvaW50VHlwZSkpKSB7Ci0gICAgICAgICAgICBicmVha3BvaW50T3duZXIg
PSBpbm5lclBhcmVudE5vZGUoYnJlYWtwb2ludE93bmVyKTsKLSAgICAgICAgICAgIEFTU0VSVChi
cmVha3BvaW50T3duZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBl
ID09IFN1YnRyZWVNb2RpZmllZCkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRCb29sZWFu
KCJpbnNlcnRpb24iLCBpbnNlcnRpb24pOwotICAgIH0KLQotICAgIGxvbmcgYnJlYWtwb2ludE93
bmVyTm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChicmVha3BvaW50T3duZXIpOwot
ICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRlc2NyaXB0aW9uLT5zZXRO
dW1iZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7Ci0gICAgZGVzY3JpcHRpb24t
PnNldE51bWJlcigidHlwZSIsIGJyZWFrcG9pbnRUeXBlKTsKLX0KLQogU3RyaW5nIEluc3BlY3Rv
ckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCkBAIC0xMDcw
LDEzICs5NjQsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5v
ZGUqIG5vZGUpCiAgICAgaWYgKGlzV2hpdGVzcGFjZShub2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIHVpbnQzMl90IG1hc2sg
PSBtX2JyZWFrcG9pbnRzLmdldChpbm5lclBhcmVudE5vZGUobm9kZSkpOwotICAgICAgICB1aW50
MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2lu
dERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsK
LSAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNrKQotICAgICAgICAgICAgdXBkYXRlU3Vi
dHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKLSAgICB9
Ci0KICAgICAvLyBXZSBjb3VsZCBiZSBhdHRhY2hpbmcgZXhpc3Rpbmcgc3VidHJlZS4gRm9yZ2V0
IHRoZSBiaW5kaW5ncy4KICAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7
CiAKQEAgLTExMDMsMjEgKzk5MCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoaXNXaGl0ZXNwYWNlKG5vZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgLy8g
UmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMuCi0gICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3Zl
KG5vZGUpOwotICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIGlubmVyRmlyc3RDaGlsZChu
b2RlKSk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFjay5sYXN0
KCk7Ci0gICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2JyZWFrcG9pbnRz
LnJlbW92ZShub2RlKTsKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChpbm5lckZpcnN0Q2hpbGQo
bm9kZSkpOwotICAgICAgICAgICAgc3RhY2suYXBwZW5kKGlubmVyTmV4dFNpYmxpbmcobm9kZSkp
OwotICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKLSAgICB9Ci0KICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgbG9uZyBwYXJlbnRJ
ZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBJZiBwYXJlbnQg
aXMgbm90IG1hcHBlZCB5ZXQgLT4gaWdub3JlIHRoZSBldmVudC4KQEAgLTExNTcsMzEgKzEwMjks
NiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFj
dGVyRGF0YSogY2hhcmFjdGVyRGF0YSkKICAgICBtX2Zyb250ZW5kLT5jaGFyYWN0ZXJEYXRhTW9k
aWZpZWQoaWQsIGNoYXJhY3RlckRhdGEtPmRhdGEoKSk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9N
QWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQotewotICAgIHVpbnQz
Ml90IHJvb3RCaXQgPSAxIDw8IHR5cGU7Ci0gICAgdWludDMyX3QgZGVyaXZlZEJpdCA9IHJvb3RC
aXQgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7Ci0gICAgcmV0dXJuIG1fYnJlYWtw
b2ludHMuZ2V0KG5vZGUpICYgKHJvb3RCaXQgfCBkZXJpdmVkQml0KTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQz
Ml90IHJvb3RNYXNrLCBib29sIHNldCkKLXsKLSAgICB1aW50MzJfdCBvbGRNYXNrID0gbV9icmVh
a3BvaW50cy5nZXQobm9kZSk7Ci0gICAgdWludDMyX3QgZGVyaXZlZE1hc2sgPSByb290TWFzayA8
PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdDsKLSAgICB1aW50MzJfdCBuZXdNYXNrID0g
c2V0ID8gb2xkTWFzayB8IGRlcml2ZWRNYXNrIDogb2xkTWFzayAmIH5kZXJpdmVkTWFzazsKLSAg
ICBpZiAobmV3TWFzaykKLSAgICAgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwgbmV3TWFzayk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLQotICAgIHVp
bnQzMl90IG5ld1Jvb3RNYXNrID0gcm9vdE1hc2sgJiB+bmV3TWFzazsKLSAgICBpZiAoIW5ld1Jv
b3RNYXNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gaW5uZXJG
aXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBpbm5lck5leHRTaWJsaW5nKGNoaWxkKSkK
LSAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCBuZXdSb290TWFzaywgc2V0
KTsKLX0KLQogTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICAvLyBUaGUgcGF0aCBpcyBvZiBmb3JtICIxLEhUTUwsMixCT0RZLDEs
RElWIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCAzNjYyN2Y1Li45ZWE2OTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaApAQCAtMTQ0LDggKzE0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29u
c3Q7CiAKLSAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5
cGUpOwotICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcg
dHlwZSk7CisgICAgICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBkb21zIGFzIGEgcGFydCBv
ZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxkcmVuIG9mIGZyYW1lIG93
bmVycyBkaWZmZXJlbnRseS4KKyAgICAgICAgLy8gV2UgYWxzbyBza2lwIHdoaXRlc3BhY2UgdGV4
dCBub2RlcyBjb25kaXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0aG9kcyBlbmNhcHN1bGF0ZSB0aGVz
ZSBzcGVjaWZpY3MuCisgICAgICAgIHN0YXRpYyBOb2RlKiBpbm5lckZpcnN0Q2hpbGQoTm9kZSop
OworICAgICAgICBzdGF0aWMgTm9kZSogaW5uZXJOZXh0U2libGluZyhOb2RlKik7CisgICAgICAg
IHN0YXRpYyBOb2RlKiBpbm5lclByZXZpb3VzU2libGluZyhOb2RlKik7CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBpbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqKTsKKyAgICAgICAgc3RhdGljIE5v
ZGUqIGlubmVyUGFyZW50Tm9kZShOb2RlKik7CisgICAgICAgIHN0YXRpYyBib29sIGlzV2hpdGVz
cGFjZShOb2RlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5n
RnJhbWVEb2N1bWVudChOb2RlKiBmcmFtZU93bmVyTm9kZSk7CkBAIC0xNzAsMTUgKzE3Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRo
LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIE5vZGUqIG5vZGUpOwogCi0gICAgICAgIC8vIFdlIHJlcHJlc2VudCBlbWJlZGRlZCBk
b21zIGFzIGEgcGFydCBvZiB0aGUgc2FtZSBoaWVyYXJjaHkuIEhlbmNlIHdlIHRyZWF0IGNoaWxk
cmVuIG9mIGZyYW1lIG93bmVycyBkaWZmZXJlbnRseS4KLSAgICAgICAgLy8gV2UgYWxzbyBza2lw
IHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjb25kaXRpb25hbGx5LiBGb2xsb3dpbmcgbWV0aG9kcyBl
bmNhcHN1bGF0ZSB0aGVzZSBzcGVjaWZpY3MuCi0gICAgICAgIE5vZGUqIGlubmVyRmlyc3RDaGls
ZChOb2RlKiBub2RlKTsKLSAgICAgICAgTm9kZSogaW5uZXJOZXh0U2libGluZyhOb2RlKiBub2Rl
KTsKLSAgICAgICAgTm9kZSogaW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSogbm9kZSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGlubmVyQ2hpbGROb2RlQ291bnQoTm9kZSogbm9kZSk7Ci0gICAgICAgIE5v
ZGUqIGlubmVyUGFyZW50Tm9kZShOb2RlKiBub2RlKTsKLSAgICAgICAgYm9vbCBpc1doaXRlc3Bh
Y2UoTm9kZSogbm9kZSk7Ci0KICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRP
TUFnZW50PiopOwpAQCAtMjAzLDcgKzIwMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fbWF0Y2hKb2JzVGltZXI7CiAgICAgICAgIEhh
c2hTZXQ8UmVmUHRyPE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgICAgICBWZWN0b3I8bG9u
Zz4gbV9pbnNwZWN0ZWROb2RlczsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1f
YnJlYWtwb2ludHM7CiAgICAgfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDkzOTVkZDUuLmQx
YTIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIK
ICNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JE
T01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKQEAgLTg0LDEx
ICs4NSwxMSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5v
ZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlYwogICAgIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVnZ2VyQWdl
bnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAg
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21B
Z2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFnZW50KQorICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1f
YnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2Vu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0
YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGRvbUFnZW50LT5zaG91bGRC
cmVha09uTm9kZUluc2VydGlvbihub2RlLCBwYXJlbnQsIGV2ZW50RGF0YSkpIHsKKyAgICBpZiAo
YnJvd3NlckRlYnVnZ2VyQWdlbnQtPnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKG5vZGUsIHBh
cmVudCwgZXZlbnREYXRhKSkgewogICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtw
b2ludFR5cGUiLCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSk7CiAgICAgICAgIGRlYnVnZ2VyQWdl
bnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50
RGF0YSk7CiAgICAgfQpAQCAtOTksNiArMTAwLDggQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZEluc2VydERPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3QK
IHsKICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJv
bGxlci0+bV9kb21BZ2VudC5nZXQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZEluc2VydERPTU5v
ZGUobm9kZSk7CisgICAgaWYgKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2Vy
RGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQuZ2V0KCkpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT5kaWRJbnNlcnRET01Ob2Rl
KG5vZGUpOwogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURP
TU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIE5vZGUq
IG5vZGUpCkBAIC0xMDcsMTEgKzExMCwxMSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlYwogICAg
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9s
bGVyLT5tX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAg
ICAgICByZXR1cm47Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9y
Q29udHJvbGxlci0+bV9kb21BZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFnZW50KQorICAgIElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3Bl
Y3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFi
cm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYg
KGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZVJlbW92YWwobm9kZSwgZXZlbnREYXRhKSkgewor
ICAgIGlmIChicm93c2VyRGVidWdnZXJBZ2VudC0+c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKG5v
ZGUsIGV2ZW50RGF0YSkpIHsKICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9p
bnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1Z2dlckFnZW50
LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERh
dGEpOwogICAgIH0KQEAgLTEyMCw2ICsxMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMK
IAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTU5vZGVJbXBsKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIE5vZGUqIG5vZGUpCiB7Cisg
ICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFnZW50ID0g
aW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKTsKKyAgICBp
ZiAoYnJvd3NlckRlYnVnZ2VyQWdlbnQpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT5k
aWRSZW1vdmVET01Ob2RlKG5vZGUpOworCiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQuZ2V0KCkpCiAgICAgICAgIGRv
bUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOwogfQpAQCAtMTMwLDExICsxMzcsMTEgQEAg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRySW1wbChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOwog
ICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwotICAgIEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQuZ2V0KCk7
Ci0gICAgaWYgKCFkb21BZ2VudCkKKyAgICBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCog
YnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1
Z2dlckFnZW50LmdldCgpOworICAgIGlmICghYnJvd3NlckRlYnVnZ2VyQWdlbnQpCiAgICAgICAg
IHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxkQnJlYWtPbkF0dHJp
YnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50LCBldmVudERhdGEpKSB7CisgICAgaWYgKGJyb3dzZXJE
ZWJ1Z2dlckFnZW50LT5zaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKGVsZW1lbnQs
IGV2ZW50RGF0YSkpIHsKICAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRU
eXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1Z2dlckFnZW50LT5i
cmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEp
OwogICAgIH0KQEAgLTE2MCw4ICsxNjcsMTIgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKEluc3BlY3RvckNvbnRyb2xsZXIqIGkKICAg
ICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRy
b2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFicm93c2VyRGVi
dWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7
Ci0gICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVyLT5oYXNYSFJCcmVha3BvaW50KHVybCwgJmJy
ZWFrcG9pbnRVUkwpKQorICAgIGlmICghYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmhhc1hIUkJyZWFr
cG9pbnQodXJsLCAmYnJlYWtwb2ludFVSTCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CkBAIC01NDksOSArNTYwLDE1IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVz
ZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJbnNwZWN0b3JDb250cm9sbGVyKiBpCiAgICAgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1f
ZGVidWdnZXJBZ2VudC5nZXQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJl
dHVybjsKKworICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdn
ZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0
KCk7CisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgU3RyaW5nIGZ1bGxFdmVudE5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiJXM6JXMiLCBjYXRlZ29y
eVR5cGUudXRmOCgpLmRhdGEoKSwgZXZlbnROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmICgh
aW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVsbEV2ZW50
TmFtZSkpCisgICAgaWYgKCFicm93c2VyRGVidWdnZXJBZ2VudC0+aGFzRXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQoZnVsbEV2ZW50TmFtZSkpCiAgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZXZlbnRMaXN0ZW5lck5h
dGl2ZUJyZWFrcG9pbnRUeXBlKTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZlbnROYW1l
IiwgZnVsbEV2ZW50TmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78800</attachid>
            <date>2011-01-13 05:53:05 -0800</date>
            <delta_ts>2011-01-14 00:26:41 -0800</delta_ts>
            <desc>[patch] another version</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>55530</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjIxMmZiOC4uMmFmMzg1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTAsNiArMTE1MCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAor
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNsaWVu
dC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBlNjI2Mjc4Li4xOTFiOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDEt
MTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJh
Y3QgQnJvd3NlckRlYnVnZ2VyQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JET01BZ2VudCBhbmQgSW5zcGVjdG9yRGVidWdnZXIgYWdlbnQuCisgICAgICAgIFdlIGhhdmUg
c29tZSBtZXRob2RzIG9mIERlYnVnZ2VyIHdoaWNoIGFyZSByZWxhdGVkIHRvIERPTS4KKyAgICAg
ICAgTGV0cyBleHRyYWN0IHRoZXNlIG1ldGhvZHMgdG8gQnJvd3NlckRlYnVnZ2VyIGFnZW50Lgor
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjk0CisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVE
T01CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlv
bkZvckRPTUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVudElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
OjpzZXRYSFJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpjbGVhckZvclBh
Z2VOYXZpZ2F0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbElu
c2VydERPTU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZUltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxT
ZW5kWE1MSHR0cFJlcXVlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQpOgorCiAyMDExLTAxLTEzICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODNlNTVkNC4uY2VkMTJjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTk5OSw2ICsxOTk5LDggQEAKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwOWE2ZTJhLi5mYzQ2NGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtMTA0Miw2ICsxMDQyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKKyAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTE5MzMs
NiArMTkzNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5o
IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYmZmYzZkNi4uNjVjY2E3MCAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY0OTQyLDYgKzY0OTQy
LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ2xpZW50LmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYzM4ZjgyZC4uYzQ1ZDMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI2MCw2ICsxMjYwLDgg
QEAKIAkJNEY3MDdBOUExMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Rjcw
N0E5ODExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLzsg
fTsKIAkJNEZBM0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3RvclN0YXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGQTNCOTA4MTI1Q0Qx
MjEwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi87IH07CiAJCTRGQTNCOTBCMTI1Q0Qx
MjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEZBM0I5MDkxMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmggKi87IH07CisJCTRGQzI4NDI0MTJEREYyN0UwMEJGNDJFNCAvKiBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEZDMjg0MjIxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmggKi87IH07CisJCTRGQzI4NDI1MTJEREYyN0UwMEJGNDJFNCAvKiBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0RkMyODQyMzEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwICovOyB9OwogCQk0RkQ4RDBGMjExOUM3MThCMDAyRkE4
MjUgLyogU2NyaXB0R0NFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5j
cHAgKi87IH07CiAJCTRGRDhEMEYzMTE5QzcxOEIwMDJGQTgyNSAvKiBTY3JpcHRHQ0V2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RkQ4RDBGMTEx
OUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVudC5oICovOyB9OwogCQk1MTAxODQ2OTBCMDg2
MDJBMDA0QTgyNUYgLyogQ2FjaGVkUGFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwMTg0NjcwQjA4NjAyQTAwNEE4MjVGIC8qIENhY2hlZFBhZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzYz
MCw2ICs3NjMyLDggQEAKIAkJNEY3MDdBOTgxMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRG
QTNCOTA4MTI1Q0QxMjEwMDMwMEJBRCAvKiBJbnNwZWN0b3JTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRGQTNCOTA5MTI1Q0QxMjIwMDMwMEJBRCAvKiBJbnNwZWN0b3JT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RkMyODQyMjEyRERGMjdFMDBCRjQyRTQg
LyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEZDMjg0MjMxMkRERjI3RTAwQkY0MkU0IC8qIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNEZEOEQwRjAxMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0R0NFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGRDhEMEYxMTE5QzcxOEIwMDJGQTgyNSAv
KiBTY3JpcHRHQ0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlw
dEdDRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTg0NjcwQjA4NjAy
QTAwNEE4MjVGIC8qIENhY2hlZFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVkUGFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MDAsNiAr
MTI5MDQsOCBAQAogCQkJCTdBMEU3NkY4MTBCRjA4RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlw
dEhvc3QuaWRsICovLAogCQkJCUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJG
NCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKKwkJCQk0RkMyODQyMjEy
RERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCAqLywKKwkJ
CQk0RkMyODQyMzEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuY3BwICovLAogCQkJCTdBMUYyQjUxMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGll
bnQuY3BwICovLAogCQkJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGll
bnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgKi8sCkBAIC0yMjI5Myw2ICsyMjI5OSw3IEBACiAJCQkJOTNGMTk5RUQwODI0NUU1
OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJF
MENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0RkMyODQyNDEyRERGMjdFMDBCRjQyRTQgLyogSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2Vy
QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQ5NzYsNiArMjQ5ODMsNyBAQAogCQkJCTkzRjE5
QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRGQzI4NDI1MTJEREYyN0UwMEJGNDJFNCAvKiBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXgg
YjhhZWEwZS4uMzBjYzU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAgLTI1LDYgKzI1LDExIEBAICR0eXBlVHJhbnNmb3Jt
eyJEZWJ1Z2dlciJ9ID0gewogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9k
ZWJ1Z2dlckFnZW50IiwKIH07CiskdHlwZVRyYW5zZm9ybXsiQnJvd3NlckRlYnVnZ2VyIn0gPSB7
CisgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCIsCisgICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgiLAorICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93c2VyRGVidWdnZXJB
Z2VudCIsCit9OwogJHR5cGVUcmFuc2Zvcm17IkRhdGFiYXNlIn0gPSB7CiAgICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5oIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5k
ZXggZWQwMGNjNy4uN2VhZTUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwKQEAgLTIyNCw2ICsyMjQsOSBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgW2RvbWFpbj1J
bnNwZWN0b3JdIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoaW4gYm9vbGVhbiBhbHdh
eXMpOwogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBkaXNhYmxlRGVidWdnZXIoaW4g
Ym9vbGVhbiBhbHdheXMpOworCisgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldFN0
aWNreUJyZWFrcG9pbnRzKGluIE9iamVjdCBicmVha3BvaW50cyk7CisKICAgICAgICAgW25vdGlm
eSwgZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpOwogICAgICAgICBb
bm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgZGVidWdnZXJXYXNEaXNhYmxlZCgpOwogCkBA
IC0yMzgsMTYgKzI0MSwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVidWdn
ZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBTdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGlu
dCBsaW5lTnVtYmVyLCBpbiBTdHJpbmcgY29uZGl0aW9uLCBpbiBib29sZWFuIGVuYWJsZWQsIG91
dCBTdHJpbmcgYnJlYWtwb2ludElkLCBvdXQgdW5zaWduZWQgaW50IGFjdHVhbExpbmVOdW1iZXIp
OwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW4gU3Ry
aW5nIGJyZWFrcG9pbnRJZCk7CiAKLSAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0
U3RpY2t5QnJlYWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsgLy8gRklYTUU6IE1vdmUg
dG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0KLSAgICAgICAgW2RvbWFpbj1E
T01dIHZvaWQgc2V0RE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsg
Ly8gRklYTUU6IE1vdmUgdG8gbmV3bHkgaW50cm9kdWNlZCBCcm93c2VyRGVidWdnZXIuCi0gICAg
ICAgIFtkb21haW49RE9NXSB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQoaW4gbG9uZyBub2RlSWQs
IGluIGxvbmcgdHlwZSk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3Nl
ckRlYnVnZ2VyLgotCi0gICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGluIFN0cmluZyBldmVudE5hbWUpOyAvLyBGSVhNRTogTW92ZSB0byBu
ZXdseSBpbnRyb2R1Y2VkIEJyb3dzZXJEZWJ1Z2dlci4KLSAgICAgICAgW2RvbWFpbj1JbnNwZWN0
b3JdIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50TmFt
ZSk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3NlckRlYnVnZ2VyLgot
Ci0gICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldFhIUkJyZWFrcG9pbnQoaW4gU3Ry
aW5nIHVybCk7IC8vIEZJWE1FOiBNb3ZlIHRvIG5ld2x5IGludHJvZHVjZWQgQnJvd3NlckRlYnVn
Z2VyLgotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVYSFJCcmVha3BvaW50
KGluIFN0cmluZyB1cmwpOyAvLyBGSVhNRTogTW92ZSB0byBuZXdseSBpbnRyb2R1Y2VkIEJyb3dz
ZXJEZWJ1Z2dlci4KKyAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVidWdnZXJdIHZvaWQgc2V0RE9N
QnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4gbG9uZyB0eXBlKTsKKyAgICAgICAgW2RvbWFp
bj1Ccm93c2VyRGVidWdnZXJdIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJ
ZCwgaW4gbG9uZyB0eXBlKTsKKyAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVidWdnZXJdIHZvaWQg
c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoaW4gU3RyaW5nIGV2ZW50TmFtZSk7CisgICAgICAg
IFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50KGluIFN0cmluZyBldmVudE5hbWUpOworICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dl
cl0gdm9pZCBzZXRYSFJCcmVha3BvaW50KGluIFN0cmluZyB1cmwpOworICAgICAgICBbZG9tYWlu
PUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCByZW1vdmVYSFJCcmVha3BvaW50KGluIFN0cmluZyB1cmwp
OwogCiAgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc3RlcE92ZXIoKTsKICAgICAgICAg
W2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzdGVwSW50bygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwMTkyOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dC5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikg
JiYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JE
T01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JTdGF0ZS5oIgorCituYW1lc3BhY2UgeworCitlbnVtIERPTUJyZWFrcG9pbnRU
eXBlIHsKKyAgICBTdWJ0cmVlTW9kaWZpZWQgPSAwLAorICAgIEF0dHJpYnV0ZU1vZGlmaWVkLAor
ICAgIE5vZGVSZW1vdmVkLAorICAgIERPTUJyZWFrcG9pbnRUeXBlc0NvdW50Cit9OworCitzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUgPSAiRE9NIjsKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUg
PSAiRXZlbnRMaXN0ZW5lciI7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgeGhyTmF0aXZlQnJl
YWtwb2ludFR5cGUgPSAiWEhSIjsKKworY29uc3QgdWludDMyX3QgaW5oZXJpdGFibGVET01CcmVh
a3BvaW50VHlwZXNNYXNrID0gKDEgPDwgU3VidHJlZU1vZGlmaWVkKTsKK2NvbnN0IGludCBkb21C
cmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2OworCit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCisgICAgOiBtX2NvbnRy
b2xsZXIoY29udHJvbGxlcikKKyAgICAsIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTChm
YWxzZSkKK3sKK30KKworSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCit7CisgICAgbV9icmVha3BvaW50cy5jbGVhcigp
OworfQorCit2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRFdmVudExpc3Rl
bmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3sKKyAgICBtX2V2ZW50TGlz
dGVuZXJCcmVha3BvaW50cy5hZGQoZXZlbnROYW1lKTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBldmVudE5hbWUpCit7CisgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3Zl
KGV2ZW50TmFtZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRp
ZEluc2VydERPTU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9icmVha3BvaW50cy5zaXpl
KCkpIHsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KEluc3BlY3Rv
ckRPTUFnZW50Ojppbm5lclBhcmVudE5vZGUobm9kZSkpOworICAgICAgICB1aW50MzJfdCBpbmhl
cml0YWJsZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRU
eXBlU2hpZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsKKyAgICAgICAg
aWYgKGluaGVyaXRhYmxlVHlwZXNNYXNrKQorICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFr
cG9pbnRzKG5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKKyAgICB9Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKKyAgICAgICAgLy8gUmVt
b3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMuCisgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5v
ZGUpOworICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIEluc3BlY3RvckRPTUFnZW50Ojpp
bm5lckZpcnN0Q2hpbGQobm9kZSkpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gc3RhY2subGFzdCgpOworICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQo
SW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKSk7CisgICAgICAgICAgICBz
dGFjay5hcHBlbmQoSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcobm9kZSkpOwor
ICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQs
IGxvbmcgdHlwZSkKK3sKKyAgICBOb2RlKiBub2RlID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50
LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CisgICAgbV9icmVha3BvaW50cy5zZXQo
bm9kZSwgbV9icmVha3BvaW50cy5nZXQobm9kZSkgfCByb290Qml0KTsKKyAgICBpZiAocm9vdEJp
dCAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykgeworICAgICAgICBmb3IgKE5v
ZGUqIGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hp
bGQ7IGNoaWxkID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQor
ICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVl
KTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92
ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKK3sKKyAgICBOb2RlKiBub2Rl
ID0gbV9jb250cm9sbGVyLT5tX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5
cGU7CisgICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RC
aXQ7CisgICAgaWYgKG1hc2spCisgICAgICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2sp
OworICAgIGVsc2UKKyAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisKKyAgICBp
ZiAoKHJvb3RCaXQgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spICYmICEobWFz
ayAmIChyb290Qml0IDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0Q2hpbGQo
bm9kZSk7IGNoaWxkOyBjaGlsZCA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRTaWJsaW5n
KGNoaWxkKSkKKyAgICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgcm9v
dEJpdCwgZmFsc2UpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSosIE5vZGUqIHBhcmVudCkKK3sKKyAgICBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9jb250cm9sbGVyLT5tX2RlYnVn
Z2VyQWdlbnQuZ2V0KCk7CisgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpIHsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChwYXJlbnQsIFN1YnRy
ZWVNb2RpZmllZCwgdHJ1ZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAgZXZlbnREYXRhLT5z
ZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOworICAg
ICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2Vy
RXZlbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCit7
CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1fY29udHJvbGxl
ci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOworICAgIGlmICghZGVidWdnZXJBZ2VudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpKSB7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQobm9kZSwgTm9k
ZVJlbW92ZWQsIGZhbHNlLCBldmVudERhdGEuZ2V0KCkpOworICAgICAgICBldmVudERhdGEtPnNl
dFN0cmluZygiYnJlYWtwb2ludFR5cGUiLCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSk7CisgICAg
ICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJF
dmVudFR5cGUsIGV2ZW50RGF0YS5yZWxlYXNlKCkpOworICAgIH0gZWxzZSBpZiAoaGFzQnJlYWtw
b2ludChJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9k
aWZpZWQpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQo
bm9kZSwgU3VidHJlZU1vZGlmaWVkLCBmYWxzZSwgZXZlbnREYXRhLmdldCgpKTsKKyAgICAgICAg
ZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2lu
dFR5cGUpOworICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtw
b2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEucmVsZWFzZSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJB
Z2VudCA9IG1fY29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50LmdldCgpOworICAgIGlmICghZGVi
dWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxl
bWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGRlc2Ny
aXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBldmVu
dERhdGEuZ2V0KCkpOworICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludFR5
cGUiLCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSk7CisgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmJy
ZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YS5y
ZWxlYXNlKCkpOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGxvbmcgYnJlYWtwb2ludFR5
cGUsIGJvb2wgaW5zZXJ0aW9uLCBJbnNwZWN0b3JPYmplY3QqIGRlc2NyaXB0aW9uKQoreworICAg
IEFTU0VSVChoYXNCcmVha3BvaW50KHRhcmdldCwgYnJlYWtwb2ludFR5cGUpKTsKKworICAgIE5v
ZGUqIGJyZWFrcG9pbnRPd25lciA9IHRhcmdldDsKKyAgICBpZiAoKDEgPDwgYnJlYWtwb2ludFR5
cGUpICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrKSB7CisgICAgICAgIC8vIEZv
ciBpbmhlcml0YWJsZSBicmVha3BvaW50IHR5cGVzLCB0YXJnZXQgbm9kZSBpc24ndCBhbHdheXMg
dGhlIHNhbWUgYXMgdGhlIG5vZGUgdGhhdCBvd25zIGEgYnJlYWtwb2ludC4KKyAgICAgICAgLy8g
VGFyZ2V0IG5vZGUgbWF5IGJlIHVua25vd24gdG8gZnJvbnRlbmQsIHNvIHdlIG5lZWQgdG8gcHVz
aCBpdCBmaXJzdC4KKyAgICAgICAgbG9uZyB0YXJnZXROb2RlSWQgPSBtX2NvbnRyb2xsZXItPm1f
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQodGFyZ2V0KTsKKyAgICAgICAgQVNTRVJU
KHRhcmdldE5vZGVJZCk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInRhcmdldE5v
ZGVJZCIsIHRhcmdldE5vZGVJZCk7CisKKyAgICAgICAgLy8gRmluZCBicmVha3BvaW50IG93bmVy
IG5vZGUuCisgICAgICAgIGlmICghaW5zZXJ0aW9uKQorICAgICAgICAgICAgYnJlYWtwb2ludE93
bmVyID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVyUGFyZW50Tm9kZSh0YXJnZXQpOworICAgICAg
ICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAgd2hpbGUgKCEobV9icmVha3BvaW50
cy5nZXQoYnJlYWtwb2ludE93bmVyKSAmICgxIDw8IGJyZWFrcG9pbnRUeXBlKSkpIHsKKyAgICAg
ICAgICAgIGJyZWFrcG9pbnRPd25lciA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lclBhcmVudE5v
ZGUoYnJlYWtwb2ludE93bmVyKTsKKyAgICAgICAgICAgIEFTU0VSVChicmVha3BvaW50T3duZXIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFN1YnRyZWVNb2Rp
ZmllZCkKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCBp
bnNlcnRpb24pOworICAgIH0KKworICAgIGxvbmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9j
b250cm9sbGVyLT5tX2RvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGJyZWFrcG9pbnRP
d25lcik7CisgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CisgICAgZGVzY3JpcHRp
b24tPnNldE51bWJlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKKyAgICBkZXNj
cmlwdGlvbi0+c2V0TnVtYmVyKCJ0eXBlIiwgYnJlYWtwb2ludFR5cGUpOworfQorCitib29sIElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxv
bmcgdHlwZSkKK3sKKyAgICB1aW50MzJfdCByb290Qml0ID0gMSA8PCB0eXBlOworICAgIHVpbnQz
Ml90IGRlcml2ZWRCaXQgPSByb290Qml0IDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0
OworICAgIHJldHVybiBtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmIChyb290Qml0IHwgZGVyaXZl
ZEJpdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVN1
YnRyZWVCcmVha3BvaW50cyhOb2RlKiBub2RlLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBzZXQp
Cit7CisgICAgdWludDMyX3Qgb2xkTWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpOworICAg
IHVpbnQzMl90IGRlcml2ZWRNYXNrID0gcm9vdE1hc2sgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRU
eXBlU2hpZnQ7CisgICAgdWludDMyX3QgbmV3TWFzayA9IHNldCA/IG9sZE1hc2sgfCBkZXJpdmVk
TWFzayA6IG9sZE1hc2sgJiB+ZGVyaXZlZE1hc2s7CisgICAgaWYgKG5ld01hc2spCisgICAgICAg
IG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG5ld01hc2spOworICAgIGVsc2UKKyAgICAgICAgbV9i
cmVha3BvaW50cy5yZW1vdmUobm9kZSk7CisKKyAgICB1aW50MzJfdCBuZXdSb290TWFzayA9IHJv
b3RNYXNrICYgfm5ld01hc2s7CisgICAgaWYgKCFuZXdSb290TWFzaykKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lckZpcnN0
Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IEluc3BlY3RvckRPTUFnZW50Ojppbm5lck5leHRT
aWJsaW5nKGNoaWxkKSkKKyAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCBu
ZXdSb290TWFzaywgc2V0KTsKK30KKwordm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dDo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUs
IGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQoreworICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2NvbnRyb2xsZXItPm1fZGVidWdn
ZXJBZ2VudC5nZXQoKTsKKyAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBmdWxsRXZlbnROYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzOiVzIiwgY2F0
ZWdvcnlUeXBlLnV0ZjgoKS5kYXRhKCksIGV2ZW50TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAoIW1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNvbnRhaW5zKGZ1bGxFdmVudE5hbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJi
cmVha3BvaW50VHlwZSIsIGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSk7CisgICAg
ZXZlbnREYXRhLT5zZXRTdHJpbmcoImV2ZW50TmFtZSIsIGZ1bGxFdmVudE5hbWUpOworICAgIGlm
IChzeW5jaHJvbm91cykKKyAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKE5hdGl2
ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7CisgICAg
ZWxzZQorICAgICAgICBkZWJ1Z2dlckFnZW50LT5zY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnNldFhIUkJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAg
IG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IHRydWU7CisgICAgZWxzZQorICAgICAg
ICBtX1hIUkJyZWFrcG9pbnRzLmFkZCh1cmwpOworfQorCit2b2lkIEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OjpyZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1w
dHlVUkwgPSBmYWxzZTsKKyAgICBlbHNlCisgICAgICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3Zl
KHVybCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxTZW5k
WE1MSHR0cFJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1fY29udHJvbGxlci0+bV9kZWJ1Z2dlckFnZW50Lmdl
dCgpOworICAgIGlmICghZGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIGJyZWFrcG9pbnRVUkw7CisgICAgaWYgKG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVS
TCkKKyAgICAgICAgYnJlYWtwb2ludFVSTCA9ICIiOworICAgIGVsc2UgeworICAgICAgICBmb3Ig
KEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJyZWFrcG9pbnRzLmJlZ2luKCk7
IGl0ICE9IG1fWEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICh1
cmwuY29udGFpbnMoKml0KSkgeworICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRVUkwgPSAqaXQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIWJyZWFrcG9pbnRVUkwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgeGhy
TmF0aXZlQnJlYWtwb2ludFR5cGUpOworICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3Bv
aW50VVJMIiwgYnJlYWtwb2ludFVSTCk7CisgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoInVybCIs
IHVybCk7CisgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKE5hdGl2ZUJyZWFrcG9pbnRE
ZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKQoreworICAg
IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9YSFJCcmVha3BvaW50
cy5jbGVhcigpOworICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KSAmJiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNWI3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50X2gKKyNk
ZWZpbmUgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnRfaAorCisjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Citj
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBOb2RlOworCitjbGFzcyBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNw
ZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChjb250cm9sbGVyKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsKKworICAg
IC8vIEJyb3dzZXJEZWJ1Z2dlciBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCisgICAgdm9pZCBz
ZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHJlbW92ZVhIUkJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgcmVtb3ZlRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgc2V0
RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIHJlbW92ZURP
TUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisKKyAgICAvLyBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24gQVBJCisgICAgdm9pZCB3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiwgTm9k
ZSogcGFyZW50KTsKKyAgICB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOworICAgIHZvaWQg
d2lsbFJlbW92ZURPTU5vZGUoTm9kZSopOworICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2Rl
Kik7CisgICAgdm9pZCB3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50Kik7CisgICAgdm9pZCB3aWxs
U2VuZFhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHBhdXNlT25O
YXRpdmVFdmVudElmTmVlZGVkKGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cyk7CisKKyAgICB2b2lkIGNsZWFyRm9yUGFn
ZU5hdmlnYXRpb24oKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQoSW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgdm9pZCBkZXNjcmlwdGlvbkZvckRPTUV2
ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24sIElu
c3BlY3Rvck9iamVjdCogZGVzY3JpcHRpb24pOworICAgIHZvaWQgdXBkYXRlU3VidHJlZUJyZWFr
cG9pbnRzKE5vZGUqLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBzZXQpOworICAgIGJvb2wgaGFz
QnJlYWtwb2ludChOb2RlKiwgbG9uZyB0eXBlKTsKKyAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygp
OworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIEhhc2hNYXA8
Tm9kZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2V2
ZW50TGlzdGVuZXJCcmVha3BvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9YSFJCcmVha3Bv
aW50czsKKyAgICBib29sIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnRfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBlZTE1MzZmLi41YjhlMDExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OCw2
ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JET01BZ2VudC5oIgpAQCAtMTQ3LDcgKzE0OCw2IEBAIEluc3BlY3RvckNvbnRy
b2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBj
bGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNy
ZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAsIG1fYXR0
YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX2hhc1hIUkJyZWFrcG9pbnRXaXRo
RW1wdHlVUkwoZmFsc2UpCiAgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCiB7CkBAIC0xNzcsNiArMTc3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIAogI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC5jbGVhcigpOworICAg
IG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKICNlbmRpZgogICAgIEFTU0VSVChtX2lu
c3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CkBAIC03MjksNiArNzMwLDgg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVy
KiBsb2FkZXIpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIGlmICht
X2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQ
YWdlTmF2aWdhdGlvbigpOworICAgICAgICAgICAgaWYgKG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQp
CisgICAgICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdlTmF2
aWdhdGlvbigpOwogICAgICAgICAgICAgcmVzdG9yZVN0aWNreUJyZWFrcG9pbnRzKCk7CiAgICAg
ICAgIH0KICNlbmRpZgpAQCAtMTE4Myw2ICsxMTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cykKICAgICBBU1NFUlQo
bV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX2Jyb3dzZXJE
ZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlz
KTsKICAgICByZXN0b3JlU3RpY2t5QnJlYWtwb2ludHMoKTsKIAogICAgIG1fZnJvbnRlbmQtPmRl
YnVnZ2VyV2FzRW5hYmxlZCgpOwpAQCAtMTIxNSw2ICsxMjE5LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkUGFnZSk7CiAKICAgICBtX2RlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKKyAgICBtX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50LmNsZWFyKCk7CiAKICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
ID0gZmFsc2U7CiAKQEAgLTEyMzUsMTAgKzEyNDAsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldFN0aWNreUJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVh
awogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVTdGlja3lCcmVha3BvaW50cygp
CiB7Ci0gICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY2xlYXIoKTsKLSAgICBtX1hIUkJy
ZWFrcG9pbnRzLmNsZWFyKCk7Ci0gICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0g
ZmFsc2U7Ci0KICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1f
c3RhdGUtPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6c3RpY2t5QnJlYWtwb2ludHMpOwogICAg
IEtVUkwgdXJsID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnVybCgp
OwogICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKQEAgLTEyNjcsMTMgKzEyNjgs
MTQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludChQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnIKICAgICBpZiAoIWNvbmRpdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRUeXBl
KSB7CisgICAgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRUeXBlICYmIG1fYnJv
d3NlckRlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBTdHJpbmcgZXZlbnROYW1lOwotICAgICAgICBpZiAoY29uZGl0aW9u
LT5nZXRTdHJpbmcoImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQotICAgICAgICAgICAgc2V0RXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQoZXZlbnROYW1lKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
amF2YVNjcmlwdEJyZWFrcG9pbnRUeXBlKSB7CisgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRT
dHJpbmcoImV2ZW50TmFtZSIsICZldmVudE5hbWUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChl
dmVudE5hbWUpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBqYXZhU2NyaXB0QnJlYWtwb2ludFR5
cGUgJiYgbV9kZWJ1Z2dlckFnZW50KSB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlm
ICghY29uZGl0aW9uLT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTI4Myw2MyArMTI4NSwxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Rv
cmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicgogICAgICAg
ICBTdHJpbmcgamF2YVNjcmlwdENvbmRpdGlvbjsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdl
dFN0cmluZygiY29uZGl0aW9uIiwgJmphdmFTY3JpcHRDb25kaXRpb24pKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQotICAgICAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zZXRTdGlja3lCcmVha3BvaW50KHVybCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxpbmVOdW1iZXIpLCBqYXZhU2NyaXB0Q29uZGl0aW9uLCBlbmFibGVkKTsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0geGhyQnJlYWtwb2ludFR5cGUpIHsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5zZXRTdGlja3lCcmVha3BvaW50KHVybCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVOdW1i
ZXIpLCBqYXZhU2NyaXB0Q29uZGl0aW9uLCBlbmFibGVkKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUg
PT0geGhyQnJlYWtwb2ludFR5cGUgJiYgbV9icm93c2VyRGVidWdnZXJBZ2VudCkgewogICAgICAg
ICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFN0cmluZyB1cmw7
Ci0gICAgICAgIGlmIChjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCi0gICAgICAg
ICAgICBzZXRYSFJCcmVha3BvaW50KHVybCk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lKQotewotICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUpOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQotewotICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnRzLnJlbW92ZShldmVudE5hbWUpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6
Omhhc0V2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQotewot
ICAgIHJldHVybiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUp
OwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFhIUkJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIG1faGFzWEhS
QnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgICBtX1hIUkJy
ZWFrcG9pbnRzLmFkZCh1cmwpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92
ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc0VtcHR5
KCkpCi0gICAgICAgIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0eVVSTCA9IGZhbHNlOwotICAg
IGVsc2UKLSAgICAgICAgbV9YSFJCcmVha3BvaW50cy5yZW1vdmUodXJsKTsKLX0KLQotYm9vbCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpoYXNYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBT
dHJpbmcqIGJyZWFrcG9pbnRVUkwpCi17Ci0gICAgaWYgKG1faGFzWEhSQnJlYWtwb2ludFdpdGhF
bXB0eVVSTCkgewotICAgICAgICAqYnJlYWtwb2ludFVSTCA9ICIiOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9Y
SFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJyZWFrcG9pbnRzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGlmICh1cmwuY29udGFpbnMoKml0KSkgewotICAgICAgICAgICAgKmJyZWFr
cG9pbnRVUkwgPSAqaXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJsKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+c2V0WEhSQnJlYWtwb2lu
dCh1cmwpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiB9Ci0KICNlbmRpZgogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYg
c291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggZmVmMmE2ZC4uM2JhZjU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIEluamVjdGVk
U2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7
CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9y
Q1NTQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKQEAgLTIzNCwxMiArMjM1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgcmVzdW1lKCk7CiAKICAgICB2b2lkIHNldFN0aWNreUJyZWFrcG9p
bnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cyk7Ci0gICAgdm9pZCBz
ZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7Ci0gICAg
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFt
ZSk7Ci0gICAgYm9vbCBoYXNFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSk7Ci0gICAgdm9pZCBzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsK
LSAgICB2b2lkIHJlbW92ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIGJv
b2wgaGFzWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBicmVha3BvaW50
VVJMKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShjb25zdCBT
dHJpbmcmIHNvdXJjZSk7CkBAIC0yNjYsNiArMjYxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI7CisgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OwogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247
CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIApAQCAtMzcyLDEwICszNjgs
NyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wg
bV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKICAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJB
Z2VudD4gbV9kZWJ1Z2dlckFnZW50OwotCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnRzOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX1hIUkJyZWFrcG9pbnRzOwot
ICAgIGJvb2wgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMOworICAgIE93blB0cjxJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gbV9icm93c2VyRGVidWdnZXJBZ2VudDsKIAogICAg
IE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4
IDVkOGY0MDguLjE5YWUzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcApAQCAtMjA0LDE2ICsyMDQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+TWF0Y2hQbGFpblRleHRKb2IoKSB7IH0KIH07CiAKLWVudW0gRE9NQnJlYWtwb2ludFR5cGUg
ewotICAgIFN1YnRyZWVNb2RpZmllZCA9IDAsCi0gICAgQXR0cmlidXRlTW9kaWZpZWQsCi0gICAg
Tm9kZVJlbW92ZWQsCi0gICAgRE9NQnJlYWtwb2ludFR5cGVzQ291bnQKLX07Ci0KLWNvbnN0IHVp
bnQzMl90IGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzayA9ICgxIDw8IFN1YnRyZWVN
b2RpZmllZCk7Ci1jb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsK
LQogfQogCiBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKQpAQCAtNDA0LDcgKzM5NCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmRpc2NhcmRCaW5kaW5ncygpCiAgICAgcmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKICAgICBt
X2NoaWxkcmVuUmVxdWVzdGVkLmNsZWFyKCk7CiAgICAgbV9pbnNwZWN0ZWROb2Rlcy5jbGVhcigp
OwotICAgIG1fYnJlYWtwb2ludHMuY2xlYXIoKTsKIH0KIAogTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6Om5vZGVGb3JJZChsb25nIGlkKQpAQCAtNzY5LDEwMSArNzU4LDYgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2VhcmNoQ2FuY2VsZWQoKQogICAgIG1fc2VhcmNoUmVzdWx0cy5jbGVhcigp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9k
ZUlkLCBsb25nIHR5cGUpCi17Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdWludDMyX3Qgcm9vdEJpdCA9
IDEgPDwgdHlwZTsKLSAgICBtX2JyZWFrcG9pbnRzLnNldChub2RlLCBtX2JyZWFrcG9pbnRzLmdl
dChub2RlKSB8IHJvb3RCaXQpOwotICAgIGlmIChyb290Qml0ICYgaW5oZXJpdGFibGVET01CcmVh
a3BvaW50VHlwZXNNYXNrKSB7Ci0gICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBpbm5lckZpcnN0
Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IGlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQotICAg
ICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCB0cnVlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQo
bG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKLXsKLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5v
ZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1aW50MzJfdCBy
b290Qml0ID0gMSA8PCB0eXBlOwotICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9pbnRzLmdl
dChub2RlKSAmIH5yb290Qml0OwotICAgIGlmIChtYXNrKQotICAgICAgICBtX2JyZWFrcG9pbnRz
LnNldChub2RlLCBtYXNrKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3Zl
KG5vZGUpOwotCi0gICAgaWYgKChyb290Qml0ICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlw
ZXNNYXNrKSAmJiAhKG1hc2sgJiAocm9vdEJpdCA8PCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVT
aGlmdCkpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBpbm5lckZpcnN0Q2hpbGQobm9k
ZSk7IGNoaWxkOyBjaGlsZCA9IGlubmVyTmV4dFNpYmxpbmcoY2hpbGQpKQotICAgICAgICAgICAg
dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKGNoaWxkLCByb290Qml0LCBmYWxzZSk7Ci0gICAgfQot
fQotCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUluc2VydGlvbihO
b2RlKiwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykK
LXsKLSAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAg
ICAgICAgZGVzY3JpcHRpb25Gb3JET01FdmVudChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1
ZSwgZGV0YWlscyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlUmVtb3Zh
bChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKLXsKLSAg
ICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBOb2RlUmVtb3ZlZCkpIHsKLSAgICAgICAgZGVzY3Jp
cHRpb25Gb3JET01FdmVudChub2RlLCBOb2RlUmVtb3ZlZCwgZmFsc2UsIGRldGFpbHMpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJl
bnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgIGRlc2NyaXB0aW9uRm9y
RE9NRXZlbnQobm9kZSwgU3VidHJlZU1vZGlmaWVkLCBmYWxzZSwgZGV0YWlscyk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25BdHRyaWJ1dGVNb2RpZmljYXRpb24oRWxlbWVudCog
ZWxlbWVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRldGFpbHMpCi17Ci0gICAgaWYg
KGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQsIGZhbHNlLCBk
ZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2Rl
KiB0YXJnZXQsIGxvbmcgYnJlYWtwb2ludFR5cGUsIGJvb2wgaW5zZXJ0aW9uLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGVzY3JpcHRpb24pCi17Ci0gICAgQVNTRVJUKGhhc0JyZWFrcG9p
bnQodGFyZ2V0LCBicmVha3BvaW50VHlwZSkpOwotCi0gICAgTm9kZSogYnJlYWtwb2ludE93bmVy
ID0gdGFyZ2V0OwotICAgIGlmICgoMSA8PCBicmVha3BvaW50VHlwZSkgJiBpbmhlcml0YWJsZURP
TUJyZWFrcG9pbnRUeXBlc01hc2spIHsKLSAgICAgICAgLy8gRm9yIGluaGVyaXRhYmxlIGJyZWFr
cG9pbnQgdHlwZXMsIHRhcmdldCBub2RlIGlzbid0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgbm9k
ZSB0aGF0IG93bnMgYSBicmVha3BvaW50LgotICAgICAgICAvLyBUYXJnZXQgbm9kZSBtYXkgYmUg
dW5rbm93biB0byBmcm9udGVuZCwgc28gd2UgbmVlZCB0byBwdXNoIGl0IGZpcnN0LgotICAgICAg
ICBsb25nIHRhcmdldE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQodGFyZ2V0KTsKLSAg
ICAgICAgQVNTRVJUKHRhcmdldE5vZGVJZCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLT5zZXROdW1i
ZXIoInRhcmdldE5vZGVJZCIsIHRhcmdldE5vZGVJZCk7Ci0KLSAgICAgICAgLy8gRmluZCBicmVh
a3BvaW50IG93bmVyIG5vZGUuCi0gICAgICAgIGlmICghaW5zZXJ0aW9uKQotICAgICAgICAgICAg
YnJlYWtwb2ludE93bmVyID0gaW5uZXJQYXJlbnROb2RlKHRhcmdldCk7Ci0gICAgICAgIEFTU0VS
VChicmVha3BvaW50T3duZXIpOwotICAgICAgICB3aGlsZSAoIShtX2JyZWFrcG9pbnRzLmdldChi
cmVha3BvaW50T3duZXIpICYgKDEgPDwgYnJlYWtwb2ludFR5cGUpKSkgewotICAgICAgICAgICAg
YnJlYWtwb2ludE93bmVyID0gaW5uZXJQYXJlbnROb2RlKGJyZWFrcG9pbnRPd25lcik7Ci0gICAg
ICAgICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChicmVha3BvaW50VHlwZSA9PSBTdWJ0cmVlTW9kaWZpZWQpCi0gICAgICAgICAgICBkZXNjcmlw
dGlvbi0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgaW5zZXJ0aW9uKTsKLSAgICB9Ci0KLSAgICBs
b25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoYnJl
YWtwb2ludE93bmVyKTsKLSAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKLSAgICBk
ZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJub2RlSWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwot
ICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInR5cGUiLCBicmVha3BvaW50VHlwZSk7Ci19Ci0K
IFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRv
Y3VtZW50KSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQgfHwgZG9jdW1lbnQtPnVybCgpLmlz
TnVsbCgpKQpAQCAtMTA3MCwxMyArOTY0LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlk
SW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlKQogICAgIGlmIChpc1doaXRlc3BhY2Uobm9kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2JyZWFrcG9pbnRzLnNpemUoKSkgewotICAgICAg
ICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQoaW5uZXJQYXJlbnROb2RlKG5vZGUp
KTsKLSAgICAgICAgdWludDMyX3QgaW5oZXJpdGFibGVUeXBlc01hc2sgPSAobWFzayB8IChtYXNr
ID4+IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkgJiBpbmhlcml0YWJsZURPTUJyZWFr
cG9pbnRUeXBlc01hc2s7Ci0gICAgICAgIGlmIChpbmhlcml0YWJsZVR5cGVzTWFzaykKLSAgICAg
ICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhub2RlLCBpbmhlcml0YWJsZVR5cGVzTWFz
aywgdHJ1ZSk7Ci0gICAgfQotCiAgICAgLy8gV2UgY291bGQgYmUgYXR0YWNoaW5nIGV4aXN0aW5n
IHN1YnRyZWUuIEZvcmdldCB0aGUgYmluZGluZ3MuCiAgICAgdW5iaW5kKG5vZGUsICZtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXApOwogCkBAIC0xMTAzLDIxICs5OTAsNiBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKGlzV2hpdGVzcGFj
ZShub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgp
KSB7Ci0gICAgICAgIC8vIFJlbW92ZSBzdWJ0cmVlIGJyZWFrcG9pbnRzLgotICAgICAgICBtX2Jy
ZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKLSAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBp
bm5lckZpcnN0Q2hpbGQobm9kZSkpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gc3RhY2subGFzdCgpOwotICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOwotICAg
ICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICBzdGFjay5hcHBlbmQo
aW5uZXJGaXJzdENoaWxkKG5vZGUpKTsKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChpbm5lck5l
eHRTaWJsaW5nKG5vZGUpKTsKLSAgICAgICAgfSB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSk7Ci0g
ICAgfQotCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgIGxvbmcgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAg
ICAgLy8gSWYgcGFyZW50IGlzIG5vdCBtYXBwZWQgeWV0IC0+IGlnbm9yZSB0aGUgZXZlbnQuCkBA
IC0xMTU3LDMxICsxMDI5LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0
YU1vZGlmaWVkKENoYXJhY3RlckRhdGEqIGNoYXJhY3RlckRhdGEpCiAgICAgbV9mcm9udGVuZC0+
Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGlkLCBjaGFyYWN0ZXJEYXRhLT5kYXRhKCkpOwogfQogCi1i
b29sIEluc3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlw
ZSkKLXsKLSAgICB1aW50MzJfdCByb290Qml0ID0gMSA8PCB0eXBlOwotICAgIHVpbnQzMl90IGRl
cml2ZWRCaXQgPSByb290Qml0IDw8IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0OwotICAg
IHJldHVybiBtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmIChyb290Qml0IHwgZGVyaXZlZEJpdCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhO
b2RlKiBub2RlLCB1aW50MzJfdCByb290TWFzaywgYm9vbCBzZXQpCi17Ci0gICAgdWludDMyX3Qg
b2xkTWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpOwotICAgIHVpbnQzMl90IGRlcml2ZWRN
YXNrID0gcm9vdE1hc2sgPDwgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQ7Ci0gICAgdWlu
dDMyX3QgbmV3TWFzayA9IHNldCA/IG9sZE1hc2sgfCBkZXJpdmVkTWFzayA6IG9sZE1hc2sgJiB+
ZGVyaXZlZE1hc2s7Ci0gICAgaWYgKG5ld01hc2spCi0gICAgICAgIG1fYnJlYWtwb2ludHMuc2V0
KG5vZGUsIG5ld01hc2spOwotICAgIGVsc2UKLSAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUo
bm9kZSk7Ci0KLSAgICB1aW50MzJfdCBuZXdSb290TWFzayA9IHJvb3RNYXNrICYgfm5ld01hc2s7
Ci0gICAgaWYgKCFuZXdSb290TWFzaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2Rl
KiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gaW5uZXJOZXh0
U2libGluZyhjaGlsZCkpCi0gICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwg
bmV3Um9vdE1hc2ssIHNldCk7Ci19Ci0KIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9y
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgLy8gVGhlIHBhdGggaXMgb2YgZm9ybSAi
MSxIVE1MLDIsQk9EWSwxLERJViIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKaW5kZXggMzY2MjdmNS4uOWVhNjkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTE0NCw4ICsxNDQsMTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVu
dCogZG9jdW1lbnQpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0RE9NQnJlYWtwb2ludChsb25n
IG5vZGVJZCwgbG9uZyB0eXBlKTsKLSAgICAgICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KGxv
bmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICAvLyBXZSByZXByZXNlbnQgZW1iZWRkZWQg
ZG9tcyBhcyBhIHBhcnQgb2YgdGhlIHNhbWUgaGllcmFyY2h5LiBIZW5jZSB3ZSB0cmVhdCBjaGls
ZHJlbiBvZiBmcmFtZSBvd25lcnMgZGlmZmVyZW50bHkuCisgICAgICAgIC8vIFdlIGFsc28gc2tp
cCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY29uZGl0aW9uYWxseS4gRm9sbG93aW5nIG1ldGhvZHMg
ZW5jYXBzdWxhdGUgdGhlc2Ugc3BlY2lmaWNzLgorICAgICAgICBzdGF0aWMgTm9kZSogaW5uZXJG
aXJzdENoaWxkKE5vZGUqKTsKKyAgICAgICAgc3RhdGljIE5vZGUqIGlubmVyTmV4dFNpYmxpbmco
Tm9kZSopOworICAgICAgICBzdGF0aWMgTm9kZSogaW5uZXJQcmV2aW91c1NpYmxpbmcoTm9kZSop
OworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW5uZXJDaGlsZE5vZGVDb3VudChOb2RlKik7Cisg
ICAgICAgIHN0YXRpYyBOb2RlKiBpbm5lclBhcmVudE5vZGUoTm9kZSopOworICAgICAgICBzdGF0
aWMgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBzdGFydExpc3RlbmluZ0ZyYW1lRG9jdW1lbnQoTm9kZSogZnJhbWVPd25lck5vZGUpOwpAQCAt
MTcwLDE1ICsxNzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICAgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBub2RlKTsKIAotICAgICAgICAvLyBXZSByZXBy
ZXNlbnQgZW1iZWRkZWQgZG9tcyBhcyBhIHBhcnQgb2YgdGhlIHNhbWUgaGllcmFyY2h5LiBIZW5j
ZSB3ZSB0cmVhdCBjaGlsZHJlbiBvZiBmcmFtZSBvd25lcnMgZGlmZmVyZW50bHkuCi0gICAgICAg
IC8vIFdlIGFsc28gc2tpcCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY29uZGl0aW9uYWxseS4gRm9s
bG93aW5nIG1ldGhvZHMgZW5jYXBzdWxhdGUgdGhlc2Ugc3BlY2lmaWNzLgotICAgICAgICBOb2Rl
KiBpbm5lckZpcnN0Q2hpbGQoTm9kZSogbm9kZSk7Ci0gICAgICAgIE5vZGUqIGlubmVyTmV4dFNp
YmxpbmcoTm9kZSogbm9kZSk7Ci0gICAgICAgIE5vZGUqIGlubmVyUHJldmlvdXNTaWJsaW5nKE5v
ZGUqIG5vZGUpOwotICAgICAgICB1bnNpZ25lZCBpbm5lckNoaWxkTm9kZUNvdW50KE5vZGUqIG5v
ZGUpOwotICAgICAgICBOb2RlKiBpbm5lclBhcmVudE5vZGUoTm9kZSogbm9kZSk7Ci0gICAgICAg
IGJvb2wgaXNXaGl0ZXNwYWNlKE5vZGUqIG5vZGUpOwotCiAgICAgICAgIERvY3VtZW50KiBtYWlu
RnJhbWVEb2N1bWVudCgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgb25NYXRjaEpvYnNUaW1lcihU
aW1lcjxJbnNwZWN0b3JET01BZ2VudD4qKTsKQEAgLTIwMyw3ICsyMDAsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiBtX21hdGNoSm9ic1Rp
bWVyOwogICAgICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAg
ICAgICAgVmVjdG9yPGxvbmc+IG1faW5zcGVjdGVkTm9kZXM7Ci0gICAgICAgIEhhc2hNYXA8Tm9k
ZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOwogICAgIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApp
bmRleCA5Mzk1ZGQ1Li4xZjE5OWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgiCkBAIC00OCwxMCArNDksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSA9ICJET00iOwotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSA9
ICJFdmVudExpc3RlbmVyIjsKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB4aHJOYXRpdmVCcmVh
a3BvaW50VHlwZSA9ICJYSFIiOwotCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbGlzdGVuZXJF
dmVudENhdGVnb3J5VHlwZSA9ICJsaXN0ZW5lciI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
aW5zdHJ1bWVudGF0aW9uRXZlbnRDYXRlZ29yeVR5cGUgPSAiaW5zdHJ1bWVudGF0aW9uIjsKIApA
QCAtODEsMTcgKzc4LDggQEAgc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LAogdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyLCBOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCiB7CiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCog
ZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQo
KTsKLSAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50Lmdl
dCgpOwotICAgIGlmICghZG9tQWdlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChkb21BZ2VudC0+c2hvdWxkQnJlYWtPbk5vZGVJbnNlcnRpb24obm9kZSwgcGFyZW50LCBl
dmVudERhdGEpKSB7Ci0gICAgICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50VHlw
ZSIsIGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKLSAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJl
YWtQcm9ncmFtKE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRhKTsK
LSAgICB9CisgICAgaWYgKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVi
dWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQu
Z2V0KCkpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT53aWxsSW5zZXJ0RE9NTm9kZShu
b2RlLCBwYXJlbnQpOwogI2VuZGlmCiB9CiAKQEAgLTk5LDI3ICs4NywyNiBAQCB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW5zZXJ0RE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdAogewogICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBp
bnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50LmdldCgpKQogICAgICAgICBkb21BZ2VudC0+
ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
KyAgICBpZiAoSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFn
ZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKSkK
KyAgICAgICAgYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVET01O
b2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBOb2RlKiBu
b2RlKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RlYnVn
Z2VyQWdlbnQuZ2V0KCk7Ci0gICAgaWYgKCFkZWJ1Z2dlckFnZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+
bV9kb21BZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRvbUFnZW50KQotICAgICAgICByZXR1cm47Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnREYXRhID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBpZiAoZG9tQWdlbnQtPnNob3VsZEJyZWFrT25Ob2RlUmVtb3ZhbChub2Rl
LCBldmVudERhdGEpKSB7Ci0gICAgICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50
VHlwZSIsIGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKLSAgICAgICAgZGVidWdnZXJBZ2VudC0+
YnJlYWtQcm9ncmFtKE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZlbnREYXRh
KTsKLSAgICB9CisgICAgaWYgKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2Vy
RGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQuZ2V0KCkpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT53aWxsUmVtb3ZlRE9NTm9k
ZShub2RlKTsKICNlbmRpZgogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciwgTm9kZSogbm9kZSkKIHsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBp
ZiAoSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1Z2dlckFnZW50ID0g
aW5zcGVjdG9yQ29udHJvbGxlci0+bV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKSkKKyAgICAg
ICAgYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisjZW5kaWYK
ICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxl
ci0+bV9kb21BZ2VudC5nZXQoKSkKICAgICAgICAgZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUo
bm9kZSk7CiB9CkBAIC0xMjcsMTcgKzExNCw4IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRSZW1vdmVET01Ob2RlSW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0CiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEVsZW1lbnQqIGVsZW1lbnQpCiB7
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2Vu
dC5nZXQoKTsKLSAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFn
ZW50LmdldCgpOwotICAgIGlmICghZG9tQWdlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihl
bGVtZW50LCBldmVudERhdGEpKSB7Ci0gICAgICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVh
a3BvaW50VHlwZSIsIGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKLSAgICAgICAgZGVidWdnZXJB
Z2VudC0+YnJlYWtQcm9ncmFtKE5hdGl2ZUJyZWFrcG9pbnREZWJ1Z2dlckV2ZW50VHlwZSwgZXZl
bnREYXRhKTsKLSAgICB9CisgICAgaWYgKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBi
cm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVn
Z2VyQWdlbnQuZ2V0KCkpCisgICAgICAgIGJyb3dzZXJEZWJ1Z2dlckFnZW50LT53aWxsTW9kaWZ5
RE9NQXR0cihlbGVtZW50KTsKICNlbmRpZgogfQogCkBAIC0xNTYsMTkgKzEzNCw4IEBAIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWRJbXBsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNl
bmRYTUxIdHRwUmVxdWVzdEltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPm1fZGVidWdnZXJBZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRlYnVnZ2VyQWdl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBicmVha3BvaW50VVJMOwotICAgIGlm
ICghaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzWEhSQnJlYWtwb2ludCh1cmwsICZicmVha3BvaW50
VVJMKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZl
bnREYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBldmVudERhdGEtPnNldFN0
cmluZygiYnJlYWtwb2ludFR5cGUiLCB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSk7Ci0gICAgZXZl
bnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRVUkwiLCBicmVha3BvaW50VVJMKTsKLSAgICBl
dmVudERhdGEtPnNldFN0cmluZygidXJsIiwgdXJsKTsKLSAgICBkZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOwor
ICAgIGlmIChJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCogYnJvd3NlckRlYnVnZ2VyQWdl
bnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmdldCgpKQor
ICAgICAgICBicm93c2VyRGVidWdnZXJBZ2VudC0+d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCh1cmwp
OwogI2VuZGlmCiB9CiAKQEAgLTU0NiwxOSArNTEzLDggQEAgYm9vbCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246Omhhc0Zyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2wKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5l
ZWRlZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBjb25zdCBTdHJp
bmcmIGNhdGVnb3J5VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGJvb2wgc3luY2hyb25v
dXMpCiB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPm1fZGVidWdn
ZXJBZ2VudC5nZXQoKTsKLSAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCi0gICAgICAgIHJldHVybjsK
LSAgICBTdHJpbmcgZnVsbEV2ZW50TmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlczolcyIsIGNhdGVn
b3J5VHlwZS51dGY4KCkuZGF0YSgpLCBldmVudE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYg
KCFpbnNwZWN0b3JDb250cm9sbGVyLT5oYXNFdmVudExpc3RlbmVyQnJlYWtwb2ludChmdWxsRXZl
bnROYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZXZlbnREYXRhLT5zZXRT
dHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBl
KTsKLSAgICBldmVudERhdGEtPnNldFN0cmluZygiZXZlbnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7
Ci0gICAgaWYgKHN5bmNocm9ub3VzKQotICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOwotICAgIGVs
c2UKLSAgICAgICAgZGVidWdnZXJBZ2VudC0+c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChO
YXRpdmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CisgICAgaWYgKElu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCA9IGluc3Bl
Y3RvckNvbnRyb2xsZXItPm1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCkpCisgICAgICAgIGJy
b3dzZXJEZWJ1Z2dlckFnZW50LT5wYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChjYXRlZ29yeVR5
cGUsIGV2ZW50TmFtZSwgc3luY2hyb25vdXMpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3OGJkNzkxLi5mZGU0ZDJmIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTEtMDEtMTMgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNs
ZWFuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BT
ISkKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weToK
KwogMjAxMS0wMS0xMyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc0ODgxLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CmluZGV4IDljZmRhYTQuLjkwYWFj
OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkK
QEAgLTc0NSw2ICs3NDUsOCBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgIiIiUmV0dXJucyBh
IGJ5dGUgYXJyYXkgKHN0cigpKSByZXByZXNlbnRpbmcgdGhlIHBhdGNoIGZpbGUuCiAgICAgICAg
IFBhdGNoIGZpbGVzIGFyZSBlZmZlY3RpdmVseSBiaW5hcnkgc2luY2UgdGhleSBtYXkgY29udGFp
bgogICAgICAgICBmaWxlcyBvZiBtdWx0aXBsZSBkaWZmZXJlbnQgZW5jb2RpbmdzLiIiIgorICAg
ICAgICBpZiBjaGFuZ2VkX2ZpbGVzID09IE5vbmU6CisgICAgICAgICAgICBjaGFuZ2VkX2ZpbGVz
ID0gW10KICAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnZ2l0JywgJ2RpZmYnLCAnLS1iaW5hcnkn
LCAiLS1uby1leHQtZGlmZiIsICItLWZ1bGwtaW5kZXgiLCAiLU0iLCBzZWxmLm1lcmdlX2Jhc2Uo
Z2l0X2NvbW1pdCksICItLSJdICsgY2hhbmdlZF9maWxlcywgZGVjb2RlX291dHB1dD1GYWxzZSwg
Y3dkPXNlbGYuY2hlY2tvdXRfcm9vdCkKIAogICAgIGRlZiBfcnVuX2dpdF9zdm5fZmluZF9yZXYo
c2VsZiwgYXJnKToK
</data>

          </attachment>
      

    </bug>

</bugzilla>