<?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>108824</bug_id>
          
          <creation_ts>2013-02-04 07:47:52 -0800</creation_ts>
          <short_desc>Web Inspector: Native Memory Instrumentation: reduce native heap snapshot runtime memory footprint</short_desc>
          <delta_ts>2013-02-07 00:39:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>107254</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>benjamin</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>824350</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-04 07:47:52 -0800</bug_when>
    <thetext>We take and transfer native heap snapshot as a single chunk.
As a result the snapshot data affects the memory we are trying to count.

We can significantly reduce this side effect if we change the transfer mechanic to the chunk based.

Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824359</commentid>
    <comment_count>1</comment_count>
      <attachid>186375</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-04 08:01:50 -0800</bug_when>
    <thetext>Created attachment 186375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826426</commentid>
    <comment_count>2</comment_count>
      <attachid>186375</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-06 07:21:07 -0800</bug_when>
    <thetext>Comment on attachment 186375
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        MemoryInstrumentation was slightly changed. Now it reports base to real address map only after reporting the node with real address.

This should be in a separate change.

&gt; Source/WTF/wtf/MemoryInstrumentation.cpp:108
&gt; +        memoryInstrumentation-&gt;m_client-&gt;reportBaseAddress(m_pointer, realAddress);

The method code can be rearranged so that reportNode is called always before reportBaseAddress and only if memoryObjectInfo.frstVisit() == true. Then you wouldn&apos;t need to duplicate this statement.

&gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:77
&gt; +        &amp;&amp; m_nodes-&gt;length() &lt;= chunkSize * NodeFieldsCount

It would probably be better to compare weighted sum of the collection sizes with some chunkSize. Also for strings we may want to count total length.

&gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:104
&gt; +    m_prevNodeLastEdgeIndex = m_reportedEdgesCount;

Can we use just m_reportedEdgesCount and reset it after reporting next node?

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:53
&gt; +    HeapGraphSerializer(InspectorFrontend::Memory*);

explicit

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:73
&gt; +    void reportEdge(const int toNodeId, const char* name, int memberType);

reportEdge -&gt; reportEdgeImpl?

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:87
&gt; +    static const size_t EdgeFieldsCount = 3;

EdgeFieldsCount -&gt; s_edgeFieldsCount

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:91
&gt; +    static const size_t NodeFieldsCount = 5;

NodeFieldsCount -&gt; s_nodeFieldsCount

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:94
&gt; +    RefPtr&lt;NodeIdRemapping&gt; m_nodeIdRemapping;

m_nodeIdRemapping -&gt; m_baseToRealNodeIdMap?

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:95
&gt; +    static const size_t RemappingFieldsCount = 2;

RemappingFieldsCount -&gt; s_remappingFieldsCount

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:105
&gt; +    typedef TypeBuilder::Memory::HeapSnapshotChunk HeapSnapshotChunk;

Why do you need this in the header?

&gt; Source/WebCore/inspector/Inspector.json:130
&gt; +                &quot;name&quot;: &quot;finishNativeSnapshot&quot;,

Can we use response to getProcessMemoryDistribution instead of this event?

&gt; Source/WebCore/inspector/InspectorMemoryAgent.cpp:556
&gt; +void InspectorMemoryAgent::getProcessMemoryDistributionAsMap(bool reportGraph, TypeNameToSizeMap* memoryInfo)

getProcessMemoryDistributionAsMap should not need reportGraph as the parameter doesn&apos;t affect the method result in any way and may confuse clients.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotGridNodes.js:387
&gt;          div.style.overflow = &quot;visible&quot;;

please revert new empty lines

&gt; Source/WebCore/inspector/front-end/NativeHeapSnapshot.js:91
&gt; +        return this._snapshot._nodes[this.nodeIndex + this._snapshot._nodeTypeOffset];

why did this change?

&gt; Source/WebCore/inspector/front-end/NativeHeapSnapshot.js:113
&gt; +            type: 3,

What is 3?

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:324
&gt; +            var id2idMap = {};

id2idMap -&gt; baseToRealId

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:329
&gt; +            for (var i = 2; i &lt; this._nodes.length; i += 5)

5 -&gt; nodeFieldCount or meta.node_fields.length

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:334
&gt; +            for (var i = 2; i &lt; edges.length; i += 3) {

3 -&gt; edgeFieldCount, 2 -&gt; meta.edge_fields.indexOf(&quot;to_node&quot;) ?

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:409
&gt; +    this._nodeId2nodeId = [];

_baseToRealNodeId</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826479</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-06 08:43:47 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 186375 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186375&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        MemoryInstrumentation was slightly changed. Now it reports base to real address map only after reporting the node with real address.
&gt; 
&gt; This should be in a separate change.

done. https://bugs.webkit.org/show_bug.cgi?id=109051


&gt; 
&gt; &gt; Source/WTF/wtf/MemoryInstrumentation.cpp:108
&gt; &gt; +        memoryInstrumentation-&gt;m_client-&gt;reportBaseAddress(m_pointer, realAddress);
&gt; 
&gt; The method code can be rearranged so that reportNode is called always before reportBaseAddress and only if memoryObjectInfo.frstVisit() == true. Then you wouldn&apos;t need to duplicate this statement.

done in the separate patch

&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:77
&gt; &gt; +        &amp;&amp; m_nodes-&gt;length() &lt;= chunkSize * NodeFieldsCount
&gt; 
&gt; It would probably be better to compare weighted sum of the collection sizes with some chunkSize. Also for strings we may want to count total length.


I think we need to count the average coefficients on a real snapshot and apply it in a separate patch.


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:104
&gt; &gt; +    m_prevNodeLastEdgeIndex = m_reportedEdgesCount;
&gt; 
&gt; Can we use just m_reportedEdgesCount and reset it after reporting next node?

done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:53
&gt; &gt; +    HeapGraphSerializer(InspectorFrontend::Memory*);
&gt; 
&gt; explicit

done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:73
&gt; &gt; +    void reportEdge(const int toNodeId, const char* name, int memberType);
&gt; 
&gt; reportEdge -&gt; reportEdgeImpl?


done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:87
&gt; &gt; +    static const size_t EdgeFieldsCount = 3;
&gt; 
&gt; EdgeFieldsCount -&gt; s_edgeFieldsCount

done 


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:91
&gt; &gt; +    static const size_t NodeFieldsCount = 5;
&gt; 
&gt; NodeFieldsCount -&gt; s_nodeFieldsCount

done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:94
&gt; &gt; +    RefPtr&lt;NodeIdRemapping&gt; m_nodeIdRemapping;
&gt; 
&gt; m_nodeIdRemapping -&gt; m_baseToRealNodeIdMap?

done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:95
&gt; &gt; +    static const size_t RemappingFieldsCount = 2;
&gt; 
&gt; RemappingFieldsCount -&gt; s_remappingFieldsCount

done


&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:105
&gt; &gt; +    typedef TypeBuilder::Memory::HeapSnapshotChunk HeapSnapshotChunk;
&gt; 
&gt; Why do you need this in the header?

removed

&gt; 
&gt; &gt; Source/WebCore/inspector/Inspector.json:130
&gt; &gt; +                &quot;name&quot;: &quot;finishNativeSnapshot&quot;,
&gt; 
&gt; Can we use response to getProcessMemoryDistribution instead of this event?
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorMemoryAgent.cpp:556
&gt; &gt; +void InspectorMemoryAgent::getProcessMemoryDistributionAsMap(bool reportGraph, TypeNameToSizeMap* memoryInfo)
&gt; 
&gt; getProcessMemoryDistributionAsMap should not need reportGraph as the parameter doesn&apos;t affect the method result in any way and may confuse clients.

This change is not related to the idea of the patch but I fixed that too.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshotGridNodes.js:387
&gt; &gt;          div.style.overflow = &quot;visible&quot;;
&gt; 
&gt; please revert new empty lines

done


&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeHeapSnapshot.js:91
&gt; &gt; +        return this._snapshot._nodes[this.nodeIndex + this._snapshot._nodeTypeOffset];
&gt; 
&gt; why did this change?

I&apos;d like to use type field of the snapshot as a string id so we will use it for classNames.


&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeHeapSnapshot.js:113
&gt; &gt; +            type: 3,
&gt; 
&gt; What is 3?

it is a fallback to JSHeapSnapshot types. 3 is the &apos;object&apos; type.
I moved this magic number to the constructor where it will be easily recognized.
The frontend code needs further refactoring but this will be a part of next pathes.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:324
&gt; &gt; +            var id2idMap = {};
&gt; 
&gt; id2idMap -&gt; baseToRealId

done

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:329
&gt; &gt; +            for (var i = 2; i &lt; this._nodes.length; i += 5)
&gt; 
&gt; 5 -&gt; nodeFieldCount or meta.node_fields.length

done

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:334
&gt; &gt; +            for (var i = 2; i &lt; edges.length; i += 3) {
&gt; 
&gt; 3 -&gt; edgeFieldCount, 2 -&gt; meta.edge_fields.indexOf(&quot;to_node&quot;) ?

done

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:409
&gt; &gt; +    this._nodeId2nodeId = [];
&gt; 
&gt; _baseToRealNodeId

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826480</commentid>
    <comment_count>4</comment_count>
      <attachid>186863</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-06 08:44:12 -0800</bug_when>
    <thetext>Created attachment 186863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827103</commentid>
    <comment_count>5</comment_count>
      <attachid>186863</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-07 00:24:32 -0800</bug_when>
    <thetext>Comment on attachment 186863
Patch

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

&gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:70
&gt; +void HeapGraphSerializer::pushUpdateIfNeed()

pushUpdateIfNeed -&gt;  pushUpdateIfNeeded

&gt; Source/WebCore/inspector/HeapGraphSerializer.cpp:169
&gt; +    info.addMember(m_baseToRealNodeIdMap, &quot;nodeIdRemapping&quot;);

nodeIdRemapping -&gt; baseToRealNodeIdMap

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:94
&gt; +    static const size_t s_remappingFieldsCount = 2;

s_idMapEntryFieldCount ?

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:335
&gt; +            nodeId2NodeIndex[this._nodes[i]] = i - nodeIdFieldOffset;

shift 4 spaces to the right</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827118</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-07 00:39:47 -0800</bug_when>
    <thetext>Committed r142074: &lt;http://trac.webkit.org/changeset/142074&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186375</attachid>
            <date>2013-02-04 08:01:50 -0800</date>
            <delta_ts>2013-02-06 08:44:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108824-20130204195828.patch</filename>
            <type>text/plain</type>
            <size>40112</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjNTNiN2I2NjE5YTY3NGQxOWYyNmUz
NWRkNTdmOGJjZjc3MDUyMjcuLmQ5YmMwZDE4OTk4MzdmYzUwYzVmYzcyNDM1Y2JhY2YwNWJmYjM2
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDItMDQgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5hdGl2ZSBNZW1v
cnkgSW5zdHJ1bWVudGF0aW9uOiByZWR1Y2UgbmF0aXZlIGhlYXAgc25hcHNob3QgcnVudGltZSBt
ZW1vcnkgZm9vdHByaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA4ODI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uIHdhcyBzbGlnaHRseSBjaGFuZ2VkLiBOb3cg
aXQgcmVwb3J0cyBiYXNlIHRvIHJlYWwgYWRkcmVzcyBtYXAgb25seSBhZnRlciByZXBvcnRpbmcg
dGhlIG5vZGUgd2l0aCByZWFsIGFkZHJlc3MuCisKKyAgICAgICAgKiB3dGYvTWVtb3J5SW5zdHJ1
bWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6TWVtb3J5SW5zdHJ1bWVudGF0aW9uOjpXcmFw
cGVyQmFzZTo6cHJvY2Vzc1BvaW50ZXIpOgorCiAyMDEzLTAyLTA0ICBEYXZpZCBLaWx6ZXIgIDxk
ZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgU29ydCBXVEYgWGNvZGUgcHJvamVjdCBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNTU3ZjczNzAzNjUwNWY3Njg1YzcyNjY0ZjkyZTc3MzcyYTAyN2UxMi4u
NjgxNTU1ZWQwNmY5YzllNjQ3MGE0YjNlZDk2YjdhMjA3NzdjNzM1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDY2IEBACisyMDEzLTAyLTA0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1l
bnRhdGlvbjogcmVkdWNlIG5hdGl2ZSBoZWFwIHNuYXBzaG90IHJ1bnRpbWUgbWVtb3J5IGZvb3Rw
cmludC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
ODgyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5l
dyBldmVudCB3YXMgYWRkZWQgaW50byBNZW1vcnkgZG9tYWluIGFkZE5hdGl2ZVNuYXBzaG90Q2h1
bmsuCisgICAgICAgIFRoZSBjb250ZW50IG9mIEhlYXBHcmFwaFNlcmlhbGl6ZXIgaXMgY29tcGxl
dGVseSByZXdyaXR0ZW4gYWNjb3JkaW5nIHRvIG5ldyBBUEkuCisgICAgICAgIE5vdyBpdCBjb2xs
ZWN0cyBzdHJpbmdzLCBub2RlcywgZWRnZXMgYW5kIGlkMmlkIG1hcCBhbmQgcHVzaGVzIHdoZW4g
dGhlIGNvbGxlY3RlZCBpdGVtcyBjb3VudCBleGNlZWQgYSBsaW1pdC4KKyAgICAgICAgT24gdGhl
IGZyb250ZW5kIHNpZGUgSSBhZGRlZCBuZXcgbWV0aG9kIGZvciB0aGUgbmV3IGV2ZW50IGFuZCBm
aXhlZCB0aGUgcG9zdHByb2Nlc3Npbmcgc3RlcC4KKyAgICAgICAgTWVtb3J5SW5zdHJ1bWVudGF0
aW9uIHdhcyBzbGlnaHRseSBjaGFuZ2VkLiBOb3cgaXQgcmVwb3J0cyBiYXNlIHRvIHJlYWwgYWRk
cmVzcyBtYXAgb25seSBhZnRlciByZXBvcnRpbmcgdGhlIG5vZGUgd2l0aCByZWFsIGFkZHJlc3Mu
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjpIZWFwR3JhcGhTZXJpYWxpemVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6OnB1c2hVcGRhdGVJZk5lZWQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVy
OjpwdXNoVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6OnJl
cG9ydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6cmVwb3J0
RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnRMZWFm
KToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6OnJlcG9ydEJhc2VBZGRy
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6OmZpbmlzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjphZGRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6dG9Ob2RlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6YWRkUm9vdE5vZGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmg6CisgICAgICAgIChIZWFwR3JhcGhTZXJpYWxp
emVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6cHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0
aW9uQXNNYXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnNldEZy
b250ZW5kKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
TWVtb3J5QWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9yTWVtb3J5QWdlbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUuX2Ny
ZWF0ZU9iamVjdENlbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVy
aWNPYmplY3ROb2RlLnByb3RvdHlwZS5nZXQgZGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVIZWFwU25hcHNob3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuY2xhc3NJbmRleCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuaWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLm5hbWUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLnNlcmlh
bGl6ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlTbmFwc2hv
dFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlw
ZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZC5kaWRSZWNlaXZlTWVtb3J5U25hcHNob3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmJ1
dHRvbkNsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmls
ZUhlYWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlSGVh
ZGVyLnByb3RvdHlwZS5zdGFydFNuYXBzaG90VHJhbnNmZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlci5wcm90b3R5cGUuYWRkTmF0aXZlU25hcHNo
b3RDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5UHJvZmlsZVR5cGUu
cHJvdG90eXBlLmJ1dHRvbkNsaWNrZWQuZGlkUmVjZWl2ZU1lbW9yeVNuYXBzaG90KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9u
Q2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5QmFyQ2hhcnQucHJv
dG90eXBlLl91cGRhdGVTdGF0cyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLk1lbW9yeURpc3BhdGNoZXIpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLk1lbW9yeURpc3BhdGNoZXIucHJvdG90eXBlLmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmspOgor
CiAyMDEzLTAyLTA0ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgU29ydCBXZWJDb3JlIFhjb2RlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeUlu
c3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZGRjZWQ4ZjY3YTBjYThhMmI4ZDk5ZWY2NzU3NTkwMGJh
ZTIxODhiNy4uZDRjMjUxOTE3ZTViMjQ2YWVkMTFjZjVkZDdhMzljZWZmZGYzMmIzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uY3BwCkBAIC05NywxMiArOTcsMTUgQEAg
dm9pZCBNZW1vcnlJbnN0cnVtZW50YXRpb246OldyYXBwZXJCYXNlOjpwcm9jZXNzUG9pbnRlcihN
ZW1vcnlJbnN0cnVtZW50YXRpb24qIG0KICAgICBjb25zdCB2b2lkKiByZWFsQWRkcmVzcyA9IG1l
bW9yeU9iamVjdEluZm8ucmVwb3J0ZWRQb2ludGVyKCk7CiAgICAgQVNTRVJUKHJlYWxBZGRyZXNz
KTsKICAgICBpZiAocmVhbEFkZHJlc3MgIT0gbV9wb2ludGVyKSB7Ci0gICAgICAgIG1lbW9yeUlu
c3RydW1lbnRhdGlvbi0+bV9jbGllbnQtPnJlcG9ydEJhc2VBZGRyZXNzKG1fcG9pbnRlciwgcmVh
bEFkZHJlc3MpOwotICAgICAgICBpZiAoIW1lbW9yeU9iamVjdEluZm8uZmlyc3RWaXNpdCgpKQor
ICAgICAgICBpZiAoIW1lbW9yeU9iamVjdEluZm8uZmlyc3RWaXNpdCgpKSB7CisgICAgICAgICAg
ICBtZW1vcnlJbnN0cnVtZW50YXRpb24tPm1fY2xpZW50LT5yZXBvcnRCYXNlQWRkcmVzcyhtX3Bv
aW50ZXIsIHJlYWxBZGRyZXNzKTsgLy8gUmVwb3J0IGJhc2UgYWRkcmVzcyBvbmx5IGlmIG5vZGUg
aGFzIGJlZW4gcmVwb3J0ZWQuCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9
CiAgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLT5jb3VudE9iamVjdFNpemUocmVhbEFkZHJlc3Ms
IG1lbW9yeU9iamVjdEluZm8ub2JqZWN0VHlwZSgpLCBtZW1vcnlPYmplY3RJbmZvLm9iamVjdFNp
emUoKSk7CiAgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLT5tX2NsaWVudC0+cmVwb3J0Tm9kZSht
ZW1vcnlPYmplY3RJbmZvKTsKKyAgICBpZiAocmVhbEFkZHJlc3MgIT0gbV9wb2ludGVyKQorICAg
ICAgICBtZW1vcnlJbnN0cnVtZW50YXRpb24tPm1fY2xpZW50LT5yZXBvcnRCYXNlQWRkcmVzcyht
X3BvaW50ZXIsIHJlYWxBZGRyZXNzKTsKICAgICBpZiAoIW1lbW9yeU9iamVjdEluZm8uY3VzdG9t
QWxsb2NhdGlvbigpICYmICFtZW1vcnlJbnN0cnVtZW50YXRpb24tPmNoZWNrQ291bnRlZE9iamVj
dChyZWFsQWRkcmVzcykpIHsKICNpZiBERUJVR19QT0lOVEVSX0lOU1RSVU1FTlRBVElPTgogICAg
ICAgICBmcHV0cygiVW5rbm93biBvYmplY3QgY291bnRlZDpcbiIsIHN0ZGVycik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHAKaW5kZXggODJl
NGI5ODM0YTJmYzdlYTBiYmE0ODYwNzdmMzA0NmI1ZTdiZGRkYy4uOTc5NWZjMDI5ODBmNDZiNTQy
ZmY5ZjdkMjBkNjlkNmFjYWFlYWFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9IZWFwR3JhcGhTZXJpYWxpemVyLmNwcApAQCAtMzQsNyArMzQsNiBAQAogCiAjaW5jbHVkZSAi
SGVhcEdyYXBoU2VyaWFsaXplci5oIgogCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9N
ZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01lbW9yeUluc3Ry
dW1lbnRhdGlvblZlY3Rvci5oPgpAQCAtNDQsNjAgKzQzLDIzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgSGVhcEdyYXBoTm9kZSB7Ci1wdWJsaWM6Ci0gICAgSGVhcEdyYXBoTm9k
ZSgpCi0gICAgICAgIDogbV90eXBlKDApCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwg
bV9jbGFzc05hbWUoMCkKLSAgICAgICAgLCBtX25hbWUoMCkKLSAgICAgICAgLCBtX2VkZ2VDb3Vu
dCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fc2l6
ZTsKLSAgICBpbnQgbV9jbGFzc05hbWU7Ci0gICAgaW50IG1fbmFtZTsKLSAgICBpbnQgbV9lZGdl
Q291bnQ7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX25vZGVGaWVsZENvdW50ID0gNTsKLX07Ci0K
LWNsYXNzIEhlYXBHcmFwaEVkZ2UgewotcHVibGljOgotICAgIEhlYXBHcmFwaEVkZ2UoKQotICAg
ICAgICA6IG1fdHlwZSgwKQotICAgICAgICAsIG1fdGFyZ2V0SW5kZXhJc0tub3duKGZhbHNlKQot
ICAgICAgICAsIG1fdG9JbmRleCgwKQotICAgICAgICAsIG1fbmFtZSgwKQotICAgIHsKLSAgICB9
Ci0KLSAgICBpbnQgbV90eXBlOwotICAgIGJvb2wgbV90YXJnZXRJbmRleElzS25vd247Ci0gICAg
dW5pb24gewotICAgICAgICBjb25zdCB2b2lkKiBtX3RvT2JqZWN0OwotICAgICAgICBpbnQgbV90
b0luZGV4OwotICAgIH07Ci0gICAgaW50IG1fbmFtZTsKLX07Ci0KLUhlYXBHcmFwaFNlcmlhbGl6
ZXI6OkhlYXBHcmFwaFNlcmlhbGl6ZXIoKQotICAgIDogbV9sYXN0UmVwb3J0ZWRFZGdlSW5kZXgo
MCkKK0hlYXBHcmFwaFNlcmlhbGl6ZXI6OkhlYXBHcmFwaFNlcmlhbGl6ZXIoSW5zcGVjdG9yRnJv
bnRlbmQ6Ok1lbW9yeSogZnJvbnRlbmQpCisgICAgOiBtX2Zyb250ZW5kKGZyb250ZW5kKQorICAg
ICwgbV9zdHJpbmdzKFN0cmluZ3M6OmNyZWF0ZSgpKQorICAgICwgbV9lZGdlcyhFZGdlczo6Y3Jl
YXRlKCkpCisgICAgLCBtX3JlcG9ydGVkRWRnZXNDb3VudCgwKQorICAgICwgbV9wcmV2Tm9kZUxh
c3RFZGdlSW5kZXgoMCkKKyAgICAsIG1fbm9kZXMoTm9kZXM6OmNyZWF0ZSgpKQorICAgICwgbV9u
b2RlSWRSZW1hcHBpbmcoTm9kZUlkUmVtYXBwaW5nOjpjcmVhdGUoKSkKIHsKLSAgICBtX3N0cmlu
Z3MuYXBwZW5kKFN0cmluZygpKTsKKyAgICBBU1NFUlQobV9mcm9udGVuZCk7CisgICAgbV9zdHJp
bmdzLT5hZGRJdGVtKFN0cmluZygpKTsgLy8gQW4gZW1wdHkgc3RyaW5nIHdpdGggMCBpbmRleC4K
IAogICAgIG1lbXNldChtX2VkZ2VUeXBlcywgMCwgc2l6ZW9mKG1fZWRnZVR5cGVzKSk7CiAKLSAg
ICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSk7Ci0gICAgbV9lZGdlVHlwZXNbV1RGOjpQb2ludGVy
TWVtYmVyXSA9IG1fc3RyaW5ncy5zaXplKCk7Ci0gICAgbV9zdHJpbmdzLmFwcGVuZCgid2Vha1Jl
ZiIpOwotCi0gICAgbV9lZGdlVHlwZXNbV1RGOjpPd25QdHJNZW1iZXJdID0gbV9zdHJpbmdzLnNp
emUoKTsKLSAgICBtX3N0cmluZ3MuYXBwZW5kKCJvd25SZWYiKTsKLQotICAgIG1fZWRnZVR5cGVz
W1dURjo6UmVmUHRyTWVtYmVyXSA9IG1fc3RyaW5ncy5zaXplKCk7Ci0gICAgbV9zdHJpbmdzLmFw
cGVuZCgiY291bnRSZWYiKTsKKyAgICBtX2VkZ2VUeXBlc1tXVEY6OlBvaW50ZXJNZW1iZXJdID0g
YWRkU3RyaW5nKCJ3ZWFrIik7CisgICAgbV9lZGdlVHlwZXNbV1RGOjpPd25QdHJNZW1iZXJdID0g
YWRkU3RyaW5nKCJvd25SZWYiKTsgICAgCisgICAgbV9lZGdlVHlwZXNbV1RGOjpSZWZQdHJNZW1i
ZXJdID0gYWRkU3RyaW5nKCJjb3VudFJlZiIpOwogCiAgICAgbV91bmtub3duQ2xhc3NOYW1lSWQg
PSBhZGRTdHJpbmcoInVua25vd24iKTsKIH0KQEAgLTEwNiw4OCArNjgsOTQgQEAgSGVhcEdyYXBo
U2VyaWFsaXplcjo6fkhlYXBHcmFwaFNlcmlhbGl6ZXIoKQogewogfQogCit2b2lkIEhlYXBHcmFw
aFNlcmlhbGl6ZXI6OnB1c2hVcGRhdGVJZk5lZWQoKQoreworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY2h1bmtTaXplID0gMTAwOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXZlcmFnZUVkZ2Vz
UGVyTm9kZSA9IDU7CisKKyAgICBpZiAobV9zdHJpbmdzLT5sZW5ndGgoKSA8PSBjaHVua1NpemUK
KyAgICAgICAgJiYgbV9ub2Rlcy0+bGVuZ3RoKCkgPD0gY2h1bmtTaXplICogTm9kZUZpZWxkc0Nv
dW50CisgICAgICAgICYmIG1fZWRnZXMtPmxlbmd0aCgpIDw9IGNodW5rU2l6ZSAqIGF2ZXJhZ2VF
ZGdlc1Blck5vZGUgKiBFZGdlRmllbGRzQ291bnQKKyAgICAgICAgJiYgbV9ub2RlSWRSZW1hcHBp
bmctPmxlbmd0aCgpIDw9IGNodW5rU2l6ZSAqIFJlbWFwcGluZ0ZpZWxkc0NvdW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBwdXNoVXBkYXRlKCk7Cit9CisKK3ZvaWQgSGVhcEdyYXBoU2VyaWFs
aXplcjo6cHVzaFVwZGF0ZSgpCit7CisgICAgUmVmUHRyPEhlYXBTbmFwc2hvdENodW5rPiBjaHVu
ayA9IEhlYXBTbmFwc2hvdENodW5rOjpjcmVhdGUoKQorICAgICAgICAuc2V0U3RyaW5ncyhtX3N0
cmluZ3MucmVsZWFzZSgpKQorICAgICAgICAuc2V0Tm9kZXMobV9ub2Rlcy5yZWxlYXNlKCkpCisg
ICAgICAgIC5zZXRFZGdlcyhtX2VkZ2VzLnJlbGVhc2UoKSkKKyAgICAgICAgLnNldE5vZGVJZDJu
b2RlSWQobV9ub2RlSWRSZW1hcHBpbmcucmVsZWFzZSgpKTsKKworICAgIG1fZnJvbnRlbmQtPmFk
ZE5hdGl2ZVNuYXBzaG90Q2h1bmsoY2h1bmspOworCisgICAgbV9zdHJpbmdzID0gU3RyaW5nczo6
Y3JlYXRlKCk7CisgICAgbV9lZGdlcyA9IEVkZ2VzOjpjcmVhdGUoKTsKKyAgICBtX25vZGVzID0g
Tm9kZXM6OmNyZWF0ZSgpOworICAgIG1fbm9kZUlkUmVtYXBwaW5nID0gTm9kZUlkUmVtYXBwaW5n
OjpjcmVhdGUoKTsKK30KKwogdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnROb2RlKGNv
bnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYgaW5mbykKIHsKLSAgICBIZWFwR3JhcGhOb2RlIG5v
ZGU7Ci0gICAgbm9kZS5tX3R5cGUgPSBhZGRTdHJpbmcoaW5mby5vYmplY3RUeXBlKCkpOwotICAg
IG5vZGUubV9zaXplID0gaW5mby5vYmplY3RTaXplKCk7Ci0gICAgbm9kZS5tX2NsYXNzTmFtZSA9
IGluZm8uY2xhc3NOYW1lKCkuaXNFbXB0eSgpID8gbV91bmtub3duQ2xhc3NOYW1lSWQgOiBhZGRT
dHJpbmcoaW5mby5jbGFzc05hbWUoKSk7Ci0gICAgbm9kZS5tX25hbWUgPSBhZGRTdHJpbmcoaW5m
by5uYW1lKCkpOwotICAgIC8vIE5vZGUgaXMgYWx3YXlzIHJlcG9ydGVkIGFmdGVyIGl0cyBvdXRn
b2luZyBlZGdlcyBhbmQgbGVhdmVzLgotICAgIG5vZGUubV9lZGdlQ291bnQgPSBtX2VkZ2VzLnNp
emUoKSAtIG1fbGFzdFJlcG9ydGVkRWRnZUluZGV4OwotICAgIG1fbGFzdFJlcG9ydGVkRWRnZUlu
ZGV4ID0gbV9lZGdlcy5zaXplKCk7Ci0KLSAgICBtX29iamVjdFRvTm9kZUluZGV4LnNldChpbmZv
LnJlcG9ydGVkUG9pbnRlcigpLCBtX25vZGVzLnNpemUoKSk7CisgICAgcmVwb3J0Tm9kZShpbmZv
LCBtX3JlcG9ydGVkRWRnZXNDb3VudCAtIG1fcHJldk5vZGVMYXN0RWRnZUluZGV4KTsKKyAgICBt
X3ByZXZOb2RlTGFzdEVkZ2VJbmRleCA9IG1fcmVwb3J0ZWRFZGdlc0NvdW50OwogICAgIGlmIChp
bmZvLmlzUm9vdCgpKQogICAgICAgICBtX3Jvb3RzLmFwcGVuZChpbmZvLnJlcG9ydGVkUG9pbnRl
cigpKTsKLSAgICBtX25vZGVzLmFwcGVuZChub2RlKTsKKyAgICBwdXNoVXBkYXRlSWZOZWVkKCk7
Cit9CisKK2ludCBIZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnROb2RlKGNvbnN0IFdURjo6TWVt
b3J5T2JqZWN0SW5mbyYgaW5mbywgaW50IGVkZ2VzQ291bnQpCit7CisgICAgaW50IG5vZGVJZCA9
IHRvTm9kZUlkKGluZm8ucmVwb3J0ZWRQb2ludGVyKCkpOworCisgICAgbV9ub2Rlcy0+YWRkSXRl
bShpbmZvLmNsYXNzTmFtZSgpLmlzRW1wdHkoKSA/IG1fdW5rbm93bkNsYXNzTmFtZUlkIDogYWRk
U3RyaW5nKGluZm8uY2xhc3NOYW1lKCkpKTsKKyAgICBtX25vZGVzLT5hZGRJdGVtKGFkZFN0cmlu
ZyhpbmZvLm5hbWUoKSkpOworICAgIG1fbm9kZXMtPmFkZEl0ZW0obm9kZUlkKTsKKyAgICBtX25v
ZGVzLT5hZGRJdGVtKGluZm8ub2JqZWN0U2l6ZSgpKTsKKyAgICBtX25vZGVzLT5hZGRJdGVtKGVk
Z2VzQ291bnQpOworCisgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAogdm9pZCBIZWFwR3JhcGhTZXJp
YWxpemVyOjpyZXBvcnRFZGdlKGNvbnN0IHZvaWQqIHRvLCBjb25zdCBjaGFyKiBuYW1lLCBXVEY6
Ok1lbWJlclR5cGUgbWVtYmVyVHlwZSkKIHsKLSAgICBIZWFwR3JhcGhFZGdlIGVkZ2U7CiAgICAg
QVNTRVJUKHRvKTsKKyAgICByZXBvcnRFZGdlKHRvTm9kZUlkKHRvKSwgbmFtZSwgbV9lZGdlVHlw
ZXNbbWVtYmVyVHlwZV0pOworICAgIHB1c2hVcGRhdGVJZk5lZWQoKTsKK30KKwordm9pZCBIZWFw
R3JhcGhTZXJpYWxpemVyOjpyZXBvcnRFZGdlKGNvbnN0IGludCB0b05vZGVJZCwgY29uc3QgY2hh
ciogbmFtZSwgaW50IG1lbWJlclR5cGUpCit7CiAgICAgQVNTRVJUKG1lbWJlclR5cGUgPj0gMCk7
CiAgICAgQVNTRVJUKG1lbWJlclR5cGUgPCBXVEY6Okxhc3RNZW1iZXJUeXBlRW50cnkpOwotICAg
IGVkZ2UubV90eXBlID0gbV9lZGdlVHlwZXNbbWVtYmVyVHlwZV07Ci0gICAgZWRnZS5tX3RvT2Jq
ZWN0ID0gdG87Ci0gICAgZWRnZS5tX25hbWUgPSBhZGRTdHJpbmcobmFtZSk7Ci0gICAgbV9lZGdl
cy5hcHBlbmQoZWRnZSk7CisKKyAgICBtX2VkZ2VzLT5hZGRJdGVtKG1lbWJlclR5cGUpOworICAg
IG1fZWRnZXMtPmFkZEl0ZW0oYWRkU3RyaW5nKG5hbWUpKTsKKyAgICBtX2VkZ2VzLT5hZGRJdGVt
KHRvTm9kZUlkKTsKKworICAgICsrbV9yZXBvcnRlZEVkZ2VzQ291bnQ7CiB9CiAKIHZvaWQgSGVh
cEdyYXBoU2VyaWFsaXplcjo6cmVwb3J0TGVhZihjb25zdCBXVEY6Ok1lbW9yeU9iamVjdEluZm8m
IGluZm8sIGNvbnN0IGNoYXIqIGVkZ2VOYW1lKQogewotICAgIEhlYXBHcmFwaE5vZGUgbm9kZTsK
LSAgICBub2RlLm1fdHlwZSA9IGFkZFN0cmluZyhpbmZvLm9iamVjdFR5cGUoKSk7Ci0gICAgbm9k
ZS5tX3NpemUgPSBpbmZvLm9iamVjdFNpemUoKTsKLSAgICBub2RlLm1fY2xhc3NOYW1lID0gYWRk
U3RyaW5nKGluZm8uY2xhc3NOYW1lKCkpOwotICAgIG5vZGUubV9uYW1lID0gYWRkU3RyaW5nKGlu
Zm8ubmFtZSgpKTsKLQotICAgIGludCBub2RlSW5kZXggPSBtX25vZGVzLnNpemUoKTsKLSAgICBt
X25vZGVzLmFwcGVuZChub2RlKTsKLQotICAgIEhlYXBHcmFwaEVkZ2UgZWRnZTsKLSAgICBlZGdl
Lm1fdHlwZSA9IG1fZWRnZVR5cGVzW1dURjo6T3duUHRyTWVtYmVyXTsKLSAgICBlZGdlLm1fdG9J
bmRleCA9IG5vZGVJbmRleDsKLSAgICBlZGdlLm1fdGFyZ2V0SW5kZXhJc0tub3duID0gdHJ1ZTsK
LSAgICBlZGdlLm1fbmFtZSA9IGFkZFN0cmluZyhlZGdlTmFtZSk7Ci0gICAgbV9lZGdlcy5hcHBl
bmQoZWRnZSk7CisgICAgaW50IG5vZGVJZCA9IHJlcG9ydE5vZGUoaW5mbywgMCk7CisgICAgcmVw
b3J0RWRnZShub2RlSWQsIGVkZ2VOYW1lLCBtX2VkZ2VUeXBlc1tXVEY6Ok93blB0ck1lbWJlcl0p
OworICAgIHB1c2hVcGRhdGVJZk5lZWQoKTsKIH0KIAogdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVy
OjpyZXBvcnRCYXNlQWRkcmVzcyhjb25zdCB2b2lkKiBiYXNlLCBjb25zdCB2b2lkKiByZWFsKQog
ewotICAgIG1fYmFzZVRvUmVhbEFkZHJlc3Muc2V0KGJhc2UsIHJlYWwpOworICAgIG1fbm9kZUlk
UmVtYXBwaW5nLT5hZGRJdGVtKHRvTm9kZUlkKGJhc2UpKTsKKyAgICBtX25vZGVJZFJlbWFwcGlu
Zy0+YWRkSXRlbSh0b05vZGVJZChyZWFsKSk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBIZWFwR3JhcGhTZXJpYWxpemVyOjpzZXJpYWxpemUoKQordm9pZCBIZWFwR3JhcGhTZXJp
YWxpemVyOjpmaW5pc2goKQogewogICAgIGFkZFJvb3ROb2RlKCk7Ci0gICAgYWRqdXRFZGdlVGFy
Z2V0cygpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgIEhlYXBHcmFwaE5vZGUmIG5vZGUgPSBtX25vZGVzW2ldOwotICAgICAg
ICBub2Rlcy0+cHVzaEludChub2RlLm1fdHlwZSk7Ci0gICAgICAgIG5vZGVzLT5wdXNoSW50KG5v
ZGUubV9jbGFzc05hbWUpOwotICAgICAgICBub2Rlcy0+cHVzaEludChub2RlLm1fbmFtZSk7Ci0g
ICAgICAgIG5vZGVzLT5wdXNoSW50KG5vZGUubV9zaXplKTsKLSAgICAgICAgbm9kZXMtPnB1c2hJ
bnQobm9kZS5tX2VkZ2VDb3VudCk7Ci0gICAgfQotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
ZWRnZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VkZ2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEhlYXBHcmFwaEVkZ2UmIGVkZ2Ug
PSBtX2VkZ2VzW2ldOwotICAgICAgICBlZGdlcy0+cHVzaEludChlZGdlLm1fdHlwZSk7Ci0gICAg
ICAgIGVkZ2VzLT5wdXNoSW50KGVkZ2UubV9uYW1lKTsKLSAgICAgICAgZWRnZXMtPnB1c2hJbnQo
ZWRnZS5tX3RvSW5kZXggKiBIZWFwR3JhcGhOb2RlOjpzX25vZGVGaWVsZENvdW50KTsKLSAgICB9
Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdHJpbmdzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJpbmdzLnNpemUoKTsgaSsr
KQotICAgICAgICBzdHJpbmdzLT5wdXNoU3RyaW5nKG1fc3RyaW5nc1tpXSk7Ci0KLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBncmFwaCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgZ3JhcGgtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKLSAgICBncmFwaC0+c2V0QXJyYXko
ImVkZ2VzIiwgZWRnZXMpOwotICAgIGdyYXBoLT5zZXRBcnJheSgic3RyaW5ncyIsIHN0cmluZ3Mp
OwotICAgIHJldHVybiBncmFwaC5yZWxlYXNlKCk7CisgICAgcHVzaFVwZGF0ZSgpOwogfQogCiB2
b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CkBAIC0xOTUsMTAgKzE2Myw5IEBAIHZvaWQgSGVh
cEdyYXBoU2VyaWFsaXplcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZv
LCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6Okluc3BlY3Rvcik7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9zdHJpbmdUb0luZGV4LCAic3RyaW5nVG9JbmRleCIpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fc3RyaW5ncywgInN0cmluZ3MiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX29iamVjdFRvTm9k
ZUluZGV4LCAib2JqZWN0VG9Ob2RlSW5kZXgiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2Jhc2VU
b1JlYWxBZGRyZXNzLCAiYmFzZVRvUmVhbEFkZHJlc3MiKTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X25vZGVzLCAibm9kZXMiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2VkZ2VzLCAiZWRnZXMiKTsK
KyAgICBpbmZvLmFkZE1lbWJlcihtX25vZGVzLCAibm9kZXMiKTsKKyAgICBpbmZvLmFkZE1lbWJl
cihtX25vZGVJZFJlbWFwcGluZywgIm5vZGVJZFJlbWFwcGluZyIpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fcm9vdHMsICJyb290cyIpOwogfQogCkBAIC0yMDYsMzQgKzE3MywyOSBAQCBpbnQgSGVh
cEdyYXBoU2VyaWFsaXplcjo6YWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAg
IGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBTdHJpbmdNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtX3N0cmluZ1RvSW5kZXguYWRkKHN0cmluZywgbV9zdHJpbmdz
LnNpemUoKSk7CisgICAgU3RyaW5nTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9zdHJpbmdUb0lu
ZGV4LmFkZChzdHJpbmcsIG1fc3RyaW5nVG9JbmRleC5zaXplKCkgKyAxKTsKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIG1fc3RyaW5ncy5hcHBlbmQoc3RyaW5nKTsKKyAgICAg
ICAgbV9zdHJpbmdzLT5hZGRJdGVtKHN0cmluZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKLXZvaWQgSGVhcEdyYXBoU2VyaWFsaXplcjo6YWRkUm9vdE5vZGUoKQor
aW50IEhlYXBHcmFwaFNlcmlhbGl6ZXI6OnRvTm9kZUlkKGNvbnN0IHZvaWQqIHRvKQogewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yb290cy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVw
b3J0RWRnZShtX3Jvb3RzW2ldLCAwLCBXVEY6OlBvaW50ZXJNZW1iZXIpOwotICAgIEhlYXBHcmFw
aE5vZGUgbm9kZTsKLSAgICBub2RlLm1fbmFtZSA9IGFkZFN0cmluZygiUm9vdCIpOwotICAgIG5v
ZGUubV9lZGdlQ291bnQgPSBtX2VkZ2VzLnNpemUoKSAtIG1fbGFzdFJlcG9ydGVkRWRnZUluZGV4
OwotICAgIG1fbGFzdFJlcG9ydGVkRWRnZUluZGV4ID0gbV9lZGdlcy5zaXplKCk7Ci0gICAgbV9u
b2Rlcy5hcHBlbmQobm9kZSk7CisgICAgQVNTRVJUKHRvKTsKKyAgICBBZGRyZXNzMk5vZGVJZDo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fYWRkcmVzczJOb2RlSWRNYXAuYWRkKHRvLCBtX2FkZHJlc3My
Tm9kZUlkTWFwLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiB9
CiAKLXZvaWQgSGVhcEdyYXBoU2VyaWFsaXplcjo6YWRqdXRFZGdlVGFyZ2V0cygpCit2b2lkIEhl
YXBHcmFwaFNlcmlhbGl6ZXI6OmFkZFJvb3ROb2RlKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZWRnZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgSGVhcEdyYXBoRWRnZSYgZWRn
ZSA9IG1fZWRnZXNbaV07Ci0gICAgICAgIGlmIChlZGdlLm1fdGFyZ2V0SW5kZXhJc0tub3duKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHJlYWxUYXJnZXQgPSBt
X2Jhc2VUb1JlYWxBZGRyZXNzLmdldChlZGdlLm1fdG9PYmplY3QpOwotICAgICAgICBpZiAoIXJl
YWxUYXJnZXQpCi0gICAgICAgICAgICByZWFsVGFyZ2V0ID0gZWRnZS5tX3RvT2JqZWN0OwotICAg
ICAgICBlZGdlLm1fdG9JbmRleCA9IG1fb2JqZWN0VG9Ob2RlSW5kZXguZ2V0KHJlYWxUYXJnZXQp
OwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcm9vdHMuc2l6ZSgpOyBpKysp
CisgICAgICAgIHJlcG9ydEVkZ2UodG9Ob2RlSWQobV9yb290c1tpXSksIDAsIG1fZWRnZVR5cGVz
W1dURjo6UG9pbnRlck1lbWJlcl0pOworCisgICAgbV9ub2Rlcy0+YWRkSXRlbShhZGRTdHJpbmco
IlJvb3QiKSk7CisgICAgbV9ub2Rlcy0+YWRkSXRlbSgwKTsKKyAgICBtX25vZGVzLT5hZGRJdGVt
KG1fYWRkcmVzczJOb2RlSWRNYXAuc2l6ZSgpKTsKKyAgICBtX25vZGVzLT5hZGRJdGVtKDApOwor
ICAgIG1fbm9kZXMtPmFkZEl0ZW0obV9yb290cy5zaXplKCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBo
U2VyaWFsaXplci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6
ZXIuaAppbmRleCA5YTZmMDFlYWQ3ZWU2MDkwNDI3YmVhNjUyMTk2MDVjZmUyYWQwZTZhLi5mZGE5
ZDk1YjBkNDZhYTdkN2VlMzcwYTEyNjdkM2E4ODVmMzZhOThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg+CkBAIC00OSwzOSArNTAsNTkgQEAgY2xh
c3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSGVhcEdyYXBoU2VyaWFsaXplciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSGVhcEdyYXBoU2VyaWFsaXplcik7CiBwdWJsaWM6Ci0gICAgSGVh
cEdyYXBoU2VyaWFsaXplcigpOworICAgIEhlYXBHcmFwaFNlcmlhbGl6ZXIoSW5zcGVjdG9yRnJv
bnRlbmQ6Ok1lbW9yeSopOwogICAgIH5IZWFwR3JhcGhTZXJpYWxpemVyKCk7CiAgICAgdm9pZCBy
ZXBvcnROb2RlKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYpOwogICAgIHZvaWQgcmVwb3J0
RWRnZShjb25zdCB2b2lkKiwgY29uc3QgY2hhciosIFdURjo6TWVtYmVyVHlwZSk7CiAgICAgdm9p
ZCByZXBvcnRMZWFmKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYsIGNvbnN0IGNoYXIqKTsK
ICAgICB2b2lkIHJlcG9ydEJhc2VBZGRyZXNzKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKik7CiAK
LSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VyaWFsaXplKCk7CisgICAgdm9pZCBm
aW5pc2goKTsKIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyop
IGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZvaWQgcHVzaFVwZGF0ZUlmTmVlZCgpOworICAgIHZv
aWQgcHVzaFVwZGF0ZSgpOworCisgICAgaW50IHRvTm9kZUlkKGNvbnN0IHZvaWQqKTsKKwogICAg
IGludCBhZGRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhZGRSb290Tm9kZSgpOwot
ICAgIHZvaWQgYWRqdXRFZGdlVGFyZ2V0cygpOworCisgICAgdm9pZCByZXBvcnRFZGdlKGNvbnN0
IGludCB0b05vZGVJZCwgY29uc3QgY2hhciogbmFtZSwgaW50IG1lbWJlclR5cGUpOworICAgIGlu
dCByZXBvcnROb2RlKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYsIGludCBlZGdlc0NvdW50
KTsKKworICAgIEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIG1fZnJvbnRlbmQ7CiAKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFN0cmluZ01hcDsKICAgICBTdHJpbmdNYXAgbV9z
dHJpbmdUb0luZGV4OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RyaW5nczsKLSAgICBpbnQgbV9s
YXN0UmVwb3J0ZWRFZGdlSW5kZXg7CisgICAgdHlwZWRlZiBUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPiBTdHJpbmdzOworICAgIFJlZlB0cjxTdHJpbmdzPiBtX3N0cmluZ3M7CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3Qgdm9pZCosIGludD4gT2JqZWN0VG9Ob2RlSW5kZXg7Ci0gICAgT2Jq
ZWN0VG9Ob2RlSW5kZXggbV9vYmplY3RUb05vZGVJbmRleDsKKyAgICB0eXBlZGVmIFR5cGVCdWls
ZGVyOjpBcnJheTxpbnQ+IEVkZ2VzOworICAgIFJlZlB0cjxFZGdlcz4gbV9lZGdlczsKKyAgICBp
bnQgbV9yZXBvcnRlZEVkZ2VzQ291bnQ7CisgICAgaW50IG1fcHJldk5vZGVMYXN0RWRnZUluZGV4
OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgRWRnZUZpZWxkc0NvdW50ID0gMzsKIAotICAgIHR5
cGVkZWYgSGFzaE1hcDxjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCo+IEJhc2VUb1JlYWxBZGRyZXNz
OwotICAgIEJhc2VUb1JlYWxBZGRyZXNzIG1fYmFzZVRvUmVhbEFkZHJlc3M7CisgICAgdHlwZWRl
ZiBUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiBOb2RlczsKKyAgICBSZWZQdHI8Tm9kZXM+IG1fbm9k
ZXM7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBOb2RlRmllbGRzQ291bnQgPSA1OworCisgICAg
dHlwZWRlZiBUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiBOb2RlSWRSZW1hcHBpbmc7CisgICAgUmVm
UHRyPE5vZGVJZFJlbWFwcGluZz4gbV9ub2RlSWRSZW1hcHBpbmc7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBSZW1hcHBpbmdGaWVsZHNDb3VudCA9IDI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3Qgdm9pZCosIGludD4gQWRkcmVzczJOb2RlSWQ7CisgICAgQWRkcmVzczJOb2RlSWQgbV9h
ZGRyZXNzMk5vZGVJZE1hcDsKIAotICAgIFZlY3RvcjxIZWFwR3JhcGhOb2RlPiBtX25vZGVzOwot
ICAgIFZlY3RvcjxIZWFwR3JhcGhFZGdlPiBtX2VkZ2VzOwogICAgIFZlY3Rvcjxjb25zdCB2b2lk
Kj4gbV9yb290czsKIAogICAgIHNpemVfdCBtX2VkZ2VUeXBlc1tXVEY6Okxhc3RNZW1iZXJUeXBl
RW50cnldOwogICAgIGludCBtX3Vua25vd25DbGFzc05hbWVJZDsKKworICAgIHR5cGVkZWYgVHlw
ZUJ1aWxkZXI6Ok1lbW9yeTo6SGVhcFNuYXBzaG90Q2h1bmsgSGVhcFNuYXBzaG90Q2h1bms7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KaW5kZXggNmUyNGFiNzcxNDEwNWY5M2E1YTViYzg5Mjc0NTU1NDU5NTc3NGJiOS4u
MTJkZmJkNTJkNzY0ZWRiYmRhMzBhNDIyM2M2YjQ2YTlmNGJkNmUzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAtODksNiArODksMTYgQEAKICAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBuYW1lIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCB0aGF0IGFsbG9j
YXRlZCB0aGlzIGJsb2NrIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNoaWxk
cmVuIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVm
IjogIk1lbW9yeUJsb2NrIiB9fQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjogIkhlYXBTbmFwc2hvdENodW5rIiwK
KyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZ3MiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAiZGVzY3JpcHRpb24i
OiAiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdlcmUgZm91bmQgc2luY2UgbGFzdCB1cGRhdGUu
IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0sICJkZXNjcmlwdGlvbiI6ICJBbiBh
cnJheSBvZiBub2RlcyB0aGF0IHdlcmUgZm91bmQgc2luY2UgbGFzdCB1cGRhdGUuIiB9LAorICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVkZ2VzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0sICJkZXNjcmlwdGlvbiI6ICJBbiBhcnJheSBvZiBl
ZGdlcyB0aGF0IHdlcmUgZm91bmQgc2luY2UgbGFzdCB1cGRhdGUuIiB9LAorICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vZGVJZDJub2RlSWQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfSwgImRlc2NyaXB0aW9uIjogIkFuIGFycmF5IG9mIGlu
dGVnZXJzIGZvciBub2RlSWQgcmVtYXBwaW5nLiBFdmVuIG5vZGVJZCBoYXMgdG8gYmUgbWFwcGVk
IHRvIHRoZSBmb2xsb3dpbmcgb2RkIG5vZGVJZC4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAg
ICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKQEAgLTEwNSw4ICsx
MTUsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXBvcnRHcmFwaCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhl
ciBuYXRpdmUgbWVtb3J5IGdyYXBoIHNob3VsZCBiZSByZXBvcnRlZCBpbiBhZGRpdGlvbiB0byBh
Z2dyZWdhdGVkIHN0YXRpc3RpY3MuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAg
ICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXN0cmli
dXRpb24iLCAiJHJlZiI6ICJNZW1vcnlCbG9jayIsICJkZXNjcmlwdGlvbiI6ICJBbiBvYmplY3Qg
ZGVzY3JpYmluZyBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgcHJvY2VzcyJ9LAotICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImdyYXBoIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIk5hdGl2ZSBtZW1vcnkgZ3JhcGguIn0KKyAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXN0cmlidXRpb24iLCAiJHJlZiI6ICJNZW1vcnlC
bG9jayIsICJkZXNjcmlwdGlvbiI6ICJBbiBvYmplY3QgZGVzY3JpYmluZyBhbGwgbWVtb3J5IGFs
bG9jYXRlZCBieSB0aGUgcHJvY2VzcyJ9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg
fQorICAgICAgICBdLAorICAgICAgICAiZXZlbnRzIjogWworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICJuYW1lIjogImFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsiLAorICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNodW5r
IiwgIiRyZWYiOiAiSGVhcFNuYXBzaG90Q2h1bmsiLCAiZGVzY3JpcHRpb24iOiAiQSBjaHVuayBv
ZiB0aGUgc2VyaWFsaXplZCB0aGUgc25hcHNob3QuIiB9CisgICAgICAgICAgICAgICAgXQorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJmaW5p
c2hOYXRpdmVTbmFwc2hvdCIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidWlkIiwgInR5cGUiOiAiaW50ZWdlciIgfQogICAg
ICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNjNjVhOGE2MDgy
ZjI0Mjc4ZDE3Yzc0MWM3Mzk2OGQzMTBiOTc3ZDMuLjgzN2JjMWYwNmIwMzY1NTk2OGZkNjc3MDU2
OGQ2YmU4YWZjNWY2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTQ0NSw4ICs0NDUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFByb2Nlc3NUYXNrKCkKIEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+IEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24oKSBjb25zdAogewogICAgIEhh
c2hNYXA8U3RyaW5nLCBzaXplX3Q+IG1lbW9yeUluZm87Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZ3JhcGg7Ci0gICAgbV9tZW1vcnlBZ2VudC0+Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1
dGlvbkFzTWFwKGZhbHNlLCBncmFwaCwgJm1lbW9yeUluZm8pOworICAgIG1fbWVtb3J5QWdlbnQt
PmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25Bc01hcChmYWxzZSwgJm1lbW9yeUluZm8pOwog
ICAgIHJldHVybiBtZW1vcnlJbmZvOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCAwOTllMDZmNjk2OGVkY2M5MmFkNTkz
NjUyMWFjNzMyYzhkYzE0N2NlLi41NjUzMmY4YWFkZWM3OTExNjIxMGYyMjM3MDNmZDk2NTA5YTJl
MzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5jcHAKQEAgLTUyNywxMCArNTI3LDEwIEBAIHN0YXRpYyB2b2lkIGFkZE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkRlYnVnRGF0YShNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsKiBjCiAg
ICAgfQogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlz
dHJpYnV0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogcmVwb3J0R3JhcGgsIFJlZlB0cjxJ
bnNwZWN0b3JNZW1vcnlCbG9jaz4mIHByb2Nlc3NNZW1vcnksIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBncmFwaCkKK3ZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiByZXBvcnRHcmFwaCwgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiYgcHJvY2Vzc01lbW9yeSkKIHsKICAgICBUeXBlTmFtZVRv
U2l6ZU1hcCBtZW1vcnlJbmZvOwotICAgIGdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25Bc01h
cChyZXBvcnRHcmFwaCAmJiAqcmVwb3J0R3JhcGgsIGdyYXBoLCAmbWVtb3J5SW5mbyk7CisgICAg
Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbkFzTWFwKHJlcG9ydEdyYXBoICYmICpyZXBvcnRH
cmFwaCwgJm1lbW9yeUluZm8pOwogCiAgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciBzdGF0
c0dlbmVyYXRvcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2tzPiBjaGlsZHJlbiA9
IEluc3BlY3Rvck1lbW9yeUJsb2Nrczo6Y3JlYXRlKCk7CkBAIC01NTMsMTEgKzU1MywxMSBAQCB2
b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKQogICAgIGluZm8uYWRkTWVtYmVyKG1fcGFnZSwgInBhZ2Ui
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3Ry
aWJ1dGlvbkFzTWFwKGJvb2wgcmVwb3J0R3JhcGgsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBn
cmFwaCwgVHlwZU5hbWVUb1NpemVNYXAqIG1lbW9yeUluZm8pCit2b2lkIEluc3BlY3Rvck1lbW9y
eUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uQXNNYXAoYm9vbCByZXBvcnRHcmFw
aCwgVHlwZU5hbWVUb1NpemVNYXAqIG1lbW9yeUluZm8pCiB7CiAgICAgT3duUHRyPEhlYXBHcmFw
aFNlcmlhbGl6ZXI+IGdyYXBoU2VyaWFsaXplcjsKICAgICBpZiAocmVwb3J0R3JhcGgpCi0gICAg
ICAgIGdyYXBoU2VyaWFsaXplciA9IGFkb3B0UHRyKG5ldyBIZWFwR3JhcGhTZXJpYWxpemVyKCkp
OworICAgICAgICBncmFwaFNlcmlhbGl6ZXIgPSBhZG9wdFB0cihuZXcgSGVhcEdyYXBoU2VyaWFs
aXplcihtX2Zyb250ZW5kKSk7CiAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBt
ZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoZ3JhcGhTZXJpYWxpemVyLmdldCgpKTsKICAgICBt
X2luc3BlY3RvckNsaWVudC0+Z2V0QWxsb2NhdGVkT2JqZWN0cyhtZW1vcnlJbnN0cnVtZW50YXRp
b25DbGllbnQuYWxsb2NhdGVkT2JqZWN0cygpKTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25J
bXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbigmbWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsK
QEAgLTU3NCw3ICs1NzQsNyBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNz
TWVtb3J5RGlzdHJpYnV0aW9uQXNNYXAoYm9vbCByZXBvcnRHcmFwaCwgUgogICAgIG1lbW9yeUlu
c3RydW1lbnRhdGlvbi5hZGRSb290T2JqZWN0KG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudCk7
CiAgICAgaWYgKGdyYXBoU2VyaWFsaXplcikgewogICAgICAgICBtZW1vcnlJbnN0cnVtZW50YXRp
b24uYWRkUm9vdE9iamVjdChncmFwaFNlcmlhbGl6ZXIuZ2V0KCkpOwotICAgICAgICBncmFwaCA9
IGdyYXBoU2VyaWFsaXplci0+c2VyaWFsaXplKCk7CisgICAgICAgIGdyYXBoU2VyaWFsaXplci0+
ZmluaXNoKCk7CiAgICAgfQogCiAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmR1bXBVbmNvdW50ZWRB
bGxvY2F0ZWRPYmplY3RzKG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudC5jb3VudGVkT2JqZWN0
cygpKTsKQEAgLTU5MSw2ICs1OTEsMTcgQEAgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6Okluc3BlY3Rv
ck1lbW9yeUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2UKIHsKIH0K
IAordm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRl
bmQqIGZyb250ZW5kKQoreworICAgIEFTU0VSVCghbV9mcm9udGVuZCk7CisgICAgbV9mcm9udGVu
ZCA9IGZyb250ZW5kLT5tZW1vcnkoKTsKK30KKwordm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6
Y2xlYXJGcm9udGVuZCgpCit7CisgICAgbV9mcm9udGVuZCA9IDA7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCmluZGV4IGVjNTljNzg1Mjc3
NTE5OWQ4OTE2MWI3NDRjNjk4MjNiYzcxNjY1NmMuLjE5MTU4MTU1NDVlOGNiNzc4ZDg2Zjc3MzM3
MDEyZGI0NGRmODQyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAogI2luY2x1ZGUgIkluc3BlY3RvckJhc2VBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKQEAgLTU5LDE3ICs2MCwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5zcGVj
dG9yTWVtb3J5QWdlbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRET01Ob2RlQ291bnQoRXJy
b3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpNZW1vcnk6
OkRPTUdyb3VwPiA+JiBkb21Hcm91cHMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpTdHJp
bmdTdGF0aXN0aWNzPiYgc3RyaW5ncyk7Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2Nlc3NNZW1v
cnlEaXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiByZXBvcnRHcmFwaCwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok1lbW9yeUJsb2NrPiYgcHJvY2Vzc01lbW9yeSwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGdyYXBoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvY2Vz
c01lbW9yeURpc3RyaWJ1dGlvbihFcnJvclN0cmluZyosIGNvbnN0IGJvb2wqIHJlcG9ydEdyYXBo
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TWVtb3J5QmxvY2s+JiBwcm9jZXNzTWVtb3J5
KTsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3Q7CiAKLSAgICB2b2lkIGdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25Bc01hcChi
b29sIHJlcG9ydEdyYXBoLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZ3JhcGgsIEhhc2hNYXA8
U3RyaW5nLCBzaXplX3Q+KiBtZW1vcnlJbmZvKTsKKyAgICB2b2lkIGdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb25Bc01hcChib29sIHJlcG9ydEdyYXBoLCBIYXNoTWFwPFN0cmluZywgc2l6ZV90
PiogbWVtb3J5SW5mbyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcm9udGVuZCgpOwogCiBwcml2YXRl
OgogICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0
b3JDbGllbnQqLCBJbnNwZWN0b3JDb21wb3NpdGVTdGF0ZSosIFBhZ2UqKTsKIAogICAgIEluc3Bl
Y3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CiAgICAgUGFnZSogbV9wYWdlOworICAgIElu
c3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIG1fZnJvbnRlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzCmluZGV4IGYyOTQxYzc2YTFmMjk0MTQ3Y2Vh
YzBiODA0Njg3NzRmZDg5NTY4NmMuLmI0MDNkM2U4NzVkYzcyNWQ0ZGZkNzc2MzY4MWQwZmU3NmQ1
MjQ1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90R3JpZE5vZGVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzCkBAIC0zNTAsNiArMzUwLDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgbm9k
ZSkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB0aGlzLl9uYW1lID0gbm9k
ZS5uYW1lOworICAgIHRoaXMuX29iamVjdE5hbWUgPSBub2RlLm9iamVjdE5hbWU7CiAgICAgdGhp
cy5fdHlwZSA9IG5vZGUudHlwZTsKICAgICB0aGlzLl9kaXN0YW5jZSA9IG5vZGUuZGlzdGFuY2U7
CiAgICAgdGhpcy5fc2hhbGxvd1NpemUgPSBub2RlLnNlbGZTaXplOwpAQCAtMzgwLDIyICszODEs
MzcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlw
ZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
dGQiKTsKICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAib2JqZWN0LWNvbHVtbiI7CisKICAgICAg
ICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBkaXYu
Y2xhc3NOYW1lID0gInNvdXJjZS1jb2RlIGV2ZW50LXByb3BlcnRpZXMiOwogICAgICAgICBkaXYu
c3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisKICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRh
dGFbIm9iamVjdCJdOworCiAgICAgICAgIGlmICh0aGlzLl9wcmVmaXhPYmplY3RDZWxsKQogICAg
ICAgICAgICAgdGhpcy5fcHJlZml4T2JqZWN0Q2VsbChkaXYsIGRhdGEpOworCiAgICAgICAgIHZh
ciB2YWx1ZVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgIHZh
bHVlU3Bhbi5jbGFzc05hbWUgPSAidmFsdWUgY29uc29sZS1mb3JtYXR0ZWQtIiArIGRhdGEudmFs
dWVTdHlsZTsKICAgICAgICAgdmFsdWVTcGFuLnRleHRDb250ZW50ID0gZGF0YS52YWx1ZTsKICAg
ICAgICAgZGl2LmFwcGVuZENoaWxkKHZhbHVlU3Bhbik7CisKKyAgICAgICAgaWYgKGRhdGEub2Jq
ZWN0TmFtZSkgeworICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCIgIikpOworICAgICAgICAgICAgdmFyIG9iamVjdE5hbWVTcGFuID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgb2JqZWN0TmFtZVNwYW4uY2xhc3NO
YW1lID0gIm9iamVjdC1uYW1lIGNvbnNvbGUtZm9ybWF0dGVkLW9iamVjdCBoaWdobGlnaHQiOwor
ICAgICAgICAgICAgb2JqZWN0TmFtZVNwYW4udGV4dENvbnRlbnQgPSAiICIgKyBkYXRhLm9iamVj
dE5hbWU7CisgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQob2JqZWN0TmFtZVNwYW4pOworICAg
ICAgICB9CisKICAgICAgICAgdmFyIGlkU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKICAgICAgICAgaWRTcGFuLmNsYXNzTmFtZSA9ICJjb25zb2xlLWZvcm1hdHRlZC1pZCI7
CiAgICAgICAgIGlkU3Bhbi50ZXh0Q29udGVudCA9ICIgQCIgKyBkYXRhWyJub2RlSWQiXTsKICAg
ICAgICAgZGl2LmFwcGVuZENoaWxkKGlkU3Bhbik7CisKICAgICAgICAgaWYgKHRoaXMuX3Bvc3Rm
aXhPYmplY3RDZWxsKQogICAgICAgICAgICAgdGhpcy5fcG9zdGZpeE9iamVjdENlbGwoZGl2LCBk
YXRhKTsKKwogICAgICAgICBjZWxsLmFwcGVuZENoaWxkKGRpdik7CiAgICAgICAgIGNlbGwuYWRk
U3R5bGVDbGFzcygiZGlzY2xvc3VyZSIpOwogICAgICAgICBpZiAodGhpcy5kZXB0aCkKQEAgLTQ0
Miw3ICs0NTgsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFsdWUgPSAiIjsKICAgICAgICAgaWYgKHRoaXMu
ZGV0YWNoZWRET01UcmVlTm9kZSkKICAgICAgICAgICAgIHZhbHVlU3R5bGUgKz0gIiBkZXRhY2hl
ZC1kb20tdHJlZS1ub2RlIjsKLSAgICAgICAgZGF0YVsib2JqZWN0Il0gPSB7IHZhbHVlU3R5bGU6
IHZhbHVlU3R5bGUsIHZhbHVlOiB2YWx1ZSwgbm9kZUlkOiB0aGlzLnNuYXBzaG90Tm9kZUlkIH07
CisgICAgICAgIGRhdGFbIm9iamVjdCJdID0geyB2YWx1ZVN0eWxlOiB2YWx1ZVN0eWxlLCB2YWx1
ZTogdmFsdWUsIG9iamVjdE5hbWU6IHRoaXMuX29iamVjdE5hbWUsIG5vZGVJZDogdGhpcy5zbmFw
c2hvdE5vZGVJZCB9OwogCiAgICAgICAgIGRhdGFbImRpc3RhbmNlIl0gPSAgdGhpcy5fZGlzdGFu
Y2U7CiAgICAgICAgIGRhdGFbInNoYWxsb3dTaXplIl0gPSBOdW1iZXIud2l0aFRob3VzYW5kc1Nl
cGFyYXRvcih0aGlzLl9zaGFsbG93U2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCmluZGV4IDVhN2Q2NjM1
OWQ5OGY3MzdmNTI4MzNiZGFjYWJmNjhmY2JkZmYxNTkuLmVkMzAwYTlkNzI3MjY0MGRiNWJjMzI4
MWJkZDc2N2Q1ODNjYzAyNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCkBAIC04OCwxOSArODgsMzEgQEAg
V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogCiAgICAg
Y2xhc3NJbmRleDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhp
cy5fc25hcHNob3Q7Ci0gICAgICAgIHJldHVybiBzbmFwc2hvdC5fbm9kZXNbdGhpcy5ub2RlSW5k
ZXggKyBzbmFwc2hvdC5fbm9kZU5hbWVPZmZzZXRdOworICAgICAgICByZXR1cm4gdGhpcy5fc25h
cHNob3QuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVUeXBlT2Zm
c2V0XTsKICAgICB9LAogCiAgICAgaWQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLm5vZGVJbmRleDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9ub2Rlc1t0
aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSWRPZmZzZXRdOwogICAgIH0sCiAK
ICAgICBuYW1lOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgbmFtZSA9IHRoaXMuX3Nu
YXBzaG90Ll9zdHJpbmdzW3RoaXMuX3NuYXBzaG90Ll9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIDJd
XTsKLSAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3NOYW1lKCkgKyAiOiAiICsgbmFtZTsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9zdHJpbmdzW3RoaXMuX3NuYXBzaG90Ll9ub2Rlc1t0
aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlTmFtZU9mZnNldF1dOzsKKyAgICB9
LAorCisgICAgc2VyaWFsaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgaWQ6IHRoaXMuaWQoKSwKKyAgICAgICAgICAgIG5hbWU6IHRoaXMuY2xhc3NO
YW1lKCksCisgICAgICAgICAgICBkaXN0YW5jZTogdGhpcy5kaXN0YW5jZSgpLAorICAgICAgICAg
ICAgbm9kZUluZGV4OiB0aGlzLm5vZGVJbmRleCwKKyAgICAgICAgICAgIHJldGFpbmVkU2l6ZTog
dGhpcy5yZXRhaW5lZFNpemUoKSwKKyAgICAgICAgICAgIHNlbGZTaXplOiB0aGlzLnNlbGZTaXpl
KCksCisgICAgICAgICAgICB0eXBlOiAzLAorICAgICAgICAgICAgb2JqZWN0TmFtZTogdGhpcy5u
YW1lKCksCisgICAgICAgIH07CiAgICAgfSwKIAogICAgIGlzSGlkZGVuOiBmdW5jdGlvbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9y
eVNuYXBzaG90Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0
aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzCmluZGV4IDFmYjgyMzZhOWM4MzdlN2ZjZTc3YjNkZWMz
NzA1ZmRiNWY2MDMxMTQuLjI4MzhjOGVhZjA5ODY5NTU0OGYyN2ZkM2ZlNmEwZWE0NDM5ODA0YTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVt
b3J5U25hcHNob3RWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzCkBAIC0yNjQsMTggKzI2NCw5NyBAQCBXZWJJ
bnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICsrdGhpcy5fbmV4dFByb2ZpbGVVaWQ7CiAgICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3Jh
cnkgPSB0cnVlOwogICAgICAgICBwcm9maWxlc1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmls
ZUhlYWRlcik7CisgICAgICAgIHByb2ZpbGVIZWFkZXIubG9hZChmdW5jdGlvbigpIHsgfSk7CisK
ICAgICAgICAgLyoqCiAgICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IKICAgICAgICAg
ICogQHBhcmFtIHs/TWVtb3J5QWdlbnQuTWVtb3J5QmxvY2t9IG1lbW9yeUJsb2NrCi0gICAgICAg
ICAqIEBwYXJhbSB7P09iamVjdD19IGdyYXBoCiAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBkaWRSZWNlaXZlTWVtb3J5U25hcHNob3QoZXJyb3IsIG1lbW9yeUJsb2NrLCBncmFwaCkKKyAg
ICAgICAgZnVuY3Rpb24gZGlkUmVjZWl2ZU1lbW9yeVNuYXBzaG90KGVycm9yLCBtZW1vcnlCbG9j
aykKICAgICAgICAgewotICAgICAgICAgICAgcHJvZmlsZUhlYWRlci5fZ3JhcGggPSBncmFwaDsK
LSAgICAgICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHByb2ZpbGVIZWFkZXIuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBOdW1iZXIuYnl0ZXNU
b1N0cmluZygvKiogQHR5cGV7bnVtYmVyfSAqLyhtZW1vcnlCbG9jay5zaXplKSk7CisgICAgICAg
ICAgICB0aGlzLmlzVGVtcG9yYXJ5ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLnNpZGViYXJF
bGVtZW50LnN1YnRpdGxlID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcoLyoqIEB0eXBle251bWJlcn0g
Ki8obWVtb3J5QmxvY2suc2l6ZSkpOworCisgICAgICAgICAgICB2YXIgbWV0YSA9IHsKKyAgICAg
ICAgICAgICAgIm5vZGVfZmllbGRzIjogWworICAgICAgICAgICAgICAgICJ0eXBlIiwKKyAgICAg
ICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAgICAgImlkIiwKKyAgICAgICAgICAgICAg
ICAic2VsZl9zaXplIiwKKyAgICAgICAgICAgICAgICAiZWRnZV9jb3VudCIKKyAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgIm5vZGVfdHlwZXMiOiBbCisgICAgICAgICAgICAgICAgWwor
ICAgICAgICAgICAgICAgICAgImhpZGRlbiIsCisgICAgICAgICAgICAgICAgICAiYXJyYXkiLAor
ICAgICAgICAgICAgICAgICAgInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAib2JqZWN0IiwK
KyAgICAgICAgICAgICAgICAgICJjb2RlIiwKKyAgICAgICAgICAgICAgICAgICJjbG9zdXJlIiwK
KyAgICAgICAgICAgICAgICAgICJyZWdleHAiLAorICAgICAgICAgICAgICAgICAgIm51bWJlciIs
CisgICAgICAgICAgICAgICAgICAibmF0aXZlIiwKKyAgICAgICAgICAgICAgICAgICJzeW50aGV0
aWMiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAic3RyaW5nIiwKKyAgICAg
ICAgICAgICAgICAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICAibnVtYmVyIiwKKyAgICAgICAg
ICAgICAgICAibnVtYmVyIiwKKyAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgImVkZ2Vf
ZmllbGRzIjogWworICAgICAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAibmFt
ZV9vcl9pbmRleCIsCisgICAgICAgICAgICAgICAgInRvX25vZGUiCisgICAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAgICJlZGdlX3R5cGVzIjogWworICAgICAgICAgICAgICAgIFsKKyAgICAg
ICAgICAgICAgICAgICJjb250ZXh0IiwKKyAgICAgICAgICAgICAgICAgICJlbGVtZW50IiwKKyAg
ICAgICAgICAgICAgICAgICJwcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwi
LAorICAgICAgICAgICAgICAgICAgImhpZGRlbiIsCisgICAgICAgICAgICAgICAgICAic2hvcnRj
dXQiLAorICAgICAgICAgICAgICAgICAgIndlYWsiCisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICAic3RyaW5nX29yX251bWJlciIsCisgICAgICAgICAgICAgICAgIm5vZGUiCisg
ICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHZhciBpZDJpZE1h
cCA9IHt9OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub2RlSWQybm9k
ZUlkLmxlbmd0aDsgaSArPSAyKQorICAgICAgICAgICAgICAgIGlkMmlkTWFwW3RoaXMuX25vZGVJ
ZDJub2RlSWRbaV1dID0gdGhpcy5fbm9kZUlkMm5vZGVJZFtpICsgMV07CisKKyAgICAgICAgICAg
IHZhciBub2RlSWQyTm9kZUluZGV4ID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMjsg
aSA8IHRoaXMuX25vZGVzLmxlbmd0aDsgaSArPSA1KQorICAgICAgICAgICAgbm9kZUlkMk5vZGVJ
bmRleFt0aGlzLl9ub2Rlc1tpXV0gPSBpIC0gMjsKKworICAgICAgICAgICAgLy8gVHJhbnNsYXRl
IG5vZGVJZCB0byBub2RlSW5kZXguCisgICAgICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9lZGdl
czsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgZWRnZXMubGVuZ3RoOyBpICs9IDMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZXNbaV0gaW4gaWQyaWRNYXApCisgICAgICAgICAg
ICAgICAgICAgIGVkZ2VzW2ldID0gaWQyaWRNYXBbZWRnZXNbaV1dOworICAgICAgICAgICAgICAg
IGVkZ2VzW2ldID0gbm9kZUlkMk5vZGVJbmRleFtlZGdlc1tpXV07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBoZWFwU25hcHNob3QgPSB7CisgICAgICAgICAgICAgICAgInNuYXBz
aG90IjogeworICAgICAgICAgICAgICAgICAgICAibWV0YSI6IG1ldGEsCisgICAgICAgICAgICAg
ICAgICAgIG5vZGVfY291bnQ6IHRoaXMuX25vZGVzLmxlbmd0aCAvIDUsCisgICAgICAgICAgICAg
ICAgICAgIGVkZ2VfY291bnQ6IHRoaXMuX2VkZ2VzLmxlbmd0aCAvIDMsCisgICAgICAgICAgICAg
ICAgICAgIHJvb3RfaW5kZXg6IHRoaXMuX25vZGVzLmxlbmd0aCAtIDUKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIG5vZGVzOiB0aGlzLl9ub2RlcywKKyAgICAgICAgICAgICAg
ICBlZGdlczogdGhpcy5fZWRnZXMsCisgICAgICAgICAgICAgICAgc3RyaW5nczogdGhpcy5fc3Ry
aW5ncworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIGNodW5rID0gSlNPTi5zdHJp
bmdpZnkoaGVhcFNuYXBzaG90KTsKKyAgICAgICAgICAgIHRoaXMudHJhbnNmZXJDaHVuayhjaHVu
ayk7CisgICAgICAgICAgICB0aGlzLmZpbmlzaEhlYXBTbmFwc2hvdCgpOwogICAgICAgICB9Ci0g
ICAgICAgIE1lbW9yeUFnZW50LmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24odHJ1ZSwgZGlk
UmVjZWl2ZU1lbW9yeVNuYXBzaG90LmJpbmQodGhpcykpOworCisgICAgICAgIE1lbW9yeUFnZW50
LmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24odHJ1ZSwgZGlkUmVjZWl2ZU1lbW9yeVNuYXBz
aG90LmJpbmQocHJvZmlsZUhlYWRlcikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwK
IApAQCAtMzI0LDYgKzQwMywxMCBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxl
VHlwZS5wcm90b3R5cGUgPSB7CiBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlSGVh
ZGVyID0gZnVuY3Rpb24odHlwZSwgdGl0bGUsIHVpZCkKIHsKICAgICBXZWJJbnNwZWN0b3IuSGVh
cFByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkLCAwKTsKKyAgICB0aGlz
Ll9zdHJpbmdzID0gW107CisgICAgdGhpcy5fbm9kZXMgPSBbXTsKKyAgICB0aGlzLl9lZGdlcyA9
IFtdOworICAgIHRoaXMuX25vZGVJZDJub2RlSWQgPSBbXTsKIH0KIAogV2ViSW5zcGVjdG9yLk5h
dGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CkBAIC0zMzgsNjkgKzQyMSw2
IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0g
ewogCiAgICAgc3RhcnRTbmFwc2hvdFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICB2YXIgbWV0YSA9IHsKLSAgICAgICAgICAibm9kZV9maWVsZHMiOiBbCi0gICAgICAgICAgICAi
dHlwZSIsCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAgICAgICAiaWQiLAotICAgICAgICAg
ICAgInNlbGZfc2l6ZSIsCi0gICAgICAgICAgICAiZWRnZV9jb3VudCIKLSAgICAgICAgICBdLAot
ICAgICAgICAgICJub2RlX3R5cGVzIjogWwotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAi
aGlkZGVuIiwKLSAgICAgICAgICAgICAgImFycmF5IiwKLSAgICAgICAgICAgICAgInN0cmluZyIs
Ci0gICAgICAgICAgICAgICJvYmplY3QiLAotICAgICAgICAgICAgICAiY29kZSIsCi0gICAgICAg
ICAgICAgICJjbG9zdXJlIiwKLSAgICAgICAgICAgICAgInJlZ2V4cCIsCi0gICAgICAgICAgICAg
ICJudW1iZXIiLAotICAgICAgICAgICAgICAibmF0aXZlIiwKLSAgICAgICAgICAgICAgInN5bnRo
ZXRpYyIKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic3RyaW5nIiwKLSAgICAgICAgICAg
ICJudW1iZXIiLAotICAgICAgICAgICAgIm51bWJlciIsCi0gICAgICAgICAgICAibnVtYmVyIiwK
LSAgICAgICAgICAgICJudW1iZXIiLAotICAgICAgICAgICAgIm51bWJlciIKLSAgICAgICAgICBd
LAotICAgICAgICAgICJlZGdlX2ZpZWxkcyI6IFsKLSAgICAgICAgICAgICJ0eXBlIiwKLSAgICAg
ICAgICAgICJuYW1lX29yX2luZGV4IiwKLSAgICAgICAgICAgICJ0b19ub2RlIgotICAgICAgICAg
IF0sCi0gICAgICAgICAgImVkZ2VfdHlwZXMiOiBbCi0gICAgICAgICAgICBbCi0gICAgICAgICAg
ICAgICJjb250ZXh0IiwKLSAgICAgICAgICAgICAgImVsZW1lbnQiLAotICAgICAgICAgICAgICAi
cHJvcGVydHkiLAotICAgICAgICAgICAgICAiaW50ZXJuYWwiLAotICAgICAgICAgICAgICAiaGlk
ZGVuIiwKLSAgICAgICAgICAgICAgInNob3J0Y3V0IiwKLSAgICAgICAgICAgICAgIndlYWsiCi0g
ICAgICAgICAgICBdLAotICAgICAgICAgICAgInN0cmluZ19vcl9udW1iZXIiLAotICAgICAgICAg
ICAgIm5vZGUiCi0gICAgICAgICAgXQotICAgICAgICB9OwotICAgICAgICB2YXIgZ3JhcGggPSB0
aGlzLl9ncmFwaDsKLSAgICAgICAgdmFyIGhlYXBTbmFwc2hvdCA9IHsKLSAgICAgICAgICAgICJz
bmFwc2hvdCI6IHsKLSAgICAgICAgICAgICAgICAibWV0YSI6IG1ldGEsCi0gICAgICAgICAgICAg
ICAgbm9kZV9jb3VudDogZ3JhcGgubm9kZXMubGVuZ3RoIC8gNSwKLSAgICAgICAgICAgICAgICBl
ZGdlX2NvdW50OiBncmFwaC5lZGdlcy5sZW5ndGggLyAzLAotICAgICAgICAgICAgICAgIHJvb3Rf
aW5kZXg6IGdyYXBoLm5vZGVzLmxlbmd0aCAtIDUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICBub2RlczogZ3JhcGgubm9kZXMsCi0gICAgICAgICAgICBlZGdlczogZ3JhcGguZWRnZXMsCi0g
ICAgICAgICAgICBzdHJpbmdzOiBncmFwaC5zdHJpbmdzCi0gICAgICAgIH07Ci0KLSAgICAgICAg
dmFyIGNodW5rID0gSlNPTi5zdHJpbmdpZnkoaGVhcFNuYXBzaG90KTsKLSAgICAgICAgdGhpcy50
cmFuc2ZlckNodW5rKGNodW5rKTsKLSAgICAgICAgdGhpcy5maW5pc2hIZWFwU25hcHNob3QoKTsK
ICAgICB9LAogCiAgICAgc25hcHNob3RDb25zdHJ1Y3Rvck5hbWU6IGZ1bmN0aW9uKCkKQEAgLTQw
OCw2ICs0MjgsMTQgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAiTmF0aXZlSGVhcFNuYXBzaG90IjsKICAgICB9
LAogCisgICAgYWRkTmF0aXZlU25hcHNob3RDaHVuazogZnVuY3Rpb24oY2h1bmspCisgICAgewor
ICAgICAgICB0aGlzLl9zdHJpbmdzID0gdGhpcy5fc3RyaW5ncy5jb25jYXQoY2h1bmsuc3RyaW5n
cyk7CisgICAgICAgIHRoaXMuX25vZGVzID0gdGhpcy5fbm9kZXMuY29uY2F0KGNodW5rLm5vZGVz
KTsKKyAgICAgICAgdGhpcy5fZWRnZXMgPSB0aGlzLl9lZGdlcy5jb25jYXQoY2h1bmsuZWRnZXMp
OworICAgICAgICB0aGlzLl9ub2RlSWQybm9kZUlkID0gdGhpcy5fbm9kZUlkMm5vZGVJZC5jb25j
YXQoY2h1bmsubm9kZUlkMm5vZGVJZCk7CisgICAgfSwKKwogICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZQogfQogCkBAIC00NjcsNyArNDk1LDcg
QEAgV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICogQHBhcmFtIHs/TWVtb3J5QWdlbnQuTWVtb3J5QmxvY2t9IG1lbW9yeUJsb2NrCiAg
ICAgICAgICAqIEBwYXJhbSB7P09iamVjdD19IGdyYXBoCiAgICAgICAgICAqLwotICAgICAgICBm
dW5jdGlvbiBkaWRSZWNlaXZlTWVtb3J5U25hcHNob3QoZXJyb3IsIG1lbW9yeUJsb2NrLCBncmFw
aCkKKyAgICAgICAgZnVuY3Rpb24gZGlkUmVjZWl2ZU1lbW9yeVNuYXBzaG90KGVycm9yLCBtZW1v
cnlCbG9jaykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1lbW9yeUJsb2NrLnNpemUgJiYg
bWVtb3J5QmxvY2suY2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgICB2YXIga25vd25TaXplID0g
MDsKQEAgLTY0NSw3ICs2NzMsNyBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5QmFyQ2hhcnQu
cHJvdG90eXBlID0gewogICAgICAgICAgKiBAcGFyYW0gez9NZW1vcnlBZ2VudC5NZW1vcnlCbG9j
a30gbWVtb3J5QmxvY2sKICAgICAgICAgICogQHBhcmFtIHs/T2JqZWN0PX0gZ3JhcGgKICAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVNZW1vcnlTbmFwc2hvdChlcnJvciwg
bWVtb3J5QmxvY2ssIGdyYXBoKQorICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZlTWVtb3J5U25h
cHNob3QoZXJyb3IsIG1lbW9yeUJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobWVt
b3J5QmxvY2suc2l6ZSAmJiBtZW1vcnlCbG9jay5jaGlsZHJlbikgewogICAgICAgICAgICAgICAg
IHZhciBrbm93blNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4IGVjODkyYTZlMDQzZGY5MDA4MjNkZWUzNzM3
OTViZjkwZDRjNDA1OTkuLmE0ZGE4Y2FkMzIyMmNjODAyNjA5NjU2MmJhZjYxZjZkNGFiNjY4ZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQ
YW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVz
UGFuZWwuanMKQEAgLTMwMyw2ICszMDMsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9
IGZ1bmN0aW9uKCkKICAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5z
cGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlKCkpOwogCiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlclByb2ZpbGVyRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVyRGlzcGF0Y2hl
cih0aGlzKSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck1lbW9yeURpc3BhdGNoZXIo
bmV3IFdlYkluc3BlY3Rvci5NZW1vcnlEaXNwYXRjaGVyKHRoaXMpKTsKIAogICAgIHRoaXMuX2Ny
ZWF0ZUZpbGVTZWxlY3RvckVsZW1lbnQoKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhp
cyksIHRydWUpOwpAQCAtMTIyOCw2ICsxMjI5LDMyIEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAqIEBpbXBsZW1lbnRz
IHtNZW1vcnlBZ2VudC5EaXNwYXRjaGVyfQorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAorICovCitXZWJJbnNwZWN0b3IuTWVtb3J5RGlzcGF0Y2hl
ciA9IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCit7CisgICAgdGhpcy5fcHJvZmlsZXNQYW5lbCA9
IHByb2ZpbGVzUGFuZWw7Cit9CisKK1dlYkluc3BlY3Rvci5NZW1vcnlEaXNwYXRjaGVyLnByb3Rv
dHlwZSA9IHsKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVt
YmVyfSB1aWQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKKyAgICAgKi8KKyAgICBhZGRO
YXRpdmVTbmFwc2hvdENodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB7CisgICAgICAgIHZhciBw
cm9maWxlID0gdGhpcy5fcHJvZmlsZXNQYW5lbC5maW5kVGVtcG9yYXJ5UHJvZmlsZShXZWJJbnNw
ZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAgICAgICBpZiAoIXBy
b2ZpbGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb2ZpbGUuYWRkTmF0aXZlU25h
cHNob3RDaHVuayhjaHVuayk7CisgICAgfQorfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgogICog
QGltcGxlbWVudHMge1Byb2ZpbGVyQWdlbnQuRGlzcGF0Y2hlcn0KICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186863</attachid>
            <date>2013-02-06 08:44:12 -0800</date>
            <delta_ts>2013-02-07 00:24:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108824-20130206204048.patch</filename>
            <type>text/plain</type>
            <size>35920</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RmY2Q1Yzg5ZjlmYmNj
N2RlZjllNDNlNmMzYTVmMjViZmViNzcwNC4uNWRhOWQxZTc3OWNlMDJlMWE1M2E0ZGUwNWRlYjk3
NWU3MTIyZDU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEzLTAyLTA2ICBJbHlh
IFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1lbnRhdGlvbjogcmVkdWNlIG5hdGl2ZSBoZWFwIHNu
YXBzaG90IHJ1bnRpbWUgbWVtb3J5IGZvb3RwcmludAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGV2ZW50IHdhcyBhZGRlZCBpbnRvIE1lbW9yeSBk
b21haW4gYWRkTmF0aXZlU25hcHNob3RDaHVuay4KKyAgICAgICAgVGhlIGNvbnRlbnQgb2YgSGVh
cEdyYXBoU2VyaWFsaXplciBpcyBjb21wbGV0ZWx5IHJld3JpdHRlbiBhY2NvcmRpbmcgdG8gbmV3
IEFQSS4KKyAgICAgICAgTm93IGl0IGNvbGxlY3RzIHN0cmluZ3MsIG5vZGVzLCBlZGdlcyBhbmQg
aWQyaWQgbWFwIGFuZCBwdXNoZXMgd2hlbiB0aGUgY29sbGVjdGVkIGl0ZW1zIGNvdW50IGV4Y2Vl
ZCBhIGxpbWl0LgorICAgICAgICBPbiB0aGUgZnJvbnRlbmQgc2lkZSBJIGFkZGVkIG5ldyBtZXRo
b2QgZm9yIHRoZSBuZXcgZXZlbnQgYW5kIGZpeGVkIHRoZSBwb3N0cHJvY2Vzc2luZyBzdGVwLgor
ICAgICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb24gd2FzIHNsaWdodGx5IGNoYW5nZWQuIE5vdyBp
dCByZXBvcnRzIGJhc2UgdG8gcmVhbCBhZGRyZXNzIG1hcCBvbmx5IGFmdGVyIHJlcG9ydGluZyB0
aGUgbm9kZSB3aXRoIHJlYWwgYWRkcmVzcy4KKworICAgICAgICAqIGluc3BlY3Rvci9IZWFwR3Jh
cGhTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6
OkhlYXBHcmFwaFNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFs
aXplcjo6cHVzaFVwZGF0ZUlmTmVlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6ZXI6OnB1c2hVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6cmVwb3J0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpI
ZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnROb2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpI
ZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnRFZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBH
cmFwaFNlcmlhbGl6ZXI6OnJlcG9ydEVkZ2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBH
cmFwaFNlcmlhbGl6ZXI6OnJlcG9ydExlYWYpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBo
U2VyaWFsaXplcjo6cmVwb3J0QmFzZUFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdy
YXBoU2VyaWFsaXplcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlh
bGl6ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNl
cmlhbGl6ZXI6OmFkZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxp
emVyOjp0b05vZGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjph
ZGRSb290Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuaDoK
KyAgICAgICAgKEhlYXBHcmFwaFNlcmlhbGl6ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpwcm9jZXNzTWVtb3J5RGlz
dHJpYnV0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1v
cnlEaXN0cmlidXRpb25NYXApOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURp
c3RyaWJ1dGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6
OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50Ojpj
bGVhckZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
aDoKKyAgICAgICAgKEluc3BlY3Rvck1lbW9yeUFnZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL05hdGl2ZUhlYXBTbmFwc2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5O
YXRpdmVIZWFwU25hcHNob3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBTbmFw
c2hvdE5vZGUucHJvdG90eXBlLmNsYXNzSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5h
dGl2ZUhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLmlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5OYXRpdmVIZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5uYW1lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5OYXRpdmVIZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5zZXJpYWxpemUpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBl
LmJ1dHRvbkNsaWNrZWQuZGlkUmVjZWl2ZU1lbW9yeVNuYXBzaG90KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5idXR0b25DbGlja2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlci5wcm90b3R5
cGUuc3RhcnRTbmFwc2hvdFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVT
bmFwc2hvdFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmspOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVByb2ZpbGVUeXBlLnByb3RvdHlwZS5i
dXR0b25DbGlja2VkLmRpZFJlY2VpdmVNZW1vcnlTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuTmF0aXZlTWVtb3J5UHJvZmlsZVR5cGUucHJvdG90eXBlLmJ1dHRvbkNsaWNrZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeUJhckNoYXJ0LnByb3RvdHlwZS5fdXBk
YXRlU3RhdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5NZW1vcnlEaXNwYXRjaGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5NZW1vcnlE
aXNwYXRjaGVyLnByb3RvdHlwZS5hZGROYXRpdmVTbmFwc2hvdENodW5rKToKKwogMjAxMy0wMi0w
NiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgT3B0aW1pemUg
R2x5cGhQYWdlIGZvciBjYXNlIHdoZXJlIGFsbCBnbHlwaHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUg
c2FtZSBmb250LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFw
aFNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlh
bGl6ZXIuY3BwCmluZGV4IDgyZTRiOTgzNGEyZmM3ZWEwYmJhNDg2MDc3ZjMwNDZiNWU3YmRkZGMu
LmIzZjI4NjBiMWY0Nzg1NDcyODNjYjJiYTg0NjQ2NTEwZTE0NGIzMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHAKQEAgLTM0LDcgKzM0
LDYgQEAKIAogI2luY2x1ZGUgIkhlYXBHcmFwaFNlcmlhbGl6ZXIuaCIKIAotI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KQEAgLTQ0LDYwICs0MywyMiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhlYXBHcmFwaE5vZGUgewotcHVibGlj
OgotICAgIEhlYXBHcmFwaE5vZGUoKQotICAgICAgICA6IG1fdHlwZSgwKQotICAgICAgICAsIG1f
c2l6ZSgwKQotICAgICAgICAsIG1fY2xhc3NOYW1lKDApCi0gICAgICAgICwgbV9uYW1lKDApCi0g
ICAgICAgICwgbV9lZGdlQ291bnQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW50IG1fdHlwZTsK
LSAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgaW50IG1fY2xhc3NOYW1lOwotICAgIGludCBtX25h
bWU7Ci0gICAgaW50IG1fZWRnZUNvdW50OwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ub2RlRmll
bGRDb3VudCA9IDU7Ci19OwotCi1jbGFzcyBIZWFwR3JhcGhFZGdlIHsKLXB1YmxpYzoKLSAgICBI
ZWFwR3JhcGhFZGdlKCkKLSAgICAgICAgOiBtX3R5cGUoMCkKLSAgICAgICAgLCBtX3RhcmdldElu
ZGV4SXNLbm93bihmYWxzZSkKLSAgICAgICAgLCBtX3RvSW5kZXgoMCkKLSAgICAgICAgLCBtX25h
bWUoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW50IG1fdHlwZTsKLSAgICBib29sIG1fdGFyZ2V0
SW5kZXhJc0tub3duOwotICAgIHVuaW9uIHsKLSAgICAgICAgY29uc3Qgdm9pZCogbV90b09iamVj
dDsKLSAgICAgICAgaW50IG1fdG9JbmRleDsKLSAgICB9OwotICAgIGludCBtX25hbWU7Ci19Owot
Ci1IZWFwR3JhcGhTZXJpYWxpemVyOjpIZWFwR3JhcGhTZXJpYWxpemVyKCkKLSAgICA6IG1fbGFz
dFJlcG9ydGVkRWRnZUluZGV4KDApCitIZWFwR3JhcGhTZXJpYWxpemVyOjpIZWFwR3JhcGhTZXJp
YWxpemVyKEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIGZyb250ZW5kKQorICAgIDogbV9mcm9u
dGVuZChmcm9udGVuZCkKKyAgICAsIG1fc3RyaW5ncyhTdHJpbmdzOjpjcmVhdGUoKSkKKyAgICAs
IG1fZWRnZXMoRWRnZXM6OmNyZWF0ZSgpKQorICAgICwgbV9ub2RlRWRnZXNDb3VudCgwKQorICAg
ICwgbV9ub2RlcyhOb2Rlczo6Y3JlYXRlKCkpCisgICAgLCBtX2Jhc2VUb1JlYWxOb2RlSWRNYXAo
QmFzZVRvUmVhbE5vZGVJZE1hcDo6Y3JlYXRlKCkpCiB7Ci0gICAgbV9zdHJpbmdzLmFwcGVuZChT
dHJpbmcoKSk7CisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIG1fc3RyaW5ncy0+YWRkSXRl
bShTdHJpbmcoKSk7IC8vIEFuIGVtcHR5IHN0cmluZyB3aXRoIDAgaW5kZXguCiAKICAgICBtZW1z
ZXQobV9lZGdlVHlwZXMsIDAsIHNpemVvZihtX2VkZ2VUeXBlcykpOwogCi0gICAgQVNTRVJUKG1f
c3RyaW5ncy5zaXplKCkpOwotICAgIG1fZWRnZVR5cGVzW1dURjo6UG9pbnRlck1lbWJlcl0gPSBt
X3N0cmluZ3Muc2l6ZSgpOwotICAgIG1fc3RyaW5ncy5hcHBlbmQoIndlYWtSZWYiKTsKLQotICAg
IG1fZWRnZVR5cGVzW1dURjo6T3duUHRyTWVtYmVyXSA9IG1fc3RyaW5ncy5zaXplKCk7Ci0gICAg
bV9zdHJpbmdzLmFwcGVuZCgib3duUmVmIik7Ci0KLSAgICBtX2VkZ2VUeXBlc1tXVEY6OlJlZlB0
ck1lbWJlcl0gPSBtX3N0cmluZ3Muc2l6ZSgpOwotICAgIG1fc3RyaW5ncy5hcHBlbmQoImNvdW50
UmVmIik7CisgICAgbV9lZGdlVHlwZXNbV1RGOjpQb2ludGVyTWVtYmVyXSA9IGFkZFN0cmluZygi
d2VhayIpOworICAgIG1fZWRnZVR5cGVzW1dURjo6T3duUHRyTWVtYmVyXSA9IGFkZFN0cmluZygi
b3duUmVmIik7CisgICAgbV9lZGdlVHlwZXNbV1RGOjpSZWZQdHJNZW1iZXJdID0gYWRkU3RyaW5n
KCJjb3VudFJlZiIpOwogCiAgICAgbV91bmtub3duQ2xhc3NOYW1lSWQgPSBhZGRTdHJpbmcoInVu
a25vd24iKTsKIH0KQEAgLTEwNiw4OCArNjcsOTYgQEAgSGVhcEdyYXBoU2VyaWFsaXplcjo6fkhl
YXBHcmFwaFNlcmlhbGl6ZXIoKQogewogfQogCit2b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6OnB1
c2hVcGRhdGVJZk5lZWQoKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtTaXplID0g
MTAwOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXZlcmFnZUVkZ2VzUGVyTm9kZSA9IDU7CisK
KyAgICBpZiAobV9zdHJpbmdzLT5sZW5ndGgoKSA8PSBjaHVua1NpemUKKyAgICAgICAgJiYgbV9u
b2Rlcy0+bGVuZ3RoKCkgPD0gY2h1bmtTaXplICogc19ub2RlRmllbGRzQ291bnQKKyAgICAgICAg
JiYgbV9lZGdlcy0+bGVuZ3RoKCkgPD0gY2h1bmtTaXplICogYXZlcmFnZUVkZ2VzUGVyTm9kZSAq
IHNfZWRnZUZpZWxkc0NvdW50CisgICAgICAgICYmIG1fYmFzZVRvUmVhbE5vZGVJZE1hcC0+bGVu
Z3RoKCkgPD0gY2h1bmtTaXplICogc19yZW1hcHBpbmdGaWVsZHNDb3VudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHVzaFVwZGF0ZSgpOworfQorCit2b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6
OnB1c2hVcGRhdGUoKQoreworICAgIHR5cGVkZWYgVHlwZUJ1aWxkZXI6Ok1lbW9yeTo6SGVhcFNu
YXBzaG90Q2h1bmsgSGVhcFNuYXBzaG90Q2h1bms7CisKKyAgICBSZWZQdHI8SGVhcFNuYXBzaG90
Q2h1bms+IGNodW5rID0gSGVhcFNuYXBzaG90Q2h1bms6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRT
dHJpbmdzKG1fc3RyaW5ncy5yZWxlYXNlKCkpCisgICAgICAgIC5zZXROb2RlcyhtX25vZGVzLnJl
bGVhc2UoKSkKKyAgICAgICAgLnNldEVkZ2VzKG1fZWRnZXMucmVsZWFzZSgpKQorICAgICAgICAu
c2V0QmFzZVRvUmVhbE5vZGVJZChtX2Jhc2VUb1JlYWxOb2RlSWRNYXAucmVsZWFzZSgpKTsKKwor
ICAgIG1fZnJvbnRlbmQtPmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsoY2h1bmspOworCisgICAgbV9z
dHJpbmdzID0gU3RyaW5nczo6Y3JlYXRlKCk7CisgICAgbV9lZGdlcyA9IEVkZ2VzOjpjcmVhdGUo
KTsKKyAgICBtX25vZGVzID0gTm9kZXM6OmNyZWF0ZSgpOworICAgIG1fYmFzZVRvUmVhbE5vZGVJ
ZE1hcCA9IEJhc2VUb1JlYWxOb2RlSWRNYXA6OmNyZWF0ZSgpOworfQorCiB2b2lkIEhlYXBHcmFw
aFNlcmlhbGl6ZXI6OnJlcG9ydE5vZGUoY29uc3QgV1RGOjpNZW1vcnlPYmplY3RJbmZvJiBpbmZv
KQogewotICAgIEhlYXBHcmFwaE5vZGUgbm9kZTsKLSAgICBub2RlLm1fdHlwZSA9IGFkZFN0cmlu
ZyhpbmZvLm9iamVjdFR5cGUoKSk7Ci0gICAgbm9kZS5tX3NpemUgPSBpbmZvLm9iamVjdFNpemUo
KTsKLSAgICBub2RlLm1fY2xhc3NOYW1lID0gaW5mby5jbGFzc05hbWUoKS5pc0VtcHR5KCkgPyBt
X3Vua25vd25DbGFzc05hbWVJZCA6IGFkZFN0cmluZyhpbmZvLmNsYXNzTmFtZSgpKTsKLSAgICBu
b2RlLm1fbmFtZSA9IGFkZFN0cmluZyhpbmZvLm5hbWUoKSk7Ci0gICAgLy8gTm9kZSBpcyBhbHdh
eXMgcmVwb3J0ZWQgYWZ0ZXIgaXRzIG91dGdvaW5nIGVkZ2VzIGFuZCBsZWF2ZXMuCi0gICAgbm9k
ZS5tX2VkZ2VDb3VudCA9IG1fZWRnZXMuc2l6ZSgpIC0gbV9sYXN0UmVwb3J0ZWRFZGdlSW5kZXg7
Ci0gICAgbV9sYXN0UmVwb3J0ZWRFZGdlSW5kZXggPSBtX2VkZ2VzLnNpemUoKTsKLQotICAgIG1f
b2JqZWN0VG9Ob2RlSW5kZXguc2V0KGluZm8ucmVwb3J0ZWRQb2ludGVyKCksIG1fbm9kZXMuc2l6
ZSgpKTsKKyAgICByZXBvcnROb2RlSW1wbChpbmZvLCBtX25vZGVFZGdlc0NvdW50KTsKKyAgICBt
X25vZGVFZGdlc0NvdW50ID0gMDsKICAgICBpZiAoaW5mby5pc1Jvb3QoKSkKICAgICAgICAgbV9y
b290cy5hcHBlbmQoaW5mby5yZXBvcnRlZFBvaW50ZXIoKSk7Ci0gICAgbV9ub2Rlcy5hcHBlbmQo
bm9kZSk7CisgICAgcHVzaFVwZGF0ZUlmTmVlZCgpOworfQorCitpbnQgSGVhcEdyYXBoU2VyaWFs
aXplcjo6cmVwb3J0Tm9kZUltcGwoY29uc3QgV1RGOjpNZW1vcnlPYmplY3RJbmZvJiBpbmZvLCBp
bnQgZWRnZXNDb3VudCkKK3sKKyAgICBpbnQgbm9kZUlkID0gdG9Ob2RlSWQoaW5mby5yZXBvcnRl
ZFBvaW50ZXIoKSk7CisKKyAgICBtX25vZGVzLT5hZGRJdGVtKGluZm8uY2xhc3NOYW1lKCkuaXNF
bXB0eSgpID8gbV91bmtub3duQ2xhc3NOYW1lSWQgOiBhZGRTdHJpbmcoaW5mby5jbGFzc05hbWUo
KSkpOworICAgIG1fbm9kZXMtPmFkZEl0ZW0oYWRkU3RyaW5nKGluZm8ubmFtZSgpKSk7CisgICAg
bV9ub2Rlcy0+YWRkSXRlbShub2RlSWQpOworICAgIG1fbm9kZXMtPmFkZEl0ZW0oaW5mby5vYmpl
Y3RTaXplKCkpOworICAgIG1fbm9kZXMtPmFkZEl0ZW0oZWRnZXNDb3VudCk7CisKKyAgICByZXR1
cm4gbm9kZUlkOwogfQogCiB2b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6OnJlcG9ydEVkZ2UoY29u
c3Qgdm9pZCogdG8sIGNvbnN0IGNoYXIqIG5hbWUsIFdURjo6TWVtYmVyVHlwZSBtZW1iZXJUeXBl
KQogewotICAgIEhlYXBHcmFwaEVkZ2UgZWRnZTsKICAgICBBU1NFUlQodG8pOworICAgIHJlcG9y
dEVkZ2VJbXBsKHRvTm9kZUlkKHRvKSwgbmFtZSwgbV9lZGdlVHlwZXNbbWVtYmVyVHlwZV0pOwor
ICAgIHB1c2hVcGRhdGVJZk5lZWQoKTsKK30KKwordm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjpy
ZXBvcnRFZGdlSW1wbChjb25zdCBpbnQgdG9Ob2RlSWQsIGNvbnN0IGNoYXIqIG5hbWUsIGludCBt
ZW1iZXJUeXBlKQorewogICAgIEFTU0VSVChtZW1iZXJUeXBlID49IDApOwogICAgIEFTU0VSVCht
ZW1iZXJUeXBlIDwgV1RGOjpMYXN0TWVtYmVyVHlwZUVudHJ5KTsKLSAgICBlZGdlLm1fdHlwZSA9
IG1fZWRnZVR5cGVzW21lbWJlclR5cGVdOwotICAgIGVkZ2UubV90b09iamVjdCA9IHRvOwotICAg
IGVkZ2UubV9uYW1lID0gYWRkU3RyaW5nKG5hbWUpOwotICAgIG1fZWRnZXMuYXBwZW5kKGVkZ2Up
OworCisgICAgbV9lZGdlcy0+YWRkSXRlbShtZW1iZXJUeXBlKTsKKyAgICBtX2VkZ2VzLT5hZGRJ
dGVtKGFkZFN0cmluZyhuYW1lKSk7CisgICAgbV9lZGdlcy0+YWRkSXRlbSh0b05vZGVJZCk7CisK
KyAgICArK21fbm9kZUVkZ2VzQ291bnQ7CiB9CiAKIHZvaWQgSGVhcEdyYXBoU2VyaWFsaXplcjo6
cmVwb3J0TGVhZihjb25zdCBXVEY6Ok1lbW9yeU9iamVjdEluZm8mIGluZm8sIGNvbnN0IGNoYXIq
IGVkZ2VOYW1lKQogewotICAgIEhlYXBHcmFwaE5vZGUgbm9kZTsKLSAgICBub2RlLm1fdHlwZSA9
IGFkZFN0cmluZyhpbmZvLm9iamVjdFR5cGUoKSk7Ci0gICAgbm9kZS5tX3NpemUgPSBpbmZvLm9i
amVjdFNpemUoKTsKLSAgICBub2RlLm1fY2xhc3NOYW1lID0gYWRkU3RyaW5nKGluZm8uY2xhc3NO
YW1lKCkpOwotICAgIG5vZGUubV9uYW1lID0gYWRkU3RyaW5nKGluZm8ubmFtZSgpKTsKLQotICAg
IGludCBub2RlSW5kZXggPSBtX25vZGVzLnNpemUoKTsKLSAgICBtX25vZGVzLmFwcGVuZChub2Rl
KTsKLQotICAgIEhlYXBHcmFwaEVkZ2UgZWRnZTsKLSAgICBlZGdlLm1fdHlwZSA9IG1fZWRnZVR5
cGVzW1dURjo6T3duUHRyTWVtYmVyXTsKLSAgICBlZGdlLm1fdG9JbmRleCA9IG5vZGVJbmRleDsK
LSAgICBlZGdlLm1fdGFyZ2V0SW5kZXhJc0tub3duID0gdHJ1ZTsKLSAgICBlZGdlLm1fbmFtZSA9
IGFkZFN0cmluZyhlZGdlTmFtZSk7Ci0gICAgbV9lZGdlcy5hcHBlbmQoZWRnZSk7CisgICAgaW50
IG5vZGVJZCA9IHJlcG9ydE5vZGVJbXBsKGluZm8sIDApOworICAgIHJlcG9ydEVkZ2VJbXBsKG5v
ZGVJZCwgZWRnZU5hbWUsIG1fZWRnZVR5cGVzW1dURjo6T3duUHRyTWVtYmVyXSk7CisgICAgcHVz
aFVwZGF0ZUlmTmVlZCgpOwogfQogCiB2b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6OnJlcG9ydEJh
c2VBZGRyZXNzKGNvbnN0IHZvaWQqIGJhc2UsIGNvbnN0IHZvaWQqIHJlYWwpCiB7Ci0gICAgbV9i
YXNlVG9SZWFsQWRkcmVzcy5zZXQoYmFzZSwgcmVhbCk7CisgICAgbV9iYXNlVG9SZWFsTm9kZUlk
TWFwLT5hZGRJdGVtKHRvTm9kZUlkKGJhc2UpKTsKKyAgICBtX2Jhc2VUb1JlYWxOb2RlSWRNYXAt
PmFkZEl0ZW0odG9Ob2RlSWQocmVhbCkpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSGVhcEdyYXBoU2VyaWFsaXplcjo6c2VyaWFsaXplKCkKK3ZvaWQgSGVhcEdyYXBoU2VyaWFs
aXplcjo6ZmluaXNoKCkKIHsKICAgICBhZGRSb290Tm9kZSgpOwotICAgIGFkanV0RWRnZVRhcmdl
dHMoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBIZWFwR3JhcGhOb2RlJiBub2RlID0gbV9ub2Rlc1tpXTsKLSAgICAgICAg
bm9kZXMtPnB1c2hJbnQobm9kZS5tX3R5cGUpOwotICAgICAgICBub2Rlcy0+cHVzaEludChub2Rl
Lm1fY2xhc3NOYW1lKTsKLSAgICAgICAgbm9kZXMtPnB1c2hJbnQobm9kZS5tX25hbWUpOwotICAg
ICAgICBub2Rlcy0+cHVzaEludChub2RlLm1fc2l6ZSk7Ci0gICAgICAgIG5vZGVzLT5wdXNoSW50
KG5vZGUubV9lZGdlQ291bnQpOwotICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVk
Z2VzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9lZGdlcy5zaXplKCk7IGkrKykgewotICAgICAgICBIZWFwR3JhcGhFZGdlJiBlZGdlID0g
bV9lZGdlc1tpXTsKLSAgICAgICAgZWRnZXMtPnB1c2hJbnQoZWRnZS5tX3R5cGUpOwotICAgICAg
ICBlZGdlcy0+cHVzaEludChlZGdlLm1fbmFtZSk7Ci0gICAgICAgIGVkZ2VzLT5wdXNoSW50KGVk
Z2UubV90b0luZGV4ICogSGVhcEdyYXBoTm9kZTo6c19ub2RlRmllbGRDb3VudCk7Ci0gICAgfQot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3RyaW5ncyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RyaW5ncy5zaXplKCk7IGkrKykK
LSAgICAgICAgc3RyaW5ncy0+cHVzaFN0cmluZyhtX3N0cmluZ3NbaV0pOwotCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZ3JhcGggPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGdyYXBoLT5zZXRBcnJheSgibm9kZXMiLCBub2Rlcyk7Ci0gICAgZ3JhcGgtPnNldEFycmF5KCJl
ZGdlcyIsIGVkZ2VzKTsKLSAgICBncmFwaC0+c2V0QXJyYXkoInN0cmluZ3MiLCBzdHJpbmdzKTsK
LSAgICByZXR1cm4gZ3JhcGgucmVsZWFzZSgpOworICAgIHB1c2hVcGRhdGUoKTsKIH0KIAogdm9p
ZCBIZWFwR3JhcGhTZXJpYWxpemVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdApAQCAtMTk1LDEwICsxNjQsOSBAQCB2b2lkIEhlYXBH
cmFwaFNlcmlhbGl6ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pCiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpJbnNwZWN0b3IpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fc3RyaW5nVG9JbmRleCwgInN0cmluZ1RvSW5kZXgiKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3N0cmluZ3MsICJzdHJpbmdzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9vYmplY3RUb05vZGVJ
bmRleCwgIm9iamVjdFRvTm9kZUluZGV4Iik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9iYXNlVG9S
ZWFsQWRkcmVzcywgImJhc2VUb1JlYWxBZGRyZXNzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9u
b2RlcywgIm5vZGVzIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9lZGdlcywgImVkZ2VzIik7Cisg
ICAgaW5mby5hZGRNZW1iZXIobV9ub2RlcywgIm5vZGVzIik7CisgICAgaW5mby5hZGRNZW1iZXIo
bV9iYXNlVG9SZWFsTm9kZUlkTWFwLCAibm9kZUlkUmVtYXBwaW5nIik7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9yb290cywgInJvb3RzIik7CiB9CiAKQEAgLTIwNiwzNCArMTc0LDI5IEBAIGludCBI
ZWFwR3JhcGhTZXJpYWxpemVyOjphZGRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAg
ICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFN0cmluZ01h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc3RyaW5nVG9JbmRleC5hZGQoc3RyaW5nLCBtX3N0cmlu
Z3Muc2l6ZSgpKTsKKyAgICBTdHJpbmdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3N0cmluZ1Rv
SW5kZXguYWRkKHN0cmluZywgbV9zdHJpbmdUb0luZGV4LnNpemUoKSArIDEpOwogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgbV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOworICAg
ICAgICBtX3N0cmluZ3MtPmFkZEl0ZW0oc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAotdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjphZGRSb290Tm9kZSgp
CitpbnQgSGVhcEdyYXBoU2VyaWFsaXplcjo6dG9Ob2RlSWQoY29uc3Qgdm9pZCogdG8pCiB7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Jvb3RzLnNpemUoKTsgaSsrKQotICAgICAgICBy
ZXBvcnRFZGdlKG1fcm9vdHNbaV0sIDAsIFdURjo6UG9pbnRlck1lbWJlcik7Ci0gICAgSGVhcEdy
YXBoTm9kZSBub2RlOwotICAgIG5vZGUubV9uYW1lID0gYWRkU3RyaW5nKCJSb290Iik7Ci0gICAg
bm9kZS5tX2VkZ2VDb3VudCA9IG1fZWRnZXMuc2l6ZSgpIC0gbV9sYXN0UmVwb3J0ZWRFZGdlSW5k
ZXg7Ci0gICAgbV9sYXN0UmVwb3J0ZWRFZGdlSW5kZXggPSBtX2VkZ2VzLnNpemUoKTsKLSAgICBt
X25vZGVzLmFwcGVuZChub2RlKTsKKyAgICBBU1NFUlQodG8pOworICAgIEFkZHJlc3MyTm9kZUlk
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hZGRyZXNzMk5vZGVJZE1hcC5hZGQodG8sIG1fYWRkcmVz
czJOb2RlSWRNYXAuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAotdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjphZGp1dEVkZ2VUYXJnZXRzKCkKK3ZvaWQg
SGVhcEdyYXBoU2VyaWFsaXplcjo6YWRkUm9vdE5vZGUoKQogewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7IGkrKykgewotICAgICAgICBIZWFwR3JhcGhFZGdlJiBl
ZGdlID0gbV9lZGdlc1tpXTsKLSAgICAgICAgaWYgKGVkZ2UubV90YXJnZXRJbmRleElzS25vd24p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3Qgdm9pZCogcmVhbFRhcmdldCA9
IG1fYmFzZVRvUmVhbEFkZHJlc3MuZ2V0KGVkZ2UubV90b09iamVjdCk7Ci0gICAgICAgIGlmICgh
cmVhbFRhcmdldCkKLSAgICAgICAgICAgIHJlYWxUYXJnZXQgPSBlZGdlLm1fdG9PYmplY3Q7Ci0g
ICAgICAgIGVkZ2UubV90b0luZGV4ID0gbV9vYmplY3RUb05vZGVJbmRleC5nZXQocmVhbFRhcmdl
dCk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yb290cy5zaXplKCk7IGkr
KykKKyAgICAgICAgcmVwb3J0RWRnZUltcGwodG9Ob2RlSWQobV9yb290c1tpXSksIDAsIG1fZWRn
ZVR5cGVzW1dURjo6UG9pbnRlck1lbWJlcl0pOworCisgICAgbV9ub2Rlcy0+YWRkSXRlbShhZGRT
dHJpbmcoIlJvb3QiKSk7CisgICAgbV9ub2Rlcy0+YWRkSXRlbSgwKTsKKyAgICBtX25vZGVzLT5h
ZGRJdGVtKG1fYWRkcmVzczJOb2RlSWRNYXAuc2l6ZSgpKTsKKyAgICBtX25vZGVzLT5hZGRJdGVt
KDApOworICAgIG1fbm9kZXMtPmFkZEl0ZW0obV9yb290cy5zaXplKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVh
cEdyYXBoU2VyaWFsaXplci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNl
cmlhbGl6ZXIuaAppbmRleCA5YTZmMDFlYWQ3ZWU2MDkwNDI3YmVhNjUyMTk2MDVjZmUyYWQwZTZh
Li4zYTZlY2Y1NjhlNDZlZGFkYWJmZTk5OTk2MDNjZjIxNDY5ZGNjYzJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmgKQEAgLTMzLDYgKzMzLDcg
QEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg+CkBAIC00OSwzNSArNTAsNTIg
QEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSGVhcEdyYXBoU2VyaWFsaXplciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVhcEdyYXBoU2VyaWFsaXplcik7CiBwdWJsaWM6Ci0g
ICAgSGVhcEdyYXBoU2VyaWFsaXplcigpOworICAgIGV4cGxpY2l0IEhlYXBHcmFwaFNlcmlhbGl6
ZXIoSW5zcGVjdG9yRnJvbnRlbmQ6Ok1lbW9yeSopOwogICAgIH5IZWFwR3JhcGhTZXJpYWxpemVy
KCk7CiAgICAgdm9pZCByZXBvcnROb2RlKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYpOwog
ICAgIHZvaWQgcmVwb3J0RWRnZShjb25zdCB2b2lkKiwgY29uc3QgY2hhciosIFdURjo6TWVtYmVy
VHlwZSk7CiAgICAgdm9pZCByZXBvcnRMZWFmKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYs
IGNvbnN0IGNoYXIqKTsKICAgICB2b2lkIHJlcG9ydEJhc2VBZGRyZXNzKGNvbnN0IHZvaWQqLCBj
b25zdCB2b2lkKik7CiAKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2VyaWFsaXpl
KCk7CisgICAgdm9pZCBmaW5pc2goKTsKIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZvaWQgcHVzaFVwZGF0ZUlm
TmVlZCgpOworICAgIHZvaWQgcHVzaFVwZGF0ZSgpOworCisgICAgaW50IHRvTm9kZUlkKGNvbnN0
IHZvaWQqKTsKKwogICAgIGludCBhZGRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBh
ZGRSb290Tm9kZSgpOwotICAgIHZvaWQgYWRqdXRFZGdlVGFyZ2V0cygpOworCisgICAgdm9pZCBy
ZXBvcnRFZGdlSW1wbChjb25zdCBpbnQgdG9Ob2RlSWQsIGNvbnN0IGNoYXIqIG5hbWUsIGludCBt
ZW1iZXJUeXBlKTsKKyAgICBpbnQgcmVwb3J0Tm9kZUltcGwoY29uc3QgV1RGOjpNZW1vcnlPYmpl
Y3RJbmZvJiwgaW50IGVkZ2VzQ291bnQpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmQ6Ok1lbW9y
eSogbV9mcm9udGVuZDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gU3RyaW5n
TWFwOwogICAgIFN0cmluZ01hcCBtX3N0cmluZ1RvSW5kZXg7Ci0gICAgVmVjdG9yPFN0cmluZz4g
bV9zdHJpbmdzOwotICAgIGludCBtX2xhc3RSZXBvcnRlZEVkZ2VJbmRleDsKKyAgICB0eXBlZGVm
IFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+IFN0cmluZ3M7CisgICAgUmVmUHRyPFN0cmluZ3M+
IG1fc3RyaW5nczsKKworICAgIHR5cGVkZWYgVHlwZUJ1aWxkZXI6OkFycmF5PGludD4gRWRnZXM7
CisgICAgUmVmUHRyPEVkZ2VzPiBtX2VkZ2VzOworICAgIGludCBtX25vZGVFZGdlc0NvdW50Owor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19lZGdlRmllbGRzQ291bnQgPSAzOworCisgICAgdHlw
ZWRlZiBUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiBOb2RlczsKKyAgICBSZWZQdHI8Tm9kZXM+IG1f
bm9kZXM7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX25vZGVGaWVsZHNDb3VudCA9IDU7CiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qgdm9pZCosIGludD4gT2JqZWN0VG9Ob2RlSW5kZXg7
Ci0gICAgT2JqZWN0VG9Ob2RlSW5kZXggbV9vYmplY3RUb05vZGVJbmRleDsKKyAgICB0eXBlZGVm
IFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+IEJhc2VUb1JlYWxOb2RlSWRNYXA7CisgICAgUmVmUHRy
PEJhc2VUb1JlYWxOb2RlSWRNYXA+IG1fYmFzZVRvUmVhbE5vZGVJZE1hcDsKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfcmVtYXBwaW5nRmllbGRzQ291bnQgPSAyOwogCi0gICAgdHlwZWRlZiBI
YXNoTWFwPGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKj4gQmFzZVRvUmVhbEFkZHJlc3M7Ci0gICAg
QmFzZVRvUmVhbEFkZHJlc3MgbV9iYXNlVG9SZWFsQWRkcmVzczsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3Qgdm9pZCosIGludD4gQWRkcmVzczJOb2RlSWQ7CisgICAgQWRkcmVzczJOb2RlSWQg
bV9hZGRyZXNzMk5vZGVJZE1hcDsKIAotICAgIFZlY3RvcjxIZWFwR3JhcGhOb2RlPiBtX25vZGVz
OwotICAgIFZlY3RvcjxIZWFwR3JhcGhFZGdlPiBtX2VkZ2VzOwogICAgIFZlY3Rvcjxjb25zdCB2
b2lkKj4gbV9yb290czsKIAogICAgIHNpemVfdCBtX2VkZ2VUeXBlc1tXVEY6Okxhc3RNZW1iZXJU
eXBlRW50cnldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IGVj
ZmNmZTc0YmRhYzE3ZTlhZWMyMjgxMmVkNmI5YWVjZTdhNTkxYmQuLjIyZjI3NTFiMTFhNDk0Mzc1
MjllZmY3N2JjNDY1OWE3YWVmM2RkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KQEAgLTg5LDYgKzg5LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbmFtZSB1
c2VkIHRvIGlkZW50aWZ5IHRoZSBjb21wb25lbnQgdGhhdCBhbGxvY2F0ZWQgdGhpcyBibG9jayIg
fSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjaGlsZHJlbiIsICJ0eXBlIjogImFy
cmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNZW1vcnlCbG9jayIg
fX0KICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICJpZCI6ICJIZWFwU25hcHNob3RDaHVuayIsCisgICAgICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmdzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkFuIGFycmF5IG9mIHN0
cmluZ3MgdGhhdCB3ZXJlIGZvdW5kIHNpbmNlIGxhc3QgdXBkYXRlLiIgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub2RlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJpbnRlZ2VyIiB9LCAiZGVzY3JpcHRpb24iOiAiQW4gYXJyYXkgb2Ygbm9kZXMgdGhh
dCB3ZXJlIGZvdW5kIHNpbmNlIGxhc3QgdXBkYXRlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJlZGdlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJp
bnRlZ2VyIiB9LCAiZGVzY3JpcHRpb24iOiAiQW4gYXJyYXkgb2YgZWRnZXMgdGhhdCB3ZXJlIGZv
dW5kIHNpbmNlIGxhc3QgdXBkYXRlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJiYXNlVG9SZWFsTm9kZUlkIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
ImludGVnZXIiIH0sICJkZXNjcmlwdGlvbiI6ICJBbiBhcnJheSBvZiBpbnRlZ2VycyBmb3Igbm9k
ZUlkIHJlbWFwcGluZy4gRXZlbiBub2RlSWQgaGFzIHRvIGJlIG1hcHBlZCB0byB0aGUgZm9sbG93
aW5nIG9kZCBub2RlSWQuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAg
ICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCkBAIC0xMTMsOCArMTIzLDE1IEBACiAgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVwb3J0R3JhcGgiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgbmF0aXZlIG1lbW9y
eSBncmFwaCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gYWRkaXRpb24gdG8gYWdncmVnYXRlZCBzdGF0
aXN0aWNzLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgInJldHVybnMi
OiBbCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlzdHJpYnV0aW9uIiwgIiRyZWYi
OiAiTWVtb3J5QmxvY2siLCAiZGVzY3JpcHRpb24iOiAiQW4gb2JqZWN0IGRlc2NyaWJpbmcgYWxs
IG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIHByb2Nlc3MifSwKLSAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJncmFwaCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJOYXRpdmUgbWVtb3J5IGdyYXBoLiJ9CisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGlzdHJpYnV0aW9uIiwgIiRyZWYiOiAiTWVtb3J5QmxvY2siLCAiZGVzY3Jp
cHRpb24iOiAiQW4gb2JqZWN0IGRlc2NyaWJpbmcgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhl
IHByb2Nlc3MifQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwK
KyAgICAgICAgImV2ZW50cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFt
ZSI6ICJhZGROYXRpdmVTbmFwc2hvdENodW5rIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjaHVuayIsICIkcmVmIjogIkhl
YXBTbmFwc2hvdENodW5rIiwgImRlc2NyaXB0aW9uIjogIkEgY2h1bmsgb2YgdGhlIHNlcmlhbGl6
ZWQgdGhlIHNuYXBzaG90LiIgfQogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAg
ICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCmluZGV4IDNjNjVhOGE2MDgyZjI0Mjc4ZDE3Yzc0MWM3Mzk2OGQzMTBiOTc3ZDMuLmYz
ZGE4MDhjMjkzZjNjNjQwYTNlOTBmZjcwZjc5ZTNmMGVmYmZmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTQ0NSw4ICs0NDUs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFByb2Nlc3NUYXNrKCkKIEhhc2hNYXA8
U3RyaW5nLCBzaXplX3Q+IEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2Nlc3NNZW1vcnlEaXN0cmli
dXRpb24oKSBjb25zdAogewogICAgIEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+IG1lbW9yeUluZm87
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ3JhcGg7Ci0gICAgbV9tZW1vcnlBZ2VudC0+
Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbkFzTWFwKGZhbHNlLCBncmFwaCwgJm1lbW9yeUlu
Zm8pOworICAgIG1fbWVtb3J5QWdlbnQtPmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25NYXAo
Jm1lbW9yeUluZm8pOwogICAgIHJldHVybiBtZW1vcnlJbmZvOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCAzMGQ5ZTEx
OGI4YjA3MmIwNWMzNzNiZjQ2MjgwYjFkNjM5ZmNhOTE2Li42YmI2YjY2MzE1ZjE0MmU0ZjFmM2Vj
ODNmMTI3OWU2NmVhMTRhZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTUzNCwxMCArNTM0LDE1IEBAIHN0YXRpYyB2b2lk
IGFkZE1lbW9yeUluc3RydW1lbnRhdGlvbkRlYnVnRGF0YShNZW1vcnlJbnN0cnVtZW50YXRpb25D
bGllbnRJbXBsKiBjCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQ
cm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogcmVwb3J0
R3JhcGgsIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4mIHByb2Nlc3NNZW1vcnksIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBncmFwaCkKK3ZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6Omdl
dFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25NYXAoVHlwZU5hbWVUb1NpemVNYXAqIG1lbW9yeUlu
Zm8pCit7CisgICAgZ2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbkltcGwoZmFsc2UsIG1lbW9y
eUluZm8pOworfQorCit2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5
RGlzdHJpYnV0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogcmVwb3J0R3JhcGgsIFJlZlB0
cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4mIHByb2Nlc3NNZW1vcnkpCiB7CiAgICAgVHlwZU5hbWVU
b1NpemVNYXAgbWVtb3J5SW5mbzsKLSAgICBnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uQXNN
YXAocmVwb3J0R3JhcGggJiYgKnJlcG9ydEdyYXBoLCBncmFwaCwgJm1lbW9yeUluZm8pOworICAg
IGdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25JbXBsKHJlcG9ydEdyYXBoICYmICpyZXBvcnRH
cmFwaCwgJm1lbW9yeUluZm8pOwogCiAgICAgTWVtb3J5VXNhZ2VTdGF0c0dlbmVyYXRvciBzdGF0
c0dlbmVyYXRvcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2tzPiBjaGlsZHJlbiA9
IEluc3BlY3Rvck1lbW9yeUJsb2Nrczo6Y3JlYXRlKCk7CkBAIC01NjAsMTEgKzU2NSwxMSBAQCB2
b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKQogICAgIGluZm8uYWRkTWVtYmVyKG1fcGFnZSwgInBhZ2Ui
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3Ry
aWJ1dGlvbkFzTWFwKGJvb2wgcmVwb3J0R3JhcGgsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBn
cmFwaCwgVHlwZU5hbWVUb1NpemVNYXAqIG1lbW9yeUluZm8pCit2b2lkIEluc3BlY3Rvck1lbW9y
eUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uSW1wbChib29sIHJlcG9ydEdyYXBo
LCBUeXBlTmFtZVRvU2l6ZU1hcCogbWVtb3J5SW5mbykKIHsKICAgICBPd25QdHI8SGVhcEdyYXBo
U2VyaWFsaXplcj4gZ3JhcGhTZXJpYWxpemVyOwogICAgIGlmIChyZXBvcnRHcmFwaCkKLSAgICAg
ICAgZ3JhcGhTZXJpYWxpemVyID0gYWRvcHRQdHIobmV3IEhlYXBHcmFwaFNlcmlhbGl6ZXIoKSk7
CisgICAgICAgIGdyYXBoU2VyaWFsaXplciA9IGFkb3B0UHRyKG5ldyBIZWFwR3JhcGhTZXJpYWxp
emVyKG1fZnJvbnRlbmQpKTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1l
bW9yeUluc3RydW1lbnRhdGlvbkNsaWVudChncmFwaFNlcmlhbGl6ZXIuZ2V0KCkpOwogICAgIG1f
aW5zcGVjdG9yQ2xpZW50LT5nZXRBbGxvY2F0ZWRPYmplY3RzKG1lbW9yeUluc3RydW1lbnRhdGlv
bkNsaWVudC5hbGxvY2F0ZWRPYmplY3RzKCkpOwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbklt
cGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKCZtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQpOwpA
QCAtNTgxLDcgKzU4Niw3IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NN
ZW1vcnlEaXN0cmlidXRpb25Bc01hcChib29sIHJlcG9ydEdyYXBoLCBSCiAgICAgbWVtb3J5SW5z
dHJ1bWVudGF0aW9uLmFkZFJvb3RPYmplY3QobWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsK
ICAgICBpZiAoZ3JhcGhTZXJpYWxpemVyKSB7CiAgICAgICAgIG1lbW9yeUluc3RydW1lbnRhdGlv
bi5hZGRSb290T2JqZWN0KGdyYXBoU2VyaWFsaXplci5nZXQoKSk7Ci0gICAgICAgIGdyYXBoID0g
Z3JhcGhTZXJpYWxpemVyLT5zZXJpYWxpemUoKTsKKyAgICAgICAgZ3JhcGhTZXJpYWxpemVyLT5m
aW5pc2goKTsKICAgICB9CiAKICAgICBtX2luc3BlY3RvckNsaWVudC0+ZHVtcFVuY291bnRlZEFs
bG9jYXRlZE9iamVjdHMobWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50LmNvdW50ZWRPYmplY3Rz
KCkpOwpAQCAtNTk4LDYgKzYwMywxNyBAQCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6SW5zcGVjdG9y
TWVtb3J5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZQogewogfQog
Cit2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCit7CisgICAgQVNTRVJUKCFtX2Zyb250ZW5kKTsKKyAgICBtX2Zyb250ZW5k
ID0gZnJvbnRlbmQtPm1lbW9yeSgpOworfQorCit2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpj
bGVhckZyb250ZW5kKCkKK3sKKyAgICBtX2Zyb250ZW5kID0gMDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmgKaW5kZXggMzVlZDAyNmY4YTJl
MjU2ZWM4NmQ0MTEwNWE2YWZlZTE0YTczOWY0Ny4uZGRhNTVhNTUzMjc0ODFjOTE4NTFiN2MyNTJm
MDVmNTUxNTY1OGZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck1lbW9yeUFnZW50LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFzZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIApAQCAtNjAsMTcgKzYxLDIzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXRET01Ob2RlQ291bnQoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpNZW1vcnk6OkRPTUdyb3VwPiA+JiBkb21Hcm91cHMsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6TWVtb3J5OjpTdHJpbmdTdGF0aXN0aWNzPiYgc3RyaW5ncyk7CiAgICAgdmlydHVhbCB2
b2lkIGdldERPTUNvdW50ZXJzKEVycm9yU3RyaW5nKiwgaW50KiBkb2N1bWVudHMsIGludCogbm9k
ZXMsIGludCoganNFdmVudExpc3RlbmVycyk7Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2Nlc3NN
ZW1vcnlEaXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiByZXBvcnRHcmFwaCwg
UmVmUHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6Ok1lbW9yeUJsb2NrPiYgcHJvY2Vzc01lbW9yeSwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGdyYXBoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJv
Y2Vzc01lbW9yeURpc3RyaWJ1dGlvbihFcnJvclN0cmluZyosIGNvbnN0IGJvb2wqIHJlcG9ydEdy
YXBoLCBSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6TWVtb3J5QmxvY2s+JiBwcm9jZXNzTWVt
b3J5KTsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKikgY29uc3Q7CiAKLSAgICB2b2lkIGdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb25Bc01h
cChib29sIHJlcG9ydEdyYXBoLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZ3JhcGgsIEhhc2hN
YXA8U3RyaW5nLCBzaXplX3Q+KiBtZW1vcnlJbmZvKTsKKyAgICB2b2lkIGdldFByb2Nlc3NNZW1v
cnlEaXN0cmlidXRpb25NYXAoSGFzaE1hcDxTdHJpbmcsIHNpemVfdD4qIG1lbW9yeUluZm8pOwor
CisgICAgdmlydHVhbCB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JN
ZW1vcnlBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yQ2xpZW50KiwgSW5zcGVj
dG9yQ29tcG9zaXRlU3RhdGUqLCBQYWdlKik7CiAKKyAgICB2b2lkIGdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb25JbXBsKGJvb2wgcmVwb3J0R3JhcGgsIEhhc2hNYXA8U3RyaW5nLCBzaXplX3Q+
KiBtZW1vcnlJbmZvKTsKKwogICAgIEluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7
CiAgICAgUGFnZSogbV9wYWdlOworICAgIEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIG1fZnJv
bnRlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBTbmFwc2hvdC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCmluZGV4
IDVhN2Q2NjM1OWQ5OGY3MzdmNTI4MzNiZGFjYWJmNjhmY2JkZmYxNTkuLjQyZGY5YmYwYTI4Nzg2
YTc0YmY3OWE2YmRiZTBlNWJhNGIyMjI1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcFNuYXBzaG90LmpzCkBAIC0zNSw2ICsz
NSw3IEBACiBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90ID0gZnVuY3Rpb24ocHJvZmls
ZSkKIHsKICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LmNhbGwodGhpcywgcHJvZmlsZSk7
CisgICAgdGhpcy5fbm9kZU9iamVjdFR5cGUgPSAzOwogfQogCiBXZWJJbnNwZWN0b3IuTmF0aXZl
SGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKQEAgLTg4LDE5ICs4OSwzMCBAQCBXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAKICAgICBjbGFzc0luZGV4
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hv
dDsKLSAgICAgICAgcmV0dXJuIHNuYXBzaG90Ll9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIHNuYXBz
aG90Ll9ub2RlTmFtZU9mZnNldF07CisgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fbm9k
ZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZVR5cGVPZmZzZXRdOwogICAg
IH0sCiAKICAgICBpZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9k
ZUluZGV4OworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX25vZGVzW3RoaXMubm9kZUlu
ZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJZE9mZnNldF07CiAgICAgfSwKIAogICAgIG5hbWU6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBuYW1lID0gdGhpcy5fc25hcHNob3QuX3N0
cmluZ3NbdGhpcy5fc25hcHNob3QuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgMl1dOwotICAgICAg
ICByZXR1cm4gdGhpcy5jbGFzc05hbWUoKSArICI6ICIgKyBuYW1lOworICAgICAgICByZXR1cm4g
dGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fc25hcHNob3QuX25vZGVzW3RoaXMubm9kZUlu
ZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XV07OworICAgIH0sCisKKyAgICBz
ZXJpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICBpZDogdGhpcy5pZCgpLAorICAgICAgICAgICAgbmFtZTogdGhpcy5jbGFzc05hbWUoKSwKKyAg
ICAgICAgICAgIGRpc3RhbmNlOiB0aGlzLmRpc3RhbmNlKCksCisgICAgICAgICAgICBub2RlSW5k
ZXg6IHRoaXMubm9kZUluZGV4LAorICAgICAgICAgICAgcmV0YWluZWRTaXplOiB0aGlzLnJldGFp
bmVkU2l6ZSgpLAorICAgICAgICAgICAgc2VsZlNpemU6IHRoaXMuc2VsZlNpemUoKSwKKyAgICAg
ICAgICAgIHR5cGU6IHRoaXMuX3NuYXBzaG90Ll9ub2RlT2JqZWN0VHlwZQorICAgICAgIH07CiAg
ICAgfSwKIAogICAgIGlzSGlkZGVuOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3
LmpzCmluZGV4IDFmYjgyMzZhOWM4MzdlN2ZjZTc3YjNkZWMzNzA1ZmRiNWY2MDMxMTQuLmY1MmI2
OTUzNmQ1NDZmZGQ0ZWYzZDJiMDJmZmIzNmQxNTZlODA4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNo
b3RWaWV3LmpzCkBAIC0yNjQsMTggKzI2NCwxMDIgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBz
aG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICArK3RoaXMuX25leHRQcm9maWxl
VWlkOwogICAgICAgICBwcm9maWxlSGVhZGVyLmlzVGVtcG9yYXJ5ID0gdHJ1ZTsKICAgICAgICAg
cHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOworICAgICAgICBw
cm9maWxlSGVhZGVyLmxvYWQoZnVuY3Rpb24oKSB7IH0pOworCiAgICAgICAgIC8qKgogICAgICAg
ICAgKiBAcGFyYW0gez9zdHJpbmd9IGVycm9yCiAgICAgICAgICAqIEBwYXJhbSB7P01lbW9yeUFn
ZW50Lk1lbW9yeUJsb2NrfSBtZW1vcnlCbG9jawotICAgICAgICAgKiBAcGFyYW0gez9PYmplY3Q9
fSBncmFwaAogICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGlkUmVjZWl2ZU1lbW9yeVNu
YXBzaG90KGVycm9yLCBtZW1vcnlCbG9jaywgZ3JhcGgpCisgICAgICAgIGZ1bmN0aW9uIGRpZFJl
Y2VpdmVNZW1vcnlTbmFwc2hvdChlcnJvciwgbWVtb3J5QmxvY2spCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHByb2ZpbGVIZWFkZXIuX2dyYXBoID0gZ3JhcGg7Ci0gICAgICAgICAgICBwcm9maWxl
SGVhZGVyLmlzVGVtcG9yYXJ5ID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9maWxlSGVhZGVyLnNp
ZGViYXJFbGVtZW50LnN1YnRpdGxlID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcoLyoqIEB0eXBle251
bWJlcn0gKi8obWVtb3J5QmxvY2suc2l6ZSkpOworICAgICAgICAgICAgdGhpcy5pc1RlbXBvcmFy
eSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IE51
bWJlci5ieXRlc1RvU3RyaW5nKC8qKiBAdHlwZXtudW1iZXJ9ICovKG1lbW9yeUJsb2NrLnNpemUp
KTsKKworICAgICAgICAgICAgdmFyIG1ldGEgPSB7CisgICAgICAgICAgICAgICJub2RlX2ZpZWxk
cyI6IFsKKyAgICAgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAgICAgIm5hbWUiLAor
ICAgICAgICAgICAgICAgICJpZCIsCisgICAgICAgICAgICAgICAgInNlbGZfc2l6ZSIsCisgICAg
ICAgICAgICAgICAgImVkZ2VfY291bnQiCisgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
ICJub2RlX3R5cGVzIjogWworICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICJo
aWRkZW4iLAorICAgICAgICAgICAgICAgICAgImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICJz
dHJpbmciLAorICAgICAgICAgICAgICAgICAgIm9iamVjdCIsCisgICAgICAgICAgICAgICAgICAi
Y29kZSIsCisgICAgICAgICAgICAgICAgICAiY2xvc3VyZSIsCisgICAgICAgICAgICAgICAgICAi
cmVnZXhwIiwKKyAgICAgICAgICAgICAgICAgICJudW1iZXIiLAorICAgICAgICAgICAgICAgICAg
Im5hdGl2ZSIsCisgICAgICAgICAgICAgICAgICAic3ludGhldGljIgorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgInN0cmluZyIsCisgICAgICAgICAgICAgICAgIm51bWJlciIs
CisgICAgICAgICAgICAgICAgIm51bWJlciIsCisgICAgICAgICAgICAgICAgIm51bWJlciIsCisg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICJlZGdlX2ZpZWxkcyI6IFsKKyAgICAgICAg
ICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAgICAgIm5hbWVfb3JfaW5kZXgiLAorICAgICAg
ICAgICAgICAgICJ0b19ub2RlIgorICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAiZWRn
ZV90eXBlcyI6IFsKKyAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAiY29udGV4
dCIsCisgICAgICAgICAgICAgICAgICAiZWxlbWVudCIsCisgICAgICAgICAgICAgICAgICAicHJv
cGVydHkiLAorICAgICAgICAgICAgICAgICAgImludGVybmFsIiwKKyAgICAgICAgICAgICAgICAg
ICJoaWRkZW4iLAorICAgICAgICAgICAgICAgICAgInNob3J0Y3V0IiwKKyAgICAgICAgICAgICAg
ICAgICJ3ZWFrIgorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgInN0cmluZ19v
cl9udW1iZXIiLAorICAgICAgICAgICAgICAgICJub2RlIgorICAgICAgICAgICAgICBdCisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSBtZXRhLmVkZ2Vf
ZmllbGRzLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IG1ldGEubm9k
ZV9maWVsZHMubGVuZ3RoOworICAgICAgICAgICAgdmFyIG5vZGVJZEZpZWxkT2Zmc2V0ID0gbWV0
YS5ub2RlX2ZpZWxkcy5pbmRleE9mKCJpZCIpOworICAgICAgICAgICAgdmFyIHRvTm9kZUlkRmll
bGRPZmZzZXQgPSBtZXRhLmVkZ2VfZmllbGRzLmluZGV4T2YoInRvX25vZGUiKTsKKworICAgICAg
ICAgICAgdmFyIGJhc2VUb1JlYWxOb2RlSWRNYXAgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fYmFzZVRvUmVhbE5vZGVJZC5sZW5ndGg7IGkgKz0gMikKKyAgICAg
ICAgICAgICAgICBiYXNlVG9SZWFsTm9kZUlkTWFwW3RoaXMuX2Jhc2VUb1JlYWxOb2RlSWRbaV1d
ID0gdGhpcy5fYmFzZVRvUmVhbE5vZGVJZFtpICsgMV07CisKKyAgICAgICAgICAgIHZhciBub2Rl
SWQyTm9kZUluZGV4ID0ge307CisgICAgICAgICAgICBmb3IgKHZhciBpID0gbm9kZUlkRmllbGRP
ZmZzZXQ7IGkgPCB0aGlzLl9ub2Rlcy5sZW5ndGg7IGkgKz0gbm9kZUZpZWxkQ291bnQpCisgICAg
ICAgICAgICBub2RlSWQyTm9kZUluZGV4W3RoaXMuX25vZGVzW2ldXSA9IGkgLSBub2RlSWRGaWVs
ZE9mZnNldDsKKworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIG5vZGVJZCB0byBub2RlSW5kZXgu
CisgICAgICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9lZGdlczsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSB0b05vZGVJZEZpZWxkT2Zmc2V0OyBpIDwgZWRnZXMubGVuZ3RoOyBpICs9IGVkZ2VG
aWVsZENvdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2VzW2ldIGluIGJhc2VUb1JlYWxO
b2RlSWRNYXApCisgICAgICAgICAgICAgICAgICAgIGVkZ2VzW2ldID0gYmFzZVRvUmVhbE5vZGVJ
ZE1hcFtlZGdlc1tpXV07CisgICAgICAgICAgICAgICAgZWRnZXNbaV0gPSBub2RlSWQyTm9kZUlu
ZGV4W2VkZ2VzW2ldXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGhlYXBTbmFw
c2hvdCA9IHsKKyAgICAgICAgICAgICAgICAic25hcHNob3QiOiB7CisgICAgICAgICAgICAgICAg
ICAgICJtZXRhIjogbWV0YSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZV9jb3VudDogdGhpcy5f
bm9kZXMubGVuZ3RoIC8gbm9kZUZpZWxkQ291bnQsCisgICAgICAgICAgICAgICAgICAgIGVkZ2Vf
Y291bnQ6IHRoaXMuX2VkZ2VzLmxlbmd0aCAvIGVkZ2VGaWVsZENvdW50LAorICAgICAgICAgICAg
ICAgICAgICByb290X2luZGV4OiB0aGlzLl9ub2Rlcy5sZW5ndGggLSBub2RlRmllbGRDb3VudAor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbm9kZXM6IHRoaXMuX25vZGVzLAor
ICAgICAgICAgICAgICAgIGVkZ2VzOiB0aGlzLl9lZGdlcywKKyAgICAgICAgICAgICAgICBzdHJp
bmdzOiB0aGlzLl9zdHJpbmdzCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB2YXIgY2h1
bmsgPSBKU09OLnN0cmluZ2lmeShoZWFwU25hcHNob3QpOworICAgICAgICAgICAgdGhpcy50cmFu
c2ZlckNodW5rKGNodW5rKTsKKyAgICAgICAgICAgIHRoaXMuZmluaXNoSGVhcFNuYXBzaG90KCk7
CiAgICAgICAgIH0KLSAgICAgICAgTWVtb3J5QWdlbnQuZ2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1
dGlvbih0cnVlLCBkaWRSZWNlaXZlTWVtb3J5U25hcHNob3QuYmluZCh0aGlzKSk7CisKKyAgICAg
ICAgTWVtb3J5QWdlbnQuZ2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbih0cnVlLCBkaWRSZWNl
aXZlTWVtb3J5U25hcHNob3QuYmluZChwcm9maWxlSGVhZGVyKSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9LAogCkBAIC0zMjQsNiArNDA4LDEwIEBAIFdlYkluc3BlY3Rvci5OYXRpdmVT
bmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIFdlYkluc3BlY3Rvci5OYXRpdmVTbmFw
c2hvdFByb2ZpbGVIZWFkZXIgPSBmdW5jdGlvbih0eXBlLCB0aXRsZSwgdWlkKQogewogICAgIFdl
Ykluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5jYWxsKHRoaXMsIHR5cGUsIHRpdGxlLCB1aWQs
IDApOworICAgIHRoaXMuX3N0cmluZ3MgPSBbXTsKKyAgICB0aGlzLl9ub2RlcyA9IFtdOworICAg
IHRoaXMuX2VkZ2VzID0gW107CisgICAgdGhpcy5fYmFzZVRvUmVhbE5vZGVJZCA9IFtdOwogfQog
CiBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsK
QEAgLTMzOCw2OSArNDI2LDYgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhl
YWRlci5wcm90b3R5cGUgPSB7CiAKICAgICBzdGFydFNuYXBzaG90VHJhbnNmZXI6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHZhciBtZXRhID0gewotICAgICAgICAgICJub2RlX2ZpZWxkcyI6
IFsKLSAgICAgICAgICAgICJ0eXBlIiwKLSAgICAgICAgICAgICJuYW1lIiwKLSAgICAgICAgICAg
ICJpZCIsCi0gICAgICAgICAgICAic2VsZl9zaXplIiwKLSAgICAgICAgICAgICJlZGdlX2NvdW50
IgotICAgICAgICAgIF0sCi0gICAgICAgICAgIm5vZGVfdHlwZXMiOiBbCi0gICAgICAgICAgICBb
Ci0gICAgICAgICAgICAgICJoaWRkZW4iLAotICAgICAgICAgICAgICAiYXJyYXkiLAotICAgICAg
ICAgICAgICAic3RyaW5nIiwKLSAgICAgICAgICAgICAgIm9iamVjdCIsCi0gICAgICAgICAgICAg
ICJjb2RlIiwKLSAgICAgICAgICAgICAgImNsb3N1cmUiLAotICAgICAgICAgICAgICAicmVnZXhw
IiwKLSAgICAgICAgICAgICAgIm51bWJlciIsCi0gICAgICAgICAgICAgICJuYXRpdmUiLAotICAg
ICAgICAgICAgICAic3ludGhldGljIgotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJzdHJp
bmciLAotICAgICAgICAgICAgIm51bWJlciIsCi0gICAgICAgICAgICAibnVtYmVyIiwKLSAgICAg
ICAgICAgICJudW1iZXIiLAotICAgICAgICAgICAgIm51bWJlciIsCi0gICAgICAgICAgICAibnVt
YmVyIgotICAgICAgICAgIF0sCi0gICAgICAgICAgImVkZ2VfZmllbGRzIjogWwotICAgICAgICAg
ICAgInR5cGUiLAotICAgICAgICAgICAgIm5hbWVfb3JfaW5kZXgiLAotICAgICAgICAgICAgInRv
X25vZGUiCi0gICAgICAgICAgXSwKLSAgICAgICAgICAiZWRnZV90eXBlcyI6IFsKLSAgICAgICAg
ICAgIFsKLSAgICAgICAgICAgICAgImNvbnRleHQiLAotICAgICAgICAgICAgICAiZWxlbWVudCIs
Ci0gICAgICAgICAgICAgICJwcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICJpbnRlcm5hbCIsCi0g
ICAgICAgICAgICAgICJoaWRkZW4iLAotICAgICAgICAgICAgICAic2hvcnRjdXQiLAotICAgICAg
ICAgICAgICAid2VhayIKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAic3RyaW5nX29yX251
bWJlciIsCi0gICAgICAgICAgICAibm9kZSIKLSAgICAgICAgICBdCi0gICAgICAgIH07Ci0gICAg
ICAgIHZhciBncmFwaCA9IHRoaXMuX2dyYXBoOwotICAgICAgICB2YXIgaGVhcFNuYXBzaG90ID0g
ewotICAgICAgICAgICAgInNuYXBzaG90IjogewotICAgICAgICAgICAgICAgICJtZXRhIjogbWV0
YSwKLSAgICAgICAgICAgICAgICBub2RlX2NvdW50OiBncmFwaC5ub2Rlcy5sZW5ndGggLyA1LAot
ICAgICAgICAgICAgICAgIGVkZ2VfY291bnQ6IGdyYXBoLmVkZ2VzLmxlbmd0aCAvIDMsCi0gICAg
ICAgICAgICAgICAgcm9vdF9pbmRleDogZ3JhcGgubm9kZXMubGVuZ3RoIC0gNQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIG5vZGVzOiBncmFwaC5ub2RlcywKLSAgICAgICAgICAgIGVkZ2Vz
OiBncmFwaC5lZGdlcywKLSAgICAgICAgICAgIHN0cmluZ3M6IGdyYXBoLnN0cmluZ3MKLSAgICAg
ICAgfTsKLQotICAgICAgICB2YXIgY2h1bmsgPSBKU09OLnN0cmluZ2lmeShoZWFwU25hcHNob3Qp
OwotICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoY2h1bmspOwotICAgICAgICB0aGlzLmZpbmlz
aEhlYXBTbmFwc2hvdCgpOwogICAgIH0sCiAKICAgICBzbmFwc2hvdENvbnN0cnVjdG9yTmFtZTog
ZnVuY3Rpb24oKQpAQCAtNDA4LDYgKzQzMywxNCBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNo
b3RQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuICJOYXRpdmVIZWFw
U25hcHNob3QiOwogICAgIH0sCiAKKyAgICBhZGROYXRpdmVTbmFwc2hvdENodW5rOiBmdW5jdGlv
bihjaHVuaykKKyAgICB7CisgICAgICAgIHRoaXMuX3N0cmluZ3MgPSB0aGlzLl9zdHJpbmdzLmNv
bmNhdChjaHVuay5zdHJpbmdzKTsKKyAgICAgICAgdGhpcy5fbm9kZXMgPSB0aGlzLl9ub2Rlcy5j
b25jYXQoY2h1bmsubm9kZXMpOworICAgICAgICB0aGlzLl9lZGdlcyA9IHRoaXMuX2VkZ2VzLmNv
bmNhdChjaHVuay5lZGdlcyk7CisgICAgICAgIHRoaXMuX2Jhc2VUb1JlYWxOb2RlSWQgPSB0aGlz
Ll9iYXNlVG9SZWFsTm9kZUlkLmNvbmNhdChjaHVuay5iYXNlVG9SZWFsTm9kZUlkKTsKKyAgICB9
LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90
eXBlCiB9CiAKQEAgLTQ2Nyw3ICs1MDAsNyBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5UHJv
ZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICAgKiBAcGFyYW0gez9NZW1vcnlBZ2VudC5N
ZW1vcnlCbG9ja30gbWVtb3J5QmxvY2sKICAgICAgICAgICogQHBhcmFtIHs/T2JqZWN0PX0gZ3Jh
cGgKICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZFJlY2VpdmVNZW1vcnlTbmFwc2hv
dChlcnJvciwgbWVtb3J5QmxvY2ssIGdyYXBoKQorICAgICAgICBmdW5jdGlvbiBkaWRSZWNlaXZl
TWVtb3J5U25hcHNob3QoZXJyb3IsIG1lbW9yeUJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAobWVtb3J5QmxvY2suc2l6ZSAmJiBtZW1vcnlCbG9jay5jaGlsZHJlbikgewogICAgICAg
ICAgICAgICAgIHZhciBrbm93blNpemUgPSAwOwpAQCAtNjQ1LDcgKzY3OCw3IEBAIFdlYkluc3Bl
Y3Rvci5OYXRpdmVNZW1vcnlCYXJDaGFydC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAqIEBwYXJh
bSB7P01lbW9yeUFnZW50Lk1lbW9yeUJsb2NrfSBtZW1vcnlCbG9jawogICAgICAgICAgKiBAcGFy
YW0gez9PYmplY3Q9fSBncmFwaAogICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGlkUmVj
ZWl2ZU1lbW9yeVNuYXBzaG90KGVycm9yLCBtZW1vcnlCbG9jaywgZ3JhcGgpCisgICAgICAgIGZ1
bmN0aW9uIGRpZFJlY2VpdmVNZW1vcnlTbmFwc2hvdChlcnJvciwgbWVtb3J5QmxvY2spCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChtZW1vcnlCbG9jay5zaXplICYmIG1lbW9yeUJsb2NrLmNo
aWxkcmVuKSB7CiAgICAgICAgICAgICAgICAgdmFyIGtub3duU2l6ZSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXgg
MDg0NDQyYzk1NGVmOWViZDNiMGFmYzgxMjNlYTA2NmE3MjQyOTZhZS4uZjcxYTJkMjRlMDhlNWZh
ODc3ZDAzNjAzZjg5MThiMWIyNTAxMmE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtMzA2LDYgKzMwNiw3IEBAIFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQogICAgICAgICB0aGlzLl9yZWdp
c3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUoKSk7CiAK
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUHJvZmlsZXJEaXNwYXRjaGVyKG5ldyBXZWJJ
bnNwZWN0b3IuUHJvZmlsZXJEaXNwYXRjaGVyKHRoaXMpKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLk1lbW9yeURpc3BhdGNo
ZXIodGhpcykpOwogCiAgICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCgpOwogICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2hhbmRs
ZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7CkBAIC0xMjI2LDYgKzEyMjcsMzIg
QEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogCiAvKioKICAqIEBj
b25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge01lbW9yeUFnZW50LkRpc3BhdGNoZXJ9CisgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCisgKi8KK1dl
Ykluc3BlY3Rvci5NZW1vcnlEaXNwYXRjaGVyID0gZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKK3sK
KyAgICB0aGlzLl9wcm9maWxlc1BhbmVsID0gcHJvZmlsZXNQYW5lbDsKK30KKworV2ViSW5zcGVj
dG9yLk1lbW9yeURpc3BhdGNoZXIucHJvdG90eXBlID0geworCisgICAgLyoqCisgICAgICogQG92
ZXJyaWRlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBjaHVuaworICAgICAqLworICAgIGFkZE5hdGl2ZVNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKGNo
dW5rKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc1BhbmVsLmZp
bmRUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVUeXBl
LlR5cGVJZCk7CisgICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcHJvZmlsZS5hZGROYXRpdmVTbmFwc2hvdENodW5rKGNodW5rKTsKKyAgICB9Cit9CisK
Ky8qKgorICogQGNvbnN0cnVjdG9yCiAgKiBAaW1wbGVtZW50cyB7UHJvZmlsZXJBZ2VudC5EaXNw
YXRjaGVyfQogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQ
YW5lbAogICovCg==
</data>
<flag name="review"
          id="206457"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>