<?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>150664</bug_id>
          
          <creation_ts>2015-10-28 23:56:08 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/dom.</short_desc>
          <delta_ts>2015-10-30 10:05:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1137473</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-28 23:56:08 -0700</bug_when>
    <thetext>Refactor the for-loops using the ranged-for loops and auto keyword in WebCore/dom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137476</commentid>
    <comment_count>1</comment_count>
      <attachid>264306</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-29 01:28:30 -0700</bug_when>
    <thetext>Created attachment 264306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137485</commentid>
    <comment_count>2</comment_count>
      <attachid>264307</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-29 02:39:25 -0700</bug_when>
    <thetext>Created attachment 264307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137569</commentid>
    <comment_count>3</comment_count>
      <attachid>264307</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-29 11:07:14 -0700</bug_when>
    <thetext>Comment on attachment 264307
Patch

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

&gt; Source/WebCore/dom/ContainerNode.cpp:285
&gt; +        treeScope().adoptIfNeeded(&amp;child.get());

I believe the preferred style is child.ptr() rather than &amp;child.get().

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:619
&gt; +    for (auto&amp; marker : m_markers) {

Not good to use &quot;marker&quot; as the name both for this outer loop and the inner loop.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:623
&gt; -        MarkerList* list = i-&gt;value.get();
&gt; +        MarkerList* list = marker.value.get();

Not sure why we need this local variable.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:800
&gt; +        for (auto&amp; documentMarker : *marker.value.get())

We don’t need .get() here.

&gt; Source/WebCore/dom/EventListenerMap.cpp:71
&gt; +            for (auto&amp; eventListener : *entry.second.get()) {

No need for .get() here.

&gt; Source/WebCore/dom/SelectorQuery.cpp:448
&gt; +                SelectorCompiler::QuerySelectorSimpleSelectorChecker selectorChecker = SelectorCompiler::querySelectorSimpleSelectorCheckerFunction(compiledSelectorChecker, selector.compilationStatus);

We should use auto here; this line is so long.

&gt; Source/WebCore/dom/SelectorQuery.cpp:452
&gt; +                SelectorCompiler::QuerySelectorSelectorCheckerWithCheckingContext selectorChecker = SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext(compiledSelectorChecker, selector.compilationStatus);

We should use auto here; this line is so long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137786</commentid>
    <comment_count>4</comment_count>
      <attachid>264378</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-29 21:35:33 -0700</bug_when>
    <thetext>Created attachment 264378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137791</commentid>
    <comment_count>5</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-29 21:42:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264307 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264307&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:285
&gt; &gt; +        treeScope().adoptIfNeeded(&amp;child.get());
&gt; 
&gt; I believe the preferred style is child.ptr() rather than &amp;child.get().
Done.
&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:619
&gt; &gt; +    for (auto&amp; marker : m_markers) {
&gt; 
&gt; Not good to use &quot;marker&quot; as the name both for this outer loop and the inner
&gt; loop.
Oops,, I changed the &quot;marker&quot; to documentMarker in inner loop.
&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:623
&gt; &gt; -        MarkerList* list = i-&gt;value.get();
&gt; &gt; +        MarkerList* list = marker.value.get();
&gt; 
&gt; Not sure why we need this local variable.
&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:800
&gt; &gt; +        for (auto&amp; documentMarker : *marker.value.get())
&gt; 
&gt; We don’t need .get() here.
Removed the .get()
&gt; 
&gt; &gt; Source/WebCore/dom/EventListenerMap.cpp:71
&gt; &gt; +            for (auto&amp; eventListener : *entry.second.get()) {
&gt; 
&gt; No need for .get() here.
Ditto.
&gt; 
&gt; &gt; Source/WebCore/dom/SelectorQuery.cpp:448
&gt; &gt; +                SelectorCompiler::QuerySelectorSimpleSelectorChecker selectorChecker = SelectorCompiler::querySelectorSimpleSelectorCheckerFunction(compiledSelectorChecker, selector.compilationStatus);
&gt; 
&gt; We should use auto here; this line is so long.
Done.
&gt; 
&gt; &gt; Source/WebCore/dom/SelectorQuery.cpp:452
&gt; &gt; +                SelectorCompiler::QuerySelectorSelectorCheckerWithCheckingContext selectorChecker = SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext(compiledSelectorChecker, selector.compilationStatus);
&gt; 
&gt; We should use auto here; this line is so long.
Ditto.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137877</commentid>
    <comment_count>6</comment_count>
      <attachid>264378</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-30 10:04:57 -0700</bug_when>
    <thetext>Comment on attachment 264378
Patch

Clearing flags on attachment: 264378

Committed r191792: &lt;http://trac.webkit.org/changeset/191792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137878</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-30 10:05:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264306</attachid>
            <date>2015-10-29 01:28:30 -0700</date>
            <delta_ts>2015-10-29 02:39:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150664-20151029172737.patch</filename>
            <type>text/plain</type>
            <size>44659</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTcyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDE1LTEwLTI5ICBIdW5zZW9w
IEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJuIGZv
ci1sb29wcyBpbiBXZWJDb3JlL2RvbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDY2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9y
IGNoYW5nZS4KKworICAgICAgICAqIGRvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzQ29u
dGFpbnMpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucyk6
CisgICAgICAgICogZG9tL0NsaWVudFJlY3RMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aWVudFJlY3RMaXN0OjpDbGllbnRSZWN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGllbnRS
ZWN0TGlzdDo6fkNsaWVudFJlY3RMaXN0KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUpOgorICAg
ICAgICAqIGRvbS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vRE9NU3Ry
aW5nTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0Ojpjb250YWlucyk6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZEZyYW1lU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0
aXZlU3RhdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50
TWFya2Vycyk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJz
KToKKyAgICAgICAgKiBkb20vRWxlbWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VW5p
cXVlRWxlbWVudERhdGE6OmZpbmRBdHRyaWJ1dGVCeU5hbWUpOgorICAgICAgICAqIGRvbS9FdmVu
dERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjp1cGRhdGVUb3Vj
aExpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmNvbnRhaW5zQ2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1h
cDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJz
Tm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExp
c3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcik6CisgICAgICAgICogZG9tL0V2
ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6Om5vdGlmeU9i
c2VydmVyc0ludGVybmFsKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25P
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucyk6CisgICAg
ICAgICogZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRGbG93cyk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEZs
b3dDb2xsZWN0aW9uOjpjcmVhdGVDU1NPTVNuYXBzaG90KToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVX
aWxsRGV0YWNoKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnByb2Nlc3NOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29s
dXRlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9TY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKiBkb20v
U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0Ojpt
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVGYXN0
UGF0aEZvcklkU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6
ZXhlY3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGRv
bS9UcmVlU2NvcGVBZG9wdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0
ZXI6Om1vdmVUcmVlVG9OZXdTY29wZSk6CisKIDIwMTUtMTAtMjggIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IFN1cHBvcnQgSURCRGF0YWJh
c2UudHJhbnNhY3Rpb24oKSAoYW5kIHRyYW5zYWN0aW9uIHNjaGVkdWxpbmcgaW4gZ2VuZXJhbCku
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDE5MTY1MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxOCw4ICsyMTgsOCBAQCBBdXRob3JTdHlsZVNoZWV0czo6U3R5bGVS
ZXNvbHZlclVwZGF0ZVR5CiAgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0
aGF0IEBpbXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0
byB0cmlnZ2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgogICAgIGJv
b2wgaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBuZXdT
dHlsZXNoZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChuZXdT
dHlsZXNoZWV0c1tpXS0+aXNMb2FkaW5nKCkpCisgICAgZm9yIChhdXRvJiBzaGVldCA6IG5ld1N0
eWxlc2hlZXRzKSB7CisgICAgICAgIGlmIChzaGVldC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAg
ICBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IHRydWU7CiAgICAgfQogICAgIGlmIChtX2hh
ZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkg
ewpAQCAtMjc3LDE1ICsyNzcsMTUgQEAgQXV0aG9yU3R5bGVTaGVldHM6OlN0eWxlUmVzb2x2ZXJV
cGRhdGVUeQogCiBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0
cyhWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigq
c2hlZXRzW2ldKSkKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAgIGlm
ICghaXM8Q1NTU3R5bGVTaGVldD4oKnNoZWV0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBDU1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVl
dHNbaV0pOwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKKyAgICAgICAgQ1NTU3R5bGVT
aGVldCYgc3R5bGVTaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldCk7CisgICAg
ICAgIGlmIChzdHlsZVNoZWV0LmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKCFzaGVldC5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0Lmxlbmd0
aCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc3R5bGVTaGVldCk7CiAgICAgfQogfQogCkBAIC0z
ODcsOCArMzg3LDggQEAgYm9vbCBBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldAog
ewogICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
KSB7CiAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JG
YXN0TG9va3VwLT5hZGQobV9hY3RpdmVTdHlsZVNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIGZv
ciAoYXV0byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpCisgICAgICAg
ICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChh
Y3RpdmVTdHlsZVNoZWV0LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFj
dGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkocmV2aXNpb24g
MTkxNjUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsMTAgKzE1MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6
cmVtb3ZlKEhUTUxJbnB1dEUKIAogdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjp1cGRhdGVWYWxpZGl0
eUZvckFsbEJ1dHRvbnMoKQogewotICAgIHR5cGVkZWYgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50
Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IG1fbWVtYmVy
cy5lbmQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9tZW1iZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBidXR0b24gPSAqaXQ7Cisg
ICAgZm9yIChhdXRvJiBidXR0b24gOiBtX21lbWJlcnMpIHsKICAgICAgICAgQVNTRVJUKGJ1dHRv
bi0+aXNSYWRpb0J1dHRvbigpKTsKICAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkocmV2aXNpb24g
MTkxNjUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBDbGllbnRSZWN0TGlzdDo6Q2xpZW50UmVjdExpc3Qo
KQogQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcykKIHsKICAgICBtX2xpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShxdWFkcy5zaXpl
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fbGlzdC5hcHBlbmQoQ2xpZW50UmVjdDo6Y3JlYXRlKHF1YWRzW2ldLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpKTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgbV9s
aXN0LnVuY2hlY2tlZEFwcGVuZChDbGllbnRSZWN0OjpjcmVhdGUocXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKSk7CiB9CiAKIENsaWVudFJlY3RMaXN0Ojp+Q2xpZW50UmVjdExpc3QoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTkxNjUyKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzIsMTkgKzI3MiwxNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShSZWY8Tm9k
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVu
dCgpLCAqdGhpcyk7CiAKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKCp0aGlz
KTsKLSAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVuZCA9IHRhcmdldHMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQoKTsK
LQorICAgIGZvciAoYXV0byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAgICAgIC8vIER1ZSB0byBh
cmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50
IGl0J3MKICAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hp
bGQgb2YgInRoaXMiLgogICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUgdGhhdCAiY2hpbGQi
IGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KICAgICAgICAgLy8gSW4gZWl0aGVyIG9mIHRo
b3NlIGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCiAgICAgICAgIGlmIChuZXh0LT5wYXJlbnROb2Rl
KCkgIT0gdGhpcykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY2hpbGQucGFyZW50
Tm9kZSgpKQorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoJmNoaWxkKTsKKyAgICAg
ICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZCgmY2hpbGQuZ2V0KCkpOwogCiAgICAgICAgIGlu
c2VydEJlZm9yZUNvbW1vbihuZXh0LCBjaGlsZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERPTU5hbWVkRmxvd0Nv
bGxlY3Rpb246OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24oY29uc3QgVmVjdG9yPFdlYktpdE5hbWVk
Rmxvdyo+JiBuYW1lZEZsb3dzKQogewotICAgIGZvciAoVmVjdG9yPFdlYktpdE5hbWVkRmxvdyo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5hbWVkRmxvd3MuYmVnaW4oKTsgaXQgIT0gbmFtZWRGbG93
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9uYW1lZEZsb3dzLmFkZCgqaXQpOworICAgIGZvciAo
YXV0byYgZmxvdyA6IG5hbWVkRmxvd3MpCisgICAgICAgIG1fbmFtZWRGbG93cy5hZGQoZmxvdyk7
CiB9CiAKIHVuc2lnbmVkIGxvbmcgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bGVuZ3RoKCkgY29u
c3QKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXROYW1lZEZsb3c+IERPTU5hbWVk
RmxvdwogewogICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX25h
bWVkRmxvd3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgRE9NTmFtZWRG
bG93U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZWRGbG93cy5iZWdpbigpOworICAgIGF1
dG8gaXQgPSBtX25hbWVkRmxvd3MuYmVnaW4oKTsKICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9
IDA7IGkgPCBpbmRleDsgKytpKQogICAgICAgICArK2l0OwogICAgIHJldHVybiAqaXQ7CkBAIC01
NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0TmFtZWRGbG93PiBET01OYW1lZEZsb3cKIAog
UmVmUHRyPFdlYktpdE5hbWVkRmxvdz4gRE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBET01OYW1lZEZsb3dTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lZEZsb3dzLmZpbmQ8U3RyaW5nLCBET01OYW1lZEZs
b3dIYXNoVHJhbnNsYXRvcj4obmFtZSk7CisgICAgYXV0byBpdCA9IG1fbmFtZWRGbG93cy5maW5k
PFN0cmluZywgRE9NTmFtZWRGbG93SGFzaFRyYW5zbGF0b3I+KG5hbWUpOwogICAgIGlmIChpdCAh
PSBtX25hbWVkRmxvd3MuZW5kKCkpCiAgICAgICAgIHJldHVybiAqaXQ7CiAgICAgcmV0dXJuIG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuY3BwCShyZXZpc2lvbiAx
OTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDkgKzQwLDggQEAgYm9vbCBET01TdHJpbmdMaXN0Ojpjb250YWlucyhjb25z
dCBTdHJpbgogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIGFsbCBjb25zdW1lcnMgb2YgRE9NU3Ry
aW5nTGlzdCBzdG9yZSBmYWlybHkgc21hbGwgbGlzdHMgYW5kIHRodXMgYW4gTyhuKQogICAgIC8v
ICAgICAgICBhbGdvcml0aG0gaXMgT0suICBCdXQgdGhpcyBtYXkgbmVlZCB0byBiZSBvcHRpbWl6
ZWQgaWYgbGFyZ2VyIGFtb3VudHMgb2YgZGF0YSBhcmUKICAgICAvLyAgICAgICAgc3RvcmVkIGlu
IG1fc3RyaW5ncy4KLSAgICBzaXplX3QgY291bnQgPSBtX3N0cmluZ3Muc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAobV9zdHJpbmdz
W2ldID09IHN0cmluZykKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9zdHJpbmdzKSB7CisgICAg
ICAgIGlmICh2YWx1ZSA9PSBzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAxOTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTcsOCArNTU3LDggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwg
Y29uc3QgVQogICAgIGluaXRTZWN1cml0eUNvbnRleHQoKTsKICAgICBpbml0RE5TUHJlZmV0Y2go
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fbm9k
ZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzKTsgKytpKQotICAgICAgICBtX25vZGVMaXN0QW5kQ29s
bGVjdGlvbkNvdW50c1tpXSA9IDA7CisgICAgZm9yIChhdXRvJiBub2RlTGlzdEFuZENvbGxlY3Rp
b25Db3VudCA6IG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzKQorICAgICAgICBub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudCA9IDA7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CkBAIC02NTIsOCArNjUyLDggQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgQVNTRVJUKCFt
X2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKSk7CiAgICAgQVNTRVJUKCFtX2NvbGxl
Y3Rpb25zSW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50
cyk7ICsraSkKLSAgICAgICAgQVNTRVJUKCFtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tp
XSk7CisgICAgZm9yIChhdXRvJiBub2RlTGlzdEFuZENvbGxlY3Rpb25Db3VudCA6IG1fbm9kZUxp
c3RBbmRDb2xsZWN0aW9uQ291bnRzKQorICAgICAgICBBU1NFUlQoIW5vZGVMaXN0QW5kQ29sbGVj
dGlvbkNvdW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYoKQpAQCAtNjMx
MiwxMiArNjMxMiwxMiBAQCB2b2lkIERvY3VtZW50OjphZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xs
CiAgICAgICAgIGludmVyc2VGcmFtZVNjYWxlID0gMSAvIGZyYW1lKCktPmZyYW1lU2NhbGVGYWN0
b3IoKTsKIAogICAgIExheW91dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHF1YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCks
IC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFkcykg
eworICAgICAgICBxdWFkLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29u
dGVudFJlY3QueSgpKTsKICAgICAgICAgaWYgKHpvb20gIT0gMSkKLSAgICAgICAgICAgIHF1YWRz
W2ldLnNjYWxlKDEgLyB6b29tLCAxIC8gem9vbSk7CisgICAgICAgICAgICBxdWFkLnNjYWxlKDEg
LyB6b29tLCAxIC8gem9vbSk7CiAgICAgICAgIGlmIChpbnZlcnNlRnJhbWVTY2FsZSAhPSAxKQot
ICAgICAgICAgICAgcXVhZHNbaV0uc2NhbGUoaW52ZXJzZUZyYW1lU2NhbGUsIGludmVyc2VGcmFt
ZVNjYWxlKTsKKyAgICAgICAgICAgIHF1YWQuc2NhbGUoaW52ZXJzZUZyYW1lU2NhbGUsIGludmVy
c2VGcmFtZVNjYWxlKTsKICAgICB9CiB9CiAKQEAgLTY0NzMsMTkgKzY0NzMsMTggQEAgdm9pZCBE
b2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjbwogICAgICAgICAgICAgZWxlbWVudHNU
b0FkZFRvQ2hhaW4uYXBwZW5kKGVsZW1lbnQpOwogICAgIH0KIAotICAgIHNpemVfdCByZW1vdmVD
b3VudCA9IGVsZW1lbnRzVG9SZW1vdmVGcm9tQ2hhaW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVtb3ZlQ291bnQ7ICsraSkKLSAgICAgICAgZWxlbWVudHNUb1JlbW92ZUZy
b21DaGFpbltpXS0+c2V0SG92ZXJlZChmYWxzZSk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
ZWxlbWVudHNUb1JlbW92ZUZyb21DaGFpbikKKyAgICAgICAgZWxlbWVudC0+c2V0SG92ZXJlZChm
YWxzZSk7CiAKICAgICBib29sIHNhd0NvbW1vbkFuY2VzdG9yID0gZmFsc2U7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBlbGVtZW50c1RvQWRkVG9DaGFpbi5zaXplKCk7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50c1RvQWRkVG9DaGFpbikg
ewogICAgICAgICBpZiAoYWxsb3dBY3RpdmVDaGFuZ2VzKQotICAgICAgICAgICAgZWxlbWVudHNU
b0FkZFRvQ2hhaW5baV0tPnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgaWYgKGFuY2VzdG9yICYm
IGVsZW1lbnRzVG9BZGRUb0NoYWluW2ldID09IGFuY2VzdG9yLT5lbGVtZW50KCkpCisgICAgICAg
ICAgICBlbGVtZW50LT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgICAgIGlmIChhbmNlc3RvciAmJiBl
bGVtZW50ID09IGFuY2VzdG9yLT5lbGVtZW50KCkpCiAgICAgICAgICAgICBzYXdDb21tb25BbmNl
c3RvciA9IHRydWU7CiAgICAgICAgIGlmICghc2F3Q29tbW9uQW5jZXN0b3IpIHsKICAgICAgICAg
ICAgIC8vIEVsZW1lbnRzIGFmdGVyIHRoZSBjb21tb24gaG92ZXIgYW5jZXN0b3IgZG9lcyBub3Qg
Y2hhbmdlIGhvdmVyIHN0YXRlLCBidXQgYXJlIGl0ZXJhdGVkIG92ZXIgYmVjYXVzZSB0aGV5IG1h
eSBjaGFuZ2UgYWN0aXZlIHN0YXRlLgotICAgICAgICAgICAgZWxlbWVudHNUb0FkZFRvQ2hhaW5b
aV0tPnNldEhvdmVyZWQodHJ1ZSk7CisgICAgICAgICAgICBlbGVtZW50LT5zZXRIb3ZlcmVkKHRy
dWUpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTkxNjUyKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MCw5ICszOTAsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1h
cmtlCiAKICAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0
ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9
IGxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxp
c3QtPmF0KGkpOwotCisgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbGlzdCkgewogICAgICAgICAv
LyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCiAgICAgICAgIGlm
IChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IGVuZE9mZnNldCkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTYxLDkgKzU1OSw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXIKIAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4+IG5vZGVzV2l0aE1hcmtlcnM7CiAgICAgY29w
eUtleXNUb1ZlY3RvcihtX21hcmtlcnMsIG5vZGVzV2l0aE1hcmtlcnMpOwotICAgIHVuc2lnbmVk
IHNpemUgPSBub2Rlc1dpdGhNYXJrZXJzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX21hcmtlcnMuZmluZChub2Rlc1dpdGhNYXJrZXJzW2ldKTsKKyAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBub2Rlc1dpdGhNYXJrZXJzKSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtl
cnMuZmluZChub2RlKTsKICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkK
ICAgICAgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMp
OwogICAgIH0KQEAgLTYxOSwxMiArNjE2LDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZXBhaW50TWEKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCiAgICAg
Ly8gb3V0ZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3VtZW50
Ci0gICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcmtlcnMuZW5kKCk7Ci0gICAgZm9y
IChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsr
aSkgewotICAgICAgICBOb2RlKiBub2RlID0gaS0+a2V5LmdldCgpOworICAgIGZvciAoYXV0byYg
bWFya2VyIDogbV9tYXJrZXJzKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtYXJrZXIua2V5Lmdl
dCgpOwogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhl
IGN1cnJlbnQgbm9kZQotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gaS0+dmFsdWUuZ2V0KCk7
CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtYXJrZXIudmFsdWUuZ2V0KCk7CiAgICAgICAg
IGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICpsaXN0KSB7CiAgICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUoKSkpIHsKQEAgLTc5OCwxNSArNzk0LDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpjbGVhckRlc2MKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFy
a2VycygpIGNvbnN0CiB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlZCBub2RlcyBoYXZlIG1hcmtl
cnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKLSAgICBNYXJrZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKLSAgICBmb3IgKE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0
b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRvciAhPSBlbmQ7
ICsrbm9kZUl0ZXJhdG9yKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBub2RlSXRlcmF0b3ItPmtl
eS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1fbWFya2VycykgeworICAgICAgICBO
b2RlKiBub2RlID0gbWFya2VyLmtleS5nZXQoKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl
cCIsIG5vZGUpOwotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlcklu
ZGV4IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwotICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXIudHlwZSgpLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpLCBtYXJrZXIuYWN0aXZlTWF0Y2go
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBkb2N1bWVudE1hcmtlciA6ICptYXJr
ZXIudmFsdWUuZ2V0KCkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRd
KCVkKSIsIGRvY3VtZW50TWFya2VyLnR5cGUoKSwgZG9jdW1lbnRNYXJrZXIuc3RhcnRPZmZzZXQo
KSwgZG9jdW1lbnRNYXJrZXIuZW5kT2Zmc2V0KCksIGRvY3VtZW50TWFya2VyLmFjdGl2ZU1hdGNo
KCkpOwogCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50RGF0YS5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw5ICsxODAsOSBA
QCBib29sIEVsZW1lbnREYXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlCiAKIEF0dHJpYnV0ZSog
VW5pcXVlRWxlbWVudERhdGE6OmZpbmRBdHRyaWJ1dGVCeU5hbWUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IG1fYXR0cmlidXRl
VmVjdG9yLnNpemUoKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXR0cmlidXRl
VmVjdG9yLmF0KGkpLm5hbWUoKS5tYXRjaGVzKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuICZt
X2F0dHJpYnV0ZVZlY3Rvci5hdChpKTsKKyAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IG1fYXR0
cmlidXRlVmVjdG9yKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpLm1hdGNoZXMobmFt
ZSkpCisgICAgICAgICAgICByZXR1cm4gJmF0dHJpYnV0ZTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2
aXNpb24gMTkxNjUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4NCw5ICs0ODQsOCBAQCBib29sIEV2ZW50UGF0aDo6dXBkYXRl
VG91Y2hMaXN0cyhjb25zdCBUCiAgICAgYWRkUmVsYXRlZE5vZGVSZXNvbHZlcnNGb3JUb3VjaExp
c3QodG91Y2hUYXJnZXRSZXNvbHZlcnMsIHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMoKSwgVG91
Y2hFdmVudENvbnRleHQ6OkNoYW5nZWRUb3VjaGVzKTsKIAogICAgIEFTU0VSVCh0b3VjaFRhcmdl
dFJlc29sdmVycy5zaXplKCkgPT0gdG91Y2hOb2RlQ291bnQpOwotICAgIHNpemVfdCBldmVudFBh
dGhTaXplID0gbV9wYXRoLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV2ZW50
UGF0aFNpemU7ICsraSkgewotICAgICAgICBUb3VjaEV2ZW50Q29udGV4dCYgY29udGV4dCA9IHRv
VG91Y2hFdmVudENvbnRleHQoKm1fcGF0aFtpXSk7CisgICAgZm9yIChhdXRvJiBldmVudFBhdGgg
OiBtX3BhdGgpIHsKKyAgICAgICAgVG91Y2hFdmVudENvbnRleHQmIGNvbnRleHQgPSB0b1RvdWNo
RXZlbnRDb250ZXh0KCpldmVudFBhdGgpOwogICAgICAgICBOb2RlJiBub2RlVG9Nb3ZlVG8gPSAq
Y29udGV4dC5ub2RlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHJlc29sdmVySW5kZXggPSAwOyBy
ZXNvbHZlckluZGV4IDwgdG91Y2hOb2RlQ291bnQ7ICsrcmVzb2x2ZXJJbmRleCkgewogICAgICAg
ICAgICAgRXZlbnRSZWxhdGVkTm9kZVJlc29sdmVyJiBjdXJyZW50UmVzb2x2ZXIgPSB0b3VjaFRh
cmdldFJlc29sdmVyc1tyZXNvbHZlckluZGV4XTsKQEAgLTY2Nyw4ICs2NjYsOCBAQCB2b2lkIEV2
ZW50UGF0aDo6c2V0UmVsYXRlZFRhcmdldChOb2RlJiBvCiAKIGJvb2wgRXZlbnRQYXRoOjpoYXNF
dmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGF0aC5zaXplKCk7IGkrKykgewotICAgICAgICBp
ZiAobV9wYXRoW2ldLT5ub2RlKCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCisgICAg
Zm9yIChhdXRvJiBldmVudFBhdGggOiBtX3BhdGgpIHsKKyAgICAgICAgaWYgKGV2ZW50UGF0aC0+
bm9kZSgpLT5oYXNFdmVudExpc3RlbmVycyhldmVudFR5cGUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1h
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAu
Y3BwCShyZXZpc2lvbiAxOTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5l
ck1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgRXZlbnRMaXN0ZW5lck1h
cDo6RXZlbnRMaXN0ZW5lck1hcCgpCiAKIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9lbnRy
aWVzW2ldLmZpcnN0ID09IGV2ZW50VHlwZSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRy
aWVzKSB7CisgICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjYsMTEgKzY2LDEw
IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6Y29udGFpbnMoY29uc3QgQXQKIAogYm9vbCBFdmVu
dExpc3RlbmVyTWFwOjpjb250YWluc0NhcHR1cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBl
KSB7Ci0gICAgICAgICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yKiB2ZWN0b3IgPSBtX2Vu
dHJpZXNbaV0uc2Vjb25kLmdldCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHZlY3Rvci0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAodmVjdG9yLT5h
dChqKS51c2VDYXB0dXJlKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LmZpcnN0ID09IGV2ZW50VHlwZSkgeworICAgICAgICAgICAgZm9yIChh
dXRvJiBldmVudExpc3RlbmVyIDogKmVudHJ5LnNlY29uZC5nZXQoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChldmVudExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MCw4ICs4OSw4IEBAIFZl
Y3RvcjxBdG9taWNTdHJpbmc+IEV2ZW50TGlzdGVuZXJNYXA6OmUKICAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nPiB0eXBlczsKICAgICB0eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZW50cmll
cy5zaXplKCkpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKG1fZW50cmllc1tpXS5maXJz
dCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKKyAgICAgICAgdHlwZXMudW5j
aGVja2VkQXBwZW5kKGVudHJ5LmZpcnN0KTsKIAogICAgIHJldHVybiB0eXBlczsKIH0KQEAgLTEx
MSw5ICsxMTAsOSBAQCBib29sIEV2ZW50TGlzdGVuZXJNYXA6OmFkZChjb25zdCBBdG9taWNTCiB7
CiAgICAgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW50cmllc1tp
XS5maXJzdCA9PSBldmVudFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJUb1Zl
Y3RvcihtX2VudHJpZXNbaV0uc2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Cisg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAgICAgICBpZiAoZW50cnkuZmly
c3QgPT0gZXZlbnRUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGFkZExpc3RlbmVyVG9WZWN0b3Io
ZW50cnkuc2Vjb25kLmdldCgpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCiAgICAg
bV9lbnRyaWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihldmVudFR5cGUsIHN0ZDo6bWFrZV91bmlx
dWU8RXZlbnRMaXN0ZW5lclZlY3Rvcj4oKSkpOwpAQCAtMTUwLDkgKzE0OSw5IEBAIEV2ZW50TGlz
dGVuZXJWZWN0b3IqIEV2ZW50TGlzdGVuZXJNYXA6OmYKIHsKICAgICBhc3NlcnROb0FjdGl2ZUl0
ZXJhdG9ycygpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAobV9lbnRyaWVzW2ldLmZpcnN0ID09IGV2ZW50VHlwZSkK
LSAgICAgICAgICAgIHJldHVybiBtX2VudHJpZXNbaV0uc2Vjb25kLmdldCgpOworICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LmZpcnN0ID09IGV2
ZW50VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeS5zZWNvbmQuZ2V0KCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xODIsMTEgKzE4MSwxMSBAQCB2b2lkIEV2ZW50TGlz
dGVuZXJNYXA6OnJlbW92ZUZpcnN0RXZlbnRMCiAKIHN0YXRpYyB2b2lkIGNvcHlMaXN0ZW5lcnNO
b3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lclZlY3RvciwgRXZlbnRUYXJnZXQqIHRhcmdl
dCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVyVmVjdG9yLT5zaXplKCk7
ICsraSkgeworICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiAqbGlzdGVuZXJWZWN0b3IpIHsKICAg
ICAgICAgLy8gRXZlbnQgbGlzdGVuZXJzIGNyZWF0ZWQgZnJvbSBtYXJrdXAgaGF2ZSBhbHJlYWR5
IGJlZW4gdHJhbnNmZXJlZCB0byB0aGUgc2hhZG93IHRyZWUgZHVyaW5nIGNsb25pbmcuCi0gICAg
ICAgIGlmICgoKmxpc3RlbmVyVmVjdG9yKVtpXS5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJr
dXAoKSkKKyAgICAgICAgaWYgKGxpc3RlbmVyLmxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1
cCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRhcmdldC0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUsICgqbGlzdGVuZXJWZWN0b3IpW2ldLmxpc3RlbmVyLmNvcHlSZWYoKSwg
KCpsaXN0ZW5lclZlY3RvcilbaV0udXNlQ2FwdHVyZSk7CisgICAgICAgIHRhcmdldC0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLmxpc3RlbmVyLmNvcHlSZWYoKSwgbGlzdGVu
ZXIudXNlQ2FwdHVyZSk7CiAgICAgfQogfQogCkBAIC0xOTQsOCArMTkzLDggQEAgdm9pZCBFdmVu
dExpc3RlbmVyTWFwOjpjb3B5RXZlbnRMaXN0ZW5lcgogewogICAgIGFzc2VydE5vQWN0aXZlSXRl
cmF0b3JzKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUo
KTsgKytpKQotICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1Rhcmdl
dChtX2VudHJpZXNbaV0uZmlyc3QsIG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCksIHRhcmdldCk7
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKKyAgICAgICAgY29weUxpc3RlbmVy
c05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoZW50cnkuZmlyc3QsIGVudHJ5LnNlY29uZC5n
ZXQoKSwgdGFyZ2V0KTsKIH0KIAogRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpFdmVudExpc3RlbmVy
SXRlcmF0b3IoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAx
OTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw4ICs5NCw3IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY28KICAgICAvLyB0aGV5IGhhdmUgb25lIGxlc3MgbGlzdGVuZXIgdG8gaW52b2tlLgogICAg
IGlmICghZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEZpcmluZ0V2ZW50SXRlcmF0b3ImIGZpcmluZ0l0ZXJhdG9yID0gZC0+
ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPmF0KGkpOworICAgIGZvciAoYXV0byYgZmlyaW5nSXRlcmF0
b3IgOiAqZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpIHsKICAgICAgICAgaWYgKGV2ZW50VHlwZSAh
PSBmaXJpbmdJdGVyYXRvci5ldmVudFR5cGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAt
MTIwLDEwICsxMTksOSBAQCBib29sIEV2ZW50VGFyZ2V0OjpzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
CiAKIEV2ZW50TGlzdGVuZXIqIEV2ZW50VGFyZ2V0OjpnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogewotICAgIGNvbnN0IEV2ZW50TGlzdGVu
ZXJWZWN0b3ImIGVudHJ5ID0gZ2V0RXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGVudHJ5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlbnRy
eVtpXS5saXN0ZW5lci0+aXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIHJldHVybiBlbnRyeVtp
XS5saXN0ZW5lci5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiBnZXRFdmVu
dExpc3RlbmVycyhldmVudFR5cGUpKSB7CisgICAgICAgIGlmIChldmVudExpc3RlbmVyLmxpc3Rl
bmVyLT5pc0F0dHJpYnV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXIubGlz
dGVuZXIuZ2V0KCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMjgwLDkgKzI3OCw5IEBA
IHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXIKICAgICAvLyBOb3RpZnkg
ZmlyaW5nIGV2ZW50cyBwbGFubmluZyB0byBpbnZva2UgdGhlIGxpc3RlbmVyIGF0ICdpbmRleCcg
dGhhdAogICAgIC8vIHRoZXkgaGF2ZSBvbmUgbGVzcyBsaXN0ZW5lciB0byBpbnZva2UuCiAgICAg
aWYgKGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXQoaSkuaXRlcmF0b3IgPSAwOwotICAgICAgICAg
ICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPmF0KGkpLnNpemUgPSAwOworICAgICAgICBmb3Ig
KGF1dG8mIGZpcmluZ0V2ZW50SXRlcmF0b3IgOiAqZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpIHsK
KyAgICAgICAgICAgIGZpcmluZ0V2ZW50SXRlcmF0b3IuaXRlcmF0b3IgPSAwOworICAgICAgICAg
ICAgZmlyaW5nRXZlbnRJdGVyYXRvci5zaXplID0gMDsKICAgICAgICAgfQogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3Bw
CShyZXZpc2lvbiAxOTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTUgKzY1LDE1IEBAIHZvaWQgSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnMKIAogICAgIFZlY3RvcjxJZFRhcmdldE9i
c2VydmVyKj4gY29weTsKICAgICBjb3B5VG9WZWN0b3IoKm1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5T
ZXQsIGNvcHkpOwotICAgIGZvciAoVmVjdG9yPElkVGFyZ2V0T2JzZXJ2ZXIqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBjb3B5LmJlZ2luKCk7IGl0ICE9IGNvcHkuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgaWYgKG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQtPmNvbnRhaW5zKCppdCkpCi0gICAgICAg
ICAgICAoKml0KS0+aWRUYXJnZXRDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IGNvcHkpIHsKKyAgICAgICAgaWYgKG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQtPmNvbnRhaW5z
KG9ic2VydmVyKSkKKyAgICAgICAgICAgIG9ic2VydmVyLT5pZFRhcmdldENoYW5nZWQoKTsKICAg
ICB9CiAKICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldC0+aXNFbXB0eSgpKQogICAg
ICAgICBtX3JlZ2lzdHJ5LnJlbW92ZSgmaWQpOwogCi0gICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJ
blNldCA9IDA7CisgICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCA9IG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNw
cAkocmV2aXNpb24gMTkxNjUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOCBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0
TWVzc2FnZShQYXNzUmVmUHRyCiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVsczsKICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0IGNvbm5lY3RlZCB0
byBhbnkgb2YgdGhlIHBhc3NlZC1pbiBwb3J0cy4KICAgICBpZiAocG9ydHMpIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwb3J0cy0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIE1lc3NhZ2VQb3J0KiBkYXRhUG9ydCA9ICgqcG9ydHMpW2ldLmdldCgpOwotICAgICAg
ICAgICAgaWYgKGRhdGFQb3J0ID09IHRoaXMgfHwgbV9lbnRhbmdsZWRDaGFubmVsLT5pc0Nvbm5l
Y3RlZFRvKGRhdGFQb3J0KSkgeworICAgICAgICBmb3IgKGF1dG8mIGRhdGFQb3J0IDogKnBvcnRz
KSB7CisgICAgICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhpcyB8fCBtX2VudGFuZ2xlZENoYW5u
ZWwtPmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgZWMg
PSBEQVRBX0NMT05FX0VSUjsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkBAIC0xOTIsMTMgKzE5MSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+CiAgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IHBvcnRTZXQ7CiAKICAgICAvLyBXYWxr
IHRoZSBpbmNvbWluZyBhcnJheSAtIGlmIHRoZXJlIGFyZSBhbnkgZHVwbGljYXRlIHBvcnRzLCBv
ciBudWxsIHBvcnRzIG9yIGNsb25lZCBwb3J0cywgdGhyb3cgYW4gZXJyb3IgKHBlciBzZWN0aW9u
IDguMy4zIG9mIHRoZSBIVE1MNSBzcGVjKS4KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBvcnRzLT5zaXplKCk7ICsraSkgewotICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9ICgq
cG9ydHMpW2ldLmdldCgpOwotICAgICAgICBpZiAoIXBvcnQgfHwgcG9ydC0+aXNOZXV0ZXJlZCgp
IHx8IHBvcnRTZXQuY29udGFpbnMocG9ydCkpIHsKKyAgICBmb3IgKGF1dG8mIHBvcnQgOiAqcG9y
dHMpIHsKKyAgICAgICAgaWYgKCFwb3J0IHx8IHBvcnQtPmlzTmV1dGVyZWQoKSB8fCBwb3J0U2V0
LmNvbnRhaW5zKHBvcnQuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJS
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgcG9ydFNl
dC5hZGQocG9ydCk7CisgICAgICAgIHBvcnRTZXQuYWRkKHBvcnQuZ2V0KCkpOwogICAgIH0KIAog
ICAgIC8vIFBhc3NlZC1pbiBwb3J0cyBwYXNzZWQgdmFsaWRpdHkgY2hlY2tzLCBzbyB3ZSBjYW4g
ZGlzZW50YW5nbGUgdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZl
ci5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsOSArODgsOSBAQCB2b2lkIE11dGF0aW9u
T2JzZXJ2ZXI6Om9ic2VydmUoTm9kZSogbm9kCiAgICAgfTsKICAgICBNdXRhdGlvbk9ic2VydmVy
T3B0aW9ucyBvcHRpb25zID0gMDsKICAgICBib29sIHZhbHVlID0gZmFsc2U7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihib29sZWFuT3B0aW9ucykgLyBzaXplb2YoYm9vbGVh
bk9wdGlvbnNbMF0pOyArK2kpIHsKLSAgICAgICAgaWYgKG9wdGlvbnNEaWN0aW9uYXJ5LmdldChi
b29sZWFuT3B0aW9uc1tpXS5uYW1lLCB2YWx1ZSkgJiYgdmFsdWUpCi0gICAgICAgICAgICBvcHRp
b25zIHw9IGJvb2xlYW5PcHRpb25zW2ldLnZhbHVlOworICAgIGZvciAoYXV0byYgYm9vbGVhbk9w
dGlvbiA6IGJvb2xlYW5PcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb25zRGljdGlvbmFyeS5n
ZXQoYm9vbGVhbk9wdGlvbi5uYW1lLCB2YWx1ZSkgJiYgdmFsdWUpCisgICAgICAgICAgICBvcHRp
b25zIHw9IGJvb2xlYW5PcHRpb24udmFsdWU7CiAgICAgfQogCiAgICAgSGFzaFNldDxBdG9taWNT
dHJpbmc+IGF0dHJpYnV0ZUZpbHRlcjsKQEAgLTE5MSw4ICsxOTEsOCBAQCB2b2lkIE11dGF0aW9u
T2JzZXJ2ZXI6OmRlbGl2ZXIoKQogICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5oYXNUcmFuc2ll
bnRSZWdpc3RyYXRpb25zKCkpCiAgICAgICAgICAgICB0cmFuc2llbnRSZWdpc3RyYXRpb25zLmFw
cGVuZChyZWdpc3RyYXRpb24pOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRyYW5zaWVudFJlZ2lz
dHJhdGlvbnNbaV0tPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpOworICAgIGZvciAoYXV0
byYgcmVnaXN0cmF0aW9uIDogdHJhbnNpZW50UmVnaXN0cmF0aW9ucykKKyAgICAgICAgcmVnaXN0
cmF0aW9uLT5jbGVhclRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKTsKIAogICAgIGlmIChtX3JlY29y
ZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yMTQsMTIgKzIxNCwxMiBAQCB2b2lk
IE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvCiAgICAgaWYgKCFzdXNwZW5kZWRN
dXRhdGlvbk9ic2VydmVycygpLmlzRW1wdHkoKSkgewogICAgICAgICBWZWN0b3I8UmVmUHRyPE11
dGF0aW9uT2JzZXJ2ZXI+PiBzdXNwZW5kZWQ7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihzdXNwZW5k
ZWRNdXRhdGlvbk9ic2VydmVycygpLCBzdXNwZW5kZWQpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHN1c3BlbmRlZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzdXNw
ZW5kZWRbaV0tPmNhbkRlbGl2ZXIoKSkKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IHN1
c3BlbmRlZCkgeworICAgICAgICAgICAgaWYgKCFvYnNlcnZlci0+Y2FuRGVsaXZlcigpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBzdXNwZW5kZWRNdXRhdGlvbk9i
c2VydmVycygpLnJlbW92ZShzdXNwZW5kZWRbaV0pOwotICAgICAgICAgICAgYWN0aXZlTXV0YXRp
b25PYnNlcnZlcnMoKS5hZGQoc3VzcGVuZGVkW2ldKTsKKyAgICAgICAgICAgIHN1c3BlbmRlZE11
dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKG9ic2VydmVyKTsKKyAgICAgICAgICAgIGFjdGl2ZU11
dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MjMxLDExICsyMzEsMTEgQEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyQWxsTXV0YXRp
bwogICAgICAgICAgICAgcmV0dXJuIGxocy0+bV9wcmlvcml0eSA8IHJocy0+bV9wcmlvcml0eTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChvYnNlcnZlcnNbaV0tPmNhbkRlbGl2ZXIo
KSkKLSAgICAgICAgICAgICAgICBvYnNlcnZlcnNbaV0tPmRlbGl2ZXIoKTsKKyAgICAgICAgZm9y
IChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVycykgeworICAgICAgICAgICAgaWYgKG9ic2VydmVy
LT5jYW5EZWxpdmVyKCkpCisgICAgICAgICAgICAgICAgb2JzZXJ2ZXItPmRlbGl2ZXIoKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdXNwZW5kZWRNdXRhdGlvbk9ic2VydmVy
cygpLmFkZChvYnNlcnZlcnNbaV0pOworICAgICAgICAgICAgICAgIHN1c3BlbmRlZE11dGF0aW9u
T2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTkxNjUy
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMSArNDcsMTEgQEAgVmVjdG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+
PiBOYW1lZEZsbwogewogICAgIFZlY3RvcjxSZWZQdHI8V2ViS2l0TmFtZWRGbG93Pj4gbmFtZWRG
bG93czsKIAotICAgIGZvciAoTmFtZWRGbG93U2V0OjppdGVyYXRvciBpdCA9IG1fbmFtZWRGbG93
cy5iZWdpbigpOyBpdCAhPSBtX25hbWVkRmxvd3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYg
KCgqaXQpLT5mbG93U3RhdGUoKSA9PSBXZWJLaXROYW1lZEZsb3c6OkZsb3dTdGF0ZU51bGwpCisg
ICAgZm9yIChhdXRvJiBuYW1lZEZsb3cgOiBtX25hbWVkRmxvd3MpIHsKKyAgICAgICAgaWYgKG5h
bWVkRmxvdy0+Zmxvd1N0YXRlKCkgPT0gV2ViS2l0TmFtZWRGbG93OjpGbG93U3RhdGVOdWxsKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbmFtZWRGbG93cy5hcHBlbmQoUmVmUHRy
PFdlYktpdE5hbWVkRmxvdz4oKml0KSk7CisgICAgICAgIG5hbWVkRmxvd3MuYXBwZW5kKFJlZlB0
cjxXZWJLaXROYW1lZEZsb3c+KG5hbWVkRmxvdykpOwogICAgIH0KIAogICAgIHJldHVybiBuYW1l
ZEZsb3dzOwpAQCAtMTA3LDkgKzEwNywxMCBAQCBEb2N1bWVudCogTmFtZWRGbG93Q29sbGVjdGlv
bjo6ZG9jdW1lbnQoCiBQYXNzUmVmUHRyPERPTU5hbWVkRmxvd0NvbGxlY3Rpb24+IE5hbWVkRmxv
d0NvbGxlY3Rpb246OmNyZWF0ZUNTU09NU25hcHNob3QoKQogewogICAgIFZlY3RvcjxXZWJLaXRO
YW1lZEZsb3cqPiBjcmVhdGVkRmxvd3M7Ci0gICAgZm9yIChOYW1lZEZsb3dTZXQ6Oml0ZXJhdG9y
IGl0ID0gbV9uYW1lZEZsb3dzLmJlZ2luKCk7IGl0ICE9IG1fbmFtZWRGbG93cy5lbmQoKTsgKytp
dCkKLSAgICAgICAgaWYgKCgqaXQpLT5mbG93U3RhdGUoKSA9PSBXZWJLaXROYW1lZEZsb3c6OkZs
b3dTdGF0ZUNyZWF0ZWQpCi0gICAgICAgICAgICBjcmVhdGVkRmxvd3MuYXBwZW5kKCppdCk7Cisg
ICAgZm9yIChhdXRvJiBuYW1lZEZsb3cgOiBtX25hbWVkRmxvd3MpIHsKKyAgICAgICAgaWYgKG5h
bWVkRmxvdy0+Zmxvd1N0YXRlKCkgPT0gV2ViS2l0TmFtZWRGbG93OjpGbG93U3RhdGVDcmVhdGVk
KQorICAgICAgICAgICAgY3JlYXRlZEZsb3dzLmFwcGVuZChuYW1lZEZsb3cpOworICAgIH0KICAg
ICByZXR1cm4gRE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6Y3JlYXRlKGNyZWF0ZWRGbG93cyk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3NCw5ICsyMDc0LDggQEAgdm9p
ZCBOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaQogCiAgICAgZm9yIChOb2RlKiBu
b2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiByZWdpc3RyeSA9IG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IHJlZ2lzdHJ5LT5zaXplKCk7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
ICAgICAgICByZWdpc3RyeS0+YXQoaSktPm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKHRo
aXMpOworICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiAqcmVnaXN0cnkpCisg
ICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFj
aCh0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhdXRvKiB0cmFuc2llbnRSZWdpc3Ry
eSA9IG5vZGUtPnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1NSwxNiArNzU1LDE2IEBAIFJlZlB0cjxOb2Rl
PiBSYW5nZTo6cHJvY2Vzc0NvbnRlbnRzQmV0d2UKIAogdm9pZCBSYW5nZTo6cHJvY2Vzc05vZGVz
KEFjdGlvblR5cGUgYWN0aW9uLCBWZWN0b3I8UmVmUHRyPE5vZGU+PiYgbm9kZXMsIFBhc3NSZWZQ
dHI8Tm9kZT4gb2xkQ29udGFpbmVyLCBQYXNzUmVmUHRyPE5vZGU+IG5ld0NvbnRhaW5lciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNp
emUoKTsgaSsrKSB7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKICAgICAgICAgc3dp
dGNoIChhY3Rpb24pIHsKICAgICAgICAgY2FzZSBEZWxldGU6Ci0gICAgICAgICAgICBvbGRDb250
YWluZXItPnJlbW92ZUNoaWxkKG5vZGVzW2ldLmdldCgpLCBlYyk7CisgICAgICAgICAgICBvbGRD
b250YWluZXItPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIGVjKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEV4dHJhY3Q6Ci0gICAgICAgICAgICBuZXdDb250YWluZXItPmFwcGVu
ZENoaWxkKG5vZGVzW2ldLnJlbGVhc2UoKSwgZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20gaXRz
IHBhcmVudAorICAgICAgICAgICAgbmV3Q29udGFpbmVyLT5hcHBlbmRDaGlsZChub2RlLnJlbGVh
c2UoKSwgZWMpOyAvLyB3aWxsIHJlbW92ZSBuIGZyb20gaXRzIHBhcmVudAogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvbmU6Ci0gICAgICAgICAgICBuZXdDb250YWluZXItPmFw
cGVuZENoaWxkKG5vZGVzW2ldLT5jbG9uZU5vZGUodHJ1ZSksIGVjKTsKKyAgICAgICAgICAgIG5l
d0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQobm9kZS0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTc4MCw4ICs3ODAsNyBAQCBSZWZQ
dHI8Tm9kZT4gUmFuZ2U6OnByb2Nlc3NBbmNlc3RvcnNBbmRUCiAgICAgICAgIGFuY2VzdG9ycy5h
cHBlbmQobik7CiAKICAgICBSZWZQdHI8Tm9kZT4gZmlyc3RDaGlsZEluQW5jZXN0b3JUb1Byb2Nl
c3MgPSBkaXJlY3Rpb24gPT0gUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCA/IGNvbnRhaW5lci0+bmV4
dFNpYmxpbmcoKSA6IGNvbnRhaW5lci0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgZm9yIChWZWN0
b3I8UmVmUHRyPE5vZGU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbmNlc3RvcnMuYmVnaW4oKTsg
aXQgIT0gYW5jZXN0b3JzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBhbmNl
c3RvciA9ICppdDsKKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzKSB7CiAgICAg
ICAgIGlmIChhY3Rpb24gPT0gRXh0cmFjdCB8fCBhY3Rpb24gPT0gQ2xvbmUpIHsKICAgICAgICAg
ICAgIGlmIChSZWZQdHI8Tm9kZT4gY2xvbmVkQW5jZXN0b3IgPSBhbmNlc3Rvci0+Y2xvbmVOb2Rl
KGZhbHNlKSkgeyAvLyBNaWdodCBoYXZlIGJlZW4gcmVtb3ZlZCBhbHJlYWR5IGR1cmluZyBtdXRh
dGlvbiBldmVudC4KICAgICAgICAgICAgICAgICBjbG9uZWRBbmNlc3Rvci0+YXBwZW5kQ2hpbGQo
Y2xvbmVkQ29udGFpbmVyLCBlYyk7CkBAIC03OTksMTcgKzc5OCwxNiBAQCBSZWZQdHI8Tm9kZT4g
UmFuZ2U6OnByb2Nlc3NBbmNlc3RvcnNBbmRUCiAgICAgICAgICAgICBjaGlsZCA9IChkaXJlY3Rp
b24gPT0gUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCkgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjaGlsZCk7
CiAKLSAgICAgICAgZm9yIChOb2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vZGVzLmJl
Z2luKCk7IGl0ICE9IG5vZGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBOb2RlKiBjaGls
ZCA9IGl0LT5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG5vZGVzKSB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgICAgICAgICAgY2FzZSBEZWxldGU6Ci0gICAg
ICAgICAgICAgICAgYW5jZXN0b3ItPnJlbW92ZUNoaWxkKGNoaWxkLCBlYyk7CisgICAgICAgICAg
ICAgICAgYW5jZXN0b3ItPnJlbW92ZUNoaWxkKGNoaWxkLmdldCgpLCBlYyk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEV4dHJhY3Q6IC8vIHdpbGwgcmVtb3ZlIGNo
aWxkIGZyb20gYW5jZXN0b3IKICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFByb2Nl
c3NDb250ZW50c0ZvcndhcmQpCi0gICAgICAgICAgICAgICAgICAgIGNsb25lZENvbnRhaW5lci0+
YXBwZW5kQ2hpbGQoY2hpbGQsIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgY2xvbmVkQ29udGFp
bmVyLT5hcHBlbmRDaGlsZChjaGlsZC5nZXQoKSwgZWMpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgY2xvbmVkQ29udGFpbmVyLT5pbnNlcnRCZWZvcmUoY2hpbGQs
IGNsb25lZENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAg
IGNsb25lZENvbnRhaW5lci0+aW5zZXJ0QmVmb3JlKGNoaWxkLmdldCgpLCBjbG9uZWRDb250YWlu
ZXItPmZpcnN0Q2hpbGQoKSwgZWMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDbG9uZToKICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFByb2Nlc3ND
b250ZW50c0ZvcndhcmQpCkBAIC0xMTgyLDkgKzExODAsOCBAQCBJbnRSZWN0IFJhbmdlOjphYnNv
bHV0ZUJvdW5kaW5nQm94KCkgY29uCiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgVmVjdG9yPElu
dFJlY3Q+IHJlY3RzOwogICAgIGFic29sdXRlVGV4dFJlY3RzKHJlY3RzKTsKLSAgICBjb25zdCBz
aXplX3QgbiA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKyAgICBmb3IgKGF1dG8mIHJlY3Qg
OiByZWN0cykKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTEzMTYsMTUgKzEzMTMsMTMgQEAgdm9pZCBSYW5nZTo6Y29sbGVjdFNlbGVjdGlv
blJlY3RzKFZlY3RvcgogICAgICAgICAgICAgaW50IGJlZ2luU2VsZWN0aW9uT2Zmc2V0ID0gaXNT
dGFydE5vZGUgPyBzdGFydE9mZnNldCA6IDA7CiAgICAgICAgICAgICBpbnQgZW5kU2VsZWN0aW9u
T2Zmc2V0ID0gaXNFbmROb2RlID8gZW5kT2Zmc2V0IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICAgICAgICAgIHJlbmRlcmVyLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMobmV3
UmVjdHMsIGJlZ2luU2VsZWN0aW9uT2Zmc2V0LCBlbmRTZWxlY3Rpb25PZmZzZXQpOwotICAgICAg
ICAgICAgc2l6ZV90IG51bWJlck9mTmV3UmVjdHMgPSBuZXdSZWN0cy5zaXplKCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mTmV3UmVjdHM7ICsraSkgewotICAg
ICAgICAgICAgICAgIFNlbGVjdGlvblJlY3QmIHNlbGVjdGlvblJlY3QgPSBuZXdSZWN0c1tpXTsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IG5ld1JlY3RzKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3QuY29udGFpbnNTdGFydCgpICYmICFpc1N0YXJ0
Tm9kZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRDb250YWluc1N0YXJ0
KGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc0VuZCgp
ICYmICFpc0VuZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0Q29u
dGFpbnNFbmQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmxvZ2lj
YWxXaWR0aCgpIHx8IHNlbGVjdGlvblJlY3QubG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQobmV3UmVjdHNbaV0pOworICAgICAgICAgICAgICAgICAgICBy
ZWN0cy5hcHBlbmQoc2VsZWN0aW9uUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
ZXdSZWN0cy5zaHJpbmsoMCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRS
dW5uZXIuY3BwCShyZXZpc2lvbiAxOTE2NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDEwICsxMTAsOSBAQCB2b2lkIFNjcmlw
dFJ1bm5lcjo6dGltZXJGaXJlZCgpCiAgICAgaWYgKG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRl
KQogICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnJlbW92ZSgwLCBudW1Jbk9yZGVy
U2NyaXB0c1RvRXhlY3V0ZSk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHNjcmlwdHMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENhY2hlZFNj
cmlwdCogY2FjaGVkU2NyaXB0ID0gc2NyaXB0c1tpXS5jYWNoZWRTY3JpcHQoKTsKLSAgICAgICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBzY3JpcHRzW2ldLnJlbGVhc2VFbGVtZW50QW5kQ2xl
YXIoKTsKKyAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpIHsKKyAgICAgICAgQ2FjaGVk
U2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBzY3JpcHQuY2FjaGVkU2NyaXB0KCk7CisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gc2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKTsK
ICAgICAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgICAgICAvLyBQYXBlciBvdmVyIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwNTAKICAgICAgICAgaWYgKCFlbGVt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5MTY1MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksOCAr
MTQ5LDcgQEAgdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZpYwogICAgIC8v
IHJlZmVyZW5jZSB0byB1cywgc28gdGFrZSBhIGRlZmVuc2l2ZSByZWZlcmVuY2UuCiAgICAgUmVm
PFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayogY2FsbGJhY2sgPSBjYWxsYmFja3NbaV0uZ2V0KCk7
CisgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IGNhbGxiYWNrcykgewogICAgICAgICBpZiAoIWNh
bGxiYWNrLT5tX2ZpcmVkT3JDYW5jZWxsZWQpIHsKICAgICAgICAgICAgIGNhbGxiYWNrLT5tX2Zp
cmVkT3JDYW5jZWxsZWQgPSB0cnVlOwogICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEZpcmVBbmlt
YXRpb25GcmFtZShtX2RvY3VtZW50LCBjYWxsYmFjay0+bV9pZCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yUXVlcnkuY3BwCShyZXZpc2lvbiAxOTE2NTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw5ICsxMzUsOCBA
QCBpbmxpbmUgRWxlbWVudCogU2VsZWN0b3JEYXRhTGlzdDo6c2VsZWN0CiAKIGJvb2wgU2VsZWN0
b3JEYXRhTGlzdDo6bWF0Y2hlcyhFbGVtZW50JiB0YXJnZXRFbGVtZW50KSBjb25zdAogewotICAg
IHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsraSkgewotICAgICAgICBpZiAoc2Vs
ZWN0b3JNYXRjaGVzKG1fc2VsZWN0b3JzW2ldLCB0YXJnZXRFbGVtZW50LCB0YXJnZXRFbGVtZW50
KSkKKyAgICBmb3IgKGF1dG8mIHNlbGN0b3IgOiBtX3NlbGVjdG9ycykgeworICAgICAgICBpZiAo
c2VsZWN0b3JNYXRjaGVzKHNlbGN0b3IsIHRhcmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTIy
MCwxMiArMjE5LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUK
ICAgICBpZiAoVU5MSUtFTFkocm9vdE5vZGUudHJlZVNjb3BlKCkuY29udGFpbnNNdWx0aXBsZUVs
ZW1lbnRzV2l0aElkKGlkVG9NYXRjaCkpKSB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4qIGVsZW1lbnRzID0gcm9vdE5vZGUudHJlZVNjb3BlKCkuZ2V0QWxsRWxlbWVudHNCeUlkKGlk
VG9NYXRjaCk7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7Ci0gICAgICAgIHNpemVfdCBjb3Vu
dCA9IGVsZW1lbnRzLT5zaXplKCk7CiAgICAgICAgIGJvb2wgcm9vdE5vZGVJc1RyZWVTY29wZVJv
b3QgPSBpc1RyZWVTY29wZVJvb3Qocm9vdE5vZGUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqZWxl
bWVudHMtPmF0KGkpOwotICAgICAgICAgICAgaWYgKChyb290Tm9kZUlzVHJlZVNjb3BlUm9vdCB8
fCBlbGVtZW50LmlzRGVzY2VuZGFudE9mKCZyb290Tm9kZSkpICYmIHNlbGVjdG9yTWF0Y2hlcyhz
ZWxlY3RvckRhdGEsIGVsZW1lbnQsIHJvb3ROb2RlKSkgewotICAgICAgICAgICAgICAgIFNlbGVj
dG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsICZlbGVtZW50KTsK
KyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogKmVsZW1lbnRzKSB7CisgICAgICAgICAgICBp
ZiAoKHJvb3ROb2RlSXNUcmVlU2NvcGVSb290IHx8IGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKCZy
b290Tm9kZSkpICYmIHNlbGVjdG9yTWF0Y2hlcyhzZWxlY3RvckRhdGEsICplbGVtZW50LCByb290
Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1
dEZvckVsZW1lbnQob3V0cHV0LCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAoU2VsZWN0
b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hGaXJzdEVsZW1lbnQpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTM4NSwxMCArMzgyLDkgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogdGVtcGxhdGUgPHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdD4KIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0Ojpl
eGVjdXRlU2luZ2xlTXVsdGlTZWxlY3RvckRhdGEoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5v
ZGUsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0KSBjb25z
dAogewotICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CiAg
ICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29u
dGFpbmVyTm9kZSY+KHJvb3ROb2RlKSkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNlbGVjdG9yQ291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hl
cyhtX3NlbGVjdG9yc1tpXSwgZWxlbWVudCwgcm9vdE5vZGUpKSB7CisgICAgICAgIGZvciAoYXV0
byYgc2VsZWN0b3IgOiBtX3NlbGVjdG9ycykgeworICAgICAgICAgICAgaWYgKHNlbGVjdG9yTWF0
Y2hlcyhzZWxlY3RvciwgZWxlbWVudCwgcm9vdE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgU2Vs
ZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVsZW1lbnQp
OwogICAgICAgICAgICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRj
aEZpcnN0RWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQxLDIwICs0
MzcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogewogICAg
IFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3Rv
ckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOwogICAgIGNoZWNraW5nQ29udGV4dC5zY29w
ZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOwotICAg
IHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9k
ZSY+KHJvb3ROb2RlKSkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVj
dG9yQ291bnQ7ICsraSkgeworICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogbV9zZWxlY3Rv
cnMpIHsKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwotICAgICAgICAgICAgbV9zZWxl
Y3RvcnNbaV0uY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKKyAgICAgICAgICAgIHNlbGVjdG9yLmNv
bXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZW5kaWYKICAgICAgICAgICAgIGJvb2wgbWF0Y2hlZCA9
IGZhbHNlOwotICAgICAgICAgICAgdm9pZCogY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgPSBtX3Nl
bGVjdG9yc1tpXS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKLSAgICAgICAgICAgIGlmIChtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyA9
PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAg
ICAgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2ltcGxlU2VsZWN0
b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0
b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwg
bV9zZWxlY3RvcnNbaV0uY29tcGlsYXRpb25TdGF0dXMpOworICAgICAgICAgICAgdm9pZCogY29t
cGlsZWRTZWxlY3RvckNoZWNrZXIgPSBzZWxlY3Rvci5jb21waWxlZFNlbGVjdG9yQ29kZVJlZi5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jb21w
aWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIpIHsKKyAgICAgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVj
dG9yU2ltcGxlU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGls
ZXI6OnF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNl
bGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMpOwogICAgICAgICAgICAg
ICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQpOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zZWxlY3RvcnNbaV0uY29tcGlsYXRpb25T
dGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6UXVlcnlT
ZWxlY3RvclNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2Vy
ID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9u
V2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgbV9zZWxlY3RvcnNb
aV0uY29tcGlsYXRpb25TdGF0dXMpOworICAgICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rvci5j
b21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKKyAgICAgICAgICAgICAgICBTZWxlY3RvckNvbXBp
bGVyOjpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxl
Y3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVj
a2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBz
ZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHNl
bGVjdG9yQ2hlY2tlcigmZWxlbWVudCwgJmNoZWNraW5nQ29udGV4dCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAobWF0Y2hlZCkgewpAQCAtNTc5LDkgKzU3NCw4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGUKICAgICBjYXNlIENvbXBpbGFibGVNdWx0
aXBsZVNlbGVjdG9yTWF0Y2g6CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAgICAgICAg
IHsKLSAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3JzLnNpemUoKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCFjb21waWxlU2VsZWN0b3IobV9zZWxlY3RvcnNbaV0sICpzZWFyY2hS
b290Tm9kZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RvciA6IG1fc2VsZWN0b3JzKSB7
CisgICAgICAgICAgICBpZiAoIWNvbXBpbGVTZWxlY3RvcihzZWxlY3RvciwgKnNlYXJjaFJvb3RO
b2RlKSkgewogICAgICAgICAgICAgICAgIG1fbWF0Y2hUeXBlID0gTXVsdGlwbGVTZWxlY3Rvck1h
dGNoOwogICAgICAgICAgICAgICAgIGdvdG8gTXVsdGlwbGVTZWxlY3Rvck1hdGNoOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkocmV2
aXNpb24gMTkxNjUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw4IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6
bW92ZVRyZWVUb05ld1Njb3AKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChu
b2RlLT5oYXNTeW50aGV0aWNBdHRyQ2hpbGROb2RlcygpKSB7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPEF0dHI+PiYgYXR0cnMgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0
ck5vZGVMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKGF0dHJzW2ld
LmdldCgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgYXR0ciA6IGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKS5hdHRyTm9kZUxpc3QoKSkKKyAgICAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3U2Nv
cGUoYXR0ci5nZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hh
ZG93ID0gbm9kZS0+c2hhZG93Um9vdCgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264307</attachid>
            <date>2015-10-29 02:39:25 -0700</date>
            <delta_ts>2015-10-29 21:35:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150664-20151029183832.patch</filename>
            <type>text/plain</type>
            <size>44211</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDE1LTEwLTI5ICBIdW5zZW9w
IEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJuIGZv
ci1sb29wcyBpbiBXZWJDb3JlL2RvbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDY2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9y
IGNoYW5nZS4KKworICAgICAgICAqIGRvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzQ29u
dGFpbnMpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucyk6
CisgICAgICAgICogZG9tL0NsaWVudFJlY3RMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aWVudFJlY3RMaXN0OjpDbGllbnRSZWN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGllbnRS
ZWN0TGlzdDo6fkNsaWVudFJlY3RMaXN0KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUpOgorICAg
ICAgICAqIGRvbS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vRE9NU3Ry
aW5nTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0Ojpjb250YWlucyk6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZEZyYW1lU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0
aXZlU3RhdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50
TWFya2Vycyk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJz
KToKKyAgICAgICAgKiBkb20vRWxlbWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VW5p
cXVlRWxlbWVudERhdGE6OmZpbmRBdHRyaWJ1dGVCeU5hbWUpOgorICAgICAgICAqIGRvbS9FdmVu
dERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjp1cGRhdGVUb3Vj
aExpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmNvbnRhaW5zQ2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlz
dGVuZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1h
cDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJz
Tm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExp
c3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcik6CisgICAgICAgICogZG9tL0V2
ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxF
dmVudExpc3RlbmVycyk6CisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6Om5vdGlmeU9i
c2VydmVyc0ludGVybmFsKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25P
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucyk6CisgICAg
ICAgICogZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRGbG93cyk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEZs
b3dDb2xsZWN0aW9uOjpjcmVhdGVDU1NPTVNuYXBzaG90KToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVX
aWxsRGV0YWNoKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OnByb2Nlc3NOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cHJvY2Vzc0Fu
Y2VzdG9yc0FuZFRoZWlyU2libGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29s
dXRlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9TY3JpcHRlZEFu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKiBkb20v
U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0Ojpt
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVGYXN0
UGF0aEZvcklkU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6
ZXhlY3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGRv
bS9UcmVlU2NvcGVBZG9wdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0
ZXI6Om1vdmVUcmVlVG9OZXdTY29wZSk6CisKIDIwMTUtMTAtMjggIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IFN1cHBvcnQgSURCRGF0YWJh
c2UudHJhbnNhY3Rpb24oKSAoYW5kIHRyYW5zYWN0aW9uIHNjaGVkdWxpbmcgaW4gZ2VuZXJhbCku
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxOCw4ICsyMTgsOCBAQCBBdXRob3JTdHlsZVNoZWV0czo6U3R5bGVS
ZXNvbHZlclVwZGF0ZVR5CiAgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0
aGF0IEBpbXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0
byB0cmlnZ2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgogICAgIGJv
b2wgaGFzQWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBuZXdT
dHlsZXNoZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChuZXdT
dHlsZXNoZWV0c1tpXS0+aXNMb2FkaW5nKCkpCisgICAgZm9yIChhdXRvJiBzaGVldCA6IG5ld1N0
eWxlc2hlZXRzKSB7CisgICAgICAgIGlmIChzaGVldC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAg
ICBoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IHRydWU7CiAgICAgfQogICAgIGlmIChtX2hh
ZEFjdGl2ZUxvYWRpbmdTdHlsZXNoZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkg
ewpAQCAtMjc3LDE1ICsyNzcsMTUgQEAgQXV0aG9yU3R5bGVTaGVldHM6OlN0eWxlUmVzb2x2ZXJV
cGRhdGVUeQogCiBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0
cyhWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaGVldHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigq
c2hlZXRzW2ldKSkKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAgIGlm
ICghaXM8Q1NTU3R5bGVTaGVldD4oKnNoZWV0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBDU1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVl
dHNbaV0pOwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKKyAgICAgICAgQ1NTU3R5bGVT
aGVldCYgc3R5bGVTaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldCk7CisgICAg
ICAgIGlmIChzdHlsZVNoZWV0LmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKCFzaGVldC5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0Lmxlbmd0
aCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc3R5bGVTaGVldCk7CiAgICAgfQogfQogCkBAIC0z
ODcsOCArMzg3LDggQEAgYm9vbCBBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldAog
ewogICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
KSB7CiAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JG
YXN0TG9va3VwLT5hZGQobV9hY3RpdmVTdHlsZVNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIGZv
ciAoYXV0byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpCisgICAgICAg
ICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChh
Y3RpdmVTdHlsZVNoZWV0LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFj
dGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkocmV2aXNpb24g
MTkxNzI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsMTAgKzE1MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6
cmVtb3ZlKEhUTUxJbnB1dEUKIAogdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjp1cGRhdGVWYWxpZGl0
eUZvckFsbEJ1dHRvbnMoKQogewotICAgIHR5cGVkZWYgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50
Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IG1fbWVtYmVy
cy5lbmQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9tZW1iZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBidXR0b24gPSAqaXQ7Cisg
ICAgZm9yIChhdXRvJiBidXR0b24gOiBtX21lbWJlcnMpIHsKICAgICAgICAgQVNTRVJUKGJ1dHRv
bi0+aXNSYWRpb0J1dHRvbigpKTsKICAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkocmV2aXNpb24g
MTkxNzI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBDbGllbnRSZWN0TGlzdDo6Q2xpZW50UmVjdExpc3Qo
KQogQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcykKIHsKICAgICBtX2xpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShxdWFkcy5zaXpl
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fbGlzdC5hcHBlbmQoQ2xpZW50UmVjdDo6Y3JlYXRlKHF1YWRzW2ldLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCkpKTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgbV9s
aXN0LnVuY2hlY2tlZEFwcGVuZChDbGllbnRSZWN0OjpjcmVhdGUocXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKSk7CiB9CiAKIENsaWVudFJlY3RMaXN0Ojp+Q2xpZW50UmVjdExpc3QoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzIsMTkgKzI3MiwxNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShSZWY8Tm9k
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVu
dCgpLCAqdGhpcyk7CiAKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKCp0aGlz
KTsKLSAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVuZCA9IHRhcmdldHMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQoKTsK
LQorICAgIGZvciAoYXV0byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAgICAgIC8vIER1ZSB0byBh
cmJpdHJhcnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50
IGl0J3MKICAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hp
bGQgb2YgInRoaXMiLgogICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUgdGhhdCAiY2hpbGQi
IGhhcyBiZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KICAgICAgICAgLy8gSW4gZWl0aGVyIG9mIHRo
b3NlIGNhc2VzLCB3ZSdsbCBqdXN0IHN0b3AuCiAgICAgICAgIGlmIChuZXh0LT5wYXJlbnROb2Rl
KCkgIT0gdGhpcykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY2hpbGQucGFyZW50
Tm9kZSgpKQorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoJmNoaWxkKTsKKyAgICAg
ICAgdHJlZVNjb3BlKCkuYWRvcHRJZk5lZWRlZCgmY2hpbGQuZ2V0KCkpOwogCiAgICAgICAgIGlu
c2VydEJlZm9yZUNvbW1vbihuZXh0LCBjaGlsZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERPTU5hbWVkRmxvd0Nv
bGxlY3Rpb246OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24oY29uc3QgVmVjdG9yPFdlYktpdE5hbWVk
Rmxvdyo+JiBuYW1lZEZsb3dzKQogewotICAgIGZvciAoVmVjdG9yPFdlYktpdE5hbWVkRmxvdyo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5hbWVkRmxvd3MuYmVnaW4oKTsgaXQgIT0gbmFtZWRGbG93
cy5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9uYW1lZEZsb3dzLmFkZCgqaXQpOworICAgIGZvciAo
YXV0byYgZmxvdyA6IG5hbWVkRmxvd3MpCisgICAgICAgIG1fbmFtZWRGbG93cy5hZGQoZmxvdyk7
CiB9CiAKIHVuc2lnbmVkIGxvbmcgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bGVuZ3RoKCkgY29u
c3QKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXROYW1lZEZsb3c+IERPTU5hbWVk
RmxvdwogewogICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX25h
bWVkRmxvd3Muc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgRE9NTmFtZWRG
bG93U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZWRGbG93cy5iZWdpbigpOworICAgIGF1
dG8gaXQgPSBtX25hbWVkRmxvd3MuYmVnaW4oKTsKICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9
IDA7IGkgPCBpbmRleDsgKytpKQogICAgICAgICArK2l0OwogICAgIHJldHVybiAqaXQ7CkBAIC01
NSw3ICs1NSw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0TmFtZWRGbG93PiBET01OYW1lZEZsb3cKIAog
UmVmUHRyPFdlYktpdE5hbWVkRmxvdz4gRE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBET01OYW1lZEZsb3dTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lZEZsb3dzLmZpbmQ8U3RyaW5nLCBET01OYW1lZEZs
b3dIYXNoVHJhbnNsYXRvcj4obmFtZSk7CisgICAgYXV0byBpdCA9IG1fbmFtZWRGbG93cy5maW5k
PFN0cmluZywgRE9NTmFtZWRGbG93SGFzaFRyYW5zbGF0b3I+KG5hbWUpOwogICAgIGlmIChpdCAh
PSBtX25hbWVkRmxvd3MuZW5kKCkpCiAgICAgICAgIHJldHVybiAqaXQ7CiAgICAgcmV0dXJuIG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuY3BwCShyZXZpc2lvbiAx
OTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDkgKzQwLDggQEAgYm9vbCBET01TdHJpbmdMaXN0Ojpjb250YWlucyhjb25z
dCBTdHJpbgogICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIGFsbCBjb25zdW1lcnMgb2YgRE9NU3Ry
aW5nTGlzdCBzdG9yZSBmYWlybHkgc21hbGwgbGlzdHMgYW5kIHRodXMgYW4gTyhuKQogICAgIC8v
ICAgICAgICBhbGdvcml0aG0gaXMgT0suICBCdXQgdGhpcyBtYXkgbmVlZCB0byBiZSBvcHRpbWl6
ZWQgaWYgbGFyZ2VyIGFtb3VudHMgb2YgZGF0YSBhcmUKICAgICAvLyAgICAgICAgc3RvcmVkIGlu
IG1fc3RyaW5ncy4KLSAgICBzaXplX3QgY291bnQgPSBtX3N0cmluZ3Muc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAobV9zdHJpbmdz
W2ldID09IHN0cmluZykKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9zdHJpbmdzKSB7CisgICAg
ICAgIGlmICh2YWx1ZSA9PSBzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAxOTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTcsOCArNTU3LDggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwg
Y29uc3QgVQogICAgIGluaXRTZWN1cml0eUNvbnRleHQoKTsKICAgICBpbml0RE5TUHJlZmV0Y2go
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fbm9k
ZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzKTsgKytpKQotICAgICAgICBtX25vZGVMaXN0QW5kQ29s
bGVjdGlvbkNvdW50c1tpXSA9IDA7CisgICAgZm9yIChhdXRvJiBub2RlTGlzdEFuZENvbGxlY3Rp
b25Db3VudCA6IG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzKQorICAgICAgICBub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudCA9IDA7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CkBAIC02MzEyLDEyICs2MzEyLDEyIEBAIHZvaWQgRG9jdW1lbnQ6OmFkanVzdEZsb2F0UXVhZHNG
b3JTY3JvbGwKICAgICAgICAgaW52ZXJzZUZyYW1lU2NhbGUgPSAxIC8gZnJhbWUoKS0+ZnJhbWVT
Y2FsZUZhY3RvcigpOwogCiAgICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3
KCktPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVh
ZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcXVhZHNbaV0ubW92ZSgtdmlzaWJsZUNvbnRlbnRS
ZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOworICAgIGZvciAoYXV0byYgcXVhZCA6
IHF1YWRzKSB7CisgICAgICAgIHF1YWQubW92ZSgtdmlzaWJsZUNvbnRlbnRSZWN0LngoKSwgLXZp
c2libGVDb250ZW50UmVjdC55KCkpOwogICAgICAgICBpZiAoem9vbSAhPSAxKQotICAgICAgICAg
ICAgcXVhZHNbaV0uc2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsKKyAgICAgICAgICAgIHF1YWQu
c2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsKICAgICAgICAgaWYgKGludmVyc2VGcmFtZVNjYWxl
ICE9IDEpCi0gICAgICAgICAgICBxdWFkc1tpXS5zY2FsZShpbnZlcnNlRnJhbWVTY2FsZSwgaW52
ZXJzZUZyYW1lU2NhbGUpOworICAgICAgICAgICAgcXVhZC5zY2FsZShpbnZlcnNlRnJhbWVTY2Fs
ZSwgaW52ZXJzZUZyYW1lU2NhbGUpOwogICAgIH0KIH0KIApAQCAtNjQ3MywxOSArNjQ3MywxOCBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvCiAgICAgICAgICAgICBl
bGVtZW50c1RvQWRkVG9DaGFpbi5hcHBlbmQoZWxlbWVudCk7CiAgICAgfQogCi0gICAgc2l6ZV90
IHJlbW92ZUNvdW50ID0gZWxlbWVudHNUb1JlbW92ZUZyb21DaGFpbi5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVDb3VudDsgKytpKQotICAgICAgICBlbGVtZW50c1Rv
UmVtb3ZlRnJvbUNoYWluW2ldLT5zZXRIb3ZlcmVkKGZhbHNlKTsKKyAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiBlbGVtZW50c1RvUmVtb3ZlRnJvbUNoYWluKQorICAgICAgICBlbGVtZW50LT5zZXRI
b3ZlcmVkKGZhbHNlKTsKIAogICAgIGJvb2wgc2F3Q29tbW9uQW5jZXN0b3IgPSBmYWxzZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGVsZW1lbnRzVG9BZGRUb0NoYWluLnNpemUoKTsg
aSA8IHNpemU7ICsraSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzVG9BZGRU
b0NoYWluKSB7CiAgICAgICAgIGlmIChhbGxvd0FjdGl2ZUNoYW5nZXMpCi0gICAgICAgICAgICBl
bGVtZW50c1RvQWRkVG9DaGFpbltpXS0+c2V0QWN0aXZlKHRydWUpOwotICAgICAgICBpZiAoYW5j
ZXN0b3IgJiYgZWxlbWVudHNUb0FkZFRvQ2hhaW5baV0gPT0gYW5jZXN0b3ItPmVsZW1lbnQoKSkK
KyAgICAgICAgICAgIGVsZW1lbnQtPnNldEFjdGl2ZSh0cnVlKTsKKyAgICAgICAgaWYgKGFuY2Vz
dG9yICYmIGVsZW1lbnQgPT0gYW5jZXN0b3ItPmVsZW1lbnQoKSkKICAgICAgICAgICAgIHNhd0Nv
bW1vbkFuY2VzdG9yID0gdHJ1ZTsKICAgICAgICAgaWYgKCFzYXdDb21tb25BbmNlc3Rvcikgewog
ICAgICAgICAgICAgLy8gRWxlbWVudHMgYWZ0ZXIgdGhlIGNvbW1vbiBob3ZlciBhbmNlc3RvciBk
b2VzIG5vdCBjaGFuZ2UgaG92ZXIgc3RhdGUsIGJ1dCBhcmUgaXRlcmF0ZWQgb3ZlciBiZWNhdXNl
IHRoZXkgbWF5IGNoYW5nZSBhY3RpdmUgc3RhdGUuCi0gICAgICAgICAgICBlbGVtZW50c1RvQWRk
VG9DaGFpbltpXS0+c2V0SG92ZXJlZCh0cnVlKTsKKyAgICAgICAgICAgIGVsZW1lbnQtPnNldEhv
dmVyZWQodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxOTE3MjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzkwLDkgKzM5MCw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
Ojpjb3B5TWFya2UKIAogICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBzdGFydE9mZnNldCArIGxlbmd0aCAtIDE7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFy
a2VyID0gbGlzdC0+YXQoaSk7Ci0KKyAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7CiAg
ICAgICAgIC8vIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKICAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQogICAgICAgICAgICAg
YnJlYWs7CkBAIC01NjEsOSArNTU5LDggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlbW92ZU1hcgogCiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPj4gbm9kZXNXaXRoTWFya2VyczsK
ICAgICBjb3B5S2V5c1RvVmVjdG9yKG1fbWFya2Vycywgbm9kZXNXaXRoTWFya2Vycyk7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IG5vZGVzV2l0aE1hcmtlcnMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgTWFya2VyTWFwOjppdGVyYXRvciBp
dGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGVzV2l0aE1hcmtlcnNbaV0pOworICAgIGZvciAo
YXV0byYgbm9kZSA6IG5vZGVzV2l0aE1hcmtlcnMpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fbWFya2Vycy5maW5kKG5vZGUpOwogICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJz
LmVuZCgpKQogICAgICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0ZXJhdG9yLCBtYXJr
ZXJUeXBlcyk7CiAgICAgfQpAQCAtNjE5LDEyICs2MTYsMTEgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlcGFpbnRNYQogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7
CiAKICAgICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUg
ZG9jdW1lbnQKLSAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsK
LSAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1fbWFya2Vycy5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5rZXkuZ2V0KCk7CisgICAgZm9y
IChhdXRvJiBtYXJrZXIgOiBtX21hcmtlcnMpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1hcmtl
ci5rZXkuZ2V0KCk7CiAKICAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtl
ciBpbiB0aGUgY3VycmVudCBub2RlCi0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1hcmtlci52YWx1ZS5nZXQoKTsK
ICAgICAgICAgYm9vbCBub2RlTmVlZHNSZXBhaW50ID0gZmFsc2U7CiAgICAgICAgIGZvciAoYXV0
byYgbWFya2VyIDogKmxpc3QpIHsKICAgICAgICAgICAgIGlmIChtYXJrZXJUeXBlcy5jb250YWlu
cyhtYXJrZXIudHlwZSgpKSkgewpAQCAtNzk4LDE1ICs3OTQsMTEgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzYwogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnNob3dNYXJrZXJzKCkgY29uc3QKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhh
dmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5zaXplKCkpOwotICAgIE1hcmtlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwotICAgIGZvciAoTWFya2VyTWFwOjpjb25z
dF9pdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9y
ICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVy
YXRvci0+a2V5LmdldCgpOworICAgIGZvciAoYXV0byYgbWFya2VyIDogbV9tYXJrZXJzKSB7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSBtYXJrZXIua2V5LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0
b3ItPnZhbHVlLmdldCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsg
bWFya2VySW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAg
IGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7Ci0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRdKCVkKSIsIG1hcmtlci50eXBl
KCksIG1hcmtlci5zdGFydE9mZnNldCgpLCBtYXJrZXIuZW5kT2Zmc2V0KCksIG1hcmtlci5hY3Rp
dmVNYXRjaCgpKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGRvY3VtZW50TWFya2Vy
IDogKm1hcmtlci52YWx1ZS5nZXQoKSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVk
OlslZDolZF0oJWQpIiwgZG9jdW1lbnRNYXJrZXIudHlwZSgpLCBkb2N1bWVudE1hcmtlci5zdGFy
dE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5lbmRPZmZzZXQoKSwgZG9jdW1lbnRNYXJrZXIuYWN0
aXZlTWF0Y2goKSk7CiAKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDkg
KzE4MCw5IEBAIGJvb2wgRWxlbWVudERhdGE6OmlzRXF1aXZhbGVudChjb25zdCBFbGUKIAogQXR0
cmlidXRlKiBVbmlxdWVFbGVtZW50RGF0YTo6ZmluZEF0dHJpYnV0ZUJ5TmFtZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gbV9h
dHRyaWJ1dGVWZWN0b3Iuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAobV9h
dHRyaWJ1dGVWZWN0b3IuYXQoaSkubmFtZSgpLm1hdGNoZXMobmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gJm1fYXR0cmlidXRlVmVjdG9yLmF0KGkpOworICAgIGZvciAoYXV0byYgYXR0cmlidXRl
IDogbV9hdHRyaWJ1dGVWZWN0b3IpIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZS5uYW1lKCkubWF0
Y2hlcyhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAmYXR0cmlidXRlOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCShyZXZpc2lvbiAxOTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDkgKzQ4NCw4IEBAIGJvb2wgRXZlbnRQYXRo
Ojp1cGRhdGVUb3VjaExpc3RzKGNvbnN0IFQKICAgICBhZGRSZWxhdGVkTm9kZVJlc29sdmVyc0Zv
clRvdWNoTGlzdCh0b3VjaFRhcmdldFJlc29sdmVycywgdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hl
cygpLCBUb3VjaEV2ZW50Q29udGV4dDo6Q2hhbmdlZFRvdWNoZXMpOwogCiAgICAgQVNTRVJUKHRv
dWNoVGFyZ2V0UmVzb2x2ZXJzLnNpemUoKSA9PSB0b3VjaE5vZGVDb3VudCk7Ci0gICAgc2l6ZV90
IGV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZXZlbnRQYXRoU2l6ZTsgKytpKSB7Ci0gICAgICAgIFRvdWNoRXZlbnRDb250ZXh0JiBjb250
ZXh0ID0gdG9Ub3VjaEV2ZW50Q29udGV4dCgqbV9wYXRoW2ldKTsKKyAgICBmb3IgKGF1dG8mIGV2
ZW50UGF0aCA6IG1fcGF0aCkgeworICAgICAgICBUb3VjaEV2ZW50Q29udGV4dCYgY29udGV4dCA9
IHRvVG91Y2hFdmVudENvbnRleHQoKmV2ZW50UGF0aCk7CiAgICAgICAgIE5vZGUmIG5vZGVUb01v
dmVUbyA9ICpjb250ZXh0Lm5vZGUoKTsKICAgICAgICAgZm9yIChzaXplX3QgcmVzb2x2ZXJJbmRl
eCA9IDA7IHJlc29sdmVySW5kZXggPCB0b3VjaE5vZGVDb3VudDsgKytyZXNvbHZlckluZGV4KSB7
CiAgICAgICAgICAgICBFdmVudFJlbGF0ZWROb2RlUmVzb2x2ZXImIGN1cnJlbnRSZXNvbHZlciA9
IHRvdWNoVGFyZ2V0UmVzb2x2ZXJzW3Jlc29sdmVySW5kZXhdOwpAQCAtNjY3LDggKzY2Niw4IEBA
IHZvaWQgRXZlbnRQYXRoOjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUmIG8KIAogYm9vbCBFdmVudFBh
dGg6Omhhc0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25z
dAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXRoLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmIChtX3BhdGhbaV0tPm5vZGUoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBl
KSkKKyAgICBmb3IgKGF1dG8mIGV2ZW50UGF0aCA6IG1fcGF0aCkgeworICAgICAgICBpZiAoZXZl
bnRQYXRoLT5ub2RlKCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dExpc3RlbmVyTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCBFdmVudExp
c3RlbmVyTWFwOjpFdmVudExpc3RlbmVyTWFwKCkKIAogYm9vbCBFdmVudExpc3RlbmVyTWFwOjpj
b250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBlKQorICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2VudHJpZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5LmZpcnN0ID09IGV2ZW50VHlwZSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC02Niwx
MSArNjYsMTAgQEAgYm9vbCBFdmVudExpc3RlbmVyTWFwOjpjb250YWlucyhjb25zdCBBdAogCiBi
b29sIEV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zQ2FwdHVyaW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Vu
dHJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW50cmllc1tpXS5maXJzdCA9PSBl
dmVudFR5cGUpIHsKLSAgICAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3IqIHZlY3Rv
ciA9IG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgdmVjdG9yLT5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICh2
ZWN0b3ItPmF0KGopLnVzZUNhcHR1cmUpCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmll
cykgeworICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBlKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiAqZW50cnkuc2Vjb25kLmdldCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTkwLDggKzg5
LDggQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZlbnRMaXN0ZW5lck1hcDo6ZQogICAgIFZlY3Rv
cjxBdG9taWNTdHJpbmc+IHR5cGVzOwogICAgIHR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRy
aWVzLnNpemUoKTsgKytpKQotICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQobV9lbnRyaWVz
W2ldLmZpcnN0KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQorICAgICAgICB0
eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnkuZmlyc3QpOwogCiAgICAgcmV0dXJuIHR5cGVzOwog
fQpAQCAtMTExLDkgKzExMCw5IEBAIGJvb2wgRXZlbnRMaXN0ZW5lck1hcDo6YWRkKGNvbnN0IEF0
b21pY1MKIHsKICAgICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygpOwogCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9l
bnRyaWVzW2ldLmZpcnN0ID09IGV2ZW50VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBhZGRMaXN0
ZW5lclRvVmVjdG9yKG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0
dXJlKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAgICAgIGlmIChl
bnRyeS5maXJzdCA9PSBldmVudFR5cGUpCisgICAgICAgICAgICByZXR1cm4gYWRkTGlzdGVuZXJU
b1ZlY3RvcihlbnRyeS5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgICB9
CiAKICAgICBtX2VudHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGV2ZW50VHlwZSwgc3RkOjpt
YWtlX3VuaXF1ZTxFdmVudExpc3RlbmVyVmVjdG9yPigpKSk7CkBAIC0xNTAsOSArMTQ5LDkgQEAg
RXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5lck1hcDo6ZgogewogICAgIGFzc2VydE5v
QWN0aXZlSXRlcmF0b3JzKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRy
aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZl
bnRUeXBlKQotICAgICAgICAgICAgcmV0dXJuIG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCk7Cisg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAgICAgICBpZiAoZW50cnkuZmly
c3QgPT0gZXZlbnRUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnNlY29uZC5nZXQoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE4MiwxMSArMTgxLDExIEBAIHZvaWQg
RXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudEwKIAogc3RhdGljIHZvaWQgY29weUxp
c3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyVmVjdG9yLCBFdmVudFRhcmdl
dCogdGFyZ2V0KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJWZWN0b3It
PnNpemUoKTsgKytpKSB7CisgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6ICpsaXN0ZW5lclZlY3Rv
cikgewogICAgICAgICAvLyBFdmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cCBoYXZl
IGFscmVhZHkgYmVlbiB0cmFuc2ZlcmVkIHRvIHRoZSBzaGFkb3cgdHJlZSBkdXJpbmcgY2xvbmlu
Zy4KLSAgICAgICAgaWYgKCgqbGlzdGVuZXJWZWN0b3IpW2ldLmxpc3RlbmVyLT53YXNDcmVhdGVk
RnJvbU1hcmt1cCgpKQorICAgICAgICBpZiAobGlzdGVuZXIubGlzdGVuZXItPndhc0NyZWF0ZWRG
cm9tTWFya3VwKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGFyZ2V0LT5hZGRF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKCpsaXN0ZW5lclZlY3RvcilbaV0ubGlzdGVuZXIuY29w
eVJlZigpLCAoKmxpc3RlbmVyVmVjdG9yKVtpXS51c2VDYXB0dXJlKTsKKyAgICAgICAgdGFyZ2V0
LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIubGlzdGVuZXIuY29weVJlZigp
LCBsaXN0ZW5lci51c2VDYXB0dXJlKTsKICAgICB9CiB9CiAKQEAgLTE5NCw4ICsxOTMsOCBAQCB2
b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVyCiB7CiAgICAgYXNzZXJ0Tm9B
Y3RpdmVJdGVyYXRvcnMoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VudHJp
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvcHlMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1
cFRvVGFyZ2V0KG1fZW50cmllc1tpXS5maXJzdCwgbV9lbnRyaWVzW2ldLnNlY29uZC5nZXQoKSwg
dGFyZ2V0KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQorICAgICAgICBjb3B5
TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChlbnRyeS5maXJzdCwgZW50cnku
c2Vjb25kLmdldCgpLCB0YXJnZXQpOwogfQogCiBFdmVudExpc3RlbmVySXRlcmF0b3I6OkV2ZW50
TGlzdGVuZXJJdGVyYXRvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDggKzk0LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjbwogICAgIC8vIHRoZXkgaGF2ZSBvbmUgbGVzcyBsaXN0ZW5lciB0byBpbnZv
a2UuCiAgICAgaWYgKCFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycykKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRmlyaW5nRXZlbnRJdGVyYXRvciYgZmlyaW5nSXRlcmF0
b3IgPSBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXQoaSk7CisgICAgZm9yIChhdXRvJiBmaXJp
bmdJdGVyYXRvciA6ICpkLT5maXJpbmdFdmVudEl0ZXJhdG9ycykgewogICAgICAgICBpZiAoZXZl
bnRUeXBlICE9IGZpcmluZ0l0ZXJhdG9yLmV2ZW50VHlwZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkBAIC0xMjAsMTAgKzExOSw5IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OnNldEF0dHJpYnV0ZUV2
ZW50TGlzdGUKIAogRXZlbnRMaXN0ZW5lciogRXZlbnRUYXJnZXQ6OmdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgY29uc3QgRXZl
bnRMaXN0ZW5lclZlY3RvciYgZW50cnkgPSBnZXRFdmVudExpc3RlbmVycyhldmVudFR5cGUpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGVudHJ5W2ldLmxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IGVudHJ5W2ldLmxpc3RlbmVyLmdldCgpOworICAgIGZvciAoYXV0byYgZXZlbnRMaXN0ZW5lciA6
IGdldEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpIHsKKyAgICAgICAgaWYgKGV2ZW50TGlzdGVu
ZXIubGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZXZlbnRMaXN0
ZW5lci5saXN0ZW5lci5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yODAsOSAr
Mjc4LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcgogICAgIC8v
IE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBsYW5uaW5nIHRvIGludm9rZSB0aGUgbGlzdGVuZXIgYXQg
J2luZGV4JyB0aGF0CiAgICAgLy8gdGhleSBoYXZlIG9uZSBsZXNzIGxpc3RlbmVyIHRvIGludm9r
ZS4KICAgICBpZiAoZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpIHsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hdChpKS5pdGVyYXRvciA9IDA7Ci0g
ICAgICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXQoaSkuc2l6ZSA9IDA7CisgICAg
ICAgIGZvciAoYXV0byYgZmlyaW5nRXZlbnRJdGVyYXRvciA6ICpkLT5maXJpbmdFdmVudEl0ZXJh
dG9ycykgeworICAgICAgICAgICAgZmlyaW5nRXZlbnRJdGVyYXRvci5pdGVyYXRvciA9IDA7Cisg
ICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJhdG9yLnNpemUgPSAwOwogICAgICAgICB9CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdl
dE9ic2VydmVyUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNSArNjUsMTUgQEAg
dm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6Om5vdGlmeU9icwogCiAgICAgVmVjdG9yPElk
VGFyZ2V0T2JzZXJ2ZXIqPiBjb3B5OwogICAgIGNvcHlUb1ZlY3RvcigqbV9ub3RpZnlpbmdPYnNl
cnZlcnNJblNldCwgY29weSk7Ci0gICAgZm9yIChWZWN0b3I8SWRUYXJnZXRPYnNlcnZlcio+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gY29weS5lbmQoKTsgKytpdCkg
ewotICAgICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMoKml0KSkK
LSAgICAgICAgICAgICgqaXQpLT5pZFRhcmdldENoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8mIG9i
c2VydmVyIDogY29weSkgeworICAgICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldC0+
Y29udGFpbnMob2JzZXJ2ZXIpKQorICAgICAgICAgICAgb2JzZXJ2ZXItPmlkVGFyZ2V0Q2hhbmdl
ZCgpOwogICAgIH0KIAogICAgIGlmIChtX25vdGlmeWluZ09ic2VydmVyc0luU2V0LT5pc0VtcHR5
KCkpCiAgICAgICAgIG1fcmVnaXN0cnkucmVtb3ZlKCZpZCk7CiAKLSAgICBtX25vdGlmeWluZ09i
c2VydmVyc0luU2V0ID0gMDsKKyAgICBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0ID0gbnVsbHB0
cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuY3BwCShyZXZpc2lvbiAxOTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2OSw4IEBAIHZvaWQgTWVzc2FnZVBv
cnQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHIKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOwogICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY29u
bmVjdGVkIHRvIGFueSBvZiB0aGUgcGFzc2VkLWluIHBvcnRzLgogICAgIGlmIChwb3J0cykgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBvcnRzLT5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgTWVzc2FnZVBvcnQqIGRhdGFQb3J0ID0gKCpwb3J0cylbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhpcyB8fCBtX2VudGFuZ2xlZENoYW5uZWwt
PmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQpKSB7CisgICAgICAgIGZvciAoYXV0byYgZGF0YVBvcnQg
OiAqcG9ydHMpIHsKKyAgICAgICAgICAgIGlmIChkYXRhUG9ydCA9PSB0aGlzIHx8IG1fZW50YW5n
bGVkQ2hhbm5lbC0+aXNDb25uZWN0ZWRUbyhkYXRhUG9ydC5nZXQoKSkpIHsKICAgICAgICAgICAg
ICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KQEAgLTE5MiwxMyArMTkxLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9y
dENoYW5uZWxBcnJheT4KICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4gcG9ydFNldDsKIAogICAg
IC8vIFdhbGsgdGhlIGluY29taW5nIGFycmF5IC0gaWYgdGhlcmUgYXJlIGFueSBkdXBsaWNhdGUg
cG9ydHMsIG9yIG51bGwgcG9ydHMgb3IgY2xvbmVkIHBvcnRzLCB0aHJvdyBhbiBlcnJvciAocGVy
IHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMpLgotICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgcG9ydHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE1lc3NhZ2VQb3J0KiBw
b3J0ID0gKCpwb3J0cylbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghcG9ydCB8fCBwb3J0LT5pc05l
dXRlcmVkKCkgfHwgcG9ydFNldC5jb250YWlucyhwb3J0KSkgeworICAgIGZvciAoYXV0byYgcG9y
dCA6ICpwb3J0cykgeworICAgICAgICBpZiAoIXBvcnQgfHwgcG9ydC0+aXNOZXV0ZXJlZCgpIHx8
IHBvcnRTZXQuY29udGFpbnMocG9ydC5nZXQoKSkpIHsKICAgICAgICAgICAgIGVjID0gREFUQV9D
TE9ORV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAg
ICBwb3J0U2V0LmFkZChwb3J0KTsKKyAgICAgICAgcG9ydFNldC5hZGQocG9ydC5nZXQoKSk7CiAg
ICAgfQogCiAgICAgLy8gUGFzc2VkLWluIHBvcnRzIHBhc3NlZCB2YWxpZGl0eSBjaGVja3MsIHNv
IHdlIGNhbiBkaXNlbnRhbmdsZSB0aGVtLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bk9ic2VydmVyLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw5ICs4OCw5IEBAIHZvaWQg
TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2QKICAgICB9OwogICAgIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMgPSAwOwogICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGJvb2xlYW5PcHRpb25zKSAvIHNpemVv
Zihib29sZWFuT3B0aW9uc1swXSk7ICsraSkgewotICAgICAgICBpZiAob3B0aW9uc0RpY3Rpb25h
cnkuZ2V0KGJvb2xlYW5PcHRpb25zW2ldLm5hbWUsIHZhbHVlKSAmJiB2YWx1ZSkKLSAgICAgICAg
ICAgIG9wdGlvbnMgfD0gYm9vbGVhbk9wdGlvbnNbaV0udmFsdWU7CisgICAgZm9yIChhdXRvJiBi
b29sZWFuT3B0aW9uIDogYm9vbGVhbk9wdGlvbnMpIHsKKyAgICAgICAgaWYgKG9wdGlvbnNEaWN0
aW9uYXJ5LmdldChib29sZWFuT3B0aW9uLm5hbWUsIHZhbHVlKSAmJiB2YWx1ZSkKKyAgICAgICAg
ICAgIG9wdGlvbnMgfD0gYm9vbGVhbk9wdGlvbi52YWx1ZTsKICAgICB9CiAKICAgICBIYXNoU2V0
PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOwpAQCAtMTkxLDggKzE5MSw4IEBAIHZvaWQg
TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcigpCiAgICAgICAgIGlmIChyZWdpc3RyYXRpb24tPmhh
c1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKICAgICAgICAgICAgIHRyYW5zaWVudFJlZ2lzdHJh
dGlvbnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdHJhbnNpZW50UmVnaXN0cmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgdHJhbnNp
ZW50UmVnaXN0cmF0aW9uc1tpXS0+Y2xlYXJUcmFuc2llbnRSZWdpc3RyYXRpb25zKCk7CisgICAg
Zm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiB0cmFuc2llbnRSZWdpc3RyYXRpb25zKQorICAgICAg
ICByZWdpc3RyYXRpb24tPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpOwogCiAgICAgaWYg
KG1fcmVjb3Jkcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNCwxMiArMjE0LDEy
IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW8KICAgICBpZiAoIXN1
c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIFZlY3RvcjxS
ZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+IHN1c3BlbmRlZDsKICAgICAgICAgY29weVRvVmVjdG9y
KHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCksIHN1c3BlbmRlZCk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3VzcGVuZGVkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXN1c3BlbmRlZFtpXS0+Y2FuRGVsaXZlcigpKQorICAgICAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyIDogc3VzcGVuZGVkKSB7CisgICAgICAgICAgICBpZiAoIW9ic2VydmVyLT5jYW5EZWxpdmVy
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHN1c3BlbmRlZE11
dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKHN1c3BlbmRlZFtpXSk7Ci0gICAgICAgICAgICBhY3Rp
dmVNdXRhdGlvbk9ic2VydmVycygpLmFkZChzdXNwZW5kZWRbaV0pOworICAgICAgICAgICAgc3Vz
cGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2ZXIpOworICAgICAgICAgICAg
YWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMzEsMTEgKzIzMSwxMSBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJB
bGxNdXRhdGlvCiAgICAgICAgICAgICByZXR1cm4gbGhzLT5tX3ByaW9yaXR5IDwgcmhzLT5tX3By
aW9yaXR5OwogICAgICAgICB9KTsKIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
c2VydmVycy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG9ic2VydmVyc1tpXS0+Y2Fu
RGVsaXZlcigpKQotICAgICAgICAgICAgICAgIG9ic2VydmVyc1tpXS0+ZGVsaXZlcigpOworICAg
ICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzKSB7CisgICAgICAgICAgICBpZiAo
b2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKKyAgICAgICAgICAgICAgICBvYnNlcnZlci0+ZGVsaXZl
cigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN1c3BlbmRlZE11dGF0aW9u
T2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyc1tpXSk7CisgICAgICAgICAgICAgICAgc3VzcGVuZGVk
TXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biAxOTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywxMSBAQCBWZWN0b3I8UmVmUHRyPFdlYktpdE5h
bWVkRmxvdz4+IE5hbWVkRmxvCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJLaXROYW1lZEZsb3c+
PiBuYW1lZEZsb3dzOwogCi0gICAgZm9yIChOYW1lZEZsb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9u
YW1lZEZsb3dzLmJlZ2luKCk7IGl0ICE9IG1fbmFtZWRGbG93cy5lbmQoKTsgKytpdCkgewotICAg
ICAgICBpZiAoKCppdCktPmZsb3dTdGF0ZSgpID09IFdlYktpdE5hbWVkRmxvdzo6Rmxvd1N0YXRl
TnVsbCkKKyAgICBmb3IgKGF1dG8mIG5hbWVkRmxvdyA6IG1fbmFtZWRGbG93cykgeworICAgICAg
ICBpZiAobmFtZWRGbG93LT5mbG93U3RhdGUoKSA9PSBXZWJLaXROYW1lZEZsb3c6OkZsb3dTdGF0
ZU51bGwpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBuYW1lZEZsb3dzLmFwcGVu
ZChSZWZQdHI8V2ViS2l0TmFtZWRGbG93PigqaXQpKTsKKyAgICAgICAgbmFtZWRGbG93cy5hcHBl
bmQoUmVmUHRyPFdlYktpdE5hbWVkRmxvdz4obmFtZWRGbG93KSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG5hbWVkRmxvd3M7CkBAIC0xMDcsOSArMTA3LDEwIEBAIERvY3VtZW50KiBOYW1lZEZsb3dD
b2xsZWN0aW9uOjpkb2N1bWVudCgKIFBhc3NSZWZQdHI8RE9NTmFtZWRGbG93Q29sbGVjdGlvbj4g
TmFtZWRGbG93Q29sbGVjdGlvbjo6Y3JlYXRlQ1NTT01TbmFwc2hvdCgpCiB7CiAgICAgVmVjdG9y
PFdlYktpdE5hbWVkRmxvdyo+IGNyZWF0ZWRGbG93czsKLSAgICBmb3IgKE5hbWVkRmxvd1NldDo6
aXRlcmF0b3IgaXQgPSBtX25hbWVkRmxvd3MuYmVnaW4oKTsgaXQgIT0gbV9uYW1lZEZsb3dzLmVu
ZCgpOyArK2l0KQotICAgICAgICBpZiAoKCppdCktPmZsb3dTdGF0ZSgpID09IFdlYktpdE5hbWVk
Rmxvdzo6Rmxvd1N0YXRlQ3JlYXRlZCkKLSAgICAgICAgICAgIGNyZWF0ZWRGbG93cy5hcHBlbmQo
Kml0KTsKKyAgICBmb3IgKGF1dG8mIG5hbWVkRmxvdyA6IG1fbmFtZWRGbG93cykgeworICAgICAg
ICBpZiAobmFtZWRGbG93LT5mbG93U3RhdGUoKSA9PSBXZWJLaXROYW1lZEZsb3c6OkZsb3dTdGF0
ZUNyZWF0ZWQpCisgICAgICAgICAgICBjcmVhdGVkRmxvd3MuYXBwZW5kKG5hbWVkRmxvdyk7Cisg
ICAgfQogICAgIHJldHVybiBET01OYW1lZEZsb3dDb2xsZWN0aW9uOjpjcmVhdGUoY3JlYXRlZEZs
b3dzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDc0LDkgKzIwNzQs
OCBAQCB2b2lkIE5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJzTm9kZVdpCiAKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJ5ID0gbm9kZS0+bXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gcmVnaXN0cnkt
PnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQot
ICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LT5hdChpKS0+b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxE
ZXRhY2godGhpcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbiA6ICpyZWdp
c3RyeSkKKyAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24tPm9ic2VydmVkU3VidHJlZU5vZGVX
aWxsRGV0YWNoKHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGF1dG8qIHRyYW5zaWVu
dFJlZ2lzdHJ5ID0gbm9kZS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU1LDE2ICs3NTUsMTYgQEAgUmVm
UHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZQogCiB2b2lkIFJhbmdlOjpwcm9j
ZXNzTm9kZXMoQWN0aW9uVHlwZSBhY3Rpb24sIFZlY3RvcjxSZWZQdHI8Tm9kZT4+JiBub2Rlcywg
UGFzc1JlZlB0cjxOb2RlPiBvbGRDb250YWluZXIsIFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q29udGFp
bmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgewogICAg
ICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgICAgICBjYXNlIERlbGV0ZToKLSAgICAgICAgICAg
IG9sZENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobm9kZXNbaV0uZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIG9sZENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgZWMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRXh0cmFjdDoKLSAgICAgICAgICAgIG5ld0NvbnRhaW5l
ci0+YXBwZW5kQ2hpbGQobm9kZXNbaV0ucmVsZWFzZSgpLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIG4g
ZnJvbSBpdHMgcGFyZW50CisgICAgICAgICAgICBuZXdDb250YWluZXItPmFwcGVuZENoaWxkKG5v
ZGUucmVsZWFzZSgpLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBpdHMgcGFyZW50CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9uZToKLSAgICAgICAgICAgIG5ld0NvbnRh
aW5lci0+YXBwZW5kQ2hpbGQobm9kZXNbaV0tPmNsb25lTm9kZSh0cnVlKSwgZWMpOworICAgICAg
ICAgICAgbmV3Q29udGFpbmVyLT5hcHBlbmRDaGlsZChub2RlLT5jbG9uZU5vZGUodHJ1ZSksIGVj
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgwLDggKzc4MCw3
IEBAIFJlZlB0cjxOb2RlPiBSYW5nZTo6cHJvY2Vzc0FuY2VzdG9yc0FuZFQKICAgICAgICAgYW5j
ZXN0b3JzLmFwcGVuZChuKTsKIAogICAgIFJlZlB0cjxOb2RlPiBmaXJzdENoaWxkSW5BbmNlc3Rv
clRvUHJvY2VzcyA9IGRpcmVjdGlvbiA9PSBQcm9jZXNzQ29udGVudHNGb3J3YXJkID8gY29udGFp
bmVyLT5uZXh0U2libGluZygpIDogY29udGFpbmVyLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8Tm9kZT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFuY2VzdG9ycy5i
ZWdpbigpOyBpdCAhPSBhbmNlc3RvcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPE5v
ZGU+IGFuY2VzdG9yID0gKml0OworICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnMp
IHsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBDbG9uZSkgewog
ICAgICAgICAgICAgaWYgKFJlZlB0cjxOb2RlPiBjbG9uZWRBbmNlc3RvciA9IGFuY2VzdG9yLT5j
bG9uZU5vZGUoZmFsc2UpKSB7IC8vIE1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkIGFscmVhZHkgZHVy
aW5nIG11dGF0aW9uIGV2ZW50LgogICAgICAgICAgICAgICAgIGNsb25lZEFuY2VzdG9yLT5hcHBl
bmRDaGlsZChjbG9uZWRDb250YWluZXIsIGVjKTsKQEAgLTc5OSwxNyArNzk4LDE2IEBAIFJlZlB0
cjxOb2RlPiBSYW5nZTo6cHJvY2Vzc0FuY2VzdG9yc0FuZFQKICAgICAgICAgICAgIGNoaWxkID0g
KGRpcmVjdGlvbiA9PSBQcm9jZXNzQ29udGVudHNGb3J3YXJkKSA/IGNoaWxkLT5uZXh0U2libGlu
ZygpIDogY2hpbGQtPnByZXZpb3VzU2libGluZygpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KGNoaWxkKTsKIAotICAgICAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bm9kZXMuYmVnaW4oKTsgaXQgIT0gbm9kZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIE5v
ZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbm9kZXMp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAgICAgICAgICBjYXNlIERlbGV0
ZToKLSAgICAgICAgICAgICAgICBhbmNlc3Rvci0+cmVtb3ZlQ2hpbGQoY2hpbGQsIGVjKTsKKyAg
ICAgICAgICAgICAgICBhbmNlc3Rvci0+cmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCksIGVjKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRXh0cmFjdDogLy8gd2lsbCBy
ZW1vdmUgY2hpbGQgZnJvbSBhbmNlc3RvcgogICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24g
PT0gUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCkKLSAgICAgICAgICAgICAgICAgICAgY2xvbmVkQ29u
dGFpbmVyLT5hcHBlbmRDaGlsZChjaGlsZCwgZWMpOworICAgICAgICAgICAgICAgICAgICBjbG9u
ZWRDb250YWluZXItPmFwcGVuZENoaWxkKGNoaWxkLmdldCgpLCBlYyk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjbG9uZWRDb250YWluZXItPmluc2VydEJlZm9y
ZShjaGlsZCwgY2xvbmVkQ29udGFpbmVyLT5maXJzdENoaWxkKCksIGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2xvbmVkQ29udGFpbmVyLT5pbnNlcnRCZWZvcmUoY2hpbGQuZ2V0KCksIGNsb25l
ZENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLCBlYyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIENsb25lOgogICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
UHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCkKQEAgLTExODIsOSArMTE4MCw4IEBAIEludFJlY3QgUmFu
Z2U6OmFic29sdXRlQm91bmRpbmdCb3goKSBjb24KICAgICBJbnRSZWN0IHJlc3VsdDsKICAgICBW
ZWN0b3I8SW50UmVjdD4gcmVjdHM7CiAgICAgYWJzb2x1dGVUZXh0UmVjdHMocmVjdHMpOwotICAg
IGNvbnN0IHNpemVfdCBuID0gcmVjdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbjsgKytpKQotICAgICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOworICAgIGZvciAoYXV0
byYgcmVjdCA6IHJlY3RzKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTMxNiwxNSArMTMxMywxMyBAQCB2b2lkIFJhbmdlOjpjb2xsZWN0
U2VsZWN0aW9uUmVjdHMoVmVjdG9yCiAgICAgICAgICAgICBpbnQgYmVnaW5TZWxlY3Rpb25PZmZz
ZXQgPSBpc1N0YXJ0Tm9kZSA/IHN0YXJ0T2Zmc2V0IDogMDsKICAgICAgICAgICAgIGludCBlbmRT
ZWxlY3Rpb25PZmZzZXQgPSBpc0VuZE5vZGUgPyBlbmRPZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwogICAgICAgICAgICAgcmVuZGVyZXItPmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyhuZXdSZWN0cywgYmVnaW5TZWxlY3Rpb25PZmZzZXQsIGVuZFNlbGVjdGlvbk9mZnNldCk7
Ci0gICAgICAgICAgICBzaXplX3QgbnVtYmVyT2ZOZXdSZWN0cyA9IG5ld1JlY3RzLnNpemUoKTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZOZXdSZWN0czsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uUmVjdCYgc2VsZWN0aW9uUmVjdCA9IG5ld1Jl
Y3RzW2ldOworICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogbmV3UmVjdHMp
IHsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc1N0YXJ0KCkgJiYg
IWlzU3RhcnROb2RlKQogICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRh
aW5zU3RhcnQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmNvbnRh
aW5zRW5kKCkgJiYgIWlzRW5kTm9kZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVj
dC5zZXRDb250YWluc0VuZChmYWxzZSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJl
Y3QubG9naWNhbFdpZHRoKCkgfHwgc2VsZWN0aW9uUmVjdC5sb2dpY2FsSGVpZ2h0KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChuZXdSZWN0c1tpXSk7CisgICAgICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG5ld1JlY3RzLnNocmluaygwKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdFJ1bm5lci5jcHAJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTAgKzExMCw5IEBAIHZv
aWQgU2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKCkKICAgICBpZiAobnVtSW5PcmRlclNjcmlwdHNU
b0V4ZWN1dGUpCiAgICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIucmVtb3ZlKDAsIG51
bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKTsKIAotICAgIHNpemVfdCBzaXplID0gc2NyaXB0cy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
Q2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBzY3JpcHRzW2ldLmNhY2hlZFNjcmlwdCgpOwot
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHNjcmlwdHNbaV0ucmVsZWFzZUVsZW1l
bnRBbmRDbGVhcigpOworICAgIGZvciAoYXV0byYgc2NyaXB0IDogc2NyaXB0cykgeworICAgICAg
ICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHNjcmlwdC5jYWNoZWRTY3JpcHQoKTsKKyAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBzY3JpcHQucmVsZWFzZUVsZW1lbnRBbmRD
bGVhcigpOwogICAgICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgICAgIC8vIFBhcGVyIG92ZXIg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA1MAogICAgICAgICBp
ZiAoIWVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTkxNzI1KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw4ICsxNDksNyBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2Vydmlj
CiAgICAgLy8gcmVmZXJlbmNlIHRvIHVzLCBzbyB0YWtlIGEgZGVmZW5zaXZlIHJlZmVyZW5jZS4K
ICAgICBSZWY8U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrKiBjYWxsYmFjayA9IGNhbGxiYWNrc1tp
XS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogY2FsbGJhY2tzKSB7CiAgICAgICAg
IGlmICghY2FsbGJhY2stPm1fZmlyZWRPckNhbmNlbGxlZCkgewogICAgICAgICAgICAgY2FsbGJh
Y2stPm1fZmlyZWRPckNhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RmlyZUFuaW1hdGlvbkZyYW1lKG1fZG9jdW1lbnQsIGNhbGxiYWNrLT5tX2lkKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9uIDE5MTcyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDkg
KzEzNSw4IEBAIGlubGluZSBFbGVtZW50KiBTZWxlY3RvckRhdGFMaXN0OjpzZWxlY3QKIAogYm9v
bCBTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKEVsZW1lbnQmIHRhcmdldEVsZW1lbnQpIGNvbnN0
CiB7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3JzLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7Ci0gICAgICAg
IGlmIChzZWxlY3Rvck1hdGNoZXMobV9zZWxlY3RvcnNbaV0sIHRhcmdldEVsZW1lbnQsIHRhcmdl
dEVsZW1lbnQpKQorICAgIGZvciAoYXV0byYgc2VsY3RvciA6IG1fc2VsZWN0b3JzKSB7CisgICAg
ICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2VsY3RvciwgdGFyZ2V0RWxlbWVudCwgdGFyZ2V0RWxl
bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjIwLDEyICsyMTksMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxp
c3Q6OmV4ZQogICAgIGlmIChVTkxJS0VMWShyb290Tm9kZS50cmVlU2NvcGUoKS5jb250YWluc011
bHRpcGxlRWxlbWVudHNXaXRoSWQoaWRUb01hdGNoKSkpIHsKICAgICAgICAgY29uc3QgVmVjdG9y
PEVsZW1lbnQqPiogZWxlbWVudHMgPSByb290Tm9kZS50cmVlU2NvcGUoKS5nZXRBbGxFbGVtZW50
c0J5SWQoaWRUb01hdGNoKTsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKLSAgICAgICAgc2l6
ZV90IGNvdW50ID0gZWxlbWVudHMtPnNpemUoKTsKICAgICAgICAgYm9vbCByb290Tm9kZUlzVHJl
ZVNjb3BlUm9vdCA9IGlzVHJlZVNjb3BlUm9vdChyb290Tm9kZSk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVu
dCA9ICplbGVtZW50cy0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAoKHJvb3ROb2RlSXNUcmVlU2Nv
cGVSb290IHx8IGVsZW1lbnQuaXNEZXNjZW5kYW50T2YoJnJvb3ROb2RlKSkgJiYgc2VsZWN0b3JN
YXRjaGVzKHNlbGVjdG9yRGF0YSwgZWxlbWVudCwgcm9vdE5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JFbGVtZW50KG91dHB1dCwgJmVs
ZW1lbnQpOworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiAqZWxlbWVudHMpIHsKKyAgICAg
ICAgICAgIGlmICgocm9vdE5vZGVJc1RyZWVTY29wZVJvb3QgfHwgZWxlbWVudC0+aXNEZXNjZW5k
YW50T2YoJnJvb3ROb2RlKSkgJiYgc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yRGF0YSwgKmVsZW1l
bnQsIHJvb3ROb2RlKSkgeworICAgICAgICAgICAgICAgIFNlbGVjdG9yUXVlcnlUcmFpdDo6YXBw
ZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlm
IChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZpcnN0RWxlbWVudCkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzg1LDEwICszODIsOSBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PgogQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0
YUxpc3Q6OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2Rl
JiByb290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiBvdXRw
dXQpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3JzLnNp
emUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3Rf
Y2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0
b3JNYXRjaGVzKG1fc2VsZWN0b3JzW2ldLCBlbGVtZW50LCByb290Tm9kZSkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBzZWxlY3RvciA6IG1fc2VsZWN0b3JzKSB7CisgICAgICAgICAgICBpZiAoc2Vs
ZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBlbGVtZW50LCByb290Tm9kZSkpIHsKICAgICAgICAgICAg
ICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAm
ZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9yUXVlcnlUcmFpdDo6c2hvdWxk
T25seU1hdGNoRmlyc3RFbGVtZW50KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00
NDEsMjAgKzQzNywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhl
CiB7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQgY2hlY2tpbmdDb250ZXh0
KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7CiAgICAgY2hlY2tpbmdDb250
ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/IG51bGxwdHIgOiAmcm9vdE5v
ZGU7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3JzLnNpemUoKTsKICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250
YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2VsZWN0b3JDb3VudDsgKytpKSB7CisgICAgICAgIGZvciAoYXV0byYgc2VsZWN0b3IgOiBt
X3NlbGVjdG9ycykgewogI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJPRklMSU5HCi0gICAgICAgICAg
ICBtX3NlbGVjdG9yc1tpXS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOworICAgICAgICAgICAgc2Vs
ZWN0b3IuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKICNlbmRpZgogICAgICAgICAgICAgYm9vbCBt
YXRjaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tl
ciA9IG1fc2VsZWN0b3JzW2ldLmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOwotICAgICAgICAgICAgaWYgKG1fc2VsZWN0b3JzW2ldLmNvbXBpbGF0aW9u
U3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cikgewotICAgICAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTaW1w
bGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVl
cnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JD
aGVja2VyLCBtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICB2
b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHNlbGVjdG9yLmNvbXBpbGVkU2VsZWN0b3JD
b2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgaWYgKHNlbGVj
dG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlF1
ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0
b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rvci5jb21waWxhdGlvblN0YXR1cyk7CiAgICAg
ICAgICAgICAgICAgbWF0Y2hlZCA9IHNlbGVjdG9yQ2hlY2tlcigmZWxlbWVudCk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3NlbGVjdG9yc1tpXS5jb21w
aWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVy
OjpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3Rv
ckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpxdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2Vy
RnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBtX3Nl
bGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNl
bGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgIFNlbGVj
dG9yQ29tcGlsZXI6OlF1ZXJ5U2VsZWN0b3JTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0IHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnF1ZXJ5U2VsZWN0b3JTZWxl
Y3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNo
ZWNrZXIsIHNlbGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzKTsKICAgICAgICAgICAgICAgICBtYXRj
aGVkID0gc2VsZWN0b3JDaGVja2VyKCZlbGVtZW50LCAmY2hlY2tpbmdDb250ZXh0KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7CkBAIC01NzksOSArNTc0LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgIGNhc2UgQ29tcGls
YWJsZU11bHRpcGxlU2VsZWN0b3JNYXRjaDoKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkK
ICAgICAgICAgewotICAgICAgICB1bnNpZ25lZCBzZWxlY3RvckNvdW50ID0gbV9zZWxlY3RvcnMu
c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbXBpbGVTZWxlY3RvcihtX3NlbGVjdG9yc1tpXSwg
KnNlYXJjaFJvb3ROb2RlKSkgeworICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogbV9zZWxl
Y3RvcnMpIHsKKyAgICAgICAgICAgIGlmICghY29tcGlsZVNlbGVjdG9yKHNlbGVjdG9yLCAqc2Vh
cmNoUm9vdE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgbV9tYXRjaFR5cGUgPSBNdWx0aXBsZVNl
bGVjdG9yTWF0Y2g7CiAgICAgICAgICAgICAgICAgZ290byBNdWx0aXBsZVNlbGVjdG9yTWF0Y2g7
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIu
Y3BwCShyZXZpc2lvbiAxOTE3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRv
cHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDggQEAgdm9pZCBUcmVlU2NvcGVB
ZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgaWYgKG5vZGUtPmhhc1N5bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8QXR0cj4+JiBhdHRycyA9IGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKS5hdHRyTm9kZUxpc3QoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhdHRycy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3U2NvcGUo
YXR0cnNbaV0uZ2V0KCkpOworICAgICAgICAgICAgZm9yIChhdXRvJiBhdHRyIDogZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpLmF0dHJOb2RlTGlzdCgpKQorICAgICAgICAgICAgICAgIG1vdmVUcmVl
VG9OZXdTY29wZShhdHRyLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dS
b290KiBzaGFkb3cgPSBub2RlLT5zaGFkb3dSb290KCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264378</attachid>
            <date>2015-10-29 21:35:33 -0700</date>
            <delta_ts>2015-10-30 10:04:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150664-20151030133439.patch</filename>
            <type>text/plain</type>
            <size>44177</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTc3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDE1LTEwLTI5ICBIdW5zZW9w
IEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJuIGZv
ci1sb29wcyBpbiBXZWJDb3JlL2RvbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDY2NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNo
YW5nZS4KKworICAgICAgICAqIGRvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsdGVyRW5hYmxlZE5vbmVtcHR5Q1NTU3R5bGVTaGVldHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFp
bnMpOgorICAgICAgICAqIGRvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucyk6Cisg
ICAgICAgICogZG9tL0NsaWVudFJlY3RMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaWVu
dFJlY3RMaXN0OjpDbGllbnRSZWN0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGllbnRSZWN0
TGlzdDo6fkNsaWVudFJlY3RMaXN0KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUpOgorICAgICAg
ICAqIGRvbS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU5hbWVkRmxvd0NvbGxlY3Rpb246OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RE9N
TmFtZWRGbG93Q29sbGVjdGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5n
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0Ojpjb250YWlucyk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVkTGFzdFJlZik6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZy
YW1lU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZl
U3RhdGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFy
a2Vycyk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKToK
KyAgICAgICAgKiBkb20vRWxlbWVudERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VW5pcXVl
RWxlbWVudERhdGE6OmZpbmRBdHRyaWJ1dGVCeU5hbWUpOgorICAgICAgICAqIGRvbS9FdmVudERp
c3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjp1cGRhdGVUb3VjaExp
c3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMpOgor
ICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVu
ZXJNYXA6OmNvbnRhaW5zQ2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVu
ZXJNYXA6OmV2ZW50VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6
YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXJNYXA6OmZpbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lck1hcDo6Y29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3Rl
bmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcik6CisgICAgICAgICogZG9tL0V2ZW50
VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVu
dExpc3RlbmVycyk6CisgICAgICAgICogZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6Om5vdGlmeU9ic2Vy
dmVyc0ludGVybmFsKToKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNl
cnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11dGF0aW9ucyk6CisgICAgICAg
ICogZG9tL05hbWVkRmxvd0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRG
bG93Q29sbGVjdGlvbjo6bmFtZWRGbG93cyk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEZsb3dD
b2xsZWN0aW9uOjpjcmVhdGVDU1NPTVNuYXBzaG90KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxs
RGV0YWNoKToKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OnByb2Nlc3NOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cHJvY2Vzc0FuY2Vz
dG9yc0FuZFRoZWlyU2libGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29sdXRl
Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKToKKyAgICAgICAgKiBkb20vU2Vs
ZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjptYXRj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVGYXN0UGF0
aEZvcklkU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhl
Y3V0ZVNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9y
RGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbmdsZU11bHRpU2VsZWN0b3JEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGRvbS9U
cmVlU2NvcGVBZG9wdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6
Om1vdmVUcmVlVG9OZXdTY29wZSk6CisKIDIwMTUtMTAtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDTWFrZSBidWlsZCBmaXguCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9uIDE5MTc3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxOCw4ICsyMTgsOCBAQCBBdXRob3JTdHlsZVNoZWV0czo6U3R5bGVSZXNvbHZl
clVwZGF0ZVR5CiAgICAgLy8gU3R5bGVzaGVldHMgb2YgPHN0eWxlPiBlbGVtZW50cyB0aGF0IEBp
bXBvcnQgc3R5bGVzaGVldHMgYXJlIGFjdGl2ZSBidXQgbG9hZGluZy4gV2UgbmVlZCB0byB0cmln
Z2VyIGEgZnVsbCByZWNhbGMgd2hlbiBzdWNoIGxvYWRzIGFyZSBkb25lLgogICAgIGJvb2wgaGFz
QWN0aXZlTG9hZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBuZXdTdHlsZXNo
ZWV0Q291bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5ld1N0eWxlc2hlZXRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChuZXdTdHlsZXNo
ZWV0c1tpXS0+aXNMb2FkaW5nKCkpCisgICAgZm9yIChhdXRvJiBzaGVldCA6IG5ld1N0eWxlc2hl
ZXRzKSB7CisgICAgICAgIGlmIChzaGVldC0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICBoYXNB
Y3RpdmVMb2FkaW5nU3R5bGVzaGVldCA9IHRydWU7CiAgICAgfQogICAgIGlmIChtX2hhZEFjdGl2
ZUxvYWRpbmdTdHlsZXNoZWV0ICYmICFoYXNBY3RpdmVMb2FkaW5nU3R5bGVzaGVldCkgewpAQCAt
Mjc3LDE1ICsyNzcsMTUgQEAgQXV0aG9yU3R5bGVTaGVldHM6OlN0eWxlUmVzb2x2ZXJVcGRhdGVU
eQogCiBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFN0
eWxlU2hlZXQ+PiYgc2hlZXRzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaGVl
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigqc2hlZXRz
W2ldKSkKKyAgICBmb3IgKGF1dG8mIHNoZWV0IDogc2hlZXRzKSB7CisgICAgICAgIGlmICghaXM8
Q1NTU3R5bGVTaGVldD4oKnNoZWV0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBD
U1NTdHlsZVNoZWV0JiBzaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldHNbaV0p
OwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYg
c3R5bGVTaGVldCA9IGRvd25jYXN0PENTU1N0eWxlU2hlZXQ+KCpzaGVldCk7CisgICAgICAgIGlm
IChzdHlsZVNoZWV0LmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKCFzaGVldC5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0Lmxlbmd0aCgpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgmc3R5bGVTaGVldCk7CiAgICAgfQogfQogCkBAIC0zODcsOCAr
Mzg3LDggQEAgYm9vbCBBdXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldAogewogICAg
IGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwKSB7CiAg
ICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cCA9IHN0
ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+KCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9v
a3VwLT5hZGQobV9hY3RpdmVTdHlsZVNoZWV0c1tpXS5nZXQoKSk7CisgICAgICAgIGZvciAoYXV0
byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpCisgICAgICAgICAgICBt
X3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAtPmFkZChhY3RpdmVT
dHlsZVNoZWV0LmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFjdGl2ZVN0
eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAkocmV2aXNpb24gMTkxNzcx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsMTAgKzE1MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3Zl
KEhUTUxJbnB1dEUKIAogdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjp1cGRhdGVWYWxpZGl0eUZvckFs
bEJ1dHRvbnMoKQogewotICAgIHR5cGVkZWYgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj46OmNv
bnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IG1fbWVtYmVycy5lbmQo
KTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9tZW1iZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBidXR0b24gPSAqaXQ7CisgICAgZm9y
IChhdXRvJiBidXR0b24gOiBtX21lbWJlcnMpIHsKICAgICAgICAgQVNTRVJUKGJ1dHRvbi0+aXNS
YWRpb0J1dHRvbigpKTsKICAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkocmV2aXNpb24gMTkxNzcx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDbGllbnRSZWN0TGlzdDo6Q2xpZW50UmVjdExpc3QoKQogQ2xp
ZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cykKIHsKICAgICBtX2xpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShxdWFkcy5zaXplKCkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
bGlzdC5hcHBlbmQoQ2xpZW50UmVjdDo6Y3JlYXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCkpKTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgbV9saXN0LnVu
Y2hlY2tlZEFwcGVuZChDbGllbnRSZWN0OjpjcmVhdGUocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpKSk7CiB9CiAKIENsaWVudFJlY3RMaXN0Ojp+Q2xpZW50UmVjdExpc3QoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTkxNzcxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsMTkg
KzI3MiwxNyBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShSZWY8Tm9kCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCAq
dGhpcyk7CiAKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlIG11dGF0aW9uKCp0aGlzKTsKLSAg
ICBmb3IgKGF1dG8gaXQgPSB0YXJnZXRzLmJlZ2luKCksIGVuZCA9IHRhcmdldHMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBOb2RlJiBjaGlsZCA9IGl0LT5nZXQoKTsKLQorICAg
IGZvciAoYXV0byYgY2hpbGQgOiB0YXJnZXRzKSB7CiAgICAgICAgIC8vIER1ZSB0byBhcmJpdHJh
cnkgY29kZSBydW5uaW5nIGluIHJlc3BvbnNlIHRvIGEgRE9NIG11dGF0aW9uIGV2ZW50IGl0J3MK
ICAgICAgICAgLy8gcG9zc2libGUgdGhhdCAibmV4dCIgaXMgbm8gbG9uZ2VyIGEgY2hpbGQgb2Yg
InRoaXMiLgogICAgICAgICAvLyBJdCdzIGFsc28gcG9zc2libGUgdGhhdCAiY2hpbGQiIGhhcyBi
ZWVuIGluc2VydGVkIGVsc2V3aGVyZS4KICAgICAgICAgLy8gSW4gZWl0aGVyIG9mIHRob3NlIGNh
c2VzLCB3ZSdsbCBqdXN0IHN0b3AuCiAgICAgICAgIGlmIChuZXh0LT5wYXJlbnROb2RlKCkgIT0g
dGhpcykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY2hpbGQucGFyZW50Tm9kZSgp
KQorICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgIHRyZWVTY29wZSgpLmFkb3B0SWZOZWVkZWQoJmNoaWxkKTsKKyAgICAgICAgdHJl
ZVNjb3BlKCkuYWRvcHRJZk5lZWRlZChjaGlsZC5wdHIoKSk7CiAKICAgICAgICAgaW5zZXJ0QmVm
b3JlQ29tbW9uKG5leHQsIGNoaWxkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTU5h
bWVkRmxvd0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
T01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTkxNzcxKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRE9NTmFtZWRGbG93Q29sbGVjdGlv
bjo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbihjb25zdCBWZWN0b3I8V2ViS2l0TmFtZWRGbG93Kj4m
IG5hbWVkRmxvd3MpCiB7Ci0gICAgZm9yIChWZWN0b3I8V2ViS2l0TmFtZWRGbG93Kj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbmFtZWRGbG93cy5iZWdpbigpOyBpdCAhPSBuYW1lZEZsb3dzLmVuZCgp
OyArK2l0KQotICAgICAgICBtX25hbWVkRmxvd3MuYWRkKCppdCk7CisgICAgZm9yIChhdXRvJiBm
bG93IDogbmFtZWRGbG93cykKKyAgICAgICAgbV9uYW1lZEZsb3dzLmFkZChmbG93KTsKIH0KIAog
dW5zaWduZWQgbG9uZyBET01OYW1lZEZsb3dDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25zdApAQCAt
NDcsNyArNDcsNyBAQCBQYXNzUmVmUHRyPFdlYktpdE5hbWVkRmxvdz4gRE9NTmFtZWRGbG93CiB7
CiAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbmFtZWRGbG93
cy5zaXplKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBET01OYW1lZEZsb3dTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lZEZsb3dzLmJlZ2luKCk7CisgICAgYXV0byBpdCA9
IG1fbmFtZWRGbG93cy5iZWdpbigpOwogICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsgaSA8
IGluZGV4OyArK2kpCiAgICAgICAgICsraXQ7CiAgICAgcmV0dXJuICppdDsKQEAgLTU1LDcgKzU1
LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXROYW1lZEZsb3c+IERPTU5hbWVkRmxvdwogCiBSZWZQdHI8
V2ViS2l0TmFtZWRGbG93PiBET01OYW1lZEZsb3dDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIERPTU5hbWVkRmxvd1NldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX25hbWVkRmxvd3MuZmluZDxTdHJpbmcsIERPTU5hbWVkRmxvd0hhc2hU
cmFuc2xhdG9yPihuYW1lKTsKKyAgICBhdXRvIGl0ID0gbV9uYW1lZEZsb3dzLmZpbmQ8U3RyaW5n
LCBET01OYW1lZEZsb3dIYXNoVHJhbnNsYXRvcj4obmFtZSk7CiAgICAgaWYgKGl0ICE9IG1fbmFt
ZWRGbG93cy5lbmQoKSkKICAgICAgICAgcmV0dXJuICppdDsKICAgICByZXR1cm4gbnVsbHB0cjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5jcHAJKHJldmlzaW9uIDE5MTc3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOSArNDAsOCBAQCBib29sIERPTVN0cmluZ0xpc3Q6OmNvbnRhaW5zKGNvbnN0IFN0cmlu
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSwgYWxsIGNvbnN1bWVycyBvZiBET01TdHJpbmdMaXN0
IHN0b3JlIGZhaXJseSBzbWFsbCBsaXN0cyBhbmQgdGh1cyBhbiBPKG4pCiAgICAgLy8gICAgICAg
IGFsZ29yaXRobSBpcyBPSy4gIEJ1dCB0aGlzIG1heSBuZWVkIHRvIGJlIG9wdGltaXplZCBpZiBs
YXJnZXIgYW1vdW50cyBvZiBkYXRhIGFyZQogICAgIC8vICAgICAgICBzdG9yZWQgaW4gbV9zdHJp
bmdzLgotICAgIHNpemVfdCBjb3VudCA9IG1fc3RyaW5ncy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChtX3N0cmluZ3NbaV0gPT0g
c3RyaW5nKQorICAgIGZvciAoYXV0byYgdmFsdWUgOiBtX3N0cmluZ3MpIHsKKyAgICAgICAgaWYg
KHZhbHVlID09IHN0cmluZykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE5MTc3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1Nyw4ICs1NTcsOCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBV
CiAgICAgaW5pdFNlY3VyaXR5Q29udGV4dCgpOwogICAgIGluaXRETlNQcmVmZXRjaCgpOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlzdEFu
ZENvbGxlY3Rpb25Db3VudHMpOyArK2kpCi0gICAgICAgIG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q291bnRzW2ldID0gMDsKKyAgICBmb3IgKGF1dG8mIG5vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50
IDogbV9ub2RlTGlzdEFuZENvbGxlY3Rpb25Db3VudHMpCisgICAgICAgIG5vZGVMaXN0QW5kQ29s
bGVjdGlvbkNvdW50ID0gMDsKIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTYz
MTcsMTIgKzYzMTcsMTIgQEAgdm9pZCBEb2N1bWVudDo6YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9s
bAogICAgICAgICBpbnZlcnNlRnJhbWVTY2FsZSA9IDEgLyBmcmFtZSgpLT5mcmFtZVNjYWxlRmFj
dG9yKCk7CiAKICAgICBMYXlvdXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgp
LCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7CisgICAgZm9yIChhdXRvJiBxdWFkIDogcXVhZHMp
IHsKKyAgICAgICAgcXVhZC5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNv
bnRlbnRSZWN0LnkoKSk7CiAgICAgICAgIGlmICh6b29tICE9IDEpCi0gICAgICAgICAgICBxdWFk
c1tpXS5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOworICAgICAgICAgICAgcXVhZC5zY2FsZSgx
IC8gem9vbSwgMSAvIHpvb20pOwogICAgICAgICBpZiAoaW52ZXJzZUZyYW1lU2NhbGUgIT0gMSkK
LSAgICAgICAgICAgIHF1YWRzW2ldLnNjYWxlKGludmVyc2VGcmFtZVNjYWxlLCBpbnZlcnNlRnJh
bWVTY2FsZSk7CisgICAgICAgICAgICBxdWFkLnNjYWxlKGludmVyc2VGcmFtZVNjYWxlLCBpbnZl
cnNlRnJhbWVTY2FsZSk7CiAgICAgfQogfQogCkBAIC02NDc4LDE5ICs2NDc4LDE4IEBAIHZvaWQg
RG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY28KICAgICAgICAgICAgIGVsZW1lbnRz
VG9BZGRUb0NoYWluLmFwcGVuZChlbGVtZW50KTsKICAgICB9CiAKLSAgICBzaXplX3QgcmVtb3Zl
Q291bnQgPSBlbGVtZW50c1RvUmVtb3ZlRnJvbUNoYWluLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlbW92ZUNvdW50OyArK2kpCi0gICAgICAgIGVsZW1lbnRzVG9SZW1vdmVG
cm9tQ2hhaW5baV0tPnNldEhvdmVyZWQoZmFsc2UpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IGVsZW1lbnRzVG9SZW1vdmVGcm9tQ2hhaW4pCisgICAgICAgIGVsZW1lbnQtPnNldEhvdmVyZWQo
ZmFsc2UpOwogCiAgICAgYm9vbCBzYXdDb21tb25BbmNlc3RvciA9IGZhbHNlOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwLCBzaXplID0gZWxlbWVudHNUb0FkZFRvQ2hhaW4uc2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudHNUb0FkZFRvQ2hhaW4p
IHsKICAgICAgICAgaWYgKGFsbG93QWN0aXZlQ2hhbmdlcykKLSAgICAgICAgICAgIGVsZW1lbnRz
VG9BZGRUb0NoYWluW2ldLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGlmIChhbmNlc3RvciAm
JiBlbGVtZW50c1RvQWRkVG9DaGFpbltpXSA9PSBhbmNlc3Rvci0+ZWxlbWVudCgpKQorICAgICAg
ICAgICAgZWxlbWVudC0+c2V0QWN0aXZlKHRydWUpOworICAgICAgICBpZiAoYW5jZXN0b3IgJiYg
ZWxlbWVudCA9PSBhbmNlc3Rvci0+ZWxlbWVudCgpKQogICAgICAgICAgICAgc2F3Q29tbW9uQW5j
ZXN0b3IgPSB0cnVlOwogICAgICAgICBpZiAoIXNhd0NvbW1vbkFuY2VzdG9yKSB7CiAgICAgICAg
ICAgICAvLyBFbGVtZW50cyBhZnRlciB0aGUgY29tbW9uIGhvdmVyIGFuY2VzdG9yIGRvZXMgbm90
IGNoYW5nZSBob3ZlciBzdGF0ZSwgYnV0IGFyZSBpdGVyYXRlZCBvdmVyIGJlY2F1c2UgdGhleSBt
YXkgY2hhbmdlIGFjdGl2ZSBzdGF0ZS4KLSAgICAgICAgICAgIGVsZW1lbnRzVG9BZGRUb0NoYWlu
W2ldLT5zZXRIb3ZlcmVkKHRydWUpOworICAgICAgICAgICAgZWxlbWVudC0+c2V0SG92ZXJlZCh0
cnVlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTAsOSArMzkwLDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlN
YXJrZQogCiAgICAgYm9vbCBkb2NEaXJ0eSA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGVuZE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIC0gMTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAh
PSBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBs
aXN0LT5hdChpKTsKLQorICAgIGZvciAoYXV0byYgbWFya2VyIDogKmxpc3QpIHsKICAgICAgICAg
Ly8gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQogICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPiBlbmRPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsK
QEAgLTU2MSw5ICs1NTksOCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3Zl
TWFyCiAKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBub2Rlc1dpdGhNYXJrZXJzOwogICAgIGNv
cHlLZXlzVG9WZWN0b3IobV9tYXJrZXJzLCBub2Rlc1dpdGhNYXJrZXJzKTsKLSAgICB1bnNpZ25l
ZCBzaXplID0gbm9kZXNXaXRoTWFya2Vycy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9tYXJrZXJzLmZpbmQobm9kZXNXaXRoTWFya2Vyc1tpXSk7CisgICAgZm9yIChhdXRvJiBu
b2RlIDogbm9kZXNXaXRoTWFya2VycykgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJr
ZXJzLmZpbmQobm9kZSk7CiAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkp
CiAgICAgICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVz
KTsKICAgICB9CkBAIC02MTksMTUgKzYxNiwxMyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6cmVwYWludE1hCiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAogICAg
IC8vIG91dGVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXJlZCBub2RlIGluIHRoZSBkb2N1bWVu
dAotICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVuZCgpOwotICAgIGZv
ciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbV9tYXJrZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyAr
K2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGktPmtleS5nZXQoKTsKKyAgICBmb3IgKGF1dG8m
IG1hcmtlciA6IG1fbWFya2VycykgeworICAgICAgICBOb2RlKiBub2RlID0gbWFya2VyLmtleS5n
ZXQoKTsKIAogICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyIGluIHRo
ZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IGktPnZhbHVlLmdldCgp
OwogICAgICAgICBib29sIG5vZGVOZWVkc1JlcGFpbnQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChh
dXRvJiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRh
aW5zKG1hcmtlci50eXBlKCkpKSB7CisgICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIg
OiAqbWFya2VyLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMo
ZG9jdW1lbnRNYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAgICAgIG5vZGVOZWVkc1JlcGFp
bnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNzk4
LDE1ICs3OTMsMTEgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzYwog
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKIHsKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhhdmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5z
aXplKCkpOwotICAgIE1hcmtlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9tYXJrZXJzLmVu
ZCgpOwotICAgIGZvciAoTWFya2VyTWFwOjpjb25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3IgPSBt
X21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJhdG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsK
LSAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJdGVyYXRvci0+a2V5LmdldCgpOworICAgIGZvciAo
YXV0byYgbWFya2VyIDogbV9tYXJrZXJzKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtYXJrZXIu
a2V5LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZSk7Ci0gICAgICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBub2RlSXRlcmF0b3ItPnZhbHVlLmdldCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5kZXggPCBsaXN0LT5zaXplKCk7
ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJr
ZXIgPSBsaXN0LT5hdChtYXJrZXJJbmRleCk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiAlZDpbJWQ6JWRdKCVkKSIsIG1hcmtlci50eXBlKCksIG1hcmtlci5zdGFydE9mZnNldCgpLCBt
YXJrZXIuZW5kT2Zmc2V0KCksIG1hcmtlci5hY3RpdmVNYXRjaCgpKTsKLSAgICAgICAgfQorICAg
ICAgICBmb3IgKGF1dG8mIGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgZG9jdW1lbnRNYXJrZXIudHlw
ZSgpLCBkb2N1bWVudE1hcmtlci5zdGFydE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5lbmRPZmZz
ZXQoKSwgZG9jdW1lbnRNYXJrZXIuYWN0aXZlTWF0Y2goKSk7CiAKICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJcbiIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50RGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAko
cmV2aXNpb24gMTkxNzcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgwLDkgKzE4MCw5IEBAIGJvb2wgRWxlbWVudERhdGE6OmlzRXF1
aXZhbGVudChjb25zdCBFbGUKIAogQXR0cmlidXRlKiBVbmlxdWVFbGVtZW50RGF0YTo6ZmluZEF0
dHJpYnV0ZUJ5TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIGNvdW50ID0gbV9hdHRyaWJ1dGVWZWN0b3Iuc2l6ZSgpOyBpIDwgY291bnQ7
ICsraSkgewotICAgICAgICBpZiAobV9hdHRyaWJ1dGVWZWN0b3IuYXQoaSkubmFtZSgpLm1hdGNo
ZXMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gJm1fYXR0cmlidXRlVmVjdG9yLmF0KGkpOwor
ICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogbV9hdHRyaWJ1dGVWZWN0b3IpIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZS5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAm
YXR0cmlidXRlOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxOTE3NzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDkg
KzQ4NCw4IEBAIGJvb2wgRXZlbnRQYXRoOjp1cGRhdGVUb3VjaExpc3RzKGNvbnN0IFQKICAgICBh
ZGRSZWxhdGVkTm9kZVJlc29sdmVyc0ZvclRvdWNoTGlzdCh0b3VjaFRhcmdldFJlc29sdmVycywg
dG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLCBUb3VjaEV2ZW50Q29udGV4dDo6Q2hhbmdlZFRv
dWNoZXMpOwogCiAgICAgQVNTRVJUKHRvdWNoVGFyZ2V0UmVzb2x2ZXJzLnNpemUoKSA9PSB0b3Vj
aE5vZGVDb3VudCk7Ci0gICAgc2l6ZV90IGV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXZlbnRQYXRoU2l6ZTsgKytpKSB7Ci0gICAgICAg
IFRvdWNoRXZlbnRDb250ZXh0JiBjb250ZXh0ID0gdG9Ub3VjaEV2ZW50Q29udGV4dCgqbV9wYXRo
W2ldKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50UGF0aCA6IG1fcGF0aCkgeworICAgICAgICBUb3Vj
aEV2ZW50Q29udGV4dCYgY29udGV4dCA9IHRvVG91Y2hFdmVudENvbnRleHQoKmV2ZW50UGF0aCk7
CiAgICAgICAgIE5vZGUmIG5vZGVUb01vdmVUbyA9ICpjb250ZXh0Lm5vZGUoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgcmVzb2x2ZXJJbmRleCA9IDA7IHJlc29sdmVySW5kZXggPCB0b3VjaE5vZGVD
b3VudDsgKytyZXNvbHZlckluZGV4KSB7CiAgICAgICAgICAgICBFdmVudFJlbGF0ZWROb2RlUmVz
b2x2ZXImIGN1cnJlbnRSZXNvbHZlciA9IHRvdWNoVGFyZ2V0UmVzb2x2ZXJzW3Jlc29sdmVySW5k
ZXhdOwpAQCAtNjY3LDggKzY2Niw4IEBAIHZvaWQgRXZlbnRQYXRoOjpzZXRSZWxhdGVkVGFyZ2V0
KE5vZGUmIG8KIAogYm9vbCBFdmVudFBhdGg6Omhhc0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wYXRoLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3BhdGhbaV0tPm5vZGUoKS0+aGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKKyAgICBmb3IgKGF1dG8mIGV2ZW50UGF0aCA6IG1f
cGF0aCkgeworICAgICAgICBpZiAoZXZlbnRQYXRoLT5ub2RlKCktPmhhc0V2ZW50TGlzdGVuZXJz
KGV2ZW50VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsOCArNTcsOCBAQCBFdmVudExpc3RlbmVyTWFwOjpFdmVudExpc3RlbmVyTWFwKCkKIAog
Ym9vbCBFdmVudExpc3RlbmVyTWFwOjpjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBl
KQorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsKKyAgICAgICAgaWYgKGVudHJ5
LmZpcnN0ID09IGV2ZW50VHlwZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC02NiwxMSArNjYsMTAgQEAgYm9vbCBFdmVudExpc3RlbmVyTWFw
Ojpjb250YWlucyhjb25zdCBBdAogCiBib29sIEV2ZW50TGlzdGVuZXJNYXA6OmNvbnRhaW5zQ2Fw
dHVyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAogewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fZW50cmllc1tpXS5maXJzdCA9PSBldmVudFR5cGUpIHsKLSAgICAgICAgICAgIGNvbnN0IEV2
ZW50TGlzdGVuZXJWZWN0b3IqIHZlY3RvciA9IG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdmVjdG9yLT5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgIGlmICh2ZWN0b3ItPmF0KGopLnVzZUNhcHR1cmUpCisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAgICAgICBpZiAoZW50cnkuZmlyc3QgPT0g
ZXZlbnRUeXBlKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50TGlzdGVuZXIgOiAqZW50
cnkuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgaWYgKGV2ZW50TGlzdGVuZXIudXNlQ2FwdHVy
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTkwLDggKzg5LDggQEAgVmVjdG9yPEF0b21pY1N0cmluZz4gRXZlbnRMaXN0ZW5l
ck1hcDo6ZQogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHR5cGVzOwogICAgIHR5cGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKQotICAgICAgICB0eXBlcy51bmNoZWNr
ZWRBcHBlbmQobV9lbnRyaWVzW2ldLmZpcnN0KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9l
bnRyaWVzKQorICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoZW50cnkuZmlyc3QpOwogCiAg
ICAgcmV0dXJuIHR5cGVzOwogfQpAQCAtMTExLDkgKzExMCw5IEBAIGJvb2wgRXZlbnRMaXN0ZW5l
ck1hcDo6YWRkKGNvbnN0IEF0b21pY1MKIHsKICAgICBhc3NlcnROb0FjdGl2ZUl0ZXJhdG9ycygp
OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZW50cmllcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9lbnRyaWVzW2ldLmZpcnN0ID09IGV2ZW50VHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBhZGRMaXN0ZW5lclRvVmVjdG9yKG1fZW50cmllc1tpXS5zZWNvbmQuZ2V0KCks
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVz
KSB7CisgICAgICAgIGlmIChlbnRyeS5maXJzdCA9PSBldmVudFR5cGUpCisgICAgICAgICAgICBy
ZXR1cm4gYWRkTGlzdGVuZXJUb1ZlY3RvcihlbnRyeS5zZWNvbmQuZ2V0KCksIGxpc3RlbmVyLCB1
c2VDYXB0dXJlKTsKICAgICB9CiAKICAgICBtX2VudHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGV2ZW50VHlwZSwgc3RkOjptYWtlX3VuaXF1ZTxFdmVudExpc3RlbmVyVmVjdG9yPigpKSk7CkBA
IC0xNTAsOSArMTQ5LDkgQEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5lck1hcDo6
ZgogewogICAgIGFzc2VydE5vQWN0aXZlSXRlcmF0b3JzKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9lbnRyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VudHJp
ZXNbaV0uZmlyc3QgPT0gZXZlbnRUeXBlKQotICAgICAgICAgICAgcmV0dXJuIG1fZW50cmllc1tp
XS5zZWNvbmQuZ2V0KCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAg
ICAgICBpZiAoZW50cnkuZmlyc3QgPT0gZXZlbnRUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5LnNlY29uZC5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE4Miwx
MSArMTgxLDExIEBAIHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudEwKIAog
c3RhdGljIHZvaWQgY29weUxpc3RlbmVyc05vdENyZWF0ZWRGcm9tTWFya3VwVG9UYXJnZXQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVy
VmVjdG9yLCBFdmVudFRhcmdldCogdGFyZ2V0KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGlzdGVuZXJWZWN0b3ItPnNpemUoKTsgKytpKSB7CisgICAgZm9yIChhdXRvJiBsaXN0ZW5l
ciA6ICpsaXN0ZW5lclZlY3RvcikgewogICAgICAgICAvLyBFdmVudCBsaXN0ZW5lcnMgY3JlYXRl
ZCBmcm9tIG1hcmt1cCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcmVkIHRvIHRoZSBzaGFkb3cg
dHJlZSBkdXJpbmcgY2xvbmluZy4KLSAgICAgICAgaWYgKCgqbGlzdGVuZXJWZWN0b3IpW2ldLmxp
c3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpKQorICAgICAgICBpZiAobGlzdGVuZXIubGlz
dGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKCpsaXN0ZW5lclZlY3Rv
cilbaV0ubGlzdGVuZXIuY29weVJlZigpLCAoKmxpc3RlbmVyVmVjdG9yKVtpXS51c2VDYXB0dXJl
KTsKKyAgICAgICAgdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIu
bGlzdGVuZXIuY29weVJlZigpLCBsaXN0ZW5lci51c2VDYXB0dXJlKTsKICAgICB9CiB9CiAKQEAg
LTE5NCw4ICsxOTMsOCBAQCB2b2lkIEV2ZW50TGlzdGVuZXJNYXA6OmNvcHlFdmVudExpc3RlbmVy
CiB7CiAgICAgYXNzZXJ0Tm9BY3RpdmVJdGVyYXRvcnMoKTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvcHlMaXN0ZW5lcnNO
b3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KG1fZW50cmllc1tpXS5maXJzdCwgbV9lbnRyaWVz
W2ldLnNlY29uZC5nZXQoKSwgdGFyZ2V0KTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRy
aWVzKQorICAgICAgICBjb3B5TGlzdGVuZXJzTm90Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChl
bnRyeS5maXJzdCwgZW50cnkuc2Vjb25kLmdldCgpLCB0YXJnZXQpOwogfQogCiBFdmVudExpc3Rl
bmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDggKzk0LDcgQEAgYm9vbCBFdmVu
dFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjbwogICAgIC8vIHRoZXkgaGF2ZSBvbmUgbGVz
cyBsaXN0ZW5lciB0byBpbnZva2UuCiAgICAgaWYgKCFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycykK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkLT5maXJp
bmdFdmVudEl0ZXJhdG9ycy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRmlyaW5nRXZlbnRJdGVy
YXRvciYgZmlyaW5nSXRlcmF0b3IgPSBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXQoaSk7Cisg
ICAgZm9yIChhdXRvJiBmaXJpbmdJdGVyYXRvciA6ICpkLT5maXJpbmdFdmVudEl0ZXJhdG9ycykg
ewogICAgICAgICBpZiAoZXZlbnRUeXBlICE9IGZpcmluZ0l0ZXJhdG9yLmV2ZW50VHlwZSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMjAsMTAgKzExOSw5IEBAIGJvb2wgRXZlbnRUYXJn
ZXQ6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGUKIAogRXZlbnRMaXN0ZW5lciogRXZlbnRUYXJnZXQ6
OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
CiB7Ci0gICAgY29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkgPSBnZXRFdmVudExpc3Rl
bmVycyhldmVudFR5cGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKGVudHJ5W2ldLmxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGVudHJ5W2ldLmxpc3RlbmVyLmdldCgpOworICAgIGZvciAoYXV0
byYgZXZlbnRMaXN0ZW5lciA6IGdldEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSkpIHsKKyAgICAg
ICAgaWYgKGV2ZW50TGlzdGVuZXIubGlzdGVuZXItPmlzQXR0cmlidXRlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZXZlbnRMaXN0ZW5lci5saXN0ZW5lci5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC0yODAsOSArMjc4LDkgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcgogICAgIC8vIE5vdGlmeSBmaXJpbmcgZXZlbnRzIHBsYW5uaW5nIHRvIGludm9r
ZSB0aGUgbGlzdGVuZXIgYXQgJ2luZGV4JyB0aGF0CiAgICAgLy8gdGhleSBoYXZlIG9uZSBsZXNz
IGxpc3RlbmVyIHRvIGludm9rZS4KICAgICBpZiAoZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hdChp
KS5pdGVyYXRvciA9IDA7Ci0gICAgICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXQo
aSkuc2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgZmlyaW5nRXZlbnRJdGVyYXRvciA6ICpk
LT5maXJpbmdFdmVudEl0ZXJhdG9ycykgeworICAgICAgICAgICAgZmlyaW5nRXZlbnRJdGVyYXRv
ci5pdGVyYXRvciA9IDA7CisgICAgICAgICAgICBmaXJpbmdFdmVudEl0ZXJhdG9yLnNpemUgPSAw
OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0
T2JzZXJ2ZXJSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0lk
VGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NSwxNSArNjUsMTUgQEAgdm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk6Om5vdGlmeU9i
cwogCiAgICAgVmVjdG9yPElkVGFyZ2V0T2JzZXJ2ZXIqPiBjb3B5OwogICAgIGNvcHlUb1ZlY3Rv
cigqbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCwgY29weSk7Ci0gICAgZm9yIChWZWN0b3I8SWRU
YXJnZXRPYnNlcnZlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0g
Y29weS5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNl
dC0+Y29udGFpbnMoKml0KSkKLSAgICAgICAgICAgICgqaXQpLT5pZFRhcmdldENoYW5nZWQoKTsK
KyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weSkgeworICAgICAgICBpZiAobV9ub3RpZnlp
bmdPYnNlcnZlcnNJblNldC0+Y29udGFpbnMob2JzZXJ2ZXIpKQorICAgICAgICAgICAgb2JzZXJ2
ZXItPmlkVGFyZ2V0Q2hhbmdlZCgpOwogICAgIH0KIAogICAgIGlmIChtX25vdGlmeWluZ09ic2Vy
dmVyc0luU2V0LT5pc0VtcHR5KCkpCiAgICAgICAgIG1fcmVnaXN0cnkucmVtb3ZlKCZpZCk7CiAK
LSAgICBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0ID0gMDsKKyAgICBtX25vdGlmeWluZ09ic2Vy
dmVyc0luU2V0ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCShyZXZpc2lvbiAxOTE3NzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw5ICs2OSw4
IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHIKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOwogICAgIC8vIE1ha2Ug
c3VyZSB3ZSBhcmVuJ3QgY29ubmVjdGVkIHRvIGFueSBvZiB0aGUgcGFzc2VkLWluIHBvcnRzLgog
ICAgIGlmIChwb3J0cykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBv
cnRzLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTWVzc2FnZVBvcnQqIGRhdGFQb3J0ID0g
KCpwb3J0cylbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoZGF0YVBvcnQgPT0gdGhpcyB8fCBt
X2VudGFuZ2xlZENoYW5uZWwtPmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgZGF0YVBvcnQgOiAqcG9ydHMpIHsKKyAgICAgICAgICAgIGlmIChkYXRhUG9ydCA9
PSB0aGlzIHx8IG1fZW50YW5nbGVkQ2hhbm5lbC0+aXNDb25uZWN0ZWRUbyhkYXRhUG9ydC5nZXQo
KSkpIHsKICAgICAgICAgICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTE5MiwxMyArMTkxLDEyIEBAIHN0ZDo6dW5p
cXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4KICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0
Kj4gcG9ydFNldDsKIAogICAgIC8vIFdhbGsgdGhlIGluY29taW5nIGFycmF5IC0gaWYgdGhlcmUg
YXJlIGFueSBkdXBsaWNhdGUgcG9ydHMsIG9yIG51bGwgcG9ydHMgb3IgY2xvbmVkIHBvcnRzLCB0
aHJvdyBhbiBlcnJvciAocGVyIHNlY3Rpb24gOC4zLjMgb2YgdGhlIEhUTUw1IHNwZWMpLgotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcG9ydHMtPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gKCpwb3J0cylbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICgh
cG9ydCB8fCBwb3J0LT5pc05ldXRlcmVkKCkgfHwgcG9ydFNldC5jb250YWlucyhwb3J0KSkgewor
ICAgIGZvciAoYXV0byYgcG9ydCA6ICpwb3J0cykgeworICAgICAgICBpZiAoIXBvcnQgfHwgcG9y
dC0+aXNOZXV0ZXJlZCgpIHx8IHBvcnRTZXQuY29udGFpbnMocG9ydC5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGVjID0gREFUQV9DTE9ORV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQotICAgICAgICBwb3J0U2V0LmFkZChwb3J0KTsKKyAgICAgICAgcG9ydFNldC5h
ZGQocG9ydC5nZXQoKSk7CiAgICAgfQogCiAgICAgLy8gUGFzc2VkLWluIHBvcnRzIHBhc3NlZCB2
YWxpZGl0eSBjaGVja3MsIHNvIHdlIGNhbiBkaXNlbnRhbmdsZSB0aGVtLgpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMTkxNzcxKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw5ICs4OCw5IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShOb2RlKiBub2QKICAg
ICB9OwogICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMgPSAwOwogICAgIGJvb2wg
dmFsdWUgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGJvb2xl
YW5PcHRpb25zKSAvIHNpemVvZihib29sZWFuT3B0aW9uc1swXSk7ICsraSkgewotICAgICAgICBp
ZiAob3B0aW9uc0RpY3Rpb25hcnkuZ2V0KGJvb2xlYW5PcHRpb25zW2ldLm5hbWUsIHZhbHVlKSAm
JiB2YWx1ZSkKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gYm9vbGVhbk9wdGlvbnNbaV0udmFsdWU7
CisgICAgZm9yIChhdXRvJiBib29sZWFuT3B0aW9uIDogYm9vbGVhbk9wdGlvbnMpIHsKKyAgICAg
ICAgaWYgKG9wdGlvbnNEaWN0aW9uYXJ5LmdldChib29sZWFuT3B0aW9uLm5hbWUsIHZhbHVlKSAm
JiB2YWx1ZSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gYm9vbGVhbk9wdGlvbi52YWx1ZTsKICAg
ICB9CiAKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOwpAQCAtMTkx
LDggKzE5MSw4IEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlcigpCiAgICAgICAgIGlm
IChyZWdpc3RyYXRpb24tPmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKICAgICAgICAgICAg
IHRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7CiAgICAgfQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNpZW50UmVnaXN0cmF0aW9ucy5zaXplKCk7ICsr
aSkKLSAgICAgICAgdHJhbnNpZW50UmVnaXN0cmF0aW9uc1tpXS0+Y2xlYXJUcmFuc2llbnRSZWdp
c3RyYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiB0cmFuc2llbnRSZWdp
c3RyYXRpb25zKQorICAgICAgICByZWdpc3RyYXRpb24tPmNsZWFyVHJhbnNpZW50UmVnaXN0cmF0
aW9ucygpOwogCiAgICAgaWYgKG1fcmVjb3Jkcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTIxNCwxMiArMjE0LDEyIEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6ZGVsaXZlckFsbE11
dGF0aW8KICAgICBpZiAoIXN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuaXNFbXB0eSgpKSB7
CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8TXV0YXRpb25PYnNlcnZlcj4+IHN1c3BlbmRlZDsKICAg
ICAgICAgY29weVRvVmVjdG9yKHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCksIHN1c3BlbmRl
ZCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VzcGVuZGVkLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAoIXN1c3BlbmRlZFtpXS0+Y2FuRGVsaXZlcigpKQorICAgICAg
ICBmb3IgKGF1dG8mIG9ic2VydmVyIDogc3VzcGVuZGVkKSB7CisgICAgICAgICAgICBpZiAoIW9i
c2VydmVyLT5jYW5EZWxpdmVyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgICAgIHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkucmVtb3ZlKHN1c3BlbmRlZFtpXSk7
Ci0gICAgICAgICAgICBhY3RpdmVNdXRhdGlvbk9ic2VydmVycygpLmFkZChzdXNwZW5kZWRbaV0p
OworICAgICAgICAgICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5yZW1vdmUob2JzZXJ2
ZXIpOworICAgICAgICAgICAgYWN0aXZlTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzEsMTEgKzIzMSwxMSBAQCB2b2lkIE11dGF0aW9u
T2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvCiAgICAgICAgICAgICByZXR1cm4gbGhzLT5tX3By
aW9yaXR5IDwgcmhzLT5tX3ByaW9yaXR5OwogICAgICAgICB9KTsKIAotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9ic2VydmVycy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KG9ic2VydmVyc1tpXS0+Y2FuRGVsaXZlcigpKQotICAgICAgICAgICAgICAgIG9ic2VydmVyc1tp
XS0+ZGVsaXZlcigpOworICAgICAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzKSB7
CisgICAgICAgICAgICBpZiAob2JzZXJ2ZXItPmNhbkRlbGl2ZXIoKSkKKyAgICAgICAgICAgICAg
ICBvYnNlcnZlci0+ZGVsaXZlcigpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN1c3BlbmRlZE11dGF0aW9uT2JzZXJ2ZXJzKCkuYWRkKG9ic2VydmVyc1tpXSk7CisgICAgICAg
ICAgICAgICAgc3VzcGVuZGVkTXV0YXRpb25PYnNlcnZlcnMoKS5hZGQob2JzZXJ2ZXIpOwogICAg
ICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRGbG93Q29sbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05hbWVkRmxvd0NvbGxl
Y3Rpb24uY3BwCShyZXZpc2lvbiAxOTE3NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRG
bG93Q29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywxMSBAQCBWZWN0
b3I8UmVmUHRyPFdlYktpdE5hbWVkRmxvdz4+IE5hbWVkRmxvCiB7CiAgICAgVmVjdG9yPFJlZlB0
cjxXZWJLaXROYW1lZEZsb3c+PiBuYW1lZEZsb3dzOwogCi0gICAgZm9yIChOYW1lZEZsb3dTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9uYW1lZEZsb3dzLmJlZ2luKCk7IGl0ICE9IG1fbmFtZWRGbG93cy5l
bmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPmZsb3dTdGF0ZSgpID09IFdlYktpdE5h
bWVkRmxvdzo6Rmxvd1N0YXRlTnVsbCkKKyAgICBmb3IgKGF1dG8mIG5hbWVkRmxvdyA6IG1fbmFt
ZWRGbG93cykgeworICAgICAgICBpZiAobmFtZWRGbG93LT5mbG93U3RhdGUoKSA9PSBXZWJLaXRO
YW1lZEZsb3c6OkZsb3dTdGF0ZU51bGwpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBuYW1lZEZsb3dzLmFwcGVuZChSZWZQdHI8V2ViS2l0TmFtZWRGbG93PigqaXQpKTsKKyAgICAg
ICAgbmFtZWRGbG93cy5hcHBlbmQoUmVmUHRyPFdlYktpdE5hbWVkRmxvdz4obmFtZWRGbG93KSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG5hbWVkRmxvd3M7CkBAIC0xMDcsOSArMTA3LDEwIEBAIERv
Y3VtZW50KiBOYW1lZEZsb3dDb2xsZWN0aW9uOjpkb2N1bWVudCgKIFBhc3NSZWZQdHI8RE9NTmFt
ZWRGbG93Q29sbGVjdGlvbj4gTmFtZWRGbG93Q29sbGVjdGlvbjo6Y3JlYXRlQ1NTT01TbmFwc2hv
dCgpCiB7CiAgICAgVmVjdG9yPFdlYktpdE5hbWVkRmxvdyo+IGNyZWF0ZWRGbG93czsKLSAgICBm
b3IgKE5hbWVkRmxvd1NldDo6aXRlcmF0b3IgaXQgPSBtX25hbWVkRmxvd3MuYmVnaW4oKTsgaXQg
IT0gbV9uYW1lZEZsb3dzLmVuZCgpOyArK2l0KQotICAgICAgICBpZiAoKCppdCktPmZsb3dTdGF0
ZSgpID09IFdlYktpdE5hbWVkRmxvdzo6Rmxvd1N0YXRlQ3JlYXRlZCkKLSAgICAgICAgICAgIGNy
ZWF0ZWRGbG93cy5hcHBlbmQoKml0KTsKKyAgICBmb3IgKGF1dG8mIG5hbWVkRmxvdyA6IG1fbmFt
ZWRGbG93cykgeworICAgICAgICBpZiAobmFtZWRGbG93LT5mbG93U3RhdGUoKSA9PSBXZWJLaXRO
YW1lZEZsb3c6OkZsb3dTdGF0ZUNyZWF0ZWQpCisgICAgICAgICAgICBjcmVhdGVkRmxvd3MuYXBw
ZW5kKG5hbWVkRmxvdyk7CisgICAgfQogICAgIHJldHVybiBET01OYW1lZEZsb3dDb2xsZWN0aW9u
OjpjcmVhdGUoY3JlYXRlZEZsb3dzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNp
b24gMTkxNzcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDc0LDkgKzIwNzQsOCBAQCB2b2lkIE5vZGU6Om5vdGlmeU11dGF0aW9uT2JzZXJ2ZXJz
Tm9kZVdpCiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJ5ID0gbm9k
ZS0+bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBzaXplID0gcmVnaXN0cnktPnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LT5hdChpKS0+b2JzZXJ2
ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2godGhpcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJl
Z2lzdHJhdGlvbiA6ICpyZWdpc3RyeSkKKyAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24tPm9i
c2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGF1dG8qIHRyYW5zaWVudFJlZ2lzdHJ5ID0gbm9kZS0+dHJhbnNpZW50TXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTkxNzcx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU1
LDE2ICs3NTUsMTYgQEAgUmVmUHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZQog
CiB2b2lkIFJhbmdlOjpwcm9jZXNzTm9kZXMoQWN0aW9uVHlwZSBhY3Rpb24sIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4+JiBub2RlcywgUGFzc1JlZlB0cjxOb2RlPiBvbGRDb250YWluZXIsIFBhc3NSZWZQ
dHI8Tm9kZT4gbmV3Q29udGFpbmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBub2RlcykgewogICAgICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgICAgICBjYXNlIERl
bGV0ZToKLSAgICAgICAgICAgIG9sZENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobm9kZXNbaV0uZ2V0
KCksIGVjKTsKKyAgICAgICAgICAgIG9sZENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQo
KSwgZWMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRXh0cmFjdDoKLSAgICAg
ICAgICAgIG5ld0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQobm9kZXNbaV0ucmVsZWFzZSgpLCBlYyk7
IC8vIHdpbGwgcmVtb3ZlIG4gZnJvbSBpdHMgcGFyZW50CisgICAgICAgICAgICBuZXdDb250YWlu
ZXItPmFwcGVuZENoaWxkKG5vZGUucmVsZWFzZSgpLCBlYyk7IC8vIHdpbGwgcmVtb3ZlIG4gZnJv
bSBpdHMgcGFyZW50CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9uZToKLSAg
ICAgICAgICAgIG5ld0NvbnRhaW5lci0+YXBwZW5kQ2hpbGQobm9kZXNbaV0tPmNsb25lTm9kZSh0
cnVlKSwgZWMpOworICAgICAgICAgICAgbmV3Q29udGFpbmVyLT5hcHBlbmRDaGlsZChub2RlLT5j
bG9uZU5vZGUodHJ1ZSksIGVjKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtNzgwLDggKzc4MCw3IEBAIFJlZlB0cjxOb2RlPiBSYW5nZTo6cHJvY2Vzc0FuY2VzdG9y
c0FuZFQKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChuKTsKIAogICAgIFJlZlB0cjxOb2RlPiBm
aXJzdENoaWxkSW5BbmNlc3RvclRvUHJvY2VzcyA9IGRpcmVjdGlvbiA9PSBQcm9jZXNzQ29udGVu
dHNGb3J3YXJkID8gY29udGFpbmVyLT5uZXh0U2libGluZygpIDogY29udGFpbmVyLT5wcmV2aW91
c1NpYmxpbmcoKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8Tm9kZT4+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFuY2VzdG9ycy5iZWdpbigpOyBpdCAhPSBhbmNlc3RvcnMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgUmVmUHRyPE5vZGU+IGFuY2VzdG9yID0gKml0OworICAgIGZvciAoYXV0byYgYW5j
ZXN0b3IgOiBhbmNlc3RvcnMpIHsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFj
dGlvbiA9PSBDbG9uZSkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxOb2RlPiBjbG9uZWRBbmNl
c3RvciA9IGFuY2VzdG9yLT5jbG9uZU5vZGUoZmFsc2UpKSB7IC8vIE1pZ2h0IGhhdmUgYmVlbiBy
ZW1vdmVkIGFscmVhZHkgZHVyaW5nIG11dGF0aW9uIGV2ZW50LgogICAgICAgICAgICAgICAgIGNs
b25lZEFuY2VzdG9yLT5hcHBlbmRDaGlsZChjbG9uZWRDb250YWluZXIsIGVjKTsKQEAgLTc5OSwx
NyArNzk4LDE2IEBAIFJlZlB0cjxOb2RlPiBSYW5nZTo6cHJvY2Vzc0FuY2VzdG9yc0FuZFQKICAg
ICAgICAgICAgIGNoaWxkID0gKGRpcmVjdGlvbiA9PSBQcm9jZXNzQ29udGVudHNGb3J3YXJkKSA/
IGNoaWxkLT5uZXh0U2libGluZygpIDogY2hpbGQtPnByZXZpb3VzU2libGluZygpKQogICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKGNoaWxkKTsKIAotICAgICAgICBmb3IgKE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbm9kZXMuYmVnaW4oKTsgaXQgIT0gbm9kZXMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOworICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkIDogbm9kZXMpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAg
ICAgICAgICBjYXNlIERlbGV0ZToKLSAgICAgICAgICAgICAgICBhbmNlc3Rvci0+cmVtb3ZlQ2hp
bGQoY2hpbGQsIGVjKTsKKyAgICAgICAgICAgICAgICBhbmNlc3Rvci0+cmVtb3ZlQ2hpbGQoY2hp
bGQuZ2V0KCksIGVjKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RXh0cmFjdDogLy8gd2lsbCByZW1vdmUgY2hpbGQgZnJvbSBhbmNlc3RvcgogICAgICAgICAgICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCkKLSAgICAgICAgICAg
ICAgICAgICAgY2xvbmVkQ29udGFpbmVyLT5hcHBlbmRDaGlsZChjaGlsZCwgZWMpOworICAgICAg
ICAgICAgICAgICAgICBjbG9uZWRDb250YWluZXItPmFwcGVuZENoaWxkKGNoaWxkLmdldCgpLCBl
Yyk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjbG9uZWRDb250
YWluZXItPmluc2VydEJlZm9yZShjaGlsZCwgY2xvbmVkQ29udGFpbmVyLT5maXJzdENoaWxkKCks
IGVjKTsKKyAgICAgICAgICAgICAgICAgICAgY2xvbmVkQ29udGFpbmVyLT5pbnNlcnRCZWZvcmUo
Y2hpbGQuZ2V0KCksIGNsb25lZENvbnRhaW5lci0+Zmlyc3RDaGlsZCgpLCBlYyk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENsb25lOgogICAgICAgICAgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gUHJvY2Vzc0NvbnRlbnRzRm9yd2FyZCkKQEAgLTExODIsOSArMTE4
MCw4IEBAIEludFJlY3QgUmFuZ2U6OmFic29sdXRlQm91bmRpbmdCb3goKSBjb24KICAgICBJbnRS
ZWN0IHJlc3VsdDsKICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CiAgICAgYWJzb2x1dGVUZXh0
UmVjdHMocmVjdHMpOwotICAgIGNvbnN0IHNpemVfdCBuID0gcmVjdHMuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQotICAgICAgICByZXN1bHQudW5pdGUocmVjdHNb
aV0pOworICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQorICAgICAgICByZXN1bHQudW5pdGUo
cmVjdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTMxNiwxNSArMTMxMywxMyBAQCB2
b2lkIFJhbmdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yCiAgICAgICAgICAgICBpbnQg
YmVnaW5TZWxlY3Rpb25PZmZzZXQgPSBpc1N0YXJ0Tm9kZSA/IHN0YXJ0T2Zmc2V0IDogMDsKICAg
ICAgICAgICAgIGludCBlbmRTZWxlY3Rpb25PZmZzZXQgPSBpc0VuZE5vZGUgPyBlbmRPZmZzZXQg
OiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgICAgICAgICAgcmVuZGVyZXIt
PmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhuZXdSZWN0cywgYmVnaW5TZWxlY3Rpb25PZmZzZXQsIGVu
ZFNlbGVjdGlvbk9mZnNldCk7Ci0gICAgICAgICAgICBzaXplX3QgbnVtYmVyT2ZOZXdSZWN0cyA9
IG5ld1JlY3RzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZOZXdSZWN0czsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uUmVjdCYgc2Vs
ZWN0aW9uUmVjdCA9IG5ld1JlY3RzW2ldOworICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rp
b25SZWN0IDogbmV3UmVjdHMpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5j
b250YWluc1N0YXJ0KCkgJiYgIWlzU3RhcnROb2RlKQogICAgICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb25SZWN0LnNldENvbnRhaW5zU3RhcnQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChz
ZWxlY3Rpb25SZWN0LmNvbnRhaW5zRW5kKCkgJiYgIWlzRW5kTm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0aW9uUmVjdC5zZXRDb250YWluc0VuZChmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblJlY3QubG9naWNhbFdpZHRoKCkgfHwgc2VsZWN0aW9uUmVjdC5sb2dp
Y2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChuZXdSZWN0c1tp
XSk7CisgICAgICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG5ld1JlY3RzLnNocmluaygwKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTAsMTAgKzExMCw5IEBAIHZvaWQgU2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKCkKICAgICBpZiAo
bnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUpCiAgICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUlu
T3JkZXIucmVtb3ZlKDAsIG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKTsKIAotICAgIHNpemVf
dCBzaXplID0gc2NyaXB0cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBzY3JpcHRzW2ld
LmNhY2hlZFNjcmlwdCgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHNjcmlw
dHNbaV0ucmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpOworICAgIGZvciAoYXV0byYgc2NyaXB0IDog
c2NyaXB0cykgeworICAgICAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHNjcmlwdC5j
YWNoZWRTY3JpcHQoKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBzY3JpcHQu
cmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpOwogICAgICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAg
ICAgIC8vIFBhcGVyIG92ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NDA1MAogICAgICAgICBpZiAoIWVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTkxNzcx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksNyBAQCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9u
Q29udHJvbGxlcjo6c2VydmljCiAgICAgLy8gcmVmZXJlbmNlIHRvIHVzLCBzbyB0YWtlIGEgZGVm
ZW5zaXZlIHJlZmVyZW5jZS4KICAgICBSZWY8U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBw
cm90ZWN0KCp0aGlzKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrKiBjYWxs
YmFjayA9IGNhbGxiYWNrc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogY2Fs
bGJhY2tzKSB7CiAgICAgICAgIGlmICghY2FsbGJhY2stPm1fZmlyZWRPckNhbmNlbGxlZCkgewog
ICAgICAgICAgICAgY2FsbGJhY2stPm1fZmlyZWRPckNhbmNlbGxlZCA9IHRydWU7CiAgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsRmlyZUFuaW1hdGlvbkZyYW1lKG1fZG9jdW1lbnQsIGNhbGxiYWNr
LT5tX2lkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9u
IDE5MTc3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM1LDkgKzEzNSw4IEBAIGlubGluZSBFbGVtZW50KiBTZWxlY3RvckRhdGFM
aXN0OjpzZWxlY3QKIAogYm9vbCBTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKEVsZW1lbnQmIHRh
cmdldEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2Vs
ZWN0b3JzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMobV9zZWxlY3RvcnNbaV0sIHRh
cmdldEVsZW1lbnQsIHRhcmdldEVsZW1lbnQpKQorICAgIGZvciAoYXV0byYgc2VsY3RvciA6IG1f
c2VsZWN0b3JzKSB7CisgICAgICAgIGlmIChzZWxlY3Rvck1hdGNoZXMoc2VsY3RvciwgdGFyZ2V0
RWxlbWVudCwgdGFyZ2V0RWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjIwLDEyICsyMTksMTAgQEAgQUxXQVlTX0lOTElORSB2
b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZQogICAgIGlmIChVTkxJS0VMWShyb290Tm9kZS50cmVl
U2NvcGUoKS5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQoaWRUb01hdGNoKSkpIHsKICAg
ICAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZWxlbWVudHMgPSByb290Tm9kZS50cmVlU2Nv
cGUoKS5nZXRBbGxFbGVtZW50c0J5SWQoaWRUb01hdGNoKTsKICAgICAgICAgQVNTRVJUKGVsZW1l
bnRzKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gZWxlbWVudHMtPnNpemUoKTsKICAgICAgICAg
Ym9vbCByb290Tm9kZUlzVHJlZVNjb3BlUm9vdCA9IGlzVHJlZVNjb3BlUm9vdChyb290Tm9kZSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAg
ICAgRWxlbWVudCYgZWxlbWVudCA9ICplbGVtZW50cy0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
KHJvb3ROb2RlSXNUcmVlU2NvcGVSb290IHx8IGVsZW1lbnQuaXNEZXNjZW5kYW50T2YoJnJvb3RO
b2RlKSkgJiYgc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yRGF0YSwgZWxlbWVudCwgcm9vdE5vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JRdWVyeVRyYWl0OjphcHBlbmRPdXRwdXRGb3JF
bGVtZW50KG91dHB1dCwgJmVsZW1lbnQpOworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiAq
ZWxlbWVudHMpIHsKKyAgICAgICAgICAgIGlmICgocm9vdE5vZGVJc1RyZWVTY29wZVJvb3QgfHwg
ZWxlbWVudC0+aXNEZXNjZW5kYW50T2YoJnJvb3ROb2RlKSkgJiYgc2VsZWN0b3JNYXRjaGVzKHNl
bGVjdG9yRGF0YSwgKmVsZW1lbnQsIHJvb3ROb2RlKSkgeworICAgICAgICAgICAgICAgIFNlbGVj
dG9yUXVlcnlUcmFpdDo6YXBwZW5kT3V0cHV0Rm9yRWxlbWVudChvdXRwdXQsIGVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIGlmIChTZWxlY3RvclF1ZXJ5VHJhaXQ6OnNob3VsZE9ubHlNYXRjaEZp
cnN0RWxlbWVudCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpA
QCAtMzg1LDEwICszODIsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6
ZXhlCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PgogQUxXQVlTX0lOTElO
RSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShj
b25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0
OjpPdXRwdXRUeXBlJiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3Vu
dCA9IG1fc2VsZWN0b3JzLnNpemUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50
RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzKG1fc2VsZWN0b3JzW2ldLCBlbGVtZW50LCByb290
Tm9kZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RvciA6IG1fc2VsZWN0b3JzKSB7Cisg
ICAgICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBlbGVtZW50LCByb290Tm9k
ZSkpIHsKICAgICAgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZv
ckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKFNlbGVjdG9y
UXVlcnlUcmFpdDo6c2hvdWxkT25seU1hdGNoRmlyc3RFbGVtZW50KQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC00NDEsMjAgKzQzNywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2Vs
ZWN0b3JEYXRhTGlzdDo6ZXhlCiB7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRl
eHQgY2hlY2tpbmdDb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UXVlcnlpbmdSdWxlcyk7
CiAgICAgY2hlY2tpbmdDb250ZXh0LnNjb3BlID0gcm9vdE5vZGUuaXNEb2N1bWVudE5vZGUoKSA/
IG51bGxwdHIgOiAmcm9vdE5vZGU7Ci0gICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2Vs
ZWN0b3JzLnNpemUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFu
dHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7CisgICAgICAgIGZvciAo
YXV0byYgc2VsZWN0b3IgOiBtX3NlbGVjdG9ycykgewogI2lmIENTU19TRUxFQ1RPUl9KSVRfUFJP
RklMSU5HCi0gICAgICAgICAgICBtX3NlbGVjdG9yc1tpXS5jb21waWxlZFNlbGVjdG9yVXNlZCgp
OworICAgICAgICAgICAgc2VsZWN0b3IuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKICNlbmRpZgog
ICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2b2lkKiBjb21w
aWxlZFNlbGVjdG9yQ2hlY2tlciA9IG1fc2VsZWN0b3JzW2ldLmNvbXBpbGVkU2VsZWN0b3JDb2Rl
UmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgaWYgKG1fc2VsZWN0
b3JzW2ldLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6
OlF1ZXJ5U2VsZWN0b3JTaW1wbGVTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyID0gU2Vs
ZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBsZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9u
KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1
cyk7CisgICAgICAgICAgICB2b2lkKiBjb21waWxlZFNlbGVjdG9yQ2hlY2tlciA9IHNlbGVjdG9y
LmNvbXBpbGVkU2VsZWN0b3JDb2RlUmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICAgICAgICAgIGF1
dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6cXVlcnlTZWxlY3RvclNpbXBs
ZVNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uKGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBzZWxlY3Rv
ci5jb21waWxhdGlvblN0YXR1cyk7CiAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHNlbGVjdG9y
Q2hlY2tlcigmZWxlbWVudCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IEFTU0VSVChtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKLSAgICAg
ICAgICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpRdWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpx
dWVyeVNlbGVjdG9yU2VsZWN0b3JDaGVja2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNv
bXBpbGVkU2VsZWN0b3JDaGVja2VyLCBtX3NlbGVjdG9yc1tpXS5jb21waWxhdGlvblN0YXR1cyk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHNlbGVjdG9yLmNvbXBpbGF0aW9uU3RhdHVzID09IFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21w
aWxlcjo6cXVlcnlTZWxlY3RvclNlbGVjdG9yQ2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29u
dGV4dChjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3IuY29tcGlsYXRpb25TdGF0dXMp
OwogICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQsICZj
aGVja2luZ0NvbnRleHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1hdGNoZWQp
IHsKQEAgLTU3OSw5ICs1NzQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlz
dDo6ZXhlCiAgICAgY2FzZSBDb21waWxhYmxlTXVsdGlwbGVTZWxlY3Rvck1hdGNoOgogI2lmIEVO
QUJMRShDU1NfU0VMRUNUT1JfSklUKQogICAgICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNlbGVj
dG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghY29tcGlsZVNl
bGVjdG9yKG1fc2VsZWN0b3JzW2ldLCAqc2VhcmNoUm9vdE5vZGUpKSB7CisgICAgICAgIGZvciAo
YXV0byYgc2VsZWN0b3IgOiBtX3NlbGVjdG9ycykgeworICAgICAgICAgICAgaWYgKCFjb21waWxl
U2VsZWN0b3Ioc2VsZWN0b3IsICpzZWFyY2hSb290Tm9kZSkpIHsKICAgICAgICAgICAgICAgICBt
X21hdGNoVHlwZSA9IE11bHRpcGxlU2VsZWN0b3JNYXRjaDsKICAgICAgICAgICAgICAgICBnb3Rv
IE11bHRpcGxlU2VsZWN0b3JNYXRjaDsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDE5MTc3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOSAr
NjQsOCBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAobm9kZS0+aGFzU3ludGhldGljQXR0ckNoaWxk
Tm9kZXMoKSkgewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxBdHRyPj4mIGF0dHJz
ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJOb2RlTGlzdCgpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
ICAgIG1vdmVUcmVlVG9OZXdTY29wZShhdHRyc1tpXS5nZXQoKSk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGF0dHIgOiBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0ck5vZGVMaXN0KCkpCisg
ICAgICAgICAgICAgICAgbW92ZVRyZWVUb05ld1Njb3BlKGF0dHIuZ2V0KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvdyA9IG5vZGUtPnNoYWRvd1Jvb3QoKSkg
ewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>