<?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>70421</bug_id>
          
          <creation_ts>2011-10-19 08:18:21 -0700</creation_ts>
          <short_desc>V8 bindings: event listener can be garbage collected, causing events loss</short_desc>
          <delta_ts>2011-11-15 15:17:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>All</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>0</everconfirmed>
          <reporter name="Eugene Nalimov">enal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>arv</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>pkasting</cc>
    
    <cc>scherkus</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486804</commentid>
    <comment_count>0</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-19 08:18:21 -0700</bug_when>
    <thetext>Moved from https://bugs.webkit.org/show_bug.cgi?id=66878 because it is separate issue. For all the details and repro cases see discussion there.

Bug was in V8 binding forever. If type is subtype of Node (e.g. Node itself) then there is only weak reference from object to event listener, and event listener can be collected even when event source is alive and can send events in the future. Code generator emits special code for types that are not subtypes of Node, establishing hidden dependency.  Fix can do something similar for subtypes of Node as well. Not sure if hidden dependency is right thing (it requires extra slot, and we don&apos;t want to increase size of lot of types, when absolute majority of objects would never have event listeners attached). Maybe we should use hidden value mechanism, or object groups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500246</commentid>
    <comment_count>1</comment_count>
      <attachid>114561</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-10 13:59:21 -0800</bug_when>
    <thetext>Created attachment 114561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500253</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 14:03:02 -0800</bug_when>
    <thetext>Attachment 114561 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/bindings/v8/DOMDataStore.h:94:  The parameter name &quot;v8Object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501160</commentid>
    <comment_count>3</comment_count>
      <attachid>114561</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 15:23:32 -0800</bug_when>
    <thetext>Comment on attachment 114561
Patch

Attachment 114561 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10350618

New failing tests:
media/audio-garbage-collect.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501630</commentid>
    <comment_count>4</comment_count>
      <attachid>114561</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-13 22:40:19 -0800</bug_when>
    <thetext>Comment on attachment 114561
Patch

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

This is a nice solution.  Any idea why the test is failing?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1700
&gt; +    # A DOMObject that is an ActiveDOMObject and also a DOMNode should be treated as an DOMNode here.

Can you explain a bit more why?  I would naively expect ActiveDOMNode here.

&gt; Source/WebCore/bindings/v8/V8DOMWrapper.cpp:95
&gt; -    getDOMNodeMap().set(node, wrapper);
&gt; +    if (node-&gt;isActiveNode())

I hope this doesn&apos;t slow us down on DOM benchmarks.  Please ping the perf sheriff when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501794</commentid>
    <comment_count>5</comment_count>
      <attachid>114561</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-11-14 04:38:44 -0800</bug_when>
    <thetext>Comment on attachment 114561
Patch

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

Very nice, thanks a lot!

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:146
&gt; +template&lt;typename T&gt; inline bool GCPrologueSpecialCase(T* object, v8::Persistent&lt;v8::Object&gt; wrapper, WrapperTypeInfo* typeInfo)

maybe just provide no definition to get link time error?

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:176
&gt; +template&lt;typename T&gt; class GCPrologueVisitor : public DOMWrapperMap&lt;T&gt;::Visitor {

Can we avoid specialization tricks?  We can just pass a trait which does a special processing.  Something like:

struct MessagePortHandler {
  static bool process(void* object, ....) { .... }
};

struct NodeHandler {
  static bool process(....)
}

And now visitDOMWrapper(....) {
  ...
  if (Processor::process(...)) {
    ...
  }
}

WDYT?

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:411
&gt; +template&lt;typename T, v8::WeakReferenceCallback callback&gt; struct GCEpilogueHelper {

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501926</commentid>
    <comment_count>6</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-14 08:22:22 -0800</bug_when>
    <thetext>Will take care of suggestions, hopefully will send new patch later today.

No idea why test is listed as failing -- it is *not* in the list of failed tests, see output http://queues.webkit.org/results/10350618

Maybe it was skipped with lot of other tests after limit of failures was reached, but I am not sure.

Regarding perf: I don&apos;t expect one added indirect call to noticeably affect perf, especially because we are adding node to the map only once after it is created. Memory allocation and search in the map are much more expensive. And perf is exactly why I added new IsActiveNode() method to node instead of getting type descriptor and calling its toActive() method -- 1 indirect call instead of 2. 

Thanks,
Eugene</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501964</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 08:58:42 -0800</bug_when>
    <thetext>&gt; No idea why test is listed as failing -- it is *not* in the list of failed tests, see output http://queues.webkit.org/results/10350618

Looks like it timed out:

http://queues.webkit.org/results/10350615
http://queues.webkit.org/results/10450608

&gt; Regarding perf: I don&apos;t expect one added indirect call to noticeably affect perf, especially because we are adding node to the map only once after it is created. Memory allocation and search in the map are much more expensive. And perf is exactly why I added new IsActiveNode() method to node instead of getting type descriptor and calling its toActive() method -- 1 indirect call instead of 2. 

Sounds reasonable.  Hopefully the benchmarks will agree.  ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502375</commentid>
    <comment_count>8</comment_count>
      <attachid>115043</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-14 15:21:28 -0800</bug_when>
    <thetext>Created attachment 115043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502380</commentid>
    <comment_count>9</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-14 15:24:52 -0800</bug_when>
    <thetext>Addressed everything:
* Test was failing just because it was too slow. On my machine when running release build it usually was just marginally able to pass in less than 6 seconds (not always). Fixed by playing not entire audio file but only its tail.
* Added comment to the generator.
* Got rid of template specialization, added traits instead. Personally I loved specialization more, but traits are Ok, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502382</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 15:26:00 -0800</bug_when>
    <thetext>Attachment 115043 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/bindings/v8/DOMDataStore.h:94:  The parameter name &quot;v8Object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502417</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 15:59:57 -0800</bug_when>
    <thetext>&gt; Fixed by playing not entire audio file but only its tail.

How long does it take now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502473</commentid>
    <comment_count>12</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-14 16:53:49 -0800</bug_when>
    <thetext>2.6 seconds on my Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502486</commentid>
    <comment_count>13</comment_count>
      <attachid>115043</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 17:03:44 -0800</bug_when>
    <thetext>Comment on attachment 115043
Patch

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

&gt; LayoutTests/media/audio-garbage-collect.html:31
&gt; +function forceGC() {
&gt; +    if (window.GCController)
&gt; +        return GCController.collect();
&gt; +
&gt; +    // Force garbage collection
&gt; +    for (var ndx = 0; ndx &lt; 99000; ndx ++)
&gt; +        var str = new String(&quot;1234&quot;);
&gt; +}

We have a fancy new gc.js script somewhere you can use for this.

&gt; LayoutTests/media/audio-garbage-collect.html:47
&gt; +            a.currentTime = a.duration - 0.5;

Can we make 0.5 smaller?  Is this test racy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502487</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 17:04:19 -0800</bug_when>
    <thetext>That&apos;s on the long side, easily in the 99.9th percentile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502494</commentid>
    <comment_count>15</comment_count>
      <attachid>115043</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-14 17:06:35 -0800</bug_when>
    <thetext>Comment on attachment 115043
Patch

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

I&apos;m happy with the code change.  I&apos;m less excited about the long test.  Below are some extremely minor style nits.  If we can make the test faster, great.  If not, we can live with it.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:167
&gt; +struct SpecialCasePrologueNodeHandler {

Normally we&apos;d use &quot;class&quot; for traits classes.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:174
&gt; +template&lt;typename T, typename S&gt; class GCPrologueVisitor : public DOMWrapperMap&lt;T&gt;::Visitor {

Usually we have a line break before &quot;class&quot; in these template declarations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502530</commentid>
    <comment_count>16</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-14 17:28:44 -0800</bug_when>
    <thetext>Will address issues and look what I can do with test tomorrow.

I was decreasing the run time till tests stopped to be the slowest one in the media tests. I probably can decrease the constant from 0.5 to something like 0.35 without affecting the test -- will look tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502867</commentid>
    <comment_count>17</comment_count>
      <attachid>115043</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2011-11-15 06:42:28 -0800</bug_when>
    <thetext>Comment on attachment 115043
Patch

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

LGTM!  And thanks again.

&gt;&gt; LayoutTests/media/audio-garbage-collect.html:31
&gt;&gt; +}
&gt; 
&gt; We have a fancy new gc.js script somewhere you can use for this.

I believe it should be gc(), see http://trac.webkit.org/browser/trunk/LayoutTests/fast/dom/HTMLFormElement/invalid-form-field.html#L27 for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502954</commentid>
    <comment_count>18</comment_count>
      <attachid>115176</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-15 09:11:21 -0800</bug_when>
    <thetext>Created attachment 115176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502956</commentid>
    <comment_count>19</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-15 09:14:26 -0800</bug_when>
    <thetext>Addressed concerns:
* Replaced &apos;struct&apos; by &apos;class&apos;, split lines between &apos;template&apos; and &apos;class&apos;
* Added UNUSED_PARAM() to the traits functions that not use that parameter
* Speed up test; not it runs in 1.9 seconds and is 5th longest test in LayoutTests/media, practically on par with 6th tests
* Call gc() in test instead of forcing GC by creating lot of objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502958</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 09:15:38 -0800</bug_when>
    <thetext>Attachment 115176 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/bindings/v8/DOMDataStore.h:94:  The parameter name &quot;v8Object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503022</commentid>
    <comment_count>21</comment_count>
      <attachid>115176</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-15 10:22:53 -0800</bug_when>
    <thetext>Comment on attachment 115176
Patch

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

&gt; LayoutTests/media/audio-garbage-collect.html:42
&gt; +                gc();

Using the gc.js file is slightly better because then the test will run outside of the test harness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503058</commentid>
    <comment_count>22</comment_count>
      <attachid>115203</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-15 10:59:12 -0800</bug_when>
    <thetext>Created attachment 115203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503059</commentid>
    <comment_count>23</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-11-15 11:00:29 -0800</bug_when>
    <thetext>Addressed concern: using g() from LayoutTests/Resources/gc.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503062</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 11:01:55 -0800</bug_when>
    <thetext>Attachment 115203 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1

Source/WebCore/bindings/v8/DOMDataStore.h:94:  The parameter name &quot;v8Object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503138</commentid>
    <comment_count>25</comment_count>
      <attachid>115203</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 12:14:09 -0800</bug_when>
    <thetext>Comment on attachment 115203
Patch

Clearing flags on attachment: 115203

Committed r100307: &lt;http://trac.webkit.org/changeset/100307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503139</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 12:14:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503336</commentid>
    <comment_count>27</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-11-15 15:14:13 -0800</bug_when>
    <thetext>Could this have cause a crash on the Mac 10.6 dbg bot when running fast/dom/image-object.html?  See http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=fast%2Fdom%2Fimage-object.html .  The crash stack looks like some kind of memory error:

Process:         DumpRenderTree [8957]
Path:            /b/build/slave/Webkit_Mac10_6__CG__dbg_/build/src/xcodebuild/Debug/DumpRenderTree.app/Contents/MacOS/DumpRenderTree
Identifier:      DumpRenderTree
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  Python [7453]

Date/Time:       2011-11-10 21:52:50.153 -0800
OS Version:      Mac OS X Server 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000bec00010
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.apple.testnetscapeplugin  	0x13aa8eb9 NPP_SetWindow + 297
1   DumpRenderTree                	0x3c3b0783 webkit::npapi::PluginInstance::NPP_SetWindow(_NPWindow*) + 515
2   DumpRenderTree                	0x3c3eb8ad webkit::npapi::WebPluginDelegateImpl::WindowlessSetWindow() + 349
3   DumpRenderTree                	0x3c3ed750 webkit::npapi::WebPluginDelegateImpl::WindowlessUpdateGeometry(gfx::Rect const&amp;, gfx::Rect const&amp;) + 656
4   DumpRenderTree                	0x3c3e891b webkit::npapi::WebPluginDelegateImpl::UpdateGeometry(gfx::Rect const&amp;, gfx::Rect const&amp;) + 139
5   DumpRenderTree                	0x3c3f5669 webkit::npapi::WebPluginImpl::updateGeometry(WebKit::WebRect const&amp;, WebKit::WebRect const&amp;, WebKit::WebVector&lt;WebKit::WebRect&gt; const&amp;, bool) + 857
6   DumpRenderTree                	0x3c3f591a non-virtual thunk to webkit::npapi::WebPluginImpl::updateGeometry(WebKit::WebRect const&amp;, WebKit::WebRect const&amp;, WebKit::WebVector&lt;WebKit::WebRect&gt; const&amp;, bool) + 90
7   DumpRenderTree                	0x38f81a75 WebKit::WebPluginContainerImpl::reportGeometry() + 341
8   DumpRenderTree                	0x38f80038 WebKit::WebPluginContainerImpl::setFrameRect(WebCore::IntRect const&amp;) + 88
9   DumpRenderTree                	0x3ba40031 WebCore::RenderWidget::setWidgetGeometry(WebCore::IntRect const&amp;) + 321
10  DumpRenderTree                	0x3ba402b6 WebCore::RenderWidget::updateWidgetGeometry() + 470
11  DumpRenderTree                	0x3ba41404 WebCore::RenderWidget::updateWidgetPosition() + 100
12  DumpRenderTree                	0x3ba2a5d5 WebCore::RenderView::updateWidgetPositions() + 117
13  DumpRenderTree                	0x3b5013e1 WebCore::FrameView::performPostLayoutTasks() + 465
14  DumpRenderTree                	0x3b500f70 WebCore::FrameView::layout(bool) + 4528
15  DumpRenderTree                	0x3a7aca47 WebCore::Document::updateLayout() + 311
16  DumpRenderTree                	0x3a7acbf3 WebCore::Document::updateLayoutIgnorePendingStylesheets() + 243
17  DumpRenderTree                	0x3a82dcf8 WebCore::Element::scrollHeight() + 56
18  DumpRenderTree                	0x38f3c917 WebKit::WebFrameImpl::documentElementScrollHeight() const + 135
19  DumpRenderTree                	0x38e64528 WebViewHost::didUpdateLayout(WebKit::WebFrame*) + 136
20  DumpRenderTree                	0x38e64589 non-virtual thunk to WebViewHost::didUpdateLayout(WebKit::WebFrame*) + 41
21  DumpRenderTree                	0x38e93e07 WebKit::ChromeClientImpl::layoutUpdated(WebCore::Frame*) const + 103
22  DumpRenderTree                	0x3b501157 WebCore::FrameView::layout(bool) + 5015
23  DumpRenderTree                	0x3a7ac483 WebCore::Document::implicitClose() + 995
24  DumpRenderTree                	0x3b3ac9c2 WebCore::FrameLoader::checkCallImplicitClose() + 178
25  DumpRenderTree                	0x3b3ac6ca WebCore::FrameLoader::checkCompleted() + 330
26  DumpRenderTree                	0x3b3ab13e WebCore::FrameLoader::finishedParsing() + 190
27  DumpRenderTree                	0x3a7b93b2 WebCore::Document::finishedParsing() + 626
28  DumpRenderTree                	0x3aaafd6a WebCore::HTMLTreeBuilder::finished() + 170
29  DumpRenderTree                	0x3aa7730e WebCore::HTMLDocumentParser::end() + 254
30  DumpRenderTree                	0x3aa7610c WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() + 300
31  DumpRenderTree                	0x3aa75e7c WebCore::HTMLDocumentParser::prepareToStopParsing() + 300
32  DumpRenderTree                	0x3aa77385 WebCore::HTMLDocumentParser::attemptToEnd() + 85
33  DumpRenderTree                	0x3aa77409 WebCore::HTMLDocumentParser::finish() + 89
34  DumpRenderTree                	0x3b39ed9a WebCore::DocumentWriter::endIfNotLoadingMainResource() + 282
35  DumpRenderTree                	0x3b39e2d3 WebCore::DocumentWriter::end() + 67
36  DumpRenderTree                	0x3b383f42 WebCore::DocumentLoader::finishedLoading() + 114
37  DumpRenderTree                	0x3b3b6665 WebCore::FrameLoader::finishedLoading() + 101
38  DumpRenderTree                	0x3b3d4672 WebCore::MainResourceLoader::didFinishLoading(double) + 434
39  DumpRenderTree                	0x3b3f4198 WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double) + 200
40  DumpRenderTree                	0x38ef5da9 WebCore::ResourceHandleInternal::didFinishLoading(WebKit::WebURLLoader*, double) + 265
41  DumpRenderTree                	0x3c456480 webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest(net::URLRequestStatus const&amp;, std::string const&amp;, base::Time const&amp;) + 992
... (remainder trimmed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503338</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-15 15:15:51 -0800</bug_when>
    <thetext>&gt; Date/Time:       2011-11-10 21:52:50.153 -0800

This crash stack is several days old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503339</commentid>
    <comment_count>29</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-11-15 15:17:42 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; Date/Time:       2011-11-10 21:52:50.153 -0800
&gt; 
&gt; This crash stack is several days old.

Sigh... sorry.  I was misled by the flakiness dashboard whose results at this point seem to be almost always wrong.

Never mind.  Looks like the real problem here is a different bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114561</attachid>
            <date>2011-11-10 13:59:21 -0800</date>
            <delta_ts>2011-11-14 15:21:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70421-20111110135920.patch</filename>
            <type>text/plain</type>
            <size>25641</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5ODkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMTEtMTAgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBnb29nbGUuY29tPgorCisgICAgICAgIEV2ZW50IGxpc3RlbmVyIGZvciBh
Y3RpdmUgRE9NIG9iamVjdCB0aGF0IGlzIGFsc28gRE9NIG5vZGUgY2FuIGJlIGdhcmJhZ2UgY29s
bGVjdGVkIHByZW1hdHVyZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzA0MjEgCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJvYmxlbSBkZW1vbnN0cmF0ZWQgaXRzZWxmIHdoZW4gSFRNTEF1ZGlvRWxl
bWVudCB3YXMgY2hhbmdlZCB0byBiZWNvbWUgYWN0aXZlIERPTSBvYmplY3QuCisgICAgICAgIEJl
Zm9yZSB0aGF0IHRoZXJlIHdlcmUgbm8gRE9NIG9iamVjdHMgdGhhdCBzaW11bHRhbmVvdXNseSB3
ZXJlIG5vZGVzIGFuZCBhY3RpdmUgb2JqZWN0cy4KKyAgICAgICAgRE9NIG9iamVjdCBjb3VsZCBi
ZSBoZWxkIGluIG9uZSBvZiAzIG1hcHMgLS0gbm9kZSBtYXAsIGFjdGl2ZSBvYmplY3RzIG1hcCwg
YW5kIGFsbCBvdGhlcgorICAgICAgICBvYmplY3RzIG1hcCwgYW5kIEhUTUxBdWRpb0VsZW1lbnQg
c2hvdWxkIGJlIGluIDIgbWFwcyBzaW11bHRhbmVvdXNseS4gV2hlbiBpdCB3YXMgaW4gdGhlCisg
ICAgICAgIGFjdGl2ZSBET00gb2JqZWN0cyBtYXAgb25seSwgaXRzIGV2ZW50IGxpc3RlbmVyIGNv
dWxkIGJlIGdhcmJhZ2UgY29sbGVjdGVkLCBiZWNhdXNlIHNwZWNpYWwKKyAgICAgICAgY29kZSB0
aGF0IGdyb3VwcyBsaXN0ZW5lcnMgd2l0aCB3cmFwcGVycyBjb3VsZCBoYW5kbGUgb25seSB3cmFw
cGVycyBmb3Igb2JqZWN0cyBpbiB0aGUgbm9kZQorICAgICAgICBtYXAuIElmIHdlIHB1dCBIVE1M
QXVkaW9FbGVtZW50IGludG8gbm9kZXMgbWFwLCBpdCB3b3VsZCBub3QgYmUgYWN0aXZlIERPTSBu
b2RlLCBhbmQgY2FuIGJlCisgICAgICAgIGdhcmJhZ2UgY29sbGVjdGVkIHByZW1hdHVyZWx5IGl0
c2VsZiAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCku
CisgICAgICAgIEZpeCBpcyB0byBpbnRyb2R1Y2UgNHRoIG1hcCAtLSBhY3RpdmUgbm9kZXMgbWFw
LCBhbmQgY2hhbmdlIHRoZSBjb2RlIGFjY29yZGluZ2x5LgorCisgICAgICAgIFRlc3Q6IG1lZGlh
L2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlTmFtZWRDb25zdHJ1Y3RvckNh
bGxiYWNrKToKKyAgICAgICAgKEdldERvbU1hcEZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9ET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpE
T01EYXRhU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpnZXRET01XcmFw
cGVyTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFj
ayk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmg6CisgICAgICAgIChXZWJD
b3JlOjpET01EYXRhU3RvcmU6OmFjdGl2ZURvbU5vZGVNYXApOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRET01E
YXRhU3RvcmU6OlNjb3BlZERPTURhdGFTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRE
T01EYXRhU3RvcmU6On5TY29wZWRET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1N0YXRpY0RPTURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNET01EYXRh
U3RvcmU6OlN0YXRpY0RPTURhdGFTdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU3RhdGlj
RE9NRGF0YVN0b3JlLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0QWN0aXZlRE9NTm9kZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpy
ZW1vdmVBbGxET01PYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0QWN0aXZlRE9NTm9k
ZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
c2V0SlNXcmFwcGVyRm9yRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OmdldFdyYXBwZXJTbG93KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHQ1Byb2xvZ3VlU3BlY2lhbENhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6dm9pZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdDUHJvbG9ndWVWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUpOgorICAgICAgICAoV2ViQ29yZTo6R0NFcGls
b2d1ZUhlbHBlcjo6R0NFcGlsb2d1ZVNwZWNpYWxDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdD
RXBpbG9ndWVWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhH
Q0NvbnRyb2xsZXI6OmdjRXBpbG9ndWUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjppc0FjdGl2ZU5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEF1ZGlv
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudDo6aXNBY3RpdmVO
b2RlKToKKwogMjAxMS0xMS0xMCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jhc2ggd2hlbiBjcmVhdGUgbGVnYWN5IHBvc2l0
aW9uIGZvciBzaGFkb3dSb290CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gOTk4MDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5
KQpAQCAtMTY5NywxMSArMTY5NywxMSBAQCBFTkQKICAgICB9CiAKICAgICBteSAkRE9NT2JqZWN0
ID0gIkRPTU9iamVjdCI7Ci0gICAgIyBBIERPTU9iamVjdCB0aGF0IGlzIGFuIEFjdGl2ZURPTU9i
amVjdCBhbmQgYWxzbyBhIERPTU5vZGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gQWN0aXZlRE9N
T2JqZWN0LgotICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVE
T01PYmplY3QifSkgewotICAgICAgICAkRE9NT2JqZWN0ID0gIkFjdGl2ZURPTU9iamVjdCI7Ci0g
ICAgfSBlbHNpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgIyBBIERPTU9iamVj
dCB0aGF0IGlzIGFuIEFjdGl2ZURPTU9iamVjdCBhbmQgYWxzbyBhIERPTU5vZGUgc2hvdWxkIGJl
IHRyZWF0ZWQgYXMgYW4gRE9NTm9kZSBoZXJlLgorICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRh
Tm9kZSkpIHsKICAgICAgICAgJERPTU9iamVjdCA9ICJET01Ob2RlIjsKKyAgICB9IGVsc2lmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSkgeworICAg
ICAgICAkRE9NT2JqZWN0ID0gIkFjdGl2ZURPTU9iamVjdCI7CiAgICAgfQogICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7CiAKQEAgLTMwMDYsNiArMzAwNiw3IEBAIHN1YiBHZXREb21NYXBG
dW5jdGlvbgogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICR0eXBlID0gc2hpZnQ7
CiAgICAgcmV0dXJuICJnZXRET01TVkdFbGVtZW50SW5zdGFuY2VNYXAoKSIgaWYgJHR5cGUgZXEg
IlNWR0VsZW1lbnRJbnN0YW5jZSI7CisgICAgcmV0dXJuICJnZXRBY3RpdmVET01Ob2RlTWFwKCki
IGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQWN0aXZlRE9NT2JqZWN0In0pOwogICAgIHJldHVybiAiZ2V0RE9NTm9kZU1hcCgp
IiBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpKTsKICAgICByZXR1cm4gImdldEFjdGl2ZURP
TU9iamVjdE1hcCgpIiBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVE
T01PYmplY3QifTsKICAgICByZXR1cm4gImdldERPTU9iamVjdE1hcCgpIjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcAkocmV2aXNpb24gOTk4MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRE9NRGF0YVN0
b3JlOjpET01EYXRhU3RvcmUoKQogICAgIDogbV9kb21Ob2RlTWFwKDApCisgICAgLCBtX2FjdGl2
ZURvbU5vZGVNYXAoMCkKICAgICAsIG1fZG9tT2JqZWN0TWFwKDApCiAgICAgLCBtX2FjdGl2ZURv
bU9iamVjdE1hcCgwKQogI2lmIEVOQUJMRShTVkcpCkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCog
RE9NRGF0YVN0b3JlOjpnZXRET01XcmFwcGVyTWFwKERPTQogICAgIHN3aXRjaCAodHlwZSkgewog
ICAgIGNhc2UgRE9NTm9kZU1hcDoKICAgICAgICAgcmV0dXJuIG1fZG9tTm9kZU1hcDsKKyAgICBj
YXNlIEFjdGl2ZURPTU5vZGVNYXA6CisgICAgICAgIHJldHVybiBtX2FjdGl2ZURvbU5vZGVNYXA7
CiAgICAgY2FzZSBET01PYmplY3RNYXA6CiAgICAgICAgIHJldHVybiBtX2RvbU9iamVjdE1hcDsK
ICAgICBjYXNlIEFjdGl2ZURPTU9iamVjdE1hcDoKQEAgLTE0OSw3ICsxNTIsOCBAQCB2b2lkIERP
TURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2ODo6CiAgICAgRE9NRGF0YUxpc3QmIGxpc3Qg
PSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtp
XTsKLSAgICAgICAgaWYgKHN0b3JlLT5kb21Ob2RlTWFwKCkucmVtb3ZlSWZQcmVzZW50KG5vZGUs
IHY4T2JqZWN0KSkgeworICAgICAgICBET01Ob2RlTWFwcGluZyYgbm9kZU1hcCA9IG5vZGUtPmlz
QWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2Rl
TWFwKCk7CisgICAgICAgIGlmIChub2RlTWFwLnJlbW92ZUlmUHJlc2VudChub2RlLCB2OE9iamVj
dCkpIHsKICAgICAgICAgICAgIG5vZGUtPmRlcmVmKCk7IC8vIE5vYm9keSBvdmVycmlkZXMgTm9k
ZTo6ZGVyZWYgc28gaXQncyBzYWZlCiAgICAgICAgICAgICByZXR1cm47IC8vIFRoZXJlIG1pZ2h0
IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRoZSBub2RlIGluIHdvcmxkJ3MgbWFwcwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAko
cmV2aXNpb24gOTk4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIERPTVdyYXBwZXJNYXBUeXBlIHsKICAgICAgICAg
ICAgIERPTU5vZGVNYXAsCisgICAgICAgICAgICBBY3RpdmVET01Ob2RlTWFwLAogICAgICAgICAg
ICAgRE9NT2JqZWN0TWFwLAogICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0TWFwLAogI2lmIEVO
QUJMRShTVkcpCkBAIC04MSw2ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCogZ2V0RE9NV3JhcHBlck1hcChET01XcmFwcGVyTWFwVHlwZSk7CiAKICAgICAgICAgRE9N
Tm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAoKSB7IHJldHVybiAqbV9kb21Ob2RlTWFwOyB9CisgICAg
ICAgIERPTU5vZGVNYXBwaW5nJiBhY3RpdmVEb21Ob2RlTWFwKCkgeyByZXR1cm4gKm1fYWN0aXZl
RG9tTm9kZU1hcDsgfQogICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+JiBkb21PYmplY3RNYXAo
KSB7IHJldHVybiAqbV9kb21PYmplY3RNYXA7IH0KICAgICAgICAgRE9NV3JhcHBlck1hcDx2b2lk
PiYgYWN0aXZlRG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fYWN0aXZlRG9tT2JqZWN0TWFwOyB9
CiAjaWYgRU5BQkxFKFNWRykKQEAgLTg5LDE1ICs5MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgLy8gTmVlZCBieSBWOEdDQ29udHJvbGxlci4KICAgICAgICAgc3RhdGljIHZv
aWQgd2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4g
djhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtOb2Rl
Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2Jq
ZWN0KTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIHZvaWQgd2Vha05vZGVDYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3Qp
OwogICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrRE9NT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICNpZiBFTkFCTEUoU1ZH
KQogICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrU1ZHRWxlbWVudEluc3RhbmNlQ2FsbGJhY2sodjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICNlbmRp
ZgogICAgICAgICAKICAgICAgICAgRE9NTm9kZU1hcHBpbmcqIG1fZG9tTm9kZU1hcDsKKyAgICAg
ICAgRE9NTm9kZU1hcHBpbmcqIG1fYWN0aXZlRG9tTm9kZU1hcDsKICAgICAgICAgRE9NV3JhcHBl
ck1hcDx2b2lkPiogbV9kb21PYmplY3RNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4q
IG1fYWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZERPTURhdGFTdG9yZS5jcHAJKHJldmlzaW9u
IDk5ODAzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0YVN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBTY29wZWRET01EYXRhU3RvcmU6
OlNjb3BlZERPTURhdGFTdG9yZSgpCiAgICAgOiBET01EYXRhU3RvcmUoKQogewogICAgIG1fZG9t
Tm9kZU1hcCA9IG5ldyBET01XcmFwcGVyTWFwPE5vZGU+KCZET01EYXRhU3RvcmU6OndlYWtOb2Rl
Q2FsbGJhY2spOworICAgIG1fYWN0aXZlRG9tTm9kZU1hcCA9IG5ldyBET01XcmFwcGVyTWFwPE5v
ZGU+KCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spOwogICAgIG1fZG9tT2JqZWN0TWFw
ID0gbmV3IERPTVdyYXBwZXJNYXA8dm9pZD4oJkRPTURhdGFTdG9yZTo6d2Vha0RPTU9iamVjdENh
bGxiYWNrKTsKICAgICBtX2FjdGl2ZURvbU9iamVjdE1hcCA9IG5ldyBET01XcmFwcGVyTWFwPHZv
aWQ+KCZET01EYXRhU3RvcmU6OndlYWtBY3RpdmVET01PYmplY3RDYWxsYmFjayk7CiAjaWYgRU5B
QkxFKFNWRykKQEAgLTQ3LDYgKzQ4LDcgQEAgU2NvcGVkRE9NRGF0YVN0b3JlOjpTY29wZWRET01E
YXRhU3RvcmUoKQogU2NvcGVkRE9NRGF0YVN0b3JlOjp+U2NvcGVkRE9NRGF0YVN0b3JlKCkKIHsK
ICAgICBkZWxldGUgbV9kb21Ob2RlTWFwOworICAgIGRlbGV0ZSBtX2FjdGl2ZURvbU5vZGVNYXA7
CiAgICAgZGVsZXRlIG1fZG9tT2JqZWN0TWFwOwogICAgIGRlbGV0ZSBtX2FjdGl2ZURvbU9iamVj
dE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U3RhdGljRE9NRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCShyZXZpc2lvbiA5OTgwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogU3RhdGljRE9NRGF0YVN0
b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoKQogICAgIDogRE9NRGF0YVN0b3JlKCkKICAgICAsIG1f
c3RhdGljRG9tTm9kZU1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQorICAgICwg
bV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwKCZET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2sp
CiAgICAgLCBtX3N0YXRpY0RvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0
Q2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0FjdGl2ZURvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3Jl
Ojp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQ0LDYg
KzQ1LDcgQEAgU3RhdGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoKQogI2VuZGlm
CiB7CiAgICAgbV9kb21Ob2RlTWFwID0gJm1fc3RhdGljRG9tTm9kZU1hcDsKKyAgICBtX2FjdGl2
ZURvbU5vZGVNYXAgPSAmbV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwOwogICAgIG1fZG9tT2JqZWN0
TWFwID0gJm1fc3RhdGljRG9tT2JqZWN0TWFwOwogICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwID0g
Jm1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuaAkocmV2aXNp
b24gOTk4MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgSW50cnVzaXZlRE9NV3JhcHBlck1hcCBtX3N0YXRpY0RvbU5vZGVNYXA7CisgICAgSW50
cnVzaXZlRE9NV3JhcHBlck1hcCBtX3N0YXRpY0FjdGl2ZURvbU5vZGVNYXA7CiAgICAgRE9NV3Jh
cHBlck1hcDx2b2lkPiBtX3N0YXRpY0RvbU9iamVjdE1hcDsKICAgICBET01XcmFwcGVyTWFwPHZv
aWQ+IG1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuY3BwCShyZXZpc2lvbiA5OTgwMykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNiArNjQsMTEgQEAgRE9NTm9kZU1hcHBpbmcmIGdldERPTU5vZGVNYXAoKQogICAgIHJl
dHVybiBnZXRET01EYXRhU3RvcmUoKS5kb21Ob2RlTWFwKCk7CiB9CiAKK0RPTU5vZGVNYXBwaW5n
JiBnZXRBY3RpdmVET01Ob2RlTWFwKCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NRGF0YVN0b3JlKCku
YWN0aXZlRG9tTm9kZU1hcCgpOworfQorCiBET01XcmFwcGVyTWFwPHZvaWQ+JiBnZXRET01PYmpl
Y3RNYXAoKQogewogICAgIHJldHVybiBnZXRET01EYXRhU3RvcmUoKS5kb21PYmplY3RNYXAoKTsK
QEAgLTk0LDYgKzk5LDkgQEAgdm9pZCByZW1vdmVBbGxET01PYmplY3RzKCkKICAgICAgICAgLy8g
UmVtb3ZlIGFsbCBET00gbm9kZXMuCiAgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9t
V3JhcHBlck1hcDxOb2RlPigmc3RvcmUsIHN0b3JlLmRvbU5vZGVNYXAoKSk7CiAKKyAgICAgICAg
Ly8gUmVtb3ZlIGFsbCBhY3RpdmUgRE9NIG5vZGVzLgorICAgICAgICBET01EYXRhOjpyZW1vdmVP
YmplY3RzRnJvbVdyYXBwZXJNYXA8Tm9kZT4oJnN0b3JlLCBzdG9yZS5hY3RpdmVEb21Ob2RlTWFw
KCkpOworCiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLy8gUmVtb3ZlIGFsbCBTVkcgZWxlbWVu
dCBpbnN0YW5jZXMgaW4gdGhlIHdyYXBwZXIgbWFwLgogICAgICAgICBET01EYXRhOjpyZW1vdmVP
YmplY3RzRnJvbVdyYXBwZXJNYXA8U1ZHRWxlbWVudEluc3RhbmNlPigmc3RvcmUsIHN0b3JlLmRv
bVN2Z0VsZW1lbnRJbnN0YW5jZU1hcCgpKTsKQEAgLTExOSw2ICsxMjcsMTggQEAgdm9pZCB2aXNp
dERPTU5vZGVzKERPTVdyYXBwZXJNYXA8Tm9kZT46OgogICAgIH0KIH0KIAordm9pZCB2aXNpdEFj
dGl2ZURPTU5vZGVzKERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IqIHZpc2l0b3IpCit7Cisg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworCisgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01E
YXRhU3RvcmU6OmFsbFN0b3JlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5z
aXplKCk7ICsraSkgeworICAgICAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKKwor
ICAgICAgICBzdG9yZS0+YWN0aXZlRG9tTm9kZU1hcCgpLnZpc2l0KHN0b3JlLCB2aXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgdmlzaXRET01PYmplY3RzKERPTVdyYXBwZXJNYXA8dm9pZD46OlZp
c2l0b3IqIHZpc2l0b3IpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5oCShyZXZpc2lvbiA5OTgwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3
ICsxNTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBu
b2RlIHRvIGl0cyBKUyB3cmFwcGVyLgogICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFw
KCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAoKTsKICAgICB2b2lk
IHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBlck1hcDxOb2RlPjo6VmlzaXRvciopOworICAgIHZvaWQg
dmlzaXRBY3RpdmVET01Ob2RlcyhET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7CiAKICAg
ICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9iamVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFwcGVy
LiBUaGlzIG1hcCBkb2VzIG5vdCBjb250YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4gaGF2
ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3RpdmUgZG9tIG9iamVjdHMpLgogICAgIERPTVdyYXBwZXJN
YXA8dm9pZD4mIGdldERPTU9iamVjdE1hcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiA5OTgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcg
KzkyLDEwIEBAIHZvaWQgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmUKIHZvaWQg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqIG5vZGUsIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7CiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
bWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKLSAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUs
IHdyYXBwZXIpOworICAgIGlmIChub2RlLT5pc0FjdGl2ZU5vZGUoKSkKKyAgICAgICAgZ2V0QWN0
aXZlRE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKKyAgICBlbHNlCisgICAgICAgIGdl
dERPTU5vZGVNYXAoKS5zZXQobm9kZSwgd3JhcHBlcik7CiB9CiAKIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKQpAQCAtMjk1LDcgKzI5OCw4
IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjpnZXQKICAgICAgICAgICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CiAgICAgICAgIHJldHVybiAqd3JhcHBl
cjsKICAgICB9Ci0gICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBjb250ZXh0LT53b3Js
ZCgpLT5kb21EYXRhU3RvcmUoKS0+ZG9tTm9kZU1hcCgpOworICAgIERPTURhdGFTdG9yZSogc3Rv
cmUgPSBjb250ZXh0LT53b3JsZCgpLT5kb21EYXRhU3RvcmUoKTsKKyAgICBET01Ob2RlTWFwcGlu
ZyYgZG9tTm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURvbU5v
ZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CiAgICAgcmV0dXJuIGRvbU5vZGVNYXAuZ2V0
KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5OTgwMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDI1ICsxNDMsNDMg
QEAgcHVibGljOgogCiAjZW5kaWYgLy8gTkRFQlVHCiAKLWNsYXNzIEdDUHJvbG9ndWVWaXNpdG9y
IDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgewordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIGJvb2wgR0NQcm9sb2d1ZVNwZWNpYWxDYXNlKFQqIG9iamVjdCwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbykK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPD4gaW5saW5lIGJvb2wgR0NQcm9sb2d1ZVNwZWNpYWxDYXNlPHZvaWQ+KHZvaWQqIG9i
amVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZv
KiB0eXBlSW5mbykKK3sKKyAgICAvLyBBZGRpdGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2UgcG9y
dCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBwb3J0cyBhbHNvCisgICAgLy8gaGF2ZSB0aGVpciB3
cmFwcGVycyBlbnRhbmdsZWQuIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgaGFuZGxlZCB3aGVuIHRo
ZQorICAgIC8vIHBvcnRzIGFyZSBhY3R1YWxseSBlbnRhbmdsZWQgaW4gTWVzc2FnZVBvcnQ6OmVu
dGFuZ2xlLCBidXQgdG8gYXZvaWQKKyAgICAvLyBmb3JraW5nIE1lc3NhZ2VQb3J0LiogdGhpcyBp
cyBwb3N0cG9uZWQgdG8gR0MgdGltZS4gSGF2aW5nIHRoaXMgcG9zdHBvbmVkCisgICAgLy8gaGFz
IHRoZSBkcmF3YmFjayB0aGF0IHRoZSB3cmFwcGVycyBhcmUgImVudGFuZ2xlZC91bmVudGFuZ2xl
ZCIgZm9yIGVhY2gKKyAgICAvLyBHQyBldmVuIHRob3VnaCB0aGVpciBlbnRhZ2xlbWVudCBtb3N0
IGxpa2VseSBpcyBzdGlsbCB0aGUgc2FtZS4KKyAgICBpZiAoVjhNZXNzYWdlUG9ydDo6aW5mby5l
cXVhbHModHlwZUluZm8pKSB7CisgICAgICAgIC8vIE1hcmsgZWFjaCBwb3J0IGFzIGluLXVzZSBp
ZiBpdCdzIGVudGFuZ2xlZC4gRm9yIHNpbXBsaWNpdHkncyBzYWtlLCB3ZSBhc3N1bWUgYWxsIHBv
cnRzIGFyZSByZW1vdGVseSBlbnRhbmdsZWQsCisgICAgICAgIC8vIHNpbmNlIHRoZSBDaHJvbWl1
bSBwb3J0IGltcGxlbWVudGF0aW9uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UuCisgICAgICAg
IE1lc3NhZ2VQb3J0KiBwb3J0MSA9IHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0Kj4ob2JqZWN0KTsK
KyAgICAgICAgaWYgKHBvcnQxLT5pc0VudGFuZ2xlZCgpIHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0
aXZpdHkoKSkKKyAgICAgICAgICAgIHdyYXBwZXIuQ2xlYXJXZWFrKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5l
IGJvb2wgR0NQcm9sb2d1ZVNwZWNpYWxDYXNlPE5vZGU+KE5vZGUqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbykKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEdDUHJv
bG9ndWVWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8VD46OlZpc2l0b3IgewogcHVibGlj
OgotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9i
amVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB2b2lkIHZpc2l0
RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCBUKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewogICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5
cGVJbmZvID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsgIAogCi0gICAg
ICAgIC8vIEFkZGl0aW9uYWwgaGFuZGxpbmcgb2YgbWVzc2FnZSBwb3J0IGVuc3VyaW5nIHRoYXQg
ZW50YW5nbGVkIHBvcnRzIGFsc28KLSAgICAgICAgLy8gaGF2ZSB0aGVpciB3cmFwcGVycyBlbnRh
bmdsZWQuIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgaGFuZGxlZCB3aGVuIHRoZQotICAgICAgICAv
LyBwb3J0cyBhcmUgYWN0dWFsbHkgZW50YW5nbGVkIGluIE1lc3NhZ2VQb3J0OjplbnRhbmdsZSwg
YnV0IHRvIGF2b2lkCi0gICAgICAgIC8vIGZvcmtpbmcgTWVzc2FnZVBvcnQuKiB0aGlzIGlzIHBv
c3Rwb25lZCB0byBHQyB0aW1lLiBIYXZpbmcgdGhpcyBwb3N0cG9uZWQKLSAgICAgICAgLy8gaGFz
IHRoZSBkcmF3YmFjayB0aGF0IHRoZSB3cmFwcGVycyBhcmUgImVudGFuZ2xlZC91bmVudGFuZ2xl
ZCIgZm9yIGVhY2gKLSAgICAgICAgLy8gR0MgZXZlbiB0aG91Z2ggdGhlaXIgZW50YWdsZW1lbnQg
bW9zdCBsaWtlbHkgaXMgc3RpbGwgdGhlIHNhbWUuCi0gICAgICAgIGlmIChWOE1lc3NhZ2VQb3J0
OjppbmZvLmVxdWFscyh0eXBlSW5mbykpIHsKLSAgICAgICAgICAgIC8vIE1hcmsgZWFjaCBwb3J0
IGFzIGluLXVzZSBpZiBpdCdzIGVudGFuZ2xlZC4gRm9yIHNpbXBsaWNpdHkncyBzYWtlLCB3ZSBh
c3N1bWUgYWxsIHBvcnRzIGFyZSByZW1vdGVseSBlbnRhbmdsZWQsCi0gICAgICAgICAgICAvLyBz
aW5jZSB0aGUgQ2hyb21pdW0gcG9ydCBpbXBsZW1lbnRhdGlvbiBjYW4ndCB0ZWxsIHRoZSBkaWZm
ZXJlbmNlLgotICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGljX2Nhc3Q8TWVz
c2FnZVBvcnQqPihvYmplY3QpOwotICAgICAgICAgICAgaWYgKHBvcnQxLT5pc0VudGFuZ2xlZCgp
IHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAgICAgICAgICAgICAgICB3cmFwcGVy
LkNsZWFyV2VhaygpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIUdDUHJvbG9ndWVT
cGVjaWFsQ2FzZTxUPihvYmplY3QsIHdyYXBwZXIsIHR5cGVJbmZvKSkgewogICAgICAgICAgICAg
QWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVET01PYmplY3QgPSB0eXBlSW5mby0+dG9BY3RpdmVET01P
YmplY3Qod3JhcHBlcik7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2
ZURPTU9iamVjdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICAgICAgd3JhcHBl
ci5DbGVhcldlYWsoKTsKQEAgLTM3MywxMiArMzkxLDE1IEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6
OmdjUHJvbG9ndWUoKQogCiAgICAgLy8gUnVuIHRocm91Z2ggYWxsIG9iamVjdHMgd2l0aCBwb3Nz
aWJsZSBwZW5kaW5nIGFjdGl2aXR5IG1ha2luZyB0aGVpcgogICAgIC8vIHdyYXBwZXJzIG5vbiB3
ZWFrIGlmIHRoZXJlIGlzIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgR0NQcm9sb2d1ZVZpc2l0b3Ig
cHJvbG9ndWVWaXNpdG9yOwotICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0cygmcHJvbG9ndWVWaXNp
dG9yKTsKKyAgICBHQ1Byb2xvZ3VlVmlzaXRvcjx2b2lkPiBwcm9sb2d1ZU9iamVjdFZpc2l0b3I7
CisgICAgdmlzaXRBY3RpdmVET01PYmplY3RzKCZwcm9sb2d1ZU9iamVjdFZpc2l0b3IpOworICAg
IEdDUHJvbG9ndWVWaXNpdG9yPE5vZGU+IHByb2xvZ3VlTm9kZVZpc2l0b3I7CisgICAgdmlzaXRB
Y3RpdmVET01Ob2RlcygmcHJvbG9ndWVOb2RlVmlzaXRvcik7CiAKICAgICAvLyBDcmVhdGUgb2Jq
ZWN0IGdyb3Vwcy4KICAgICBHcm91cGVyVmlzaXRvciBncm91cGVyVmlzaXRvcjsKICAgICB2aXNp
dERPTU5vZGVzKCZncm91cGVyVmlzaXRvcik7CisgICAgdmlzaXRBY3RpdmVET01Ob2RlcygmZ3Jv
dXBlclZpc2l0b3IpOwogICAgIHZpc2l0RE9NT2JqZWN0cygmZ3JvdXBlclZpc2l0b3IpOwogICAg
IGdyb3VwZXJWaXNpdG9yLmFwcGx5R3JvdXBpbmcoKTsKIApAQCAtMzg3LDE5ICs0MDgsNDMgQEAg
dm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSgpCiAgICAgZGF0YS0+c3RyaW5nQ2FjaGUo
KS0+Y2xlYXJPbkdDKCk7CiB9CiAKLWNsYXNzIEdDRXBpbG9ndWVWaXNpdG9yIDogcHVibGljIERP
TVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgewotcHVibGljOgotICAgIHZvaWQgdmlzaXRET01X
cmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gd3JhcHBlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHY4OjpXZWFrUmVmZXJl
bmNlQ2FsbGJhY2sgY2FsbGJhY2s+IHN0cnVjdCBHQ0VwaWxvZ3VlSGVscGVyIHsKKyAgICBzdGF0
aWMgYm9vbCBHQ0VwaWxvZ3VlU3BlY2lhbENhc2UoVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx2ODo6V2Vha1JlZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrPiBzdHJ1
Y3QgR0NFcGlsb2d1ZUhlbHBlcjx2b2lkLCBjYWxsYmFjaz4geworICAgIHN0YXRpYyBib29sIEdD
RXBpbG9ndWVTcGVjaWFsQ2FzZSh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8pCiAgICAgewotICAgICAgICBX
cmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3
cmFwcGVyKTsKICAgICAgICAgaWYgKFY4TWVzc2FnZVBvcnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZv
KSkgewogICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGljX2Nhc3Q8TWVzc2Fn
ZVBvcnQqPihvYmplY3QpOwogICAgICAgICAgICAgLy8gV2UgbWFya2VkIHRoaXMgcG9ydCBhcyBy
ZWFjaGFibGUgaW4gR0NQcm9sb2d1ZVZpc2l0b3IuICBVbmRvIHRoaXMgbm93IHNpbmNlIHRoZQog
ICAgICAgICAgICAgLy8gcG9ydCBjb3VsZCBiZSBub3QgcmVhY2hhYmxlIGluIHRoZSBmdXR1cmUg
aWYgaXQgZ2V0cyBkaXNlbnRhbmdsZWQgKGFuZCBhbHNvCiAgICAgICAgICAgICAvLyBHQ1Byb2xv
Z3VlVmlzaXRvciBleHBlY3RzIHRvIHNlZSBhbGwgaGFuZGxlcyBtYXJrZWQgYXMgd2VhaykuCiAg
ICAgICAgICAgICBpZiAoKCF3cmFwcGVyLklzV2VhaygpICYmICF3cmFwcGVyLklzTmVhckRlYXRo
KCkpIHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAgICAgICAgICAgICAgICB3cmFw
cGVyLk1ha2VXZWFrKHBvcnQxLCAmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2Fs
bGJhY2spOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdl
YWsocG9ydDEsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx2ODo6V2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrIGNhbGxiYWNrPiBzdHJ1Y3QgR0NFcGlsb2d1ZUhlbHBlcjxOb2RlLCBj
YWxsYmFjaz4geworICAgIHN0YXRpYyBib29sIEdDRXBpbG9ndWVTcGVjaWFsQ2FzZShOb2RlKiBv
YmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5m
byogdHlwZUluZm8pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdjg6OldlYWtSZWZlcmVuY2VDYWxsYmFjayBjYWxsYmFjaz4g
Y2xhc3MgR0NFcGlsb2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxUPjo6VmlzaXRv
ciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9y
ZSwgVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsK
KyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3Jh
cHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIGlmICghR0NFcGlsb2d1ZUhlbHBlcjxULCBjYWxs
YmFjaz46OkdDRXBpbG9ndWVTcGVjaWFsQ2FzZShvYmplY3QsIHdyYXBwZXIsIHR5cGVJbmZvKSkg
ewogICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVET01PYmplY3QgPSB0eXBlSW5m
by0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRE9N
T2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNXZWFrKCkpOwpAQCAtNDA4LDcgKzQ1Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyBtYXkgYmUgYSBkaWZmZXJlbnQgcG9pbnRlciAo
aW4gY2FzZSBBY3RpdmVET01PYmplY3QgaXMgbm90CiAgICAgICAgICAgICAgICAgLy8gdGhlIG1h
aW4gYmFzZSBjbGFzcyBvZiB0aGUgb2JqZWN0J3MgY2xhc3MpIGFuZCBwb2ludGVyCiAgICAgICAg
ICAgICAgICAgLy8gaWRlbnRpdHkgaXMgcmVxdWlyZWQgYnkgRE9NIG1hcCBmdW5jdGlvbnMuCi0g
ICAgICAgICAgICAgICAgd3JhcHBlci5NYWtlV2VhayhvYmplY3QsICZET01EYXRhU3RvcmU6Ondl
YWtBY3RpdmVET01PYmplY3RDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgd3JhcHBlci5NYWtl
V2VhayhvYmplY3QsIGNhbGxiYWNrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTQ0NCw4ICs0ODksMTAgQEAgdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NFcGlsb2d1ZSgpCiAK
ICAgICAvLyBSdW4gdGhyb3VnaCBhbGwgb2JqZWN0cyB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgbWFr
aW5nIHRoZWlyIHdyYXBwZXJzIHdlYWsKICAgICAvLyBhZ2Fpbi4KLSAgICBHQ0VwaWxvZ3VlVmlz
aXRvciBlcGlsb2d1ZVZpc2l0b3I7Ci0gICAgdmlzaXRBY3RpdmVET01PYmplY3RzKCZlcGlsb2d1
ZVZpc2l0b3IpOworICAgIEdDRXBpbG9ndWVWaXNpdG9yPHZvaWQsICZET01EYXRhU3RvcmU6Ondl
YWtBY3RpdmVET01PYmplY3RDYWxsYmFjaz4gZXBpbG9ndWVPYmplY3RWaXNpdG9yOworICAgIHZp
c2l0QWN0aXZlRE9NT2JqZWN0cygmZXBpbG9ndWVPYmplY3RWaXNpdG9yKTsKKyAgICBHQ0VwaWxv
Z3VlVmlzaXRvcjxOb2RlLCAmRE9NRGF0YVN0b3JlOjp3ZWFrTm9kZUNhbGxiYWNrPiBlcGlsb2d1
ZU5vZGVWaXNpdG9yOworICAgIHZpc2l0QWN0aXZlRE9NTm9kZXMoJmVwaWxvZ3VlTm9kZVZpc2l0
b3IpOwogCiAgICAgd29ya2luZ1NldEVzdGltYXRlTUIgPSBnZXRBY3R1YWxNZW1vcnlVc2FnZUlu
TUIoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA5OTgwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgTm9kZSogbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKICAgICBOb2RlKiBmaXJz
dERlc2NlbmRhbnQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZU5vZGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBw
YXJ0IG9mIERPTSkKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJ
KHJldmlzaW9uIDk5ODAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxheWluZygpIHx8
IEhUTUxNZWRpYUVsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOyB9CiAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmVOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcml2YXRlOgog
ICAgIEhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDk5ODkyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTEtMTAgIEV1Z2VuZSBOYWxpbW92ICA8
ZW5hbEBnb29nbGUuY29tPgorCisgICAgICAgIEV2ZW50IGxpc3RlbmVyIGZvciBhY3RpdmUgRE9N
IG9iamVjdCB0aGF0IGlzIGFsc28gRE9NIG5vZGUgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkIHBy
ZW1hdHVyZWx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzA0MjEgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVk
aWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
bWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDExLTExLTEwICBB
bmRyZXcgU2NoZXJrdXMgIDxzY2hlcmt1c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRl
IGV4cGVjdGF0aW9ucyBmb3IgbWVkaWEvdmlkZW8tZnJhbWUtYWNjdXJhdGUtc2Vlay5odG1sLgpJ
bmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2Fy
YmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
VGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWluZyBhdWRpbyBvYmplY3Qg
b3IgZXZlbnQgbGlzdGVuZXIuCisKK0FjY29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5o
dG1sLAorIjQuOC4xMC44IFBsYXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiwKKyJNZWRpYSBlbGVt
ZW50cyBtdXN0IG5vdCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVuY2VzIHRv
IHRoZW0gaGF2ZSBiZWVuIHJlbW92ZWQ7IG9ubHkgb25jZSBhIG1lZGlhIGVsZW1lbnQgaXMgaW4g
YSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlvIGNvdWxkIGV2ZXIgYmUgcGxheWVkIGJ5IHRo
YXQgZWxlbWVudCBtYXkgdGhlIGVsZW1lbnQgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuIgorCisoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCwgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIxLCBhbmQgaHR0cDovL2NyYnVnLmNv
bS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS4KKworUEFTUworCisKSW5kZXg6IExheW91dFRlc3Rz
L21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBIVE1MPgorCis8aHRtbD4KKzxib2R5PgorCis8cD5U
ZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2UgY29sbGVjdCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBv
ciBldmVudCBsaXN0ZW5lci48L3A+Cis8cD5BY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1l
bnQuaHRtbCw8YnIgLz4KKyI0LjguMTAuOCBQbGF5aW5nIHRoZSBtZWRpYSByZXNvdXJjZSIsPGJy
IC8+CisiTWVkaWEgZWxlbWVudHMgbXVzdCBub3Qgc3RvcCBwbGF5aW5nIGp1c3QgYmVjYXVzZSBh
bGwgcmVmZXJlbmNlcyB0byB0aGVtIGhhdmUKK2JlZW4gcmVtb3ZlZDsgb25seSBvbmNlIGEgbWVk
aWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5vIGZ1cnRoZXIgYXVkaW8KK2NvdWxkIGV2
ZXIgYmUgcGxheWVkIGJ5IHRoYXQgZWxlbWVudCBtYXkgdGhlIGVsZW1lbnQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQuIjxiciAvPjxiciAvPgorKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjY4NzgsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MDQyMSwgYW5kIGh0dHA6Ly9jcmJ1Zy5jb20vNjI2MDQgZm9yIG1vcmUgZGV0YWlscykuPC9w
PgorPHAgaWQ9InJlc3VsdCI+CitGQUlMOiBUZXN0IGVpdGhlciBzdGlsbCBydW5uaW5nIG9yIHN0
b3BwZWQgcHJlbWF0dXJlbHkuCis8L3A+CisKKzxzY3JpcHQgc3JjPW1lZGlhLWZpbGUuanM+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz12aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbnVtX3BsYXllcnMgPSA0OwordmFyIHBsYXlfdGlt
ZXMgPSA1OworCitmdW5jdGlvbiBmb3JjZUdDKCkgeworICAgIGlmICh3aW5kb3cuR0NDb250cm9s
bGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKworICAgIC8vIEZv
cmNlIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgIGZvciAodmFyIG5keCA9IDA7IG5keCA8IDk5MDAw
OyBuZHggKyspCisgICAgICAgIHZhciBzdHIgPSBuZXcgU3RyaW5nKCIxMjM0Iik7Cit9CisKK2Z1
bmN0aW9uIGZpbmlzaCgpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
aW5uZXJUZXh0ID0gIlBBU1MiOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30K
KworZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgdmFyIG51bV9wbGF5ZWQgPSAwOworICAgIHZhciBh
dWRpb0ZpbGUgPSBmaW5kTWVkaWFGaWxlKCJhdWRpbyIsICJjb250ZW50L3NpbGVuY2UiKTsKKyAg
ICB2YXIgYSA9IG5ldyBBdWRpbyhhdWRpb0ZpbGUpOworICAgIGEuYWRkRXZlbnRMaXN0ZW5lcign
ZW5kZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbnVtX3BsYXllZCArKzsKKyAgICAgICAgaWYg
KG51bV9wbGF5ZWQgPCBwbGF5X3RpbWVzKSB7CisgICAgICAgICAgICBhLmN1cnJlbnRUaW1lID0g
MDsKKyAgICAgICAgICAgIGEucGxheSgpOworICAgICAgICAgICAgaWYgKG51bV9wbGF5ZWQgPT0g
cGxheV90aW1lcyAtIDEpIHsKKyAgICAgICAgICAgICAgICBhID0gbnVsbDsKKyAgICAgICAgICAg
ICAgICBmb3JjZUdDKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBudW1fcGxheWVycyAtLTsKKyAgICAgICAgICAgIGlmIChudW1fcGxheWVycyA9PSAwKQor
ICAgICAgICAgICAgICAgIHN0YXJ0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZmluaXNoKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBhLmFkZEV2ZW50TGlzdGVuZXIo
J2NhbnBsYXl0aHJvdWdoJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGEucGxheSgpOworICAgIH0p
OworfQorCitzdGFydCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115043</attachid>
            <date>2011-11-14 15:21:28 -0800</date>
            <delta_ts>2011-11-15 09:11:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70421-20111114152127.patch</filename>
            <type>text/plain</type>
            <size>23979</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTExLTEwICBFdWdlbmUg
TmFsaW1vdiAgPGVuYWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3Ig
YWN0aXZlIERPTSBvYmplY3QgdGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNv
bGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwNDIxIAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb2JsZW0gZGVtb25zdHJhdGVkIGl0c2VsZiB3aGVuIEhUTUxBdWRpb0Vs
ZW1lbnQgd2FzIGNoYW5nZWQgdG8gYmVjb21lIGFjdGl2ZSBET00gb2JqZWN0LgorICAgICAgICBC
ZWZvcmUgdGhhdCB0aGVyZSB3ZXJlIG5vIERPTSBvYmplY3RzIHRoYXQgc2ltdWx0YW5lb3VzbHkg
d2VyZSBub2RlcyBhbmQgYWN0aXZlIG9iamVjdHMuCisgICAgICAgIERPTSBvYmplY3QgY291bGQg
YmUgaGVsZCBpbiBvbmUgb2YgMyBtYXBzIC0tIG5vZGUgbWFwLCBhY3RpdmUgb2JqZWN0cyBtYXAs
IGFuZCBhbGwgb3RoZXIKKyAgICAgICAgb2JqZWN0cyBtYXAsIGFuZCBIVE1MQXVkaW9FbGVtZW50
IHNob3VsZCBiZSBpbiAyIG1hcHMgc2ltdWx0YW5lb3VzbHkuIFdoZW4gaXQgd2FzIGluIHRoZQor
ICAgICAgICBhY3RpdmUgRE9NIG9iamVjdHMgbWFwIG9ubHksIGl0cyBldmVudCBsaXN0ZW5lciBj
b3VsZCBiZSBnYXJiYWdlIGNvbGxlY3RlZCwgYmVjYXVzZSBzcGVjaWFsCisgICAgICAgIGNvZGUg
dGhhdCBncm91cHMgbGlzdGVuZXJzIHdpdGggd3JhcHBlcnMgY291bGQgaGFuZGxlIG9ubHkgd3Jh
cHBlcnMgZm9yIG9iamVjdHMgaW4gdGhlIG5vZGUKKyAgICAgICAgbWFwLiBJZiB3ZSBwdXQgSFRN
TEF1ZGlvRWxlbWVudCBpbnRvIG5vZGVzIG1hcCwgaXQgd291bGQgbm90IGJlIGFjdGl2ZSBET00g
bm9kZSwgYW5kIGNhbiBiZQorICAgICAgICBnYXJiYWdlIGNvbGxlY3RlZCBwcmVtYXR1cmVseSBp
dHNlbGYgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4Nzgp
LgorICAgICAgICBGaXggaXMgdG8gaW50cm9kdWNlIDR0aCBtYXAgLS0gYWN0aXZlIG5vZGVzIG1h
cCwgYW5kIGNoYW5nZSB0aGUgY29kZSBhY2NvcmRpbmdseS4KKworICAgICAgICBUZXN0OiBtZWRp
YS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgIChHZXREb21NYXBGdW5jdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6
RE9NRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6Z2V0RE9NV3Jh
cHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjphY3RpdmVEb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRE9N
RGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
RE9NRGF0YVN0b3JlOjp+U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0
YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEFjdGl2ZURPTU5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlQWxsRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdEFjdGl2ZURPTU5v
ZGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjpnZXRXcmFwcGVyU2xvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NQcm9sb2d1ZVNwZWNpYWxDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpHQ1Byb2xvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDRXBp
bG9ndWVIZWxwZXI6OkdDRXBpbG9ndWVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
Q0VwaWxvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
R0NDb250cm9sbGVyOjpnY0VwaWxvZ3VlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6aXNBY3RpdmVOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRp
b0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQ6OmlzQWN0aXZl
Tm9kZSk6CisKIDIwMTEtMTEtMTQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVt
bgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0JKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDExICsx
Nzc3LDEyIEBAIEVORAogICAgIH0KIAogICAgIG15ICRET01PYmplY3QgPSAiRE9NT2JqZWN0IjsK
LSAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEg
RE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBBY3RpdmVET01PYmplY3QuCi0gICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9KSB7Ci0g
ICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2JqZWN0IjsKLSAgICB9IGVsc2lmIChJc05v
ZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0
aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEgRE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBE
T01Ob2RlIGhlcmUuCisgICAgIyBzZXRKU1dyYXBwZXJGb3JET01Ob2RlKCkgd2lsbCBsb29rIGlm
IG5vZGUgaXMgYWN0aXZlIGFuZCBjaG9vc2UgY29ycmVjdCBtYXAgdG8gYWRkIG5vZGUgdG8uCisg
ICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICAkRE9NT2JqZWN0ID0g
IkRPTU5vZGUiOworICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9KSB7CisgICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2Jq
ZWN0IjsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIApAQCAtMzA4Miw2
ICszMDgzLDcgQEAgc3ViIEdldERvbU1hcEZ1bmN0aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gImdldERPTVNWR0VsZW1lbnRJ
bnN0YW5jZU1hcCgpIiBpZiAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1
cm4gImdldEFjdGl2ZURPTU5vZGVNYXAoKSIgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAm
JiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSk7CiAg
ICAgcmV0dXJuICJnZXRET01Ob2RlTWFwKCkiIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkp
OwogICAgIHJldHVybiAiZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkiIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9OwogICAgIHJldHVybiAiZ2V0RE9N
T2JqZWN0TWFwKCkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRE9NRGF0YVN0b3JlOjpET01EYXRhU3RvcmUoKQogICAgIDogbV9k
b21Ob2RlTWFwKDApCisgICAgLCBtX2FjdGl2ZURvbU5vZGVNYXAoMCkKICAgICAsIG1fZG9tT2Jq
ZWN0TWFwKDApCiAgICAgLCBtX2FjdGl2ZURvbU9iamVjdE1hcCgwKQogI2lmIEVOQUJMRShTVkcp
CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCogRE9NRGF0YVN0b3JlOjpnZXRET01XcmFwcGVyTWFw
KERPTQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NTm9kZU1hcDoKICAgICAgICAg
cmV0dXJuIG1fZG9tTm9kZU1hcDsKKyAgICBjYXNlIEFjdGl2ZURPTU5vZGVNYXA6CisgICAgICAg
IHJldHVybiBtX2FjdGl2ZURvbU5vZGVNYXA7CiAgICAgY2FzZSBET01PYmplY3RNYXA6CiAgICAg
ICAgIHJldHVybiBtX2RvbU9iamVjdE1hcDsKICAgICBjYXNlIEFjdGl2ZURPTU9iamVjdE1hcDoK
QEAgLTE0OSw3ICsxNTIsOCBAQCB2b2lkIERPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2
ODo6CiAgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBE
T01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAgaWYgKHN0b3JlLT5kb21Ob2Rl
TWFwKCkucmVtb3ZlSWZQcmVzZW50KG5vZGUsIHY4T2JqZWN0KSkgeworICAgICAgICBET01Ob2Rl
TWFwcGluZyYgbm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURv
bU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CisgICAgICAgIGlmIChub2RlTWFwLnJl
bW92ZUlmUHJlc2VudChub2RlLCB2OE9iamVjdCkpIHsKICAgICAgICAgICAgIG5vZGUtPmRlcmVm
KCk7IC8vIE5vYm9keSBvdmVycmlkZXMgTm9kZTo6ZGVyZWYgc28gaXQncyBzYWZlCiAgICAgICAg
ICAgICByZXR1cm47IC8vIFRoZXJlIG1pZ2h0IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRo
ZSBub2RlIGluIHdvcmxkJ3MgbWFwcwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBE
T01XcmFwcGVyTWFwVHlwZSB7CiAgICAgICAgICAgICBET01Ob2RlTWFwLAorICAgICAgICAgICAg
QWN0aXZlRE9NTm9kZU1hcCwKICAgICAgICAgICAgIERPTU9iamVjdE1hcCwKICAgICAgICAgICAg
IEFjdGl2ZURPTU9iamVjdE1hcCwKICNpZiBFTkFCTEUoU1ZHKQpAQCAtODEsNiArODIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3Jh
cHBlck1hcFR5cGUpOwogCiAgICAgICAgIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyBy
ZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQorICAgICAgICBET01Ob2RlTWFwcGluZyYgYWN0aXZlRG9t
Tm9kZU1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU5vZGVNYXA7IH0KICAgICAgICAgRE9NV3Jh
cHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9tT2JqZWN0TWFwOyB9
CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0
dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogI2lmIEVOQUJMRShTVkcpCkBAIC04OSwxNSAr
OTEsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIE5lZWQgYnkgVjhHQ0Nv
bnRyb2xsZXIuCiAgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtBY3RpdmVET01PYmplY3RDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwor
ICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHdlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha0RP
TU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQq
IGRvbU9iamVjdCk7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha1NW
R0VsZW1lbnRJbnN0YW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmpl
Y3QsIHZvaWQqIGRvbU9iamVjdCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIERPTU5vZGVN
YXBwaW5nKiBtX2RvbU5vZGVNYXA7CisgICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2FjdGl2ZURv
bU5vZGVNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwog
ICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBF
TkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29w
ZWRET01EYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIFNjb3BlZERPTURhdGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKCkKICAgICA6
IERPTURhdGFTdG9yZSgpCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8
Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayk7CisgICAgbV9hY3RpdmVEb21O
b2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVD
YWxsYmFjayk7CiAgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigm
RE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spOwogICAgIG1fYWN0aXZlRG9tT2Jq
ZWN0TWFwID0gbmV3IERPTVdyYXBwZXJNYXA8dm9pZD4oJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2
ZURPTU9iamVjdENhbGxiYWNrKTsKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNDcsNiArNDgsNyBAQCBT
Y29wZWRET01EYXRhU3RvcmU6OlNjb3BlZERPTURhdGFTdG9yZSgpCiBTY29wZWRET01EYXRhU3Rv
cmU6On5TY29wZWRET01EYXRhU3RvcmUoKQogewogICAgIGRlbGV0ZSBtX2RvbU5vZGVNYXA7Cisg
ICAgZGVsZXRlIG1fYWN0aXZlRG9tTm9kZU1hcDsKICAgICBkZWxldGUgbV9kb21PYmplY3RNYXA7
CiAgICAgZGVsZXRlIG1fYWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5j
cHAJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogU3RhdGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoKQog
ICAgIDogRE9NRGF0YVN0b3JlKCkKICAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgmRE9NRGF0YVN0
b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQorICAgICwgbV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwKCZE
T01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0RvbU9iamVjdE1h
cCgmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0Fj
dGl2ZURvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJh
Y2spCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQ0LDYgKzQ1LDcgQEAgU3RhdGljRE9NRGF0YVN0b3Jl
OjpTdGF0aWNET01EYXRhU3RvcmUoKQogI2VuZGlmCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gJm1f
c3RhdGljRG9tTm9kZU1hcDsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSAmbV9zdGF0aWNBY3Rp
dmVEb21Ob2RlTWFwOwogICAgIG1fZG9tT2JqZWN0TWFwID0gJm1fc3RhdGljRG9tT2JqZWN0TWFw
OwogICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwID0gJm1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFw
OwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0
aWNET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEludHJ1c2l2ZURPTVdyYXBwZXJN
YXAgbV9zdGF0aWNEb21Ob2RlTWFwOworICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgbV9zdGF0
aWNBY3RpdmVEb21Ob2RlTWFwOwogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21P
YmplY3RNYXA7CiAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0FjdGl2ZURvbU9iamVj
dE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmNwcAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBET01Ob2Rl
TWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgpCiAgICAgcmV0dXJuIGdldERPTURhdGFTdG9yZSgpLmRv
bU5vZGVNYXAoKTsKIH0KIAorRE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAoKQor
eworICAgIHJldHVybiBnZXRET01EYXRhU3RvcmUoKS5hY3RpdmVEb21Ob2RlTWFwKCk7Cit9CisK
IERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1hcCgpCiB7CiAgICAgcmV0dXJuIGdl
dERPTURhdGFTdG9yZSgpLmRvbU9iamVjdE1hcCgpOwpAQCAtOTQsNiArOTksOSBAQCB2b2lkIHJl
bW92ZUFsbERPTU9iamVjdHMoKQogICAgICAgICAvLyBSZW1vdmUgYWxsIERPTSBub2Rlcy4KICAg
ICAgICAgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwPE5vZGU+KCZzdG9yZSwg
c3RvcmUuZG9tTm9kZU1hcCgpKTsKIAorICAgICAgICAvLyBSZW1vdmUgYWxsIGFjdGl2ZSBET00g
bm9kZXMuCisgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxOb2Rl
Pigmc3RvcmUsIHN0b3JlLmFjdGl2ZURvbU5vZGVNYXAoKSk7CisKICNpZiBFTkFCTEUoU1ZHKQog
ICAgICAgICAvLyBSZW1vdmUgYWxsIFNWRyBlbGVtZW50IGluc3RhbmNlcyBpbiB0aGUgd3JhcHBl
ciBtYXAuCiAgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxTVkdF
bGVtZW50SW5zdGFuY2U+KCZzdG9yZSwgc3RvcmUuZG9tU3ZnRWxlbWVudEluc3RhbmNlTWFwKCkp
OwpAQCAtMTE5LDYgKzEyNywxOCBAQCB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBlck1hcDxO
b2RlPjo6CiAgICAgfQogfQogCit2b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1h
cDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CisKKyAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERP
TURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOworCisgICAgICAgIHN0b3JlLT5hY3RpdmVEb21O
b2RlTWFwKCkudmlzaXQoc3RvcmUsIHZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCB2aXNpdERP
TU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikKIHsKICAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmgJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgog
ICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcm
IGdldEFjdGl2ZURPTU5vZGVNYXAoKTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBl
ck1hcDxOb2RlPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01X
cmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9i
amVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFwcGVyLiBUaGlzIG1hcCBkb2VzIG5vdCBjb250
YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3Rp
dmUgZG9tIG9iamVjdHMpLgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1h
cCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5MiwxMCBAQCB2b2lkIFY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlCiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NTm9kZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKQogewogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVy
KSk7Ci0gICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKKyAgICBpZiAobm9k
ZS0+aXNBY3RpdmVOb2RlKCkpCisgICAgICAgIGdldEFjdGl2ZURPTU5vZGVNYXAoKS5zZXQobm9k
ZSwgd3JhcHBlcik7CisgICAgZWxzZQorICAgICAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUs
IHdyYXBwZXIpOwogfQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6Omdl
dENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG9iamVjdFByb3RvdHlwZSkKQEAgLTI5NSw3ICsyOTgsOCBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4RE9NV3JhcHBlcjo6Z2V0CiAgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpOwogICAgICAgICByZXR1cm4gKndyYXBwZXI7CiAgICAgfQotICAgIERPTU5vZGVN
YXBwaW5nJiBkb21Ob2RlTWFwID0gY29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCktPmRv
bU5vZGVNYXAoKTsKKyAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gY29udGV4dC0+d29ybGQoKS0+
ZG9tRGF0YVN0b3JlKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5p
c0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9k
ZU1hcCgpOwogICAgIHJldHVybiBkb21Ob2RlTWFwLmdldChub2RlKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTIgKzE0Myw5IEBAIHB1YmxpYzoKIAogI2VuZGlmIC8v
IE5ERUJVRwogCi1jbGFzcyBHQ1Byb2xvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFw
PHZvaWQ+OjpWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIpCitzdHJ1Y3QgU3BlY2lhbENhc2VQcm9sb2d1ZU9iamVjdEhhbmRsZXIgeworICAg
IHN0YXRpYyBib29sIHByb2Nlc3Modm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvKQogICAgIHsKLSAgICAgICAg
V3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUo
d3JhcHBlcik7ICAKLQogICAgICAgICAvLyBBZGRpdGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2Ug
cG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBwb3J0cyBhbHNvCiAgICAgICAgIC8vIGhhdmUg
dGhlaXIgd3JhcHBlcnMgZW50YW5nbGVkLiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIGhhbmRsZWQg
d2hlbiB0aGUKICAgICAgICAgLy8gcG9ydHMgYXJlIGFjdHVhbGx5IGVudGFuZ2xlZCBpbiBNZXNz
YWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9pZApAQCAtMTYxLDcgKzE1OCwyNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdl
UG9ydCo+KG9iamVjdCk7CiAgICAgICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5nbGVkKCkgfHwg
cG9ydDEtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIuQ2xl
YXJXZWFrKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworc3RydWN0IFNwZWNp
YWxDYXNlUHJvbG9ndWVOb2RlSGFuZGxlciB7CisgICAgc3RhdGljIGJvb2wgcHJvY2VzcyhOb2Rl
KiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBl
SW5mbyogdHlwZUluZm8pCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUz4gY2xhc3MgR0NQcm9sb2d1ZVZpc2l0
b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1hcDxUPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9p
ZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgVCogb2JqZWN0LCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgV3JhcHBlclR5cGVJ
bmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7ICAK
KworICAgICAgICBpZiAoIVM6OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsK
ICAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8t
PnRvQWN0aXZlRE9NT2JqZWN0KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9i
amVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAg
ICAgICAgIHdyYXBwZXIuQ2xlYXJXZWFrKCk7CkBAIC0zNzMsMTIgKzM4OSwxNSBAQCB2b2lkIFY4
R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKCkKIAogICAgIC8vIFJ1biB0aHJvdWdoIGFsbCBvYmpl
Y3RzIHdpdGggcG9zc2libGUgcGVuZGluZyBhY3Rpdml0eSBtYWtpbmcgdGhlaXIKICAgICAvLyB3
cmFwcGVycyBub24gd2VhayBpZiB0aGVyZSBpcyBwZW5kaW5nIGFjdGl2aXR5LgotICAgIEdDUHJv
bG9ndWVWaXNpdG9yIHByb2xvZ3VlVmlzaXRvcjsKLSAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHMo
JnByb2xvZ3VlVmlzaXRvcik7CisgICAgR0NQcm9sb2d1ZVZpc2l0b3I8dm9pZCwgU3BlY2lhbENh
c2VQcm9sb2d1ZU9iamVjdEhhbmRsZXI+IHByb2xvZ3VlT2JqZWN0VmlzaXRvcjsKKyAgICB2aXNp
dEFjdGl2ZURPTU9iamVjdHMoJnByb2xvZ3VlT2JqZWN0VmlzaXRvcik7CisgICAgR0NQcm9sb2d1
ZVZpc2l0b3I8Tm9kZSwgU3BlY2lhbENhc2VQcm9sb2d1ZU5vZGVIYW5kbGVyPiBwcm9sb2d1ZU5v
ZGVWaXNpdG9yOworICAgIHZpc2l0QWN0aXZlRE9NTm9kZXMoJnByb2xvZ3VlTm9kZVZpc2l0b3Ip
OwogCiAgICAgLy8gQ3JlYXRlIG9iamVjdCBncm91cHMuCiAgICAgR3JvdXBlclZpc2l0b3IgZ3Jv
dXBlclZpc2l0b3I7CiAgICAgdmlzaXRET01Ob2RlcygmZ3JvdXBlclZpc2l0b3IpOworICAgIHZp
c2l0QWN0aXZlRE9NTm9kZXMoJmdyb3VwZXJWaXNpdG9yKTsKICAgICB2aXNpdERPTU9iamVjdHMo
Jmdyb3VwZXJWaXNpdG9yKTsKICAgICBncm91cGVyVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7CiAK
QEAgLTM4NywxMSArNDA2LDkgQEAgdm9pZCBWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1ZSgpCiAg
ICAgZGF0YS0+c3RyaW5nQ2FjaGUoKS0+Y2xlYXJPbkdDKCk7CiB9CiAKLWNsYXNzIEdDRXBpbG9n
dWVWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IgewotcHVibGlj
OgotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9i
amVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3N0cnVjdCBTcGVjaWFs
Q2FzZUVwaWxvZ3VlT2JqZWN0SGFuZGxlciB7CisgICAgc3RhdGljIGJvb2wgcHJvY2Vzcyh2b2lk
KiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBl
SW5mbyogdHlwZUluZm8pCiAgICAgewotICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZv
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgaWYgKFY4
TWVzc2FnZVBvcnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewogICAgICAgICAgICAgTWVzc2Fn
ZVBvcnQqIHBvcnQxID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmplY3QpOwogICAgICAg
ICAgICAgLy8gV2UgbWFya2VkIHRoaXMgcG9ydCBhcyByZWFjaGFibGUgaW4gR0NQcm9sb2d1ZVZp
c2l0b3IuICBVbmRvIHRoaXMgbm93IHNpbmNlIHRoZQpAQCAtMzk5LDcgKzQxNiwyNSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAvLyBHQ1Byb2xvZ3VlVmlzaXRvciBleHBlY3RzIHRvIHNlZSBhbGwg
aGFuZGxlcyBtYXJrZWQgYXMgd2VhaykuCiAgICAgICAgICAgICBpZiAoKCF3cmFwcGVyLklzV2Vh
aygpICYmICF3cmFwcGVyLklzTmVhckRlYXRoKCkpIHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSkKICAgICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKHBvcnQxLCAmRE9NRGF0YVN0
b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOwotICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK307CisKK3N0cnVjdCBTcGVjaWFsQ2FzZUVwaWxvZ3VlTm9kZUhhbmRsZXIgeworICAg
IHN0YXRpYyBib29sIHByb2Nlc3MoTm9kZSogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFMsIHY4OjpXZWFrUmVmZXJlbmNlQ2FsbGJhY2sgY2FsbGJhY2s+IGNsYXNzIEdDRXBpbG9ndWVW
aXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8VD46OlZpc2l0b3IgeworcHVibGljOgorICAg
IHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIFQqIG9iamVjdCwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB7CisgICAgICAgIFdyYXBwZXJU
eXBlSW5mbyogdHlwZUluZm8gPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIp
OworICAgICAgICBpZiAoIVM6OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsK
ICAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8t
PnRvQWN0aXZlRE9NT2JqZWN0KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9i
amVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzV2VhaygpKTsKQEAgLTQwOCw3ICs0NDMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgLy8gbWF5IGJlIGEgZGlmZmVyZW50IHBvaW50ZXIgKGlu
IGNhc2UgQWN0aXZlRE9NT2JqZWN0IGlzIG5vdAogICAgICAgICAgICAgICAgIC8vIHRoZSBtYWlu
IGJhc2UgY2xhc3Mgb2YgdGhlIG9iamVjdCdzIGNsYXNzKSBhbmQgcG9pbnRlcgogICAgICAgICAg
ICAgICAgIC8vIGlkZW50aXR5IGlzIHJlcXVpcmVkIGJ5IERPTSBtYXAgZnVuY3Rpb25zLgotICAg
ICAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqZWN0LCAmRE9NRGF0YVN0b3JlOjp3ZWFr
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOworICAgICAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdl
YWsob2JqZWN0LCBjYWxsYmFjayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC00NDQsOCArNDc5LDEwIEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjRXBpbG9ndWUoKQogCiAg
ICAgLy8gUnVuIHRocm91Z2ggYWxsIG9iamVjdHMgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG1ha2lu
ZyB0aGVpciB3cmFwcGVycyB3ZWFrCiAgICAgLy8gYWdhaW4uCi0gICAgR0NFcGlsb2d1ZVZpc2l0
b3IgZXBpbG9ndWVWaXNpdG9yOwotICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0cygmZXBpbG9ndWVW
aXNpdG9yKTsKKyAgICBHQ0VwaWxvZ3VlVmlzaXRvcjx2b2lkLCBTcGVjaWFsQ2FzZUVwaWxvZ3Vl
T2JqZWN0SGFuZGxlciwgJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNr
PiBlcGlsb2d1ZU9iamVjdFZpc2l0b3I7CisgICAgdmlzaXRBY3RpdmVET01PYmplY3RzKCZlcGls
b2d1ZU9iamVjdFZpc2l0b3IpOworICAgIEdDRXBpbG9ndWVWaXNpdG9yPE5vZGUsIFNwZWNpYWxD
YXNlRXBpbG9ndWVOb2RlSGFuZGxlciwgJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaz4g
ZXBpbG9ndWVOb2RlVmlzaXRvcjsKKyAgICB2aXNpdEFjdGl2ZURPTU5vZGVzKCZlcGlsb2d1ZU5v
ZGVWaXNpdG9yKTsKIAogICAgIHdvcmtpbmdTZXRFc3RpbWF0ZU1CID0gZ2V0QWN0dWFsTWVtb3J5
VXNhZ2VJbk1CKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBOb2RlKiBsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogICAgIE5v
ZGUqIGZpcnN0RGVzY2VuZGFudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQWN0aXZl
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0Vs
ZW1lbnQuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVk
aW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxh
eWluZygpIHx8IEhUTUxNZWRpYUVsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOyB9CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmVOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiBw
cml2YXRlOgogICAgIEhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDE4MykKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTEwICBFdWdlbmUg
TmFsaW1vdiAgPGVuYWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3Ig
YWN0aXZlIERPTSBvYmplY3QgdGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNv
bGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwNDIxIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMS0xNCAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBDcmFzaCBpbiBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uCkluZGV4OiBMYXlv
dXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxl
Y3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0cyB0aGF0
IHdlIGRvbid0IGdhcmJhZ2UgY29sbGVjdCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBvciBldmVudCBs
aXN0ZW5lci4KKworQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsCisiNC44
LjEwLjggUGxheWluZyB0aGUgbWVkaWEgcmVzb3VyY2UiLAorIk1lZGlhIGVsZW1lbnRzIG11c3Qg
bm90IHN0b3AgcGxheWluZyBqdXN0IGJlY2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZl
IGJlZW4gcmVtb3ZlZDsgb25seSBvbmNlIGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdo
ZXJlIG5vIGZ1cnRoZXIgYXVkaW8gY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50
IG1heSB0aGUgZWxlbWVudCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4iCisKKyhzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODc4LCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MjEsIGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZv
ciBtb3JlIGRldGFpbHMpLgorCitQQVNTCisKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVk
aW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
YXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9t
ZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MSBAQAorPCFET0NUWVBFIEhUTUw+CisKKzxodG1sPgorPGJvZHk+CisKKzxwPlRlc3RzIHRoYXQg
d2UgZG9uJ3QgZ2FyYmFnZSBjb2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxp
c3RlbmVyLjwvcD4KKzxwPkFjY29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5odG1sLDxi
ciAvPgorIjQuOC4xMC44IFBsYXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiw8YnIgLz4KKyJNZWRp
YSBlbGVtZW50cyBtdXN0IG5vdCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVu
Y2VzIHRvIHRoZW0gaGF2ZQorYmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50
IGlzIGluIGEgc3RhdGUgd2hlcmUgbm8gZnVydGhlciBhdWRpbworY291bGQgZXZlciBiZSBwbGF5
ZWQgYnkgdGhhdCBlbGVtZW50IG1heSB0aGUgZWxlbWVudCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4i
PGJyIC8+PGJyIC8+Cisoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02Njg3OCwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIxLCBh
bmQgaHR0cDovL2NyYnVnLmNvbS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS48L3A+Cis8cCBpZD0i
cmVzdWx0Ij4KK0ZBSUw6IFRlc3QgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVt
YXR1cmVseS4KKzwvcD4KKworPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPXZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisKK3ZhciBudW1fcGxheWVycyA9IDQ7Cit2YXIgcGxheV90aW1lcyA9IDU7CisK
K2Z1bmN0aW9uIGZvcmNlR0MoKSB7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgLy8gRm9yY2UgZ2FyYmFn
ZSBjb2xsZWN0aW9uCisgICAgZm9yICh2YXIgbmR4ID0gMDsgbmR4IDwgOTkwMDA7IG5keCArKykK
KyAgICAgICAgdmFyIHN0ciA9IG5ldyBTdHJpbmcoIjEyMzQiKTsKK30KKworZnVuY3Rpb24gZmlu
aXNoKCkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQg
PSAiUEFTUyI7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCitmdW5jdGlv
biBzdGFydCgpIHsKKyAgICB2YXIgbnVtX3BsYXllZCA9IDA7CisgICAgdmFyIGF1ZGlvRmlsZSA9
IGZpbmRNZWRpYUZpbGUoImF1ZGlvIiwgImNvbnRlbnQvc2lsZW5jZSIpOworICAgIHZhciBhID0g
bmV3IEF1ZGlvKGF1ZGlvRmlsZSk7CisgICAgYS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICBudW1fcGxheWVkICsrOworICAgICAgICBpZiAobnVtX3BsYXll
ZCA8IHBsYXlfdGltZXMpIHsKKyAgICAgICAgICAgIGEuY3VycmVudFRpbWUgPSBhLmR1cmF0aW9u
IC0gMC41OworICAgICAgICAgICAgYS5wbGF5KCk7CisgICAgICAgICAgICBpZiAobnVtX3BsYXll
ZCA9PSBwbGF5X3RpbWVzIC0gMSkgeworICAgICAgICAgICAgICAgIGEgPSBudWxsOworICAgICAg
ICAgICAgICAgIGZvcmNlR0MoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIG51bV9wbGF5ZXJzIC0tOworICAgICAgICAgICAgaWYgKG51bV9wbGF5ZXJzID09
IDApCisgICAgICAgICAgICAgICAgc3RhcnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGEuYWRkRXZlbnRMaXN0
ZW5lcignY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgYS5jdXJyZW50VGlt
ZSA9IGEuZHVyYXRpb24gLSAwLjU7CisgICAgICAgIGEucGxheSgpOworICAgIH0pOworfQorCitz
dGFydCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115176</attachid>
            <date>2011-11-15 09:11:21 -0800</date>
            <delta_ts>2011-11-15 10:59:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70421-20111115091120.patch</filename>
            <type>text/plain</type>
            <size>23971</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTExLTEwICBFdWdlbmUg
TmFsaW1vdiAgPGVuYWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3Ig
YWN0aXZlIERPTSBvYmplY3QgdGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNv
bGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwNDIxIAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb2JsZW0gZGVtb25zdHJhdGVkIGl0c2VsZiB3aGVuIEhUTUxBdWRpb0Vs
ZW1lbnQgd2FzIGNoYW5nZWQgdG8gYmVjb21lIGFjdGl2ZSBET00gb2JqZWN0LgorICAgICAgICBC
ZWZvcmUgdGhhdCB0aGVyZSB3ZXJlIG5vIERPTSBvYmplY3RzIHRoYXQgc2ltdWx0YW5lb3VzbHkg
d2VyZSBub2RlcyBhbmQgYWN0aXZlIG9iamVjdHMuCisgICAgICAgIERPTSBvYmplY3QgY291bGQg
YmUgaGVsZCBpbiBvbmUgb2YgMyBtYXBzIC0tIG5vZGUgbWFwLCBhY3RpdmUgb2JqZWN0cyBtYXAs
IGFuZCBhbGwgb3RoZXIKKyAgICAgICAgb2JqZWN0cyBtYXAsIGFuZCBIVE1MQXVkaW9FbGVtZW50
IHNob3VsZCBiZSBpbiAyIG1hcHMgc2ltdWx0YW5lb3VzbHkuIFdoZW4gaXQgd2FzIGluIHRoZQor
ICAgICAgICBhY3RpdmUgRE9NIG9iamVjdHMgbWFwIG9ubHksIGl0cyBldmVudCBsaXN0ZW5lciBj
b3VsZCBiZSBnYXJiYWdlIGNvbGxlY3RlZCwgYmVjYXVzZSBzcGVjaWFsCisgICAgICAgIGNvZGUg
dGhhdCBncm91cHMgbGlzdGVuZXJzIHdpdGggd3JhcHBlcnMgY291bGQgaGFuZGxlIG9ubHkgd3Jh
cHBlcnMgZm9yIG9iamVjdHMgaW4gdGhlIG5vZGUKKyAgICAgICAgbWFwLiBJZiB3ZSBwdXQgSFRN
TEF1ZGlvRWxlbWVudCBpbnRvIG5vZGVzIG1hcCwgaXQgd291bGQgbm90IGJlIGFjdGl2ZSBET00g
bm9kZSwgYW5kIGNhbiBiZQorICAgICAgICBnYXJiYWdlIGNvbGxlY3RlZCBwcmVtYXR1cmVseSBp
dHNlbGYgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4Nzgp
LgorICAgICAgICBGaXggaXMgdG8gaW50cm9kdWNlIDR0aCBtYXAgLS0gYWN0aXZlIG5vZGVzIG1h
cCwgYW5kIGNoYW5nZSB0aGUgY29kZSBhY2NvcmRpbmdseS4KKworICAgICAgICBUZXN0OiBtZWRp
YS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgIChHZXREb21NYXBGdW5jdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6
RE9NRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6Z2V0RE9NV3Jh
cHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjphY3RpdmVEb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRE9N
RGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
RE9NRGF0YVN0b3JlOjp+U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0
YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEFjdGl2ZURPTU5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlQWxsRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdEFjdGl2ZURPTU5v
ZGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjpnZXRXcmFwcGVyU2xvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NQcm9sb2d1ZVNwZWNpYWxDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpHQ1Byb2xvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDRXBp
bG9ndWVIZWxwZXI6OkdDRXBpbG9ndWVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
Q0VwaWxvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
R0NDb250cm9sbGVyOjpnY0VwaWxvZ3VlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6aXNBY3RpdmVOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRp
b0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQ6OmlzQWN0aXZl
Tm9kZSk6CisKIDIwMTEtMTEtMTQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVt
bgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0JKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDExICsx
Nzc3LDEyIEBAIEVORAogICAgIH0KIAogICAgIG15ICRET01PYmplY3QgPSAiRE9NT2JqZWN0IjsK
LSAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEg
RE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBBY3RpdmVET01PYmplY3QuCi0gICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9KSB7Ci0g
ICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2JqZWN0IjsKLSAgICB9IGVsc2lmIChJc05v
ZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0
aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEgRE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBE
T01Ob2RlIGhlcmUuCisgICAgIyBzZXRKU1dyYXBwZXJGb3JET01Ob2RlKCkgd2lsbCBsb29rIGlm
IG5vZGUgaXMgYWN0aXZlIGFuZCBjaG9vc2UgY29ycmVjdCBtYXAgdG8gYWRkIG5vZGUgdG8uCisg
ICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICAkRE9NT2JqZWN0ID0g
IkRPTU5vZGUiOworICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9KSB7CisgICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2Jq
ZWN0IjsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIApAQCAtMzA4Miw2
ICszMDgzLDcgQEAgc3ViIEdldERvbU1hcEZ1bmN0aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gImdldERPTVNWR0VsZW1lbnRJ
bnN0YW5jZU1hcCgpIiBpZiAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1
cm4gImdldEFjdGl2ZURPTU5vZGVNYXAoKSIgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAm
JiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSk7CiAg
ICAgcmV0dXJuICJnZXRET01Ob2RlTWFwKCkiIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkp
OwogICAgIHJldHVybiAiZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkiIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9OwogICAgIHJldHVybiAiZ2V0RE9N
T2JqZWN0TWFwKCkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRE9NRGF0YVN0b3JlOjpET01EYXRhU3RvcmUoKQogICAgIDogbV9k
b21Ob2RlTWFwKDApCisgICAgLCBtX2FjdGl2ZURvbU5vZGVNYXAoMCkKICAgICAsIG1fZG9tT2Jq
ZWN0TWFwKDApCiAgICAgLCBtX2FjdGl2ZURvbU9iamVjdE1hcCgwKQogI2lmIEVOQUJMRShTVkcp
CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCogRE9NRGF0YVN0b3JlOjpnZXRET01XcmFwcGVyTWFw
KERPTQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NTm9kZU1hcDoKICAgICAgICAg
cmV0dXJuIG1fZG9tTm9kZU1hcDsKKyAgICBjYXNlIEFjdGl2ZURPTU5vZGVNYXA6CisgICAgICAg
IHJldHVybiBtX2FjdGl2ZURvbU5vZGVNYXA7CiAgICAgY2FzZSBET01PYmplY3RNYXA6CiAgICAg
ICAgIHJldHVybiBtX2RvbU9iamVjdE1hcDsKICAgICBjYXNlIEFjdGl2ZURPTU9iamVjdE1hcDoK
QEAgLTE0OSw3ICsxNTIsOCBAQCB2b2lkIERPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2
ODo6CiAgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBE
T01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAgaWYgKHN0b3JlLT5kb21Ob2Rl
TWFwKCkucmVtb3ZlSWZQcmVzZW50KG5vZGUsIHY4T2JqZWN0KSkgeworICAgICAgICBET01Ob2Rl
TWFwcGluZyYgbm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURv
bU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CisgICAgICAgIGlmIChub2RlTWFwLnJl
bW92ZUlmUHJlc2VudChub2RlLCB2OE9iamVjdCkpIHsKICAgICAgICAgICAgIG5vZGUtPmRlcmVm
KCk7IC8vIE5vYm9keSBvdmVycmlkZXMgTm9kZTo6ZGVyZWYgc28gaXQncyBzYWZlCiAgICAgICAg
ICAgICByZXR1cm47IC8vIFRoZXJlIG1pZ2h0IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRo
ZSBub2RlIGluIHdvcmxkJ3MgbWFwcwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBE
T01XcmFwcGVyTWFwVHlwZSB7CiAgICAgICAgICAgICBET01Ob2RlTWFwLAorICAgICAgICAgICAg
QWN0aXZlRE9NTm9kZU1hcCwKICAgICAgICAgICAgIERPTU9iamVjdE1hcCwKICAgICAgICAgICAg
IEFjdGl2ZURPTU9iamVjdE1hcCwKICNpZiBFTkFCTEUoU1ZHKQpAQCAtODEsNiArODIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3Jh
cHBlck1hcFR5cGUpOwogCiAgICAgICAgIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyBy
ZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQorICAgICAgICBET01Ob2RlTWFwcGluZyYgYWN0aXZlRG9t
Tm9kZU1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU5vZGVNYXA7IH0KICAgICAgICAgRE9NV3Jh
cHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9tT2JqZWN0TWFwOyB9
CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0
dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogI2lmIEVOQUJMRShTVkcpCkBAIC04OSwxNSAr
OTEsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIE5lZWQgYnkgVjhHQ0Nv
bnRyb2xsZXIuCiAgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtBY3RpdmVET01PYmplY3RDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwor
ICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHdlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha0RP
TU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQq
IGRvbU9iamVjdCk7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha1NW
R0VsZW1lbnRJbnN0YW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmpl
Y3QsIHZvaWQqIGRvbU9iamVjdCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIERPTU5vZGVN
YXBwaW5nKiBtX2RvbU5vZGVNYXA7CisgICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2FjdGl2ZURv
bU5vZGVNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwog
ICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBF
TkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29w
ZWRET01EYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIFNjb3BlZERPTURhdGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKCkKICAgICA6
IERPTURhdGFTdG9yZSgpCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8
Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayk7CisgICAgbV9hY3RpdmVEb21O
b2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVD
YWxsYmFjayk7CiAgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigm
RE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spOwogICAgIG1fYWN0aXZlRG9tT2Jq
ZWN0TWFwID0gbmV3IERPTVdyYXBwZXJNYXA8dm9pZD4oJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2
ZURPTU9iamVjdENhbGxiYWNrKTsKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNDcsNiArNDgsNyBAQCBT
Y29wZWRET01EYXRhU3RvcmU6OlNjb3BlZERPTURhdGFTdG9yZSgpCiBTY29wZWRET01EYXRhU3Rv
cmU6On5TY29wZWRET01EYXRhU3RvcmUoKQogewogICAgIGRlbGV0ZSBtX2RvbU5vZGVNYXA7Cisg
ICAgZGVsZXRlIG1fYWN0aXZlRG9tTm9kZU1hcDsKICAgICBkZWxldGUgbV9kb21PYmplY3RNYXA7
CiAgICAgZGVsZXRlIG1fYWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5j
cHAJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogU3RhdGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoKQog
ICAgIDogRE9NRGF0YVN0b3JlKCkKICAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgmRE9NRGF0YVN0
b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQorICAgICwgbV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwKCZE
T01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0RvbU9iamVjdE1h
cCgmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0Fj
dGl2ZURvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJh
Y2spCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQ0LDYgKzQ1LDcgQEAgU3RhdGljRE9NRGF0YVN0b3Jl
OjpTdGF0aWNET01EYXRhU3RvcmUoKQogI2VuZGlmCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gJm1f
c3RhdGljRG9tTm9kZU1hcDsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSAmbV9zdGF0aWNBY3Rp
dmVEb21Ob2RlTWFwOwogICAgIG1fZG9tT2JqZWN0TWFwID0gJm1fc3RhdGljRG9tT2JqZWN0TWFw
OwogICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwID0gJm1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFw
OwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0
aWNET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEludHJ1c2l2ZURPTVdyYXBwZXJN
YXAgbV9zdGF0aWNEb21Ob2RlTWFwOworICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgbV9zdGF0
aWNBY3RpdmVEb21Ob2RlTWFwOwogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21P
YmplY3RNYXA7CiAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0FjdGl2ZURvbU9iamVj
dE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmNwcAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBET01Ob2Rl
TWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgpCiAgICAgcmV0dXJuIGdldERPTURhdGFTdG9yZSgpLmRv
bU5vZGVNYXAoKTsKIH0KIAorRE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAoKQor
eworICAgIHJldHVybiBnZXRET01EYXRhU3RvcmUoKS5hY3RpdmVEb21Ob2RlTWFwKCk7Cit9CisK
IERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1hcCgpCiB7CiAgICAgcmV0dXJuIGdl
dERPTURhdGFTdG9yZSgpLmRvbU9iamVjdE1hcCgpOwpAQCAtOTQsNiArOTksOSBAQCB2b2lkIHJl
bW92ZUFsbERPTU9iamVjdHMoKQogICAgICAgICAvLyBSZW1vdmUgYWxsIERPTSBub2Rlcy4KICAg
ICAgICAgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwPE5vZGU+KCZzdG9yZSwg
c3RvcmUuZG9tTm9kZU1hcCgpKTsKIAorICAgICAgICAvLyBSZW1vdmUgYWxsIGFjdGl2ZSBET00g
bm9kZXMuCisgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxOb2Rl
Pigmc3RvcmUsIHN0b3JlLmFjdGl2ZURvbU5vZGVNYXAoKSk7CisKICNpZiBFTkFCTEUoU1ZHKQog
ICAgICAgICAvLyBSZW1vdmUgYWxsIFNWRyBlbGVtZW50IGluc3RhbmNlcyBpbiB0aGUgd3JhcHBl
ciBtYXAuCiAgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxTVkdF
bGVtZW50SW5zdGFuY2U+KCZzdG9yZSwgc3RvcmUuZG9tU3ZnRWxlbWVudEluc3RhbmNlTWFwKCkp
OwpAQCAtMTE5LDYgKzEyNywxOCBAQCB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBlck1hcDxO
b2RlPjo6CiAgICAgfQogfQogCit2b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1h
cDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CisKKyAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERP
TURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOworCisgICAgICAgIHN0b3JlLT5hY3RpdmVEb21O
b2RlTWFwKCkudmlzaXQoc3RvcmUsIHZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCB2aXNpdERP
TU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikKIHsKICAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmgJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgog
ICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcm
IGdldEFjdGl2ZURPTU5vZGVNYXAoKTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBl
ck1hcDxOb2RlPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01X
cmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9i
amVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFwcGVyLiBUaGlzIG1hcCBkb2VzIG5vdCBjb250
YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3Rp
dmUgZG9tIG9iamVjdHMpLgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1h
cCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5MiwxMCBAQCB2b2lkIFY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlCiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NTm9kZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKQogewogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVy
KSk7Ci0gICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKKyAgICBpZiAobm9k
ZS0+aXNBY3RpdmVOb2RlKCkpCisgICAgICAgIGdldEFjdGl2ZURPTU5vZGVNYXAoKS5zZXQobm9k
ZSwgd3JhcHBlcik7CisgICAgZWxzZQorICAgICAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUs
IHdyYXBwZXIpOwogfQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6Omdl
dENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG9iamVjdFByb3RvdHlwZSkKQEAgLTI5NSw3ICsyOTgsOCBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4RE9NV3JhcHBlcjo6Z2V0CiAgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpOwogICAgICAgICByZXR1cm4gKndyYXBwZXI7CiAgICAgfQotICAgIERPTU5vZGVN
YXBwaW5nJiBkb21Ob2RlTWFwID0gY29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCktPmRv
bU5vZGVNYXAoKTsKKyAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gY29udGV4dC0+d29ybGQoKS0+
ZG9tRGF0YVN0b3JlKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5p
c0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9k
ZU1hcCgpOwogICAgIHJldHVybiBkb21Ob2RlTWFwLmdldChub2RlKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTIgKzE0MywxMCBAQCBwdWJsaWM6CiAKICNlbmRpZiAv
LyBOREVCVUcKIAotY2xhc3MgR0NQcm9sb2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1h
cDx2b2lkPjo6VmlzaXRvciB7CitjbGFzcyBTcGVjaWFsQ2FzZVByb2xvZ3VlT2JqZWN0SGFuZGxl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9y
ZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAg
IHN0YXRpYyBib29sIHByb2Nlc3Modm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvKQogICAgIHsKLSAgICAgICAg
V3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUo
d3JhcHBlcik7ICAKLQogICAgICAgICAvLyBBZGRpdGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2Ug
cG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBwb3J0cyBhbHNvCiAgICAgICAgIC8vIGhhdmUg
dGhlaXIgd3JhcHBlcnMgZW50YW5nbGVkLiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIGhhbmRsZWQg
d2hlbiB0aGUKICAgICAgICAgLy8gcG9ydHMgYXJlIGFjdHVhbGx5IGVudGFuZ2xlZCBpbiBNZXNz
YWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9pZApAQCAtMTYxLDcgKzE1OSwzMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdl
UG9ydCo+KG9iamVjdCk7CiAgICAgICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5nbGVkKCkgfHwg
cG9ydDEtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIuQ2xl
YXJXZWFrKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworY2xhc3MgU3BlY2lh
bENhc2VQcm9sb2d1ZU5vZGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBwcm9j
ZXNzKE5vZGUqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgV3Jh
cHBlclR5cGVJbmZvKiB0eXBlSW5mbykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShvYmpl
Y3QpOworICAgICAgICBVTlVTRURfUEFSQU0od3JhcHBlcik7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0eXBlSW5mbyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgorY2xhc3MgR0NQcm9sb2d1ZVZpc2l0b3IgOiBwdWJs
aWMgRE9NV3JhcHBlck1hcDxUPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdERP
TVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBl
SW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7ICAKKworICAgICAg
ICBpZiAoIVM6OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsKICAgICAgICAg
ICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZl
RE9NT2JqZWN0KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBh
Y3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIHdy
YXBwZXIuQ2xlYXJXZWFrKCk7CkBAIC0zNzMsMTIgKzM5NSwxNSBAQCB2b2lkIFY4R0NDb250cm9s
bGVyOjpnY1Byb2xvZ3VlKCkKIAogICAgIC8vIFJ1biB0aHJvdWdoIGFsbCBvYmplY3RzIHdpdGgg
cG9zc2libGUgcGVuZGluZyBhY3Rpdml0eSBtYWtpbmcgdGhlaXIKICAgICAvLyB3cmFwcGVycyBu
b24gd2VhayBpZiB0aGVyZSBpcyBwZW5kaW5nIGFjdGl2aXR5LgotICAgIEdDUHJvbG9ndWVWaXNp
dG9yIHByb2xvZ3VlVmlzaXRvcjsKLSAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHMoJnByb2xvZ3Vl
VmlzaXRvcik7CisgICAgR0NQcm9sb2d1ZVZpc2l0b3I8dm9pZCwgU3BlY2lhbENhc2VQcm9sb2d1
ZU9iamVjdEhhbmRsZXI+IHByb2xvZ3VlT2JqZWN0VmlzaXRvcjsKKyAgICB2aXNpdEFjdGl2ZURP
TU9iamVjdHMoJnByb2xvZ3VlT2JqZWN0VmlzaXRvcik7CisgICAgR0NQcm9sb2d1ZVZpc2l0b3I8
Tm9kZSwgU3BlY2lhbENhc2VQcm9sb2d1ZU5vZGVIYW5kbGVyPiBwcm9sb2d1ZU5vZGVWaXNpdG9y
OworICAgIHZpc2l0QWN0aXZlRE9NTm9kZXMoJnByb2xvZ3VlTm9kZVZpc2l0b3IpOwogCiAgICAg
Ly8gQ3JlYXRlIG9iamVjdCBncm91cHMuCiAgICAgR3JvdXBlclZpc2l0b3IgZ3JvdXBlclZpc2l0
b3I7CiAgICAgdmlzaXRET01Ob2RlcygmZ3JvdXBlclZpc2l0b3IpOworICAgIHZpc2l0QWN0aXZl
RE9NTm9kZXMoJmdyb3VwZXJWaXNpdG9yKTsKICAgICB2aXNpdERPTU9iamVjdHMoJmdyb3VwZXJW
aXNpdG9yKTsKICAgICBncm91cGVyVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7CiAKQEAgLTM4Nywx
MSArNDEyLDEwIEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUoKQogICAgIGRhdGEt
PnN0cmluZ0NhY2hlKCktPmNsZWFyT25HQygpOwogfQogCi1jbGFzcyBHQ0VwaWxvZ3VlVmlzaXRv
ciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK2NsYXNzIFNwZWNpYWxD
YXNlRXBpbG9ndWVPYmplY3RIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHZpc2l0RE9NV3Jh
cHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgc3RhdGljIGJvb2wgcHJvY2Vzcyh2b2lkKiBvYmplY3Qs
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlw
ZUluZm8pCiAgICAgewotICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgaWYgKFY4TWVzc2FnZVBv
cnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewogICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBv
cnQxID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmplY3QpOwogICAgICAgICAgICAgLy8g
V2UgbWFya2VkIHRoaXMgcG9ydCBhcyByZWFjaGFibGUgaW4gR0NQcm9sb2d1ZVZpc2l0b3IuICBV
bmRvIHRoaXMgbm93IHNpbmNlIHRoZQpAQCAtMzk5LDcgKzQyMywzMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAvLyBHQ1Byb2xvZ3VlVmlzaXRvciBleHBlY3RzIHRvIHNlZSBhbGwgaGFuZGxlcyBt
YXJrZWQgYXMgd2VhaykuCiAgICAgICAgICAgICBpZiAoKCF3cmFwcGVyLklzV2VhaygpICYmICF3
cmFwcGVyLklzTmVhckRlYXRoKCkpIHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAg
ICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKHBvcnQxLCAmRE9NRGF0YVN0b3JlOjp3ZWFr
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307
CisKK2NsYXNzIFNwZWNpYWxDYXNlRXBpbG9ndWVOb2RlSGFuZGxlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgcHJvY2VzcyhOb2RlKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8pCisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHdyYXBwZXIpOworICAg
ICAgICBVTlVTRURfUEFSQU0odHlwZUluZm8pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgdjg6OldlYWtSZWZlcmVu
Y2VDYWxsYmFjayBjYWxsYmFjaz4KK2NsYXNzIEdDRXBpbG9ndWVWaXNpdG9yIDogcHVibGljIERP
TVdyYXBwZXJNYXA8VD46OlZpc2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXRET01XcmFw
cGVyKERPTURhdGFTdG9yZSogc3RvcmUsIFQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKKyAgICB7CisgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8g
PSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOworICAgICAgICBpZiAoIVM6
OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsKICAgICAgICAgICAgIEFjdGl2
ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZlRE9NT2JqZWN0
KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01P
YmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCF3
cmFwcGVyLklzV2VhaygpKTsKQEAgLTQwOCw3ICs0NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgLy8gbWF5IGJlIGEgZGlmZmVyZW50IHBvaW50ZXIgKGluIGNhc2UgQWN0aXZlRE9NT2Jq
ZWN0IGlzIG5vdAogICAgICAgICAgICAgICAgIC8vIHRoZSBtYWluIGJhc2UgY2xhc3Mgb2YgdGhl
IG9iamVjdCdzIGNsYXNzKSBhbmQgcG9pbnRlcgogICAgICAgICAgICAgICAgIC8vIGlkZW50aXR5
IGlzIHJlcXVpcmVkIGJ5IERPTSBtYXAgZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgIHdyYXBw
ZXIuTWFrZVdlYWsob2JqZWN0LCAmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2Fs
bGJhY2spOworICAgICAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqZWN0LCBjYWxsYmFj
ayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00NDQsOCArNDkxLDEwIEBA
IHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjRXBpbG9ndWUoKQogCiAgICAgLy8gUnVuIHRocm91Z2gg
YWxsIG9iamVjdHMgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG1ha2luZyB0aGVpciB3cmFwcGVycyB3
ZWFrCiAgICAgLy8gYWdhaW4uCi0gICAgR0NFcGlsb2d1ZVZpc2l0b3IgZXBpbG9ndWVWaXNpdG9y
OwotICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0cygmZXBpbG9ndWVWaXNpdG9yKTsKKyAgICBHQ0Vw
aWxvZ3VlVmlzaXRvcjx2b2lkLCBTcGVjaWFsQ2FzZUVwaWxvZ3VlT2JqZWN0SGFuZGxlciwgJkRP
TURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrPiBlcGlsb2d1ZU9iamVjdFZp
c2l0b3I7CisgICAgdmlzaXRBY3RpdmVET01PYmplY3RzKCZlcGlsb2d1ZU9iamVjdFZpc2l0b3Ip
OworICAgIEdDRXBpbG9ndWVWaXNpdG9yPE5vZGUsIFNwZWNpYWxDYXNlRXBpbG9ndWVOb2RlSGFu
ZGxlciwgJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaz4gZXBpbG9ndWVOb2RlVmlzaXRv
cjsKKyAgICB2aXNpdEFjdGl2ZURPTU5vZGVzKCZlcGlsb2d1ZU5vZGVWaXNpdG9yKTsKIAogICAg
IHdvcmtpbmdTZXRFc3RpbWF0ZU1CID0gZ2V0QWN0dWFsTWVtb3J5VXNhZ2VJbk1CKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICBOb2RlKiBsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogICAgIE5vZGUqIGZpcnN0RGVzY2VuZGFu
dCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlTm9kZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9N
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24g
MTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxheWluZygpIHx8IEhUTUxNZWRp
YUVsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmVOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcml2YXRlOgogICAgIEhUTUxB
dWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEwMDE4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTEwICBFdWdlbmUgTmFsaW1vdiAgPGVuYWxAZ29v
Z2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3IgYWN0aXZlIERPTSBvYmplY3Qg
dGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZCBwcmVtYXR1cmVs
eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIx
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL2F1ZGlv
LWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2F1
ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMS0xNCAgSnVsaWVuIENo
YWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5k
ZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9hdWRp
by1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2Ug
Y29sbGVjdCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBvciBldmVudCBsaXN0ZW5lci4KKworQWNjb3Jk
aW5nIHRvIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsCisiNC44LjEwLjggUGxheWluZyB0aGUg
bWVkaWEgcmVzb3VyY2UiLAorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBq
dXN0IGJlY2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlIGJlZW4gcmVtb3ZlZDsgb25s
eSBvbmNlIGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5vIGZ1cnRoZXIgYXVk
aW8gY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50IG1heSB0aGUgZWxlbWVudCBi
ZSBnYXJiYWdlIGNvbGxlY3RlZC4iCisKKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2ODc4LCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzA0MjEsIGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZvciBtb3JlIGRldGFpbHMpLgor
CitQQVNTCisKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xs
ZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdl
LWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhU
TUw+CisKKzxodG1sPgorPGJvZHk+CisKKzxwPlRlc3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFnZSBj
b2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxpc3RlbmVyLjwvcD4KKzxwPkFj
Y29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5odG1sLDxiciAvPgorIjQuOC4xMC44IFBs
YXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiw8YnIgLz4KKyJNZWRpYSBlbGVtZW50cyBtdXN0IG5v
dCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0gaGF2ZQor
YmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGluIGEgc3RhdGUgd2hl
cmUgbm8gZnVydGhlciBhdWRpbworY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50
IG1heSB0aGUgZWxlbWVudCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4iPGJyIC8+PGJyIC8+Cisoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCwgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIxLCBhbmQgaHR0cDovL2NyYnVnLmNv
bS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS48L3A+Cis8cCBpZD0icmVzdWx0Ij4KK0ZBSUw6IFRl
c3QgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVtYXR1cmVseS4KKzwvcD4KKwor
PHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPXZpZGVvLXRl
c3QuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBu
dW1fcGxheWVycyA9IDQ7Cit2YXIgcGxheV90aW1lcyA9IDU7CisKK2Z1bmN0aW9uIGZpbmlzaCgp
IHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0gIlBB
U1MiOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgdmFyIG51bV9wbGF5ZWQgPSAwOworICAgIHZhciBhdWRpb0ZpbGUgPSBmaW5k
TWVkaWFGaWxlKCJhdWRpbyIsICJjb250ZW50L3NpbGVuY2UiKTsKKyAgICB2YXIgYSA9IG5ldyBB
dWRpbyhhdWRpb0ZpbGUpOworICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgbnVtX3BsYXllZCArKzsKKyAgICAgICAgaWYgKG51bV9wbGF5ZWQgPCBw
bGF5X3RpbWVzKSB7CisgICAgICAgICAgICBhLmN1cnJlbnRUaW1lID0gYS5kdXJhdGlvbiAtIDAu
MzU7CisgICAgICAgICAgICBhLnBsYXkoKTsKKyAgICAgICAgICAgIGlmIChudW1fcGxheWVkID09
IHBsYXlfdGltZXMgLSAxKSB7CisgICAgICAgICAgICAgICAgYSA9IG51bGw7CisgICAgICAgICAg
ICAgICAgZ2MoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG51bV9wbGF5ZXJzIC0tOworICAgICAgICAgICAgaWYgKG51bV9wbGF5ZXJzID09IDApCisgICAg
ICAgICAgICAgICAgc3RhcnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBm
aW5pc2goKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2Fu
cGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgYS5jdXJyZW50VGltZSA9IGEuZHVy
YXRpb24gLSAwLjM1OworICAgICAgICBhLnBsYXkoKTsKKyAgICB9KTsKK30KKworc3RhcnQoKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115203</attachid>
            <date>2011-11-15 10:59:12 -0800</date>
            <delta_ts>2011-11-15 12:14:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70421-20111115105910.patch</filename>
            <type>text/plain</type>
            <size>24013</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTExLTEwICBFdWdlbmUg
TmFsaW1vdiAgPGVuYWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3Ig
YWN0aXZlIERPTSBvYmplY3QgdGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNv
bGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcwNDIxIAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb2JsZW0gZGVtb25zdHJhdGVkIGl0c2VsZiB3aGVuIEhUTUxBdWRpb0Vs
ZW1lbnQgd2FzIGNoYW5nZWQgdG8gYmVjb21lIGFjdGl2ZSBET00gb2JqZWN0LgorICAgICAgICBC
ZWZvcmUgdGhhdCB0aGVyZSB3ZXJlIG5vIERPTSBvYmplY3RzIHRoYXQgc2ltdWx0YW5lb3VzbHkg
d2VyZSBub2RlcyBhbmQgYWN0aXZlIG9iamVjdHMuCisgICAgICAgIERPTSBvYmplY3QgY291bGQg
YmUgaGVsZCBpbiBvbmUgb2YgMyBtYXBzIC0tIG5vZGUgbWFwLCBhY3RpdmUgb2JqZWN0cyBtYXAs
IGFuZCBhbGwgb3RoZXIKKyAgICAgICAgb2JqZWN0cyBtYXAsIGFuZCBIVE1MQXVkaW9FbGVtZW50
IHNob3VsZCBiZSBpbiAyIG1hcHMgc2ltdWx0YW5lb3VzbHkuIFdoZW4gaXQgd2FzIGluIHRoZQor
ICAgICAgICBhY3RpdmUgRE9NIG9iamVjdHMgbWFwIG9ubHksIGl0cyBldmVudCBsaXN0ZW5lciBj
b3VsZCBiZSBnYXJiYWdlIGNvbGxlY3RlZCwgYmVjYXVzZSBzcGVjaWFsCisgICAgICAgIGNvZGUg
dGhhdCBncm91cHMgbGlzdGVuZXJzIHdpdGggd3JhcHBlcnMgY291bGQgaGFuZGxlIG9ubHkgd3Jh
cHBlcnMgZm9yIG9iamVjdHMgaW4gdGhlIG5vZGUKKyAgICAgICAgbWFwLiBJZiB3ZSBwdXQgSFRN
TEF1ZGlvRWxlbWVudCBpbnRvIG5vZGVzIG1hcCwgaXQgd291bGQgbm90IGJlIGFjdGl2ZSBET00g
bm9kZSwgYW5kIGNhbiBiZQorICAgICAgICBnYXJiYWdlIGNvbGxlY3RlZCBwcmVtYXR1cmVseSBp
dHNlbGYgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4Nzgp
LgorICAgICAgICBGaXggaXMgdG8gaW50cm9kdWNlIDR0aCBtYXAgLS0gYWN0aXZlIG5vZGVzIG1h
cCwgYW5kIGNoYW5nZSB0aGUgY29kZSBhY2NvcmRpbmdseS4KKworICAgICAgICBUZXN0OiBtZWRp
YS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgIChHZXREb21NYXBGdW5jdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6
RE9NRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6Z2V0RE9NV3Jh
cHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRGF0YVN0b3JlOjphY3RpdmVEb21Ob2RlTWFwKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRE9N
RGF0YVN0b3JlOjpTY29wZWRET01EYXRhU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
RE9NRGF0YVN0b3JlOjp+U2NvcGVkRE9NRGF0YVN0b3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljRE9NRGF0
YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEFjdGl2ZURPTU5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlQWxsRE9NT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdEFjdGl2ZURPTU5v
ZGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTU1hcC5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjpnZXRXcmFwcGVyU2xvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R0NQcm9sb2d1ZVNwZWNpYWxDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnZvaWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpHQ1Byb2xvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKToKKyAgICAgICAgKFdlYkNvcmU6OkdDRXBp
bG9ndWVIZWxwZXI6OkdDRXBpbG9ndWVTcGVjaWFsQ2FzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
Q0VwaWxvZ3VlVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
R0NDb250cm9sbGVyOjpnY0VwaWxvZ3VlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6aXNBY3RpdmVOb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRp
b0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQ6OmlzQWN0aXZl
Tm9kZSk6CisKIDIwMTEtMTEtMTQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVt
bgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0JKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDExICsx
Nzc3LDEyIEBAIEVORAogICAgIH0KIAogICAgIG15ICRET01PYmplY3QgPSAiRE9NT2JqZWN0IjsK
LSAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEg
RE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBBY3RpdmVET01PYmplY3QuCi0gICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9KSB7Ci0g
ICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2JqZWN0IjsKLSAgICB9IGVsc2lmIChJc05v
ZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAjIEEgRE9NT2JqZWN0IHRoYXQgaXMgYW4gQWN0
aXZlRE9NT2JqZWN0IGFuZCBhbHNvIGEgRE9NTm9kZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBE
T01Ob2RlIGhlcmUuCisgICAgIyBzZXRKU1dyYXBwZXJGb3JET01Ob2RlKCkgd2lsbCBsb29rIGlm
IG5vZGUgaXMgYWN0aXZlIGFuZCBjaG9vc2UgY29ycmVjdCBtYXAgdG8gYWRkIG5vZGUgdG8uCisg
ICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICAkRE9NT2JqZWN0ID0g
IkRPTU5vZGUiOworICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9KSB7CisgICAgICAgICRET01PYmplY3QgPSAiQWN0aXZlRE9NT2Jq
ZWN0IjsKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIApAQCAtMzA4Miw2
ICszMDgzLDcgQEAgc3ViIEdldERvbU1hcEZ1bmN0aW9uCiAgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gImdldERPTVNWR0VsZW1lbnRJ
bnN0YW5jZU1hcCgpIiBpZiAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIjsKKyAgICByZXR1
cm4gImdldEFjdGl2ZURPTU5vZGVNYXAoKSIgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAm
JiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSk7CiAg
ICAgcmV0dXJuICJnZXRET01Ob2RlTWFwKCkiIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkp
OwogICAgIHJldHVybiAiZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkiIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9OwogICAgIHJldHVybiAiZ2V0RE9N
T2JqZWN0TWFwKCkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRE9NRGF0YVN0b3JlOjpET01EYXRhU3RvcmUoKQogICAgIDogbV9k
b21Ob2RlTWFwKDApCisgICAgLCBtX2FjdGl2ZURvbU5vZGVNYXAoMCkKICAgICAsIG1fZG9tT2Jq
ZWN0TWFwKDApCiAgICAgLCBtX2FjdGl2ZURvbU9iamVjdE1hcCgwKQogI2lmIEVOQUJMRShTVkcp
CkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCogRE9NRGF0YVN0b3JlOjpnZXRET01XcmFwcGVyTWFw
KERPTQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NTm9kZU1hcDoKICAgICAgICAg
cmV0dXJuIG1fZG9tTm9kZU1hcDsKKyAgICBjYXNlIEFjdGl2ZURPTU5vZGVNYXA6CisgICAgICAg
IHJldHVybiBtX2FjdGl2ZURvbU5vZGVNYXA7CiAgICAgY2FzZSBET01PYmplY3RNYXA6CiAgICAg
ICAgIHJldHVybiBtX2RvbU9iamVjdE1hcDsKICAgICBjYXNlIEFjdGl2ZURPTU9iamVjdE1hcDoK
QEAgLTE0OSw3ICsxNTIsOCBAQCB2b2lkIERPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayh2
ODo6CiAgICAgRE9NRGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBE
T01EYXRhU3RvcmUqIHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAgaWYgKHN0b3JlLT5kb21Ob2Rl
TWFwKCkucmVtb3ZlSWZQcmVzZW50KG5vZGUsIHY4T2JqZWN0KSkgeworICAgICAgICBET01Ob2Rl
TWFwcGluZyYgbm9kZU1hcCA9IG5vZGUtPmlzQWN0aXZlTm9kZSgpID8gc3RvcmUtPmFjdGl2ZURv
bU5vZGVNYXAoKSA6IHN0b3JlLT5kb21Ob2RlTWFwKCk7CisgICAgICAgIGlmIChub2RlTWFwLnJl
bW92ZUlmUHJlc2VudChub2RlLCB2OE9iamVjdCkpIHsKICAgICAgICAgICAgIG5vZGUtPmRlcmVm
KCk7IC8vIE5vYm9keSBvdmVycmlkZXMgTm9kZTo6ZGVyZWYgc28gaXQncyBzYWZlCiAgICAgICAg
ICAgICByZXR1cm47IC8vIFRoZXJlIG1pZ2h0IGJlIGF0IG1vc3Qgb25lIHdyYXBwZXIgZm9yIHRo
ZSBub2RlIGluIHdvcmxkJ3MgbWFwcwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBE
T01XcmFwcGVyTWFwVHlwZSB7CiAgICAgICAgICAgICBET01Ob2RlTWFwLAorICAgICAgICAgICAg
QWN0aXZlRE9NTm9kZU1hcCwKICAgICAgICAgICAgIERPTU9iamVjdE1hcCwKICAgICAgICAgICAg
IEFjdGl2ZURPTU9iamVjdE1hcCwKICNpZiBFTkFCTEUoU1ZHKQpAQCAtODEsNiArODIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQqIGdldERPTVdyYXBwZXJNYXAoRE9NV3Jh
cHBlck1hcFR5cGUpOwogCiAgICAgICAgIERPTU5vZGVNYXBwaW5nJiBkb21Ob2RlTWFwKCkgeyBy
ZXR1cm4gKm1fZG9tTm9kZU1hcDsgfQorICAgICAgICBET01Ob2RlTWFwcGluZyYgYWN0aXZlRG9t
Tm9kZU1hcCgpIHsgcmV0dXJuICptX2FjdGl2ZURvbU5vZGVNYXA7IH0KICAgICAgICAgRE9NV3Jh
cHBlck1hcDx2b2lkPiYgZG9tT2JqZWN0TWFwKCkgeyByZXR1cm4gKm1fZG9tT2JqZWN0TWFwOyB9
CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGFjdGl2ZURvbU9iamVjdE1hcCgpIHsgcmV0
dXJuICptX2FjdGl2ZURvbU9iamVjdE1hcDsgfQogI2lmIEVOQUJMRShTVkcpCkBAIC04OSwxNSAr
OTEsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIE5lZWQgYnkgVjhHQ0Nv
bnRyb2xsZXIuCiAgICAgICAgIHN0YXRpYyB2b2lkIHdlYWtBY3RpdmVET01PYmplY3RDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHY4T2JqZWN0LCB2b2lkKiBkb21PYmplY3QpOwor
ICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrTm9kZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gdjhPYmplY3QsIHZvaWQqIGRvbU9iamVjdCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHdlYWtOb2RlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2OE9iamVjdCwgdm9pZCogZG9tT2JqZWN0KTsKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha0RP
TU9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmplY3QsIHZvaWQq
IGRvbU9iamVjdCk7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgc3RhdGljIHZvaWQgd2Vha1NW
R0VsZW1lbnRJbnN0YW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdjhPYmpl
Y3QsIHZvaWQqIGRvbU9iamVjdCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIERPTU5vZGVN
YXBwaW5nKiBtX2RvbU5vZGVNYXA7CisgICAgICAgIERPTU5vZGVNYXBwaW5nKiBtX2FjdGl2ZURv
bU5vZGVNYXA7CiAgICAgICAgIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1fZG9tT2JqZWN0TWFwOwog
ICAgICAgICBET01XcmFwcGVyTWFwPHZvaWQ+KiBtX2FjdGl2ZURvbU9iamVjdE1hcDsKICNpZiBF
TkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkRE9NRGF0
YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY29w
ZWRET01EYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY29wZWRET01EYXRhU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIFNjb3BlZERPTURhdGFTdG9yZTo6U2NvcGVkRE9NRGF0YVN0b3JlKCkKICAgICA6
IERPTURhdGFTdG9yZSgpCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8
Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjayk7CisgICAgbV9hY3RpdmVEb21O
b2RlTWFwID0gbmV3IERPTVdyYXBwZXJNYXA8Tm9kZT4oJkRPTURhdGFTdG9yZTo6d2Vha05vZGVD
YWxsYmFjayk7CiAgICAgbV9kb21PYmplY3RNYXAgPSBuZXcgRE9NV3JhcHBlck1hcDx2b2lkPigm
RE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spOwogICAgIG1fYWN0aXZlRG9tT2Jq
ZWN0TWFwID0gbmV3IERPTVdyYXBwZXJNYXA8dm9pZD4oJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2
ZURPTU9iamVjdENhbGxiYWNrKTsKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNDcsNiArNDgsNyBAQCBT
Y29wZWRET01EYXRhU3RvcmU6OlNjb3BlZERPTURhdGFTdG9yZSgpCiBTY29wZWRET01EYXRhU3Rv
cmU6On5TY29wZWRET01EYXRhU3RvcmUoKQogewogICAgIGRlbGV0ZSBtX2RvbU5vZGVNYXA7Cisg
ICAgZGVsZXRlIG1fYWN0aXZlRG9tTm9kZU1hcDsKICAgICBkZWxldGUgbV9kb21PYmplY3RNYXA7
CiAgICAgZGVsZXRlIG1fYWN0aXZlRG9tT2JqZWN0TWFwOwogI2lmIEVOQUJMRShTVkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRpY0RPTURhdGFTdG9yZS5j
cHAJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1N0YXRp
Y0RPTURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogU3RhdGljRE9NRGF0YVN0b3JlOjpTdGF0aWNET01EYXRhU3RvcmUoKQog
ICAgIDogRE9NRGF0YVN0b3JlKCkKICAgICAsIG1fc3RhdGljRG9tTm9kZU1hcCgmRE9NRGF0YVN0
b3JlOjp3ZWFrTm9kZUNhbGxiYWNrKQorICAgICwgbV9zdGF0aWNBY3RpdmVEb21Ob2RlTWFwKCZE
T01EYXRhU3RvcmU6OndlYWtOb2RlQ2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0RvbU9iamVjdE1h
cCgmRE9NRGF0YVN0b3JlOjp3ZWFrRE9NT2JqZWN0Q2FsbGJhY2spCiAgICAgLCBtX3N0YXRpY0Fj
dGl2ZURvbU9iamVjdE1hcCgmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2FsbGJh
Y2spCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQ0LDYgKzQ1LDcgQEAgU3RhdGljRE9NRGF0YVN0b3Jl
OjpTdGF0aWNET01EYXRhU3RvcmUoKQogI2VuZGlmCiB7CiAgICAgbV9kb21Ob2RlTWFwID0gJm1f
c3RhdGljRG9tTm9kZU1hcDsKKyAgICBtX2FjdGl2ZURvbU5vZGVNYXAgPSAmbV9zdGF0aWNBY3Rp
dmVEb21Ob2RlTWFwOwogICAgIG1fZG9tT2JqZWN0TWFwID0gJm1fc3RhdGljRG9tT2JqZWN0TWFw
OwogICAgIG1fYWN0aXZlRG9tT2JqZWN0TWFwID0gJm1fc3RhdGljQWN0aXZlRG9tT2JqZWN0TWFw
OwogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TdGF0
aWNET01EYXRhU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TdGF0aWNET01EYXRhU3RvcmUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU3RhdGljRE9NRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEludHJ1c2l2ZURPTVdyYXBwZXJN
YXAgbV9zdGF0aWNEb21Ob2RlTWFwOworICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXAgbV9zdGF0
aWNBY3RpdmVEb21Ob2RlTWFwOwogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV9zdGF0aWNEb21P
YmplY3RNYXA7CiAgICAgRE9NV3JhcHBlck1hcDx2b2lkPiBtX3N0YXRpY0FjdGl2ZURvbU9iamVj
dE1hcDsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmNwcAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01NYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBET01Ob2Rl
TWFwcGluZyYgZ2V0RE9NTm9kZU1hcCgpCiAgICAgcmV0dXJuIGdldERPTURhdGFTdG9yZSgpLmRv
bU5vZGVNYXAoKTsKIH0KIAorRE9NTm9kZU1hcHBpbmcmIGdldEFjdGl2ZURPTU5vZGVNYXAoKQor
eworICAgIHJldHVybiBnZXRET01EYXRhU3RvcmUoKS5hY3RpdmVEb21Ob2RlTWFwKCk7Cit9CisK
IERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1hcCgpCiB7CiAgICAgcmV0dXJuIGdl
dERPTURhdGFTdG9yZSgpLmRvbU9iamVjdE1hcCgpOwpAQCAtOTQsNiArOTksOSBAQCB2b2lkIHJl
bW92ZUFsbERPTU9iamVjdHMoKQogICAgICAgICAvLyBSZW1vdmUgYWxsIERPTSBub2Rlcy4KICAg
ICAgICAgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwPE5vZGU+KCZzdG9yZSwg
c3RvcmUuZG9tTm9kZU1hcCgpKTsKIAorICAgICAgICAvLyBSZW1vdmUgYWxsIGFjdGl2ZSBET00g
bm9kZXMuCisgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxOb2Rl
Pigmc3RvcmUsIHN0b3JlLmFjdGl2ZURvbU5vZGVNYXAoKSk7CisKICNpZiBFTkFCTEUoU1ZHKQog
ICAgICAgICAvLyBSZW1vdmUgYWxsIFNWRyBlbGVtZW50IGluc3RhbmNlcyBpbiB0aGUgd3JhcHBl
ciBtYXAuCiAgICAgICAgIERPTURhdGE6OnJlbW92ZU9iamVjdHNGcm9tV3JhcHBlck1hcDxTVkdF
bGVtZW50SW5zdGFuY2U+KCZzdG9yZSwgc3RvcmUuZG9tU3ZnRWxlbWVudEluc3RhbmNlTWFwKCkp
OwpAQCAtMTE5LDYgKzEyNywxOCBAQCB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBlck1hcDxO
b2RlPjo6CiAgICAgfQogfQogCit2b2lkIHZpc2l0QWN0aXZlRE9NTm9kZXMoRE9NV3JhcHBlck1h
cDxOb2RlPjo6VmlzaXRvciogdmlzaXRvcikKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CisKKyAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3RvcmVzKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERP
TURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOworCisgICAgICAgIHN0b3JlLT5hY3RpdmVEb21O
b2RlTWFwKCkudmlzaXQoc3RvcmUsIHZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCB2aXNpdERP
TU9iamVjdHMoRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciogdmlzaXRvcikKIHsKICAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
TWFwLmgJKHJldmlzaW9uIDEwMDE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAvLyBBIG1hcCBmcm9tIERPTSBub2RlIHRvIGl0cyBKUyB3cmFwcGVyLgog
ICAgIERPTU5vZGVNYXBwaW5nJiBnZXRET01Ob2RlTWFwKCk7CisgICAgRE9NTm9kZU1hcHBpbmcm
IGdldEFjdGl2ZURPTU5vZGVNYXAoKTsKICAgICB2b2lkIHZpc2l0RE9NTm9kZXMoRE9NV3JhcHBl
ck1hcDxOb2RlPjo6VmlzaXRvciopOworICAgIHZvaWQgdmlzaXRBY3RpdmVET01Ob2RlcyhET01X
cmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKik7CiAKICAgICAvLyBBIG1hcCBmcm9tIGEgRE9NIG9i
amVjdCAobm9uLW5vZGUpIHRvIGl0cyBKUyB3cmFwcGVyLiBUaGlzIG1hcCBkb2VzIG5vdCBjb250
YWluIHRoZSBET00gb2JqZWN0cyB3aGljaCBjYW4gaGF2ZSBwZW5kaW5nIGFjdGl2aXR5IChhY3Rp
dmUgZG9tIG9iamVjdHMpLgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4mIGdldERPTU9iamVjdE1h
cCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
CShyZXZpc2lvbiAxMDAxODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5MiwxMCBAQCB2b2lkIFY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlCiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NTm9kZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKQogewogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVy
KSk7Ci0gICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKKyAgICBpZiAobm9k
ZS0+aXNBY3RpdmVOb2RlKCkpCisgICAgICAgIGdldEFjdGl2ZURPTU5vZGVNYXAoKS5zZXQobm9k
ZSwgd3JhcHBlcik7CisgICAgZWxzZQorICAgICAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUs
IHdyYXBwZXIpOwogfQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6Omdl
dENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IG9iamVjdFByb3RvdHlwZSkKQEAgLTI5NSw3ICsyOTgsOCBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4RE9NV3JhcHBlcjo6Z2V0CiAgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpOwogICAgICAgICByZXR1cm4gKndyYXBwZXI7CiAgICAgfQotICAgIERPTU5vZGVN
YXBwaW5nJiBkb21Ob2RlTWFwID0gY29udGV4dC0+d29ybGQoKS0+ZG9tRGF0YVN0b3JlKCktPmRv
bU5vZGVNYXAoKTsKKyAgICBET01EYXRhU3RvcmUqIHN0b3JlID0gY29udGV4dC0+d29ybGQoKS0+
ZG9tRGF0YVN0b3JlKCk7CisgICAgRE9NTm9kZU1hcHBpbmcmIGRvbU5vZGVNYXAgPSBub2RlLT5p
c0FjdGl2ZU5vZGUoKSA/IHN0b3JlLT5hY3RpdmVEb21Ob2RlTWFwKCkgOiBzdG9yZS0+ZG9tTm9k
ZU1hcCgpOwogICAgIHJldHVybiBkb21Ob2RlTWFwLmdldChub2RlKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTIgKzE0MywxMCBAQCBwdWJsaWM6CiAKICNlbmRpZiAv
LyBOREVCVUcKIAotY2xhc3MgR0NQcm9sb2d1ZVZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlck1h
cDx2b2lkPjo6VmlzaXRvciB7CitjbGFzcyBTcGVjaWFsQ2FzZVByb2xvZ3VlT2JqZWN0SGFuZGxl
ciB7CiBwdWJsaWM6Ci0gICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9y
ZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAg
IHN0YXRpYyBib29sIHByb2Nlc3Modm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyLCBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvKQogICAgIHsKLSAgICAgICAg
V3JhcHBlclR5cGVJbmZvKiB0eXBlSW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUo
d3JhcHBlcik7ICAKLQogICAgICAgICAvLyBBZGRpdGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2Ug
cG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBwb3J0cyBhbHNvCiAgICAgICAgIC8vIGhhdmUg
dGhlaXIgd3JhcHBlcnMgZW50YW5nbGVkLiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIGhhbmRsZWQg
d2hlbiB0aGUKICAgICAgICAgLy8gcG9ydHMgYXJlIGFjdHVhbGx5IGVudGFuZ2xlZCBpbiBNZXNz
YWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9pZApAQCAtMTYxLDcgKzE1OSwzMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdl
UG9ydCo+KG9iamVjdCk7CiAgICAgICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5nbGVkKCkgfHwg
cG9ydDEtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIuQ2xl
YXJXZWFrKCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworY2xhc3MgU3BlY2lh
bENhc2VQcm9sb2d1ZU5vZGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBwcm9j
ZXNzKE5vZGUqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgV3Jh
cHBlclR5cGVJbmZvKiB0eXBlSW5mbykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShvYmpl
Y3QpOworICAgICAgICBVTlVTRURfUEFSQU0od3JhcHBlcik7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0eXBlSW5mbyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgorY2xhc3MgR0NQcm9sb2d1ZVZpc2l0b3IgOiBwdWJs
aWMgRE9NV3JhcHBlck1hcDxUPjo6VmlzaXRvciB7CitwdWJsaWM6CisgICAgdm9pZCB2aXNpdERP
TVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBl
SW5mbyA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7ICAKKworICAgICAg
ICBpZiAoIVM6OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsKICAgICAgICAg
ICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZl
RE9NT2JqZWN0KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBh
Y3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQogICAgICAgICAgICAgICAgIHdy
YXBwZXIuQ2xlYXJXZWFrKCk7CkBAIC0zNzMsMTIgKzM5NSwxNSBAQCB2b2lkIFY4R0NDb250cm9s
bGVyOjpnY1Byb2xvZ3VlKCkKIAogICAgIC8vIFJ1biB0aHJvdWdoIGFsbCBvYmplY3RzIHdpdGgg
cG9zc2libGUgcGVuZGluZyBhY3Rpdml0eSBtYWtpbmcgdGhlaXIKICAgICAvLyB3cmFwcGVycyBu
b24gd2VhayBpZiB0aGVyZSBpcyBwZW5kaW5nIGFjdGl2aXR5LgotICAgIEdDUHJvbG9ndWVWaXNp
dG9yIHByb2xvZ3VlVmlzaXRvcjsKLSAgICB2aXNpdEFjdGl2ZURPTU9iamVjdHMoJnByb2xvZ3Vl
VmlzaXRvcik7CisgICAgR0NQcm9sb2d1ZVZpc2l0b3I8dm9pZCwgU3BlY2lhbENhc2VQcm9sb2d1
ZU9iamVjdEhhbmRsZXI+IHByb2xvZ3VlT2JqZWN0VmlzaXRvcjsKKyAgICB2aXNpdEFjdGl2ZURP
TU9iamVjdHMoJnByb2xvZ3VlT2JqZWN0VmlzaXRvcik7CisgICAgR0NQcm9sb2d1ZVZpc2l0b3I8
Tm9kZSwgU3BlY2lhbENhc2VQcm9sb2d1ZU5vZGVIYW5kbGVyPiBwcm9sb2d1ZU5vZGVWaXNpdG9y
OworICAgIHZpc2l0QWN0aXZlRE9NTm9kZXMoJnByb2xvZ3VlTm9kZVZpc2l0b3IpOwogCiAgICAg
Ly8gQ3JlYXRlIG9iamVjdCBncm91cHMuCiAgICAgR3JvdXBlclZpc2l0b3IgZ3JvdXBlclZpc2l0
b3I7CiAgICAgdmlzaXRET01Ob2RlcygmZ3JvdXBlclZpc2l0b3IpOworICAgIHZpc2l0QWN0aXZl
RE9NTm9kZXMoJmdyb3VwZXJWaXNpdG9yKTsKICAgICB2aXNpdERPTU9iamVjdHMoJmdyb3VwZXJW
aXNpdG9yKTsKICAgICBncm91cGVyVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7CiAKQEAgLTM4Nywx
MSArNDEyLDEwIEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUoKQogICAgIGRhdGEt
PnN0cmluZ0NhY2hlKCktPmNsZWFyT25HQygpOwogfQogCi1jbGFzcyBHQ0VwaWxvZ3VlVmlzaXRv
ciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsKK2NsYXNzIFNwZWNpYWxD
YXNlRXBpbG9ndWVPYmplY3RIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIHZpc2l0RE9NV3Jh
cHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgc3RhdGljIGJvb2wgcHJvY2Vzcyh2b2lkKiBvYmplY3Qs
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlw
ZUluZm8pCiAgICAgewotICAgICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGVJbmZvID0gVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgaWYgKFY4TWVzc2FnZVBv
cnQ6OmluZm8uZXF1YWxzKHR5cGVJbmZvKSkgewogICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBv
cnQxID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmplY3QpOwogICAgICAgICAgICAgLy8g
V2UgbWFya2VkIHRoaXMgcG9ydCBhcyByZWFjaGFibGUgaW4gR0NQcm9sb2d1ZVZpc2l0b3IuICBV
bmRvIHRoaXMgbm93IHNpbmNlIHRoZQpAQCAtMzk5LDcgKzQyMywzMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAvLyBHQ1Byb2xvZ3VlVmlzaXRvciBleHBlY3RzIHRvIHNlZSBhbGwgaGFuZGxlcyBt
YXJrZWQgYXMgd2VhaykuCiAgICAgICAgICAgICBpZiAoKCF3cmFwcGVyLklzV2VhaygpICYmICF3
cmFwcGVyLklzTmVhckRlYXRoKCkpIHx8IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKICAg
ICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKHBvcnQxLCAmRE9NRGF0YVN0b3JlOjp3ZWFr
QWN0aXZlRE9NT2JqZWN0Q2FsbGJhY2spOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307
CisKK2NsYXNzIFNwZWNpYWxDYXNlRXBpbG9ndWVOb2RlSGFuZGxlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgcHJvY2VzcyhOb2RlKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIsIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8pCisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHdyYXBwZXIpOworICAg
ICAgICBVTlVTRURfUEFSQU0odHlwZUluZm8pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUywgdjg6OldlYWtSZWZlcmVu
Y2VDYWxsYmFjayBjYWxsYmFjaz4KK2NsYXNzIEdDRXBpbG9ndWVWaXNpdG9yIDogcHVibGljIERP
TVdyYXBwZXJNYXA8VD46OlZpc2l0b3IgeworcHVibGljOgorICAgIHZvaWQgdmlzaXRET01XcmFw
cGVyKERPTURhdGFTdG9yZSogc3RvcmUsIFQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKKyAgICB7CisgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8g
PSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOworICAgICAgICBpZiAoIVM6
OnByb2Nlc3Mob2JqZWN0LCB3cmFwcGVyLCB0eXBlSW5mbykpIHsKICAgICAgICAgICAgIEFjdGl2
ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZlRE9NT2JqZWN0
KHdyYXBwZXIpOwogICAgICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01P
YmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCF3
cmFwcGVyLklzV2VhaygpKTsKQEAgLTQwOCw3ICs0NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgLy8gbWF5IGJlIGEgZGlmZmVyZW50IHBvaW50ZXIgKGluIGNhc2UgQWN0aXZlRE9NT2Jq
ZWN0IGlzIG5vdAogICAgICAgICAgICAgICAgIC8vIHRoZSBtYWluIGJhc2UgY2xhc3Mgb2YgdGhl
IG9iamVjdCdzIGNsYXNzKSBhbmQgcG9pbnRlcgogICAgICAgICAgICAgICAgIC8vIGlkZW50aXR5
IGlzIHJlcXVpcmVkIGJ5IERPTSBtYXAgZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgIHdyYXBw
ZXIuTWFrZVdlYWsob2JqZWN0LCAmRE9NRGF0YVN0b3JlOjp3ZWFrQWN0aXZlRE9NT2JqZWN0Q2Fs
bGJhY2spOworICAgICAgICAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqZWN0LCBjYWxsYmFj
ayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00NDQsOCArNDkxLDEwIEBA
IHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjRXBpbG9ndWUoKQogCiAgICAgLy8gUnVuIHRocm91Z2gg
YWxsIG9iamVjdHMgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IG1ha2luZyB0aGVpciB3cmFwcGVycyB3
ZWFrCiAgICAgLy8gYWdhaW4uCi0gICAgR0NFcGlsb2d1ZVZpc2l0b3IgZXBpbG9ndWVWaXNpdG9y
OwotICAgIHZpc2l0QWN0aXZlRE9NT2JqZWN0cygmZXBpbG9ndWVWaXNpdG9yKTsKKyAgICBHQ0Vw
aWxvZ3VlVmlzaXRvcjx2b2lkLCBTcGVjaWFsQ2FzZUVwaWxvZ3VlT2JqZWN0SGFuZGxlciwgJkRP
TURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrPiBlcGlsb2d1ZU9iamVjdFZp
c2l0b3I7CisgICAgdmlzaXRBY3RpdmVET01PYmplY3RzKCZlcGlsb2d1ZU9iamVjdFZpc2l0b3Ip
OworICAgIEdDRXBpbG9ndWVWaXNpdG9yPE5vZGUsIFNwZWNpYWxDYXNlRXBpbG9ndWVOb2RlSGFu
ZGxlciwgJkRPTURhdGFTdG9yZTo6d2Vha05vZGVDYWxsYmFjaz4gZXBpbG9ndWVOb2RlVmlzaXRv
cjsKKyAgICB2aXNpdEFjdGl2ZURPTU5vZGVzKCZlcGlsb2d1ZU5vZGVWaXNpdG9yKTsKIAogICAg
IHdvcmtpbmdTZXRFc3RpbWF0ZU1CID0gZ2V0QWN0dWFsTWVtb3J5VXNhZ2VJbk1CKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICBOb2RlKiBsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogICAgIE5vZGUqIGZpcnN0RGVzY2VuZGFu
dCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlTm9kZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9N
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24g
MTAwMTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxheWluZygpIHx8IEhUTUxNZWRp
YUVsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmVOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcml2YXRlOgogICAgIEhUTUxB
dWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEwMDE4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTExLTEwICBFdWdlbmUgTmFsaW1vdiAgPGVuYWxAZ29v
Z2xlLmNvbT4KKworICAgICAgICBFdmVudCBsaXN0ZW5lciBmb3IgYWN0aXZlIERPTSBvYmplY3Qg
dGhhdCBpcyBhbHNvIERPTSBub2RlIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZCBwcmVtYXR1cmVs
eS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIx
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL2F1ZGlv
LWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2F1
ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMS0xNCAgSnVsaWVuIENo
YWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5k
ZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9hdWRp
by1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2Ug
Y29sbGVjdCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBvciBldmVudCBsaXN0ZW5lci4KKworQWNjb3Jk
aW5nIHRvIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsCisiNC44LjEwLjggUGxheWluZyB0aGUg
bWVkaWEgcmVzb3VyY2UiLAorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBq
dXN0IGJlY2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlIGJlZW4gcmVtb3ZlZDsgb25s
eSBvbmNlIGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5vIGZ1cnRoZXIgYXVk
aW8gY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50IG1heSB0aGUgZWxlbWVudCBi
ZSBnYXJiYWdlIGNvbGxlY3RlZC4iCisKKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2ODc4LCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzA0MjEsIGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZvciBtb3JlIGRldGFpbHMpLgor
CitQQVNTCisKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xs
ZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdl
LWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIEhU
TUw+CisKKzxodG1sPgorPGJvZHk+CisKKzxwPlRlc3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFnZSBj
b2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxpc3RlbmVyLjwvcD4KKzxwPkFj
Y29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5odG1sLDxiciAvPgorIjQuOC4xMC44IFBs
YXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiw8YnIgLz4KKyJNZWRpYSBlbGVtZW50cyBtdXN0IG5v
dCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0gaGF2ZQor
YmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGluIGEgc3RhdGUgd2hl
cmUgbm8gZnVydGhlciBhdWRpbworY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50
IG1heSB0aGUgZWxlbWVudCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4iPGJyIC8+PGJyIC8+Cisoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCwgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDIxLCBhbmQgaHR0cDovL2NyYnVnLmNv
bS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS48L3A+Cis8cCBpZD0icmVzdWx0Ij4KK0ZBSUw6IFRl
c3QgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVtYXR1cmVseS4KKzwvcD4KKwor
PHNjcmlwdCBzcmM9Li4vcmVzb3VyY2VzL2djLmpzPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9bWVk
aWEtZmlsZS5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPXZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBudW1fcGxheWVycyA9IDQ7
Cit2YXIgcGxheV90aW1lcyA9IDU7CisKK2Z1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0gIlBBU1MiOworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgdmFy
IG51bV9wbGF5ZWQgPSAwOworICAgIHZhciBhdWRpb0ZpbGUgPSBmaW5kTWVkaWFGaWxlKCJhdWRp
byIsICJjb250ZW50L3NpbGVuY2UiKTsKKyAgICB2YXIgYSA9IG5ldyBBdWRpbyhhdWRpb0ZpbGUp
OworICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
bnVtX3BsYXllZCArKzsKKyAgICAgICAgaWYgKG51bV9wbGF5ZWQgPCBwbGF5X3RpbWVzKSB7Cisg
ICAgICAgICAgICBhLmN1cnJlbnRUaW1lID0gYS5kdXJhdGlvbiAtIDAuMzU7CisgICAgICAgICAg
ICBhLnBsYXkoKTsKKyAgICAgICAgICAgIGlmIChudW1fcGxheWVkID09IHBsYXlfdGltZXMgLSAx
KSB7CisgICAgICAgICAgICAgICAgYSA9IG51bGw7CisgICAgICAgICAgICAgICAgZ2MoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG51bV9wbGF5ZXJzIC0t
OworICAgICAgICAgICAgaWYgKG51bV9wbGF5ZXJzID09IDApCisgICAgICAgICAgICAgICAgc3Rh
cnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmaW5pc2goKTsKKyAgICAg
ICAgfQorICAgIH0pOworICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgYS5jdXJyZW50VGltZSA9IGEuZHVyYXRpb24gLSAwLjM1Owor
ICAgICAgICBhLnBsYXkoKTsKKyAgICB9KTsKK30KKworc3RhcnQoKTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>