<?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>73853</bug_id>
          
          <creation_ts>2011-12-05 12:27:11 -0800</creation_ts>
          <short_desc>Inserting nodes is slow due to Node::notifyNodeListsAttributeChanged (20%+)</short_desc>
          <delta_ts>2012-11-07 20:02:26 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73737</dependson>
    
    <dependson>73961</dependson>
    
    <dependson>73969</dependson>
    
    <dependson>74692</dependson>
    
    <dependson>75600</dependson>
    
    <dependson>89036</dependson>
    
    <dependson>89730</dependson>
    
    <dependson>89841</dependson>
    
    <dependson>100057</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>catfish.man</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dslomov</cc>
    
    <cc>esprehn</cc>
    
    <cc>haraken</cc>
    
    <cc>kbr</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>sam</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>515288</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-05 12:27:11 -0800</bug_when>
    <thetext>I&apos;ve done more profiling on Shark, and it appears that we&apos;re spending 20%+ of the time inside Node::notifyNodeListsAttributeChanged.

We should use some heuristics to speed up common cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515293</commentid>
    <comment_count>1</comment_count>
      <attachid>117915</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-05 12:28:59 -0800</bug_when>
    <thetext>Created attachment 117915
perf test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515301</commentid>
    <comment_count>2</comment_count>
      <attachid>117919</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-05 12:34:44 -0800</bug_when>
    <thetext>Created attachment 117919
profile result

20.7%   20.7%   WebCore    WebCore::Node::notifyNodeListsAttributeChanged()
0.0%    20.6%   WebCore      WebCore::Node::dispatchSubtreeModifiedEvent()
0.0%    0.1%    WebCore      WebCore::ContainerNode::insertBefore(WTF::PassRefPtr&lt;WebCore::Node&gt;, WebCore::Node*, int&amp;, bool)
0.0%    0.0%    WebCore      WebCore::ContainerNode::appendChild(WTF::PassRefPtr&lt;WebCore::Node&gt;, int&amp;, bool)
3.3%    3.3%    WebCore    WebCore::QualifiedName::init(WTF::AtomicString const&amp;, WTF::AtomicString const&amp;, WTF::AtomicString const&amp;)
3.3%    3.3%    WebCore    WebCore::JSNodeOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void*, JSC::SlotVisitor&amp;)
2.8%    2.8%    WebCore    WebCore::JSNodeOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt;, void*)
2.8%    2.8%    WebCore    WebCore::createHTMLSpanElementWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)
2.6%    2.6%    JavaScriptCore WTF::AtomicString::addSlowCase(WTF::StringImpl*)
2.0%    2.0%    WebCore    WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt; (*)(WebCore::QualifiedName const&amp;, WebCore::Document*, WebCore::HTMLFormElement*, bool), WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::PassRefPtr&lt;WebCore::HTMLElement&gt; (*)(WebCore::QualifiedName const&amp;, WebCore::Document*, WebCore::HTMLFormElement*, bool)&gt; &gt;::get(WTF::AtomicStringImpl* const&amp;) const
1.9%    1.9%    WebCore    WTF::HashMap&lt;WTF::AtomicStringImpl*, WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;), WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)&gt; &gt;::get(WTF::AtomicStringImpl* const&amp;) const
1.8%    1.8%    WebCore    WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515487</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-05 16:20:29 -0800</bug_when>
    <thetext>If this is the call to notifyNodeListsAttributeChanged() from Node::dispatchSubtreeModifiedEvent() (and I think it probably is) there is this comment:

    notifyNodeListsAttributeChanged(); // FIXME: Can do better some day. Really only care about the name attribute changing.

Not sure if that is still true, but it is telling.

The most obvious optimization that comes to mind is keeping a bit on the Document noting if there are any NodeLists that need to be invalidated (like we do with certain event listeners).  The effectiveness of that optimization would be dependent on how many pages use NamedNodeLists and/or ClassNodeList.

A better approach is probably to look at the callers to dispatchSubtreeModifiedEvent(), and see how many of them know that these caches don&apos;t need to be invalidated.  The one in CharacterData, for instance, probably knows that those node lists can&apos;t have changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515494</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-05 16:35:27 -0800</bug_when>
    <thetext>Thanks for the comment, Sam!

(In reply to comment #3)
&gt;     notifyNodeListsAttributeChanged(); // FIXME: Can do better some day. Really only care about the name attribute changing.
&gt; 
&gt; Not sure if that is still true, but it is telling.

Yes. This is exactly the issue. We&apos;re walking up the tree (ancestors) per every node insertion and removal.

&gt; The most obvious optimization that comes to mind is keeping a bit on the Document noting if there are any NodeLists that need to be invalidated (like we do with certain event listeners).  The effectiveness of that optimization would be dependent on how many pages use NamedNodeLists and/or ClassNodeList.

We already do this (m_numNodeListCaches in TreeScope) but turned out be not so useful because almost every single web page uses querySelector/getElementById, etc...

&gt; A better approach is probably to look at the callers to dispatchSubtreeModifiedEvent(), and see how many of them know that these caches don&apos;t need to be invalidated.  The one in CharacterData, for instance, probably knows that those node lists can&apos;t have changed.

That&apos;s a good point. I hadn&apos;t thought about this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515666</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-05 22:58:38 -0800</bug_when>
    <thetext>See also: bug 70810. This code really needs attention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516133</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 12:07:40 -0800</bug_when>
    <thetext>I took some statistics on what kind of node lists are used in wild (again, gmail, facebook, twitter, wordpress.com, etc...):

names: 3
0: 98.559%
4: 1.269%
2: 0.172%

classes: 3
0: 75.054%
1: 8.839%
2: 8.581%
10: 2.602%
200: 1.484%
4: 1.054%
6: 0.946%
100: 0.430%
3: 0.323%
9: 0.280%

labels: 3
0: 100.000%

childs: 3
0: 44.581%
10: 10.129%
2: 7.699%
1: 6.839%
4: 5.570%
30: 5.312%
20: 2.946%
3: 2.387%
300: 1.849%
6: 1.656%

tags: 3
4: 22.258%
0: 17.806%
10: 9.892%
6: 7.054%
20: 6.215%
40: 5.849%
30: 3.376%
7: 3.204%
3: 2.989%
5: 2.946%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516135</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 12:08:09 -0800</bug_when>
    <thetext>The sample size was 4650.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516138</commentid>
    <comment_count>8</comment_count>
      <attachid>118087</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 12:16:50 -0800</bug_when>
    <thetext>Created attachment 118087
diff I used to collect the stat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516272</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-06 14:49:46 -0800</bug_when>
    <thetext>Can you explain what those numbers mean.  I am a bit confused by them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516275</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 14:56:05 -0800</bug_when>
    <thetext>I have a hypothesis that we can just invalidate all caches whenever DOM mutation happens. In this world, each document will have a hashmap from node -&gt; node list (probably excluding childnodes), and we&apos;ll remove all caches whenever a DOM mutation happens.

I&apos;ve collected 191220 samples while browsing websites like Gmail, Google+, Twitter, Facebook, etc...

total:  191220
hits: 185772 (97.151%)
misses: 3559 (1.861%)
hits that will be missed under this approach: 1889 (0.988%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516277</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 14:57:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Can you explain what those numbers mean.  I am a bit confused by them.

Oh sorry I guess I wasn&apos;t clear about this. These are numbers of instances that were alive at a time of DOM mutation (when dispatchChildInsertionEvents is called) and the percentage next to it shows the frequency of the number of alive objects for each type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516285</commentid>
    <comment_count>12</comment_count>
      <attachid>118119</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 15:14:48 -0800</bug_when>
    <thetext>Created attachment 118119
updated stat collecting diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516289</commentid>
    <comment_count>13</comment_count>
      <attachid>118121</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 15:19:34 -0800</bug_when>
    <thetext>Created attachment 118121
Raw data for hit rate in DynamicNodeList::item (_ for misses, | for hits, and + for hits that will be missed in my proposal)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516305</commentid>
    <comment_count>14</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-12-06 15:31:45 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I have a hypothesis that we can just invalidate all caches whenever DOM mutation happens. In this world, each document will have a hashmap from node -&gt; node list (probably excluding childnodes), and we&apos;ll remove all caches whenever a DOM mutation happens.
&gt; 
&gt; I&apos;ve collected 191220 samples while browsing websites like Gmail, Google+, Twitter, Facebook, etc...
&gt; 
&gt; total:  191220
&gt; hits: 185772 (97.151%)
&gt; misses: 3559 (1.861%)
&gt; hits that will be missed under this approach: 1889 (0.988%)

Does this exclude childNodes nodelists?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516307</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 15:33:58 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #10)
&gt; &gt; I have a hypothesis that we can just invalidate all caches whenever DOM mutation happens. In this world, each document will have a hashmap from node -&gt; node list (probably excluding childnodes), and we&apos;ll remove all caches whenever a DOM mutation happens.
&gt; &gt; 
&gt; &gt; I&apos;ve collected 191220 samples while browsing websites like Gmail, Google+, Twitter, Facebook, etc...
&gt; &gt; 
&gt; &gt; total:  191220
&gt; &gt; hits: 185772 (97.151%)
&gt; &gt; misses: 3559 (1.861%)
&gt; &gt; hits that will be missed under this approach: 1889 (0.988%)
&gt; 
&gt; Does this exclude childNodes nodelists?

Yes. ChildNodeList::item overrides DynamicNodeList&apos;s item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523339</commentid>
    <comment_count>16</comment_count>
      <attachid>119733</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-17 11:55:54 -0800</bug_when>
    <thetext>Created attachment 119733
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524111</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-19 12:23:49 -0800</bug_when>
    <thetext>Good and bad news everyone:

The good news is that my patch have successfully eliminated invalidateCaches from the profiler. The bad news is that new profile result indicates our hashmap/hashset may not be as efficient as it should be. In fact, we seem to spend 30-50% of time in hashmap/hashset at the moment. And the time we spend in them increase linearly with respect to the number of nodes inserted.

New profile result:
	4.5%	238	WebCore	WebCore::createHTMLSpanElementWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)
	0.0%	237	WebCore	 WebCore::createJSHTMLWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)
	0.0%	237	WebCore	  WebCore::toJSNewlyCreated(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Element*)
	0.0%	237	WebCore	   WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
	0.0%	237	Unknown Library	    0x239a85c01538 [unknown]
	0.0%	1	WebCore	 WebCore::toJSNewlyCreated(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Element*)
	4.0%	213	WebCore	WebCore::JSNodeOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt;, void*)
	0.0%	213	JavaScriptCore	 JSC::HandleHeap::finalizeWeakHandles()
	0.0%	4	WebProcess	  0xbea [unreadable]
	4.0%	212	WebCore	WebCore::QualifiedName::init(WTF::AtomicString const&amp;, WTF::AtomicString const&amp;, WTF::AtomicString const&amp;)
	0.0%	207	WebCore	 WebCore::HTMLDocument::createElement(WTF::AtomicString const&amp;, int&amp;)
	0.0%	207	WebCore	  WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
	0.0%	207	Unknown Library	   0x239a85c01538 [unknown]
	0.0%	5	WebCore	 WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
	3.1%	166	JavaScriptCore	WTF::AtomicString::addSlowCase(WTF::StringImpl*)
	0.0%	153	Unknown Library	 0x1140469f8 [unknown]
	0.0%	8	Unknown Library	 0x239a85c01538 [unknown]
	0.0%	3	WebCore	 WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
	0.0%	1	WebCore	 WebCore::HTMLDocument::createElement(WTF::AtomicString const&amp;, int&amp;)
	0.0%	1	Unknown Library	 0x1140469d0 [unknown]
	3.1%	164	WebCore	WebCore::JSNodeOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void*, JSC::SlotVisitor&amp;)
	0.0%	161	JavaScriptCore	 JSC::HandleHeap::visitWeakHandles(JSC::HeapRootVisitor&amp;)
	0.0%	3	WebProcess	 0x1000000 [unreadable]
	2.3%	124	WebCore	WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
	2.1%	114	JavaScriptCore	WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe()
	2.0%	106	WebCore	WebCore::TreeScope::clearNodeListCaches(WebCore::DynamicSubtreeNodeListType)
	0.0%	83	WebCore	 WebCore::TreeScope::clearNodeListCachesForAllTypes()
	0.0%	23	WebCore	 WebCore::Element::childrenChanged(bool, WebCore::Node*, WebCore::Node*, int)
	1.9%	102	WebCore	WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt; (*)(WebCore::QualifiedName const&amp;, WebCore::Document*, WebCore::HTMLFormElement*, bool), WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::PassRefPtr&lt;WebCore::HTMLElement&gt; (*)(WebCore::QualifiedName const&amp;, WebCore::Document*, WebCore::HTMLFormElement*, bool)&gt; &gt;::get(WTF::AtomicStringImpl* const&amp;) const
	1.9%	102	WebCore	WebCore::ContainerNode::insertBefore(WTF::PassRefPtr&lt;WebCore::Node&gt;, WebCore::Node*, int&amp;, bool)
	0.0%	99	WebCore	 WebCore::Node::insertBefore(WTF::PassRefPtr&lt;WebCore::Node&gt;, WebCore::Node*, int&amp;, bool)
	0.0%	99	WebCore	  WebCore::JSNode::insertBefore(JSC::ExecState*)
	0.0%	99	WebCore	   WebCore::jsNodePrototypeFunctionInsertBefore(JSC::ExecState*)
	0.0%	3	WebCore	 WebCore::JSNode::insertBefore(JSC::ExecState*)
	1.9%	99	JavaScriptCore	WTF::StringImpl::lower()
	1.9%	99	WebCore	WTF::HashMap&lt;JSC::ClassInfo const*, JSC::WriteBarrier&lt;JSC::Structure&gt;, WTF::PtrHash&lt;JSC::ClassInfo const*&gt;, WTF::HashTraits&lt;JSC::ClassInfo const*&gt;, WTF::HashTraits&lt;JSC::WriteBarrier&lt;JSC::Structure&gt; &gt; &gt;::get(JSC::ClassInfo const* const&amp;) const
	1.7%	93	WebCore	WebCore::ContainerNode::appendChild(WTF::PassRefPtr&lt;WebCore::Node&gt;, int&amp;, bool)
	1.7%	89	WebCore	void WebCore::Private::addChildNodesToDeletionQueue&lt;WebCore::Node, WebCore::ContainerNode&gt;(WebCore::Node*&amp;, WebCore::Node*&amp;, WebCore::ContainerNode*)
	1.7%	88	WebCore	WebCore::HTMLDocument::createElement(WTF::AtomicString const&amp;, int&amp;)
	1.6%	87	JavaScriptCore	WTF::fastMalloc(unsigned long)
	1.4%	75	WebCore	WebCore::notifyChildInserted(WebCore::Node*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524684</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 10:51:31 -0800</bug_when>
    <thetext>Here are some performance test results on r103144:

PerformanceTests/Parser/xml-parser.html (2% improvement)
Without patch:
avg 1969.4
median 1953.5
stdev 25.63669245437094
min 1941
max 2002

With patch:
avg 1935.4
median 1921
stdev 26.115895542753268
min 1903
max 1969

PerformanceTests/Parser/tiny-innerHTML.html (5% improvement)
Without patch:
avg 2284.15
median 2281.5
stdev 15.919406395968412
min 2257
max 2321

With patch:
avg 2172.5
median 2170
stdev 13.966030216206752
min 2155
max 2215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524693</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-20 11:09:01 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; The bad news is that new profile result indicates our hashmap/hashset may not be as efficient as it should be. In fact, we seem to spend 30-50% of time in hashmap/hashset at the moment. And the time we spend in them increase linearly with respect to the number of nodes inserted.

I’m not sure what performance you are expecting from the HashMap. I believe that reading from it should be somewhere between O(1) and O(log n). Thus reading from it n times should be between O(n) and O(n log n). So if you are saying that time in the HashMap function is linear, that’s exactly what’s expected: O(n).

We can achieve further speed by making a data structure that’s more specialized than a hash table for the operation in question. For example, for the HTML element factory, if we know the frequency of various types of tags, we can do a linear search in an array that is sorted by frequency instead of the hash map or as a first pass before falling back on it.

I find all that time spent in StringImpl::lower() alarming. And I’m quite interested in the WTF::AtomicString::addSlowCase time as well. There’s a lot of juicy interesting things that could possibly be sped up here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524703</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 11:24:14 -0800</bug_when>
    <thetext>Unfortunately, there appears to be 3% regression in PerformanceTests/Parser/html-parser.html

Without patch:
avg 21238.6
median 21242.5
stdev 42.886361468420226
min 21168
max 21322

With patch:
avg 21714.15
median 21710.5
stdev 61.88317622746912
min 21614
max 21847

However, profile result doesn&apos;t tell us why this regression had happened. The regression doesn&apos;t appear to be a test flake given I&apos;ve tried a couple of times and got a similar result.

Here&apos;s profile result:

5.5%	5.5%	WebCore	WebCore::HTMLTokenizer::nextToken(WebCore::SegmentedString&amp;, WebCore::HTMLToken&amp;)
3.0%	3.0%	WebCore	WebCore::CSSStyleSelector::matchRulesForList(WTF::Vector&lt;WebCore::RuleData, 0ul&gt; const*, int&amp;, int&amp;, bool)
1.9%	1.9%	JavaScriptCore	WTF::fastFree(void*)
1.8%	1.8%	JavaScriptCore	WTF::fastMalloc(unsigned long)
1.4%	1.4%	WebCore	WebCore::CSSStyleSelector::applyProperty(int, WebCore::CSSValue*)
1.3%	1.3%	WebCore	void WebCore::Private::addChildNodesToDeletionQueue&lt;WebCore::Node, WebCore::ContainerNode&gt;(WebCore::Node*&amp;, WebCore::Node*&amp;, WebCore::ContainerNode*)
1.3%	1.3%	WebCore	WebCore::MarkupTokenizerBase&lt;WebCore::HTMLToken, WebCore::HTMLTokenizerState&gt;::InputStreamPreprocessor::advance(WebCore::SegmentedString&amp;, int&amp;)
1.2%	1.2%	WebCore	void WebCore::removeAllChildrenInContainer&lt;WebCore::Node, WebCore::ContainerNode&gt;(WebCore::ContainerNode*)
1.1%	1.1%	JavaScriptCore	WTF::AtomicString::add(unsigned short const*, unsigned int)
1.1%	1.1%	JavaScriptCore	WTF::AtomicString::addSlowCase(WTF::StringImpl*)
1.1%	1.1%	WebCore	WebCore::SelectorChecker::checkOneSelector(WebCore::CSSSelector*, WebCore::Element*, WebCore::PseudoId&amp;, bool, WebCore::SelectorChecker::VisitedMatchType, WebCore::RenderStyle*, WebCore::RenderStyle*) const
0.9%	0.9%	WebCore	WebCore::visitedLinkHash(WebCore::KURL const&amp;, WTF::AtomicString const&amp;)
0.9%	0.9%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe()
0.9%	0.9%	WebCore	WebCore::HTMLTreeBuilder::processStartTagForInBody(WebCore::AtomicHTMLToken&amp;)
0.9%	0.9%	WebCore	WebCore::CSSStyleSelector::adjustRenderStyle(WebCore::RenderStyle*, WebCore::RenderStyle*, WebCore::Element*)
0.7%	0.7%	WebCore	WTF::HashMap&lt;WebCore::RenderBoxModelObject const*, WebCore::RenderBoxModelObject*, WTF::PtrHash&lt;WebCore::RenderBoxModelObject const*&gt;, WTF::HashTraits&lt;WebCore::RenderBoxModelObject const*&gt;, WTF::HashTraits&lt;WebCore::RenderBoxModelObject*&gt; &gt;::get(WebCore::RenderBoxModelObject const* const&amp;) const
0.7%	0.7%	WebCore	WebCore::HTMLConstructionSite::insertTextNode(WTF::String const&amp;, WebCore::WhitespaceMode)
0.7%	0.7%	libSystem.B.dylib	__memcpy
0.7%	0.7%	WebCore	WebCore::CSSStyleSelector::styleForElement(WebCore::Element*, WebCore::RenderStyle*, bool, bool, WebCore::RenderRegion*)
0.7%	0.7%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::RemoveRange(void**, void**, int*)
0.7%	0.7%	WebCore	WebCore::SelectorChecker::fastCheckSelector(WebCore::CSSSelector const*, WebCore::Element const*) const
0.7%	0.7%	WebCore	WebCore::SegmentedString::operator=(WebCore::SegmentedString const&amp;)
0.6%	0.6%	JavaScriptCore	WTF::TCMalloc_Central_FreeList::ReleaseListToSpans(void*)
0.6%	0.6%	WebCore	WebCore::RenderObject::RenderObject(WebCore::Node*)
0.6%	0.6%	WebCore	void WebCore::CSSStyleSelector::applyDeclaration&lt;true&gt;(WebCore::CSSMutableStyleDeclaration*, bool, bool)
0.6%	0.6%	WebCore	WebCore::CSSStyleSelector::matchRules(WebCore::RuleSet*, int&amp;, int&amp;, bool)
0.6%	0.6%	WebCore	WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;::get(WTF::AtomicStringImpl* const&amp;) const
0.6%	0.6%	WebCore	WebCore::ContainerNode::detach()
0.6%	0.6%	libSystem.B.dylib	pthread_getspecific
0.6%	0.6%	WebCore	WebCore::QualifiedName::init(WTF::AtomicString const&amp;, WTF::AtomicString const&amp;, WTF::AtomicString const&amp;)
0.6%	0.6%	WebCore	WebCore::AtomicHTMLToken::AtomicHTMLToken(WebCore::HTMLToken&amp;)
0.5%	0.5%	WebCore	WebCore::RenderObjectChildList::appendChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool)
0.5%	0.5%	WebCore	WebCore::Text::~Text()
0.5%	0.5%	WebCore	WebCore::HTMLSourceTracker::start(WebCore::HTMLInputStream const&amp;, WebCore::HTMLToken&amp;)
0.5%	0.5%	WebCore	WebCore::Element::setAttributeMap(WTF::PassRefPtr&lt;WebCore::NamedNodeMap&gt;, WebCore::FragmentScriptingPermission)
0.5%	0.5%	WebCore	WebCore::mergeDoubleSlashes(WTF::Vector&lt;unsigned short, 512ul&gt;&amp;, unsigned long)
0.5%	0.5%	WebCore	WebCore::RenderObject::setStyle(WTF::PassRefPtr&lt;WebCore::RenderStyle&gt;)
0.5%	0.5%	WebCore	WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;)
0.5%	0.5%	WebCore	WebCore::RenderText::RenderText(WebCore::Node*, WTF::PassRefPtr&lt;WTF::StringImpl&gt;)
0.5%	0.5%	WebCore	WebCore::Document::removeAllEventListeners()
0.5%	0.5%	WebCore	WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524715</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 11:41:06 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #17)
&gt; &gt; The bad news is that new profile result indicates our hashmap/hashset may not be as efficient as it should be. In fact, we seem to spend 30-50% of time in hashmap/hashset at the moment. And the time we spend in them increase linearly with respect to the number of nodes inserted.
&gt; 
&gt; I’m not sure what performance you are expecting from the HashMap. I believe that reading from it should be somewhere between O(1) and O(log n). Thus reading from it n times should be between O(n) and O(n log n). So if you are saying that time in the HashMap function is linear, that’s exactly what’s expected: O(n).

No, what I&apos;m saying is that the number of lookup time appears to be increasing with respect to the number of nodes in the hashmap/hashset.

To give you more concrete idea, download https://bug-73737-attachments.webkit.org/attachment.cgi?id=117785 and open it on ToT WebKit. You get results like:

Shallow tree: 88 ms
Deep tree (20+): 93 ms
Deeper tree (50+): 143 ms

Now, reverse the order in which we run tests; e.g. replace lines 44-46 by:
document.getElementById(&apos;shallow&apos;).innerHTML = repeatTest(0);
document.getElementById(&apos;deep&apos;).innerHTML = repeatTest(20);
document.getElementById(&apos;deeper&apos;).innerHTML = repeatTest(50);

Then if you open it again in ToT WebKit, you get results like:

Shallow tree: 104 ms
Deep tree (20+): 84 ms
Deeper tree (50+): 86 ms

There might be some flakes but the overall, this is the trend I get if I repeat the experiment over and over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524751</commentid>
    <comment_count>22</comment_count>
      <attachid>120057</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 12:13:58 -0800</bug_when>
    <thetext>Created attachment 120057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524755</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 12:21:56 -0800</bug_when>
    <thetext>Here&apos;s my patch. Given the regression in PerformanceTests/Parser/html-parser.html and the amount of code I&apos;m adding, I&apos;m not certain if this is a total win. It might be better to just have per-tree-scope cache counter but not manage node list themselves at the tree scope so that we can detect cases where we don&apos;t have any valid caches.

Having said that, this patch eliminates O(n) performance in many cases and clearly improves the result of some performance tests so I&apos;ll leave it for other reviewers to decide whether this is a good patch or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525015</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 17:49:10 -0800</bug_when>
    <thetext>kling pointed out that I can lazily invalidate the node list cache by recording DOMVersion and comparing it when we access the cache next time. That sounds like a really good good idea. I&apos;ll try that out next week (I&apos;ll be stuck &quot;gardening&quot; WebKit for the remainder of the week).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525311</commentid>
    <comment_count>25</comment_count>
      <attachid>120057</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-21 10:15:03 -0800</bug_when>
    <thetext>Comment on attachment 120057
Patch

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

Looks OK. I wasn’t able to think through everything about the data structure in detail. I would have liked to see a more thorough test, though. Given how much different code there is in here I’d like to see something that covers more of the code for different types, for example.

&gt; Source/WebCore/dom/DynamicNodeList.cpp:37
&gt; +    if (type != LabelNodeListType)
&gt; +        rootNode()-&gt;registerDynamicSubtreeNodeList(type, this);

This mysterious if condition needs a comment.

&gt; Source/WebCore/dom/DynamicNodeList.cpp:49
&gt; +    if (!hasValidCache())
&gt; +        node()-&gt;treeScope()-&gt;nodeListCachedValue(m_type);

It’s a little strange to call a function saying “I cached a value” before caching the value.

&gt; Source/WebCore/dom/Node.cpp:487
&gt; +    for (NodeListsNodeData::ClassNodeListCache::const_iterator it = nodeLists-&gt;m_classNodeListCache.begin();
&gt; +         it != nodeLists-&gt;m_classNodeListCache.end(); ++it) {
&gt; +        if (currentTreeScope)
&gt; +            currentTreeScope-&gt;removeNodeListCache(ClassNodeListType, it-&gt;second);
&gt; +        newTreeScope-&gt;addNodeListCache(ClassNodeListType, it-&gt;second);
&gt; +    }

So ugly. I can’t wait until we support only compilers with good C++11 support. If we had one of those then we could write:

    for (const auto&amp; value: nodeLists-&gt;m_classNodeListCache.values()) {
        if (currentTreeScope)
            currentTreeScope-&gt;removeNodeListCache(ClassNodeListType, value);
        newTreeScope-&gt;addNodeListCache(ClassNodeListType, value);
    }

I wonder if we can achieve something similar with a macro.

&gt; Source/WebCore/dom/Node.cpp:543
&gt; +        // FIXME: assert that nodes don&apos;t have node lists

Sentence style please.

Not sure that an idea for an assertion really qualifies as FIXME. I might just make a comment about the possible improvement without using FIXME. Recently I have been thinking we should strive to consistently use FIXME only when we think something is wrong, not when there is simply room for improvement.

&gt; Source/WebCore/dom/Node.cpp:1064
&gt; +static DynamicSubtreeNodeListType attrToNodeListType(const QualifiedName&amp; attrName)

I think a better name is:

    nodeListTypeForAttribute

These noun-type names work better if the beginning of the name is the noun.

&gt; Source/WebCore/dom/Node.cpp:1080
&gt; +    return InvalidNodeListType;
&gt; +    // LabelsNodeList is invalidated via notifyLocalNodeListsLabelChanged in parseMappedAttribute

Missing period in this sentence-style comment. Comment would be better before the return statement.

&gt; Source/WebCore/dom/Node.cpp:1102
&gt; +    // FIXME: We don&apos;t have to invalidate caches if the inserted or removed node
&gt; +    // didn&apos;t have an attribute we care about.

I think that for clarity we should say “any of the attributes” rather than “an attribute”. Also would be clearer if this stated that this is a performance idea.

&gt; Source/WebCore/dom/Node.cpp:3025
&gt; -void NodeRareData::createNodeLists(Node* node)
&gt; +void NodeRareData::createNodeLists(Node*)

Perhaps we should remove the unused argument entirely.

&gt; Source/WebCore/dom/Node.h:114
&gt; +enum DynamicSubtreeNodeListType {
&gt; +    ClassNodeListType,
&gt; +    NameNodeListType,
&gt; +    TagNodeListType,
&gt; +    TagNodeListNSType,
&gt; +#if ENABLE(MICRODATA)
&gt; +    MicroDataItemListType,
&gt; +#endif
&gt; +    LabelNodeListType,
&gt; +    InvalidNodeListType
&gt; +};

I’d suggest:

1) Adding a brief comment about why Invalid must be the last value.
2) Sorting the other values alphabetically as we do headers, in a separate paragraph.
3) Putting the #if value in its own separate paragraph instead of mixing it in with the unconditional ones.

&gt; Source/WebCore/dom/Node.h:115
&gt; +const unsigned numDynamicSubtreeNodeListType = InvalidNodeListType;

Why make the constant unsigned instead of of the enum type? I believe you could use the enum type consistently, even for the loop index, and avoid all the static_cast calls in the code below.

The name should be plural with a trailing “s”: “number of types”, not “number of type”.

&gt; Source/WebCore/dom/TreeScope.h:63
&gt; +    void nodeListCachedValue(DynamicSubtreeNodeListType type)

This sounds like a getter that returns a “cached value” for a “node list”.

This kind of situation is what leads to names like nodeListDidCacheValue or nodeListWillCacheValue, either of which will be clearer than this.

&gt; Source/WebCore/dom/TreeScope.h:69
&gt; +    void nodeListInvalidatedCache(DynamicSubtreeNodeListType type)

I think that nodeListDidInvalidateCache is a slightly better name.

&gt; Source/WebCore/html/LabelsNodeList.cpp:35
&gt; +LabelsNodeList::LabelsNodeList(Node* forNode)

The old name here, “for node”, is not good naming. We want to use a noun phrase. There might even be a good idea for the name in the HTML specification itself.

But you need not change that name in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525322</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 10:25:20 -0800</bug_when>
    <thetext>Thanks for the review, Darin. But I want to try out kling&apos;s approach compare the performance first. I might have a time today; if not, definitely on next Wed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525350</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-21 11:09:44 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; kling pointed out that I can lazily invalidate the node list cache by recording DOMVersion and comparing it when we access the cache next time. That sounds like a really good good idea.

Makes invalidation really cheap, but also really imprecise. I agree it’s worth investigating, but it’s not clear how to investigate the implications of this sufficiently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525648</commentid>
    <comment_count>28</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-12-21 14:51:59 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #24)
&gt; &gt; kling pointed out that I can lazily invalidate the node list cache by recording DOMVersion and comparing it when we access the cache next time. That sounds like a really good good idea.
&gt; 
&gt; Makes invalidation really cheap, but also really imprecise. I agree it’s worth investigating, but it’s not clear how to investigate the implications of this sufficiently.

One idea would be to keep additional version numbers that would always be &gt;=DOMVersion, and would be &gt;DOMVersion when e.g an attribute changes, allowing us to only invalidate those caches that care about attributes. incDOMTreeVersion() would then bring all version numbers to the same level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525652</commentid>
    <comment_count>29</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-12-21 14:55:05 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; kling pointed out that I can lazily invalidate the node list cache by recording DOMVersion and comparing it when we access the cache next time. That sounds like a really good good idea.
&gt; &gt; 
&gt; &gt; Makes invalidation really cheap, but also really imprecise. I agree it’s worth investigating, but it’s not clear how to investigate the implications of this sufficiently.
&gt; 
&gt; One idea would be to keep additional version numbers that would always be &gt;=DOMVersion, and would be &gt;DOMVersion when e.g an attribute changes, allowing us to only invalidate those caches that care about attributes. incDOMTreeVersion() would then bring all version numbers to the same level.

Ehm. I was apparently typing a bit faster than I was thinking here. Changing an attribute would obviously bump DOMVersion as well. It would have to work the other way around; the more specific versions could lag behind DOMVersion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525703</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 15:20:23 -0800</bug_when>
    <thetext>I implemented kling&apos;s approach and tested https://bug-73737-attachments.webkit.org/attachment.cgi?id=117785 on r103398

Here&apos;s result:
Shallow tree: 104.2±2.9 -&gt; 96.8±1.6 (7.6% reduction)
Deep tree (20+): 105.4±1.9 -&gt; 96.7±1.2 (9.0% reduction)
Deeper tree (50+): 137.9±1.1 -&gt; 134.9±1.1 (2.2% reduction)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525845</commentid>
    <comment_count>31</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 16:55:46 -0800</bug_when>
    <thetext>The new approach is a clear winner here:

PerformanceTests/Parser/xml-parser.html (12.6% reduction)
Without patch
avg 2147.75
median 2140
stdev 22.144694624220943
min 2111
max 2187

With patch
avg 1876.95
median 1868
stdev 28.452548216284598
min 1839
max 1934

PerformanceTests/Parser/tiny-innerHTML.html (9.1% reduction)
Without patch
avg 20932.75
median 20929
stdev 47.63493990759304
min 20832
max 21084

With patch
avg 1919.3
median 1903.5
stdev 27.087081791880053
min 1888
max 1964

PerformanceTests/Parser/html-parser.html (1.7% reduction)
Without patch
avg 21291.15
median 21294.5
stdev 35.27360911503103
min 21227
max 21369

With patch
avg 20932.75
median 20929
stdev 47.63493990759304
min 20832
max 21084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525907</commentid>
    <comment_count>32</comment_count>
      <attachid>120253</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 18:19:25 -0800</bug_when>
    <thetext>Created attachment 120253
kling&apos;s approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525974</commentid>
    <comment_count>33</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-21 21:17:02 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; The new approach is a clear winner here:

We knew the new approach would be better when doing lots of modifications and not much access to the node list. But did you think about what the bad case would be for the new approach, and measure that? How much worse are the cases that get worse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525978</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 21:30:16 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #31)
&gt; &gt; The new approach is a clear winner here:
&gt; 
&gt; We knew the new approach would be better when doing lots of modifications and not much access to the node list. But did you think about what the bad case would be for the new approach, and measure that? How much worse are the cases that get worse?

The worst case senario is that we&apos;ll end up invalidating cache every time we access it. However this was already the case before the patch; e.g. if you had written scripts like:

var divs = element.getElementsByTagName(&apos;div&apos;);
for (var i = 0; i &lt; divs.length; i++)
    divs[i].appendChild(document.createElement(&apos;br&apos;));

then we would end up invalidating the cache for divs along with node lists caches of element&apos;s ancestors.

Luckily, this is unlikely to affect our performance on popular websites according to the statistics on comment #10:

&gt; I have a hypothesis that we can just invalidate all caches whenever DOM mutation happens.
...
&gt; I&apos;ve collected 191220 samples while browsing websites like Gmail, Google+, Twitter, Facebook, etc...
&gt; 
&gt; total:  191220
&gt; hits: 185772 (97.151%)
&gt; misses: 3559 (1.861%)
&gt; hits that will be missed under this approach: 1889 (0.988%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527275</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-26 22:01:38 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527738</commentid>
    <comment_count>36</comment_count>
      <attachid>120253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-28 12:44:42 -0800</bug_when>
    <thetext>Comment on attachment 120253
kling&apos;s approach

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

&gt; Source/WebCore/dom/ChildNodeList.cpp:39
&gt; +    if (m_caches-&gt;m_isLengthCacheValid)
&gt; +        return m_caches-&gt;m_length;

It’s strange to call this “length cache” in one case, and “length” in another. I’d like to see these two data members use the same terminology.

&gt; Source/WebCore/dom/DynamicNodeList.h:48
&gt; -        unsigned cachedLength;
&gt; -        Node* lastItem;
&gt; -        unsigned lastItemOffset;
&gt; -        bool isLengthCacheValid : 1;
&gt; -        bool isItemCacheValid : 1;
&gt; +
&gt; +        unsigned m_length;
&gt; +        Node* m_lastItem;
&gt; +        unsigned m_lastItemOffset;
&gt; +        bool m_isLengthCacheValid : 1;
&gt; +        bool m_isItemCacheValid : 1;

I don’t like this change: Given that these are public data members, they should not have the m_ prefix added. If we want to use the m_ prefix, then we should make this a class with accessor functions instead.

&gt; Source/WebCore/dom/DynamicNodeList.h:120
&gt; +        DynamicNodeList::Caches::m_length;
&gt; +        DynamicNodeList::Caches::m_lastItem;
&gt; +        DynamicNodeList::Caches::m_lastItemOffset;
&gt; +        DynamicNodeList::Caches::m_isLengthCacheValid;
&gt; +        DynamicNodeList::Caches::m_isItemCacheValid;

I have never seen this syntax before and I am surprised it works. I think the correct syntax is:

    using DynamicNodeList::Caches::m_length;

But also, this syntax works:

    using Caches::m_length;

I believe deriving from a base class makes the class name usable without a prefix.

&gt; Source/WebCore/dom/Node.cpp:1023
&gt; -void Node::invalidateNodeListsCacheAfterAttributeChanged(const QualifiedName&amp; attrName)
&gt; +void Node::invalidateNodeListsCacheAfterAttributeChanged(const QualifiedName&amp;)

We should remove the argument entirely, not just have it be unused.

&gt; Source/WebCore/dom/Node.cpp:2353
&gt;  #if ENABLE(MICRODATA)
&gt;      invalidateMicrodataItemListCaches();
&gt;  #endif
&gt; +    
&gt;  }

Shouldn’t add this blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528267</commentid>
    <comment_count>37</comment_count>
      <attachid>120828</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-30 23:00:02 -0800</bug_when>
    <thetext>Created attachment 120828
Changed per Darin&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528268</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-30 23:04:19 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 120253 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120253&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ChildNodeList.cpp:39
&gt; &gt; +    if (m_caches-&gt;m_isLengthCacheValid)
&gt; &gt; +        return m_caches-&gt;m_length;
&gt; 
&gt; It’s strange to call this “length cache” in one case, and “length” in another. I’d like to see these two data members use the same terminology.

Okay, I&apos;ve renamed m_length to m_cachedLength and m_lastItem to m_cachedItem to be consistent.

&gt; &gt; Source/WebCore/dom/DynamicNodeList.h:48
&gt; &gt; -        unsigned cachedLength;
&gt; &gt; -        Node* lastItem;
&gt; &gt; -        unsigned lastItemOffset;
&gt; &gt; -        bool isLengthCacheValid : 1;
&gt; &gt; -        bool isItemCacheValid : 1;
&gt; &gt; +
&gt; &gt; +        unsigned m_length;
&gt; &gt; +        Node* m_lastItem;
&gt; &gt; +        unsigned m_lastItemOffset;
&gt; &gt; +        bool m_isLengthCacheValid : 1;
&gt; &gt; +        bool m_isItemCacheValid : 1;
&gt; 
&gt; I don’t like this change: Given that these are public data members, they should not have the m_ prefix added. If we want to use the m_ prefix, then we should make this a class with accessor functions instead.

Yeah, I didn&apos;t like that either. I&apos;ve made DynamicSubtreeNodeList::SubtreeCaches not inherit from DynamicNodeList::Caches. I think it&apos;s cleaner approach overall. SubtreeCaches no longer needs to be ref-counted and all variables and member functions can be appropriately without using and other name-scope hacks.

&gt; &gt; Source/WebCore/dom/Node.cpp:2353
&gt; &gt;  #if ENABLE(MICRODATA)
&gt; &gt;      invalidateMicrodataItemListCaches();
&gt; &gt;  #endif
&gt; &gt; +    
&gt; &gt;  }
&gt; 
&gt; Shouldn’t add this blank line.

Oops, it seems like I missed this comment. Will fix once I get the next round of reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528270</commentid>
    <comment_count>39</comment_count>
      <attachid>120828</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-31 00:12:11 -0800</bug_when>
    <thetext>Comment on attachment 120828
Changed per Darin&apos;s comment

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

New failing tests:
http/tests/inspector/resource-tree/resource-tree-document-url.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529699</commentid>
    <comment_count>40</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-04 13:23:22 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529747</commentid>
    <comment_count>41</comment_count>
      <attachid>120828</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-04 14:15:15 -0800</bug_when>
    <thetext>Comment on attachment 120828
Changed per Darin&apos;s comment

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

&gt; Source/WebCore/dom/DynamicNodeList.h:109
&gt; +        void setLengthCache(Node* node, unsigned length)
&gt; +        {
&gt; +            if (m_isItemCacheValid &amp;&amp; !domVersionIsConsistent()) {
&gt; +                m_cachedItem = node;
&gt; +                m_isItemCacheValid = false;
&gt; +            }
&gt; +            m_cachedLength = length;
&gt; +            m_isLengthCacheValid = true;
&gt; +        }

You should move the functions to cpp (with inline keyword) as that is the only place they are used.

&gt; Source/WebCore/dom/DynamicNodeList.h:132
&gt; +        unsigned m_cachedLength;
&gt; +        bool m_isLengthCacheValid : 1;
&gt; +        bool m_isItemCacheValid : 1;

You could steal the space for these bits from some other field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529804</commentid>
    <comment_count>42</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-04 15:08:56 -0800</bug_when>
    <thetext>Committed r104084: &lt;http://trac.webkit.org/changeset/104084&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529986</commentid>
    <comment_count>43</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-04 21:01:00 -0800</bug_when>
    <thetext>Reopen the bug since the patch was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529987</commentid>
    <comment_count>44</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-01-04 21:05:12 -0800</bug_when>
    <thetext>Patch rolled out: apparently regressed dom-perf after being rolled into chromium:
http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529993</commentid>
    <comment_count>45</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-04 21:23:47 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; Patch rolled out: apparently regressed dom-perf after being rolled into chromium:
&gt; http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116444

For whatever reason, these tests are not available publicly so I can&apos;t disclose any information as to what&apos;s going on but the high level summary is that the test is running multiple tests at once and because some tests modify DOM, we&apos;ll end up invalidating caches more often than we used to.

We&apos;ll probably need per-document counter instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530152</commentid>
    <comment_count>46</comment_count>
      <attachid>121252</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 03:18:10 -0800</bug_when>
    <thetext>Created attachment 121252
Fixed a bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530154</commentid>
    <comment_count>47</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 03:24:44 -0800</bug_when>
    <thetext>The perf. regression was caused by the DOM version not being updated after caching values :(

I&apos;ve ran dom_perf locally and took 7 samples (larger value is better):

Without patch:
734
758
785
791
780
784
779
avg: 773, stdev: 20

With patch:
765
761
750
765
741
770
762
avg: 759, stdev: 10

While there&apos;s a slight decline (1.8%) in the average value, it&apos;s statistically insignificant. Furthermore, the scores indicate that we&apos;ve improved DOM modifications at the cost of slight regression in DOM traversal via dynamic node list, which is exactly what we expect from this patch. Based on improvements in WebKit&apos;s performance tests posted on comment #31, I think we should proceed with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530435</commentid>
    <comment_count>48</comment_count>
      <attachid>121252</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-05 10:59:27 -0800</bug_when>
    <thetext>Comment on attachment 121252
Fixed a bug

sounds like a reasonable tradeoff, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530601</commentid>
    <comment_count>49</comment_count>
      <attachid>121252</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 13:48:53 -0800</bug_when>
    <thetext>Comment on attachment 121252
Fixed a bug

Clearing flags on attachment: 121252

Committed r104210: &lt;http://trac.webkit.org/changeset/104210&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530602</commentid>
    <comment_count>50</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 13:49:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530819</commentid>
    <comment_count>51</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-01-05 17:21:28 -0800</bug_when>
    <thetext>dom_perf no longer regressed - thanks for the fix!
http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530820</commentid>
    <comment_count>52</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 17:22:33 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; dom_perf no longer regressed - thanks for the fix!
&gt; http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116590

Actually, the patch hasn&apos;t been landed yet :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530822</commentid>
    <comment_count>53</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-01-05 17:25:27 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; dom_perf no longer regressed - thanks for the fix!
&gt; &gt; http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116590
&gt; 
&gt; Actually, the patch hasn&apos;t been landed yet :(

Isn&apos;t r114210 the patch? What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530823</commentid>
    <comment_count>54</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-01-05 17:26:01 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #52)
&gt; &gt; (In reply to comment #51)
&gt; &gt; &gt; dom_perf no longer regressed - thanks for the fix!
&gt; &gt; &gt; http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116590
&gt; &gt; 
&gt; &gt; Actually, the patch hasn&apos;t been landed yet :(
&gt; 
&gt; Isn&apos;t r114210 the patch? What am I missing?
s/r114210/r104210/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530835</commentid>
    <comment_count>55</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 17:33:27 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; (In reply to comment #52)
&gt; &gt; &gt; (In reply to comment #51)
&gt; &gt; &gt; &gt; dom_perf no longer regressed - thanks for the fix!
&gt; &gt; &gt; &gt; http://build.chromium.org/f/chromium/perf/linux-release/dom_perf/report.html?history=150&amp;rev=116590
&gt; &gt; &gt; 
&gt; &gt; &gt; Actually, the patch hasn&apos;t been landed yet :(
&gt; &gt; 
&gt; &gt; Isn&apos;t r114210 the patch? What am I missing?
&gt; s/r114210/r104210/

Huh, didn&apos;t notice that. Hm... it seems like I&apos;ve regressed this one: http://build.chromium.org/f/chromium/perf/xp-release-dual-core/dromaeo_domcore/report.html?history=50&amp;rev=-1&amp;graph=dom_query_getElementsByName__not_in_document_

I think I know how to fix it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530871</commentid>
    <comment_count>56</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-01-05 18:54:45 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; Huh, didn&apos;t notice that. Hm... it seems like I&apos;ve regressed this one: http://build.chromium.org/f/chromium/perf/xp-release-dual-core/dromaeo_domcore/report.html?history=50&amp;rev=-1&amp;graph=dom_query_getElementsByName__not_in_document_
&gt; 
&gt; I think I know how to fix it though.

Maybe roll it out while you work out a fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530884</commentid>
    <comment_count>57</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-05 19:31:35 -0800</bug_when>
    <thetext>The regression was fixed in http://trac.webkit.org/changeset/104263.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533664</commentid>
    <comment_count>58</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-10 23:03:58 -0800</bug_when>
    <thetext>Reopen the bug since the patch was rolled out in http://trac.webkit.org/changeset/104674 and http://trac.webkit.org/changeset/104673.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533672</commentid>
    <comment_count>59</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-10 23:15:42 -0800</bug_when>
    <thetext>Build fix for the revert landed in http://trac.webkit.org/changeset/104675.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655997</commentid>
    <comment_count>60</comment_count>
      <attachid>149156</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-22 19:14:56 -0700</bug_when>
    <thetext>Created attachment 149156
new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655998</commentid>
    <comment_count>61</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-22 19:15:59 -0700</bug_when>
    <thetext>6% improvement on Dromaeo/dom-modify.html

Before:
RESULT Dromaeo: dom-modify= 3897.79625691 runs/s
median= 0.0 runs/s, stdev= 52.9873315944 runs/s, min= 3801.28571429 runs/s, max= 4016.84667667 runs/s

RESULT Dromaeo: dom-modify= 3878.28725467 runs/s
median= 0.0 runs/s, stdev= 66.6932298708 runs/s, min= 3774.65020127 runs/s, max= 4050.16268955 runs/s

After:
RESULT Dromaeo: dom-modify= 4146.1717243 runs/s
median= 0.0 runs/s, stdev= 54.9684861451 runs/s, min= 4013.73249528 runs/s, max= 4276.54651536 runs/s

RESULT Dromaeo: dom-modify= 4109.48266573 runs/s
median= 0.0 runs/s, stdev= 68.4080593631 runs/s, min= 4000.8610192 runs/s, max= 4289.26268699 runs/s


6.6% improvement on DOM/DOMDivWalk.html

Before:
RESULT DOM: DOMDivWalk= 58.4666666667 ms
median= 59.0 ms, stdev= 1.36788563525 ms, min= 55.8333333333 ms, max= 60.6666666667 ms

RESULT DOM: DOMDivWalk= 59.4083333333 ms
median= 59.0833333333 ms, stdev= 1.38089644796 ms, min= 57.5 ms, max= 63.3333333333 ms

After:
RESULT DOM: DOMDivWalk= 54.9 ms
median= 54.8333333333 ms, stdev= 0.925562891794 ms, min= 53.5 ms, max= 58.0 ms

RESULT DOM: DOMDivWalk= 55.525 ms
median= 55.4166666667 ms, stdev= 1.01553899208 ms, min= 53.8333333333 ms, max= 58.0 ms


No statistically significant differences on xml-parser.html and html-parser.html

Before:
RESULT Parser: xml-parser= 6.97092743469 runs/s
median= 6.96055684455 runs/s, stdev= 0.0682343218493 runs/s, min= 6.82593856655 runs/s, max= 7.11743772242 runs/s

RESULT Parser: xml-parser= 6.89537037269 runs/s
median= 6.90848347453 runs/s, stdev= 0.116432899383 runs/s, min= 6.62251655629 runs/s, max= 7.05052878966 runs/s

After:
RESULT Parser: xml-parser= 7.06476592238 runs/s
median= 7.06713780919 runs/s, stdev= 0.0613748572558 runs/s, min= 6.86498855835 runs/s, max= 7.16845878136 runs/s

RESULT Parser: xml-parser= 7.05728470567 runs/s
median= 7.05052878966 runs/s, stdev= 0.0293092648714 runs/s, min= 7.00116686114 runs/s, max= 7.10900473934 runs/s


Before:
RESULT Parser: html-parser= 1952.45 ms
median= 1956.0 ms, stdev= 16.8210433684 ms, min= 1931.0 ms, max= 1985.0 ms

RESULT Parser: html-parser= 1961.3 ms
median= 1966.0 ms, stdev= 11.6150764096 ms, min= 1938.0 ms, max= 1982.0 ms

After:
RESULT Parser: html-parser= 1961.1 ms
median= 1959.5 ms, stdev= 11.7426572802 ms, min= 1937.0 ms, max= 1990.0 ms

RESULT Parser: html-parser= 1972.85 ms
median= 1970.0 ms, stdev= 13.5951278037 ms, min= 1944.0 ms, max= 2002.0 ms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656021</commentid>
    <comment_count>62</comment_count>
      <attachid>149156</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-22 22:19:56 -0700</bug_when>
    <thetext>Comment on attachment 149156
new patch

Just realized that I can remove more code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656030</commentid>
    <comment_count>63</comment_count>
      <attachid>149165</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-22 23:46:07 -0700</bug_when>
    <thetext>Created attachment 149165
Removed more code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656040</commentid>
    <comment_count>64</comment_count>
      <attachid>149165</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-23 00:43:49 -0700</bug_when>
    <thetext>Comment on attachment 149165
Removed more code

Attachment 149165 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13030592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656096</commentid>
    <comment_count>65</comment_count>
      <attachid>149165</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-23 07:56:45 -0700</bug_when>
    <thetext>Comment on attachment 149165
Removed more code

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

Overall, this looks like a big improvement!

This patch also uses an extra pointer per DynamicNodeList now because it adds more of them to m_listsInvalidatedAtDocument, right? I think that&apos;s fine, but the ChangeLog should state it. I don&apos;t have a good intuition for how many concurrent DynamicNodeLists a give page has. Have you instrumented gmail or facebook to get a sense of what the memory impact of this change would be?

&gt; Source/WebCore/dom/Document.cpp:3879
&gt; +        if (!attrName || (*it)-&gt;shouldInvalidateOnAttributeChange())

As the code is, it&apos;s weird for this to take a QualifiedName instead of an enum or something (e.g. ShouldClearAttributeCaches). But, I think in the future, we probably want to be even more fine-grained and only clear the attribute caches that are affected by this attribute name. Mind putting a FIXME to that effect? With the FIXME there it makes more sense to pass in a QualifiedName.

&gt; Source/WebCore/dom/Node.cpp:967
&gt; +    document()-&gt;clearNodeListCaches(&amp;attrName);

The comment on lines 950-955 probably needs to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656117</commentid>
    <comment_count>66</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-23 12:23:28 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #65)
&gt; This patch also uses an extra pointer per DynamicNodeList now because it adds more of them to m_listsInvalidatedAtDocument, right? I think that&apos;s fine, but the ChangeLog should state it.

Fair point.

&gt; I don&apos;t have a good intuition for how many concurrent DynamicNodeLists a give page has. Have you instrumented gmail or facebook to get a sense of what the memory impact of this change would be?

We used to do this unintentionally until I fixed it in http://trac.webkit.org/changeset/110797 three months ago, so I don&apos;t think there will be any impact.
 
&gt; &gt; Source/WebCore/dom/Document.cpp:3879
&gt; &gt; +        if (!attrName || (*it)-&gt;shouldInvalidateOnAttributeChange())
&gt; 
&gt; As the code is, it&apos;s weird for this to take a QualifiedName instead of an enum or something (e.g. ShouldClearAttributeCaches). But, I think in the future, we probably want to be even more fine-grained and only clear the attribute caches that are affected by this attribute name. Mind putting a FIXME to that effect? With the FIXME there it makes more sense to pass in a QualifiedName.

Right, that&apos;s the intention. I&apos;ll have a follow up patch that&apos;ll only invalidate node lists that match QualifiedName. I guess we can have a FIXME until then.

&gt; &gt; Source/WebCore/dom/Node.cpp:967
&gt; &gt; +    document()-&gt;clearNodeListCaches(&amp;attrName);
&gt; 
&gt; The comment on lines 950-955 probably needs to be updated.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656128</commentid>
    <comment_count>67</comment_count>
      <attachid>149179</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-23 13:25:58 -0700</bug_when>
    <thetext>Created attachment 149179
Fixed Mac build &amp; per Ojan&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656129</commentid>
    <comment_count>68</comment_count>
      <attachid>149180</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-23 13:33:30 -0700</bug_when>
    <thetext>Created attachment 149180
Updated ChangeLog &amp; reverted xcodeproj change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656149</commentid>
    <comment_count>69</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-23 20:13:26 -0700</bug_when>
    <thetext>Committed r121106: &lt;http://trac.webkit.org/changeset/121106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656291</commentid>
    <comment_count>70</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-24 17:35:56 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 89841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656294</commentid>
    <comment_count>71</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-24 17:40:47 -0700</bug_when>
    <thetext>I&apos;m rolling out the patch because it caused 85-90% regressions on Dromaeo/jslib-modify-jquery.html

http://webkit-perf.appspot.com/graph.html#tests=[[41019,2001,173262],[41019,2001,32196]]&amp;sel=1340303912887.2336,1340533472011.3213,0,13125&amp;displayrange=7&amp;datatype=running

Turns out jquery depends on our current optimization :(

On one hand, the very perf test framework I added caught this regression so I should be happy but on the other hand, this would mean that we can never fix this bug so I&apos;m sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656298</commentid>
    <comment_count>72</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-24 17:49:33 -0700</bug_when>
    <thetext>Note 85-90% regression means that our code has gotten roughly 10 times slower (not as twice as slower).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656337</commentid>
    <comment_count>73</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-24 19:49:59 -0700</bug_when>
    <thetext>(In reply to comment #72)
&gt; Note 85-90% regression means that our code has gotten roughly 10 times slower (not as twice as slower).

We thought that this might be a bug of GC (bug 85162 and 88739), but it does not seem to be a bug of GC.

As you pointed out, jQuery depends on our current optimization, and your patch ended up having jQuery.domManip() call jQuery.clone() every time (PerformanceTests/Dromaeo/resources/dromaeo/web/lib/jquery-1.6.4.js, line 5857).

So the reason is not that GC is doing something wrong, but that with your patch jQuery calls jQuery.clone() a lot of times, which causes the memory bloat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656340</commentid>
    <comment_count>74</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-24 20:01:00 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (In reply to comment #72)
&gt; &gt; Note 85-90% regression means that our code has gotten roughly 10 times slower (not as twice as slower).
&gt; 
&gt; We thought that this might be a bug of GC (bug 85162 and 88739), but it does not seem to be a bug of GC.

You&apos;re right but my point on g+ is that the fact calling clone() more ends up reducing the overall memory usage (the tests stopped crashing when this regression was introduced) means that the bugs 85162 and 88739 are indeed some problems in GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656357</commentid>
    <comment_count>75</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-24 20:40:10 -0700</bug_when>
    <thetext>(In reply to comment #74)
&gt; You&apos;re right but my point on g+ is that the fact calling clone() more ends up reducing the overall memory usage (the tests stopped crashing when this regression was introduced) means that the bugs 85162 and 88739 are indeed some problems in GC.

I am a bit confused. In my understanding:

(1) Before r121106, jslib-modify-jquery.html was working fine.
(2) After r121106, jslib-modify-jquery.html caused memory bloat. Some bots start crashing due to the memory bloat.
(3) After reverting r121106 back, jslib-modify-jquery.html is working fine again.

Where is a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656359</commentid>
    <comment_count>76</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-24 20:41:49 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; (In reply to comment #74)
&gt; &gt; You&apos;re right but my point on g+ is that the fact calling clone() more ends up reducing the overall memory usage (the tests stopped crashing when this regression was introduced) means that the bugs 85162 and 88739 are indeed some problems in GC.
&gt; 
&gt; I am a bit confused. In my understanding:
&gt; 
&gt; (1) Before r121106, jslib-modify-jquery.html was working fine.
&gt; (2) After r121106, jslib-modify-jquery.html caused memory bloat. Some bots start crashing due to the memory bloat.
&gt; (3) After reverting r121106 back, jslib-modify-jquery.html is working fine again.

No. Before r121106, jslib-modify-jquery.html was crashing due to the memory bloat. After r121106 until it was landed, the test was running fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656362</commentid>
    <comment_count>77</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-24 20:42:36 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; No. Before r121106, jslib-modify-jquery.html was crashing due to the memory bloat. After r121106 until it was landed, the test was running fine.

I meant to say that the test started running fine after r121106 until it was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656406</commentid>
    <comment_count>78</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-24 23:31:43 -0700</bug_when>
    <thetext>I confirmed that the memory bloat is still happening with r121106.

(1) Before r121106, jslib-modify-jquery.html was crashing due to the memory bloat.
(2) After r121106 and until r121106 is reverted, jslib-modify-jquery.html was working fine, although the performance regressed by 10x. Our question was why r121106 fixed the memory bloat.

Actually, the memory bloat was happening even after r121106. However, since r121106 regressed performance by 10x, jslib-modify-jquery.html completed without reaching the memory bloat. In other words, r121106 was slowly causing the memory bloat. I confirmed that if I run jslib-modify-jquery.html for a long time, then r121106 also causes the memory bloat.

So the current problem can be summarized into the following two:

[1] r121106 regressed performance by 10x.
[2] (Regardless of with or without r121106,) jslib-modify-jquery.html causes the memory bloat.

Regarding [1], we already know the reason; i.e. jQuery is assuming our current optimization and not expecting rniwa&apos;s patch, unfortunately.

Regarding [2], it seems that the memory bloat is just because jQuery clones too much nodes. I inserted window.internals.numberOfLiveNodes() in jslib-modify-jquery.html, and confirmed that the number of live nodes are monotonically increases both in Chromium/Linux and AppleWebKit/Mac. It seems that this is not a problem of GC; this is just a problem of jQuery cloning too much nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656671</commentid>
    <comment_count>79</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-25 10:17:10 -0700</bug_when>
    <thetext>Unfortunately, the only thing we can do to address this bug is to fix the bug 89635 to speed-up the access to NodeListsNodeData at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761132</commentid>
    <comment_count>80</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-07 16:05:09 -0800</bug_when>
    <thetext>(In reply to comment #79)
&gt; Unfortunately, the only thing we can do to address this bug is to fix the bug 89635 to speed-up the access to NodeListsNodeData at this point.

The rare data map was removed in Bug 100057 which means Bug 89635 is resolved. I assume that means this is too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761155</commentid>
    <comment_count>81</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 16:23:39 -0800</bug_when>
    <thetext>(In reply to comment #80)
&gt; (In reply to comment #79)
&gt; &gt; Unfortunately, the only thing we can do to address this bug is to fix the bug 89635 to speed-up the access to NodeListsNodeData at this point.
&gt; 
&gt; The rare data map was removed in Bug 100057 which means Bug 89635 is resolved. I assume that means this is too?

Probably. Try profiling it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761247</commentid>
    <comment_count>82</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-11-07 18:10:28 -0800</bug_when>
    <thetext>(In reply to comment #81)
&gt; (In reply to comment #80)
&gt; &gt; (In reply to comment #79)
&gt; &gt; &gt; Unfortunately, the only thing we can do to address this bug is to fix the bug 89635 to speed-up the access to NodeListsNodeData at this point.
&gt; &gt; 
&gt; &gt; The rare data map was removed in Bug 100057 which means Bug 89635 is resolved. I assume that means this is too?
&gt; 
&gt; Probably. Try profiling it?

Ran the profile and the node list methods don&apos;t show up in the trace:

Running Time	Self		Symbol Name
396.0ms    4.0%	396.0	 	WebCore::JSNodeOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void*, JSC::SlotVisitor&amp;)
377.0ms    3.8%	377.0	 	void WebCore::removeAllChildrenInContainer&lt;WebCore::Node, WebCore::ContainerNode&gt;(WebCore::ContainerNode*)
272.0ms    2.7%	272.0	 	JSC::WeakBlock::visit(JSC::HeapRootVisitor&amp;)
269.0ms    2.7%	269.0	 	WTF::KeyValuePair&lt;WTF::AtomicStringImpl*, WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)&gt;* WTF::HashTable&lt;WTF::AtomicStringImpl*, WTF::KeyValuePair&lt;WTF::AtomicStringImpl*, WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)&gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicStringImpl*, WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WebCore::JSDOMWrapper* (*)(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::PassRefPtr&lt;WebCore::HTMLElement&gt;)&gt; &gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt; &gt;::lookup&lt;WTF::IdentityHashTranslator&lt;WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt; &gt;, WTF::AtomicStringImpl*&gt;(WTF::AtomicStringImpl* const&amp;)
256.0ms    2.6%	256.0	 	WebCore::jsDocumentPrototypeFunctionCreateElement(JSC::ExecState*)
241.0ms    2.4%	241.0	 	_ZN7WebCoreL24updateTreeAfterInsertionEPNS_13ContainerNodeEPNS_4NodeEb
204.0ms    2.0%	204.0	 	WTF::AtomicString::addSlowCase(WTF::StringImpl*)
189.0ms    1.9%	189.0	 	WebCore::StyledElement::StyledElement(WebCore::QualifiedName const&amp;, WebCore::Document*, WebCore::Node::ConstructionType)
186.0ms    1.9%	186.0	 	_ZN7WebCoreL28createHTMLSpanElementWrapperEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEN3WTF10PassRefPtrINS_11HTMLElementEEE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761302</commentid>
    <comment_count>83</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 20:02:26 -0800</bug_when>
    <thetext>(In reply to comment #82)
&gt; (In reply to comment #81)
&gt; &gt; (In reply to comment #80)
&gt; &gt; &gt; (In reply to comment #79)
&gt; &gt; &gt; &gt; Unfortunately, the only thing we can do to address this bug is to fix the bug 89635 to speed-up the access to NodeListsNodeData at this point.
&gt; &gt; &gt; 
&gt; &gt; &gt; The rare data map was removed in Bug 100057 which means Bug 89635 is resolved. I assume that means this is too?
&gt; &gt; 
&gt; &gt; Probably. Try profiling it?
&gt; 
&gt; Ran the profile and the node list methods don&apos;t show up in the trace:

Super!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>117915</attachid>
            <date>2011-12-05 12:28:59 -0800</date>
            <delta_ts>2011-12-05 12:28:59 -0800</delta_ts>
            <desc>perf test</desc>
            <filename>insert-node-perf.html</filename>
            <type>text/html</type>
            <size>1141</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KPHVsPgo8bGk+RGVlcGVyIHRyZWUgKDEwMCsp
OiA8c3BhbiBpZD0iZGVlcGVyIj48L3NwYW4+IG1zPC9saT4KPC91bD4KPGRpdiBpZD0iY29udGFp
bmVyIj48L2Rpdj4KPHNjcmlwdD4KCmZ1bmN0aW9uIHNldHVwRGVlcFRyZWUobWFnbml0dWRlKQp7
CiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKICAg
IG5vZGUuaW5uZXJIVE1MID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hZ25pdHVkZTsg
aSsrKSB7CiAgICAgICAgdmFyIGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
CiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7CiAgICAgICAgbm9kZSA9IGNoaWxkOwog
ICAgfQogICAgcmV0dXJuIG5vZGU7Cn0KCmZ1bmN0aW9uIHRlc3QoY29udGFpbmVyKQp7CiAgICB2
YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgIHZhciBzcGFuID0gbnVsbDsKICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgNTAwMDsgaSsrKSB7CiAgICAgICAgc3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3Bhbik7CiAg
ICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwMDA7IGkrKykKICAgICAgICBjb250YWluZXIu
aW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSwgc3Bhbik7CiAgICBy
ZXR1cm4gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKfQoKZnVuY3Rpb24gcmVwZWF0VGVzdChtYWdu
aXR1ZGUpIHsKICAgIHZhciBzdW0gPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBp
KyspCiAgICAgICAgc3VtICs9IHRlc3Qoc2V0dXBEZWVwVHJlZShtYWduaXR1ZGUpKTsKICAgIHJl
dHVybiBzdW07Cn0KCi8vZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NoYWxsb3cnKS5pbm5lckhU
TUwgPSByZXBlYXRUZXN0KDApOwovL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWVwJykuaW5u
ZXJIVE1MID0gcmVwZWF0VGVzdCgyMCk7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWVwZXIn
KS5pbm5lckhUTUwgPSByZXBlYXRUZXN0KDEwMCk7Cgo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>117919</attachid>
            <date>2011-12-05 12:34:44 -0800</date>
            <delta_ts>2011-12-05 12:34:44 -0800</delta_ts>
            <desc>profile result</desc>
            <filename>node-perf-73853.mshark</filename>
            <type>application/octet-stream</type>
            <size>0</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118087</attachid>
            <date>2011-12-06 12:16:50 -0800</date>
            <delta_ts>2011-12-06 15:14:48 -0800</delta_ts>
            <desc>diff I used to collect the stat.</desc>
            <filename>node-stat</filename>
            <type>text/plain</type>
            <size>8246</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMTAxODYyKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
OCArMzksMTEgQEAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgc19jaGlsZE5vZGVMaXN0Q291bnQ7CisKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIENoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVz
Kik7CisgICAgICAgIH5DaGlsZE5vZGVMaXN0KCkgeyBzX2NoaWxkTm9kZUxpc3RDb3VudC0tOyB9
CiAKICAgICAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKICAg
ICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAx
ODYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxNSArMzUsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1bnNpZ25l
ZCBDbGFzc05vZGVMaXN0OjpzX2NsYXNzTm9kZUxpc3RDb3VudCA9IDA7CisKIENsYXNzTm9kZUxp
c3Q6OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5n
JiBjbGFzc05hbWVzKQogICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlKQogICAgICwgbV9j
bGFzc05hbWVzKGNsYXNzTmFtZXMsIG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpKQogICAgICwgbV9vcmlnaW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKIHsKKyAgICBzX2Ns
YXNzTm9kZUxpc3RDb3VudCsrOwogfQogCiBDbGFzc05vZGVMaXN0Ojp+Q2xhc3NOb2RlTGlzdCgp
CiB7CisgICAgc19jbGFzc05vZGVMaXN0Q291bnQtLTsKICAgICBtX3Jvb3ROb2RlLT5yZW1vdmVD
YWNoZWRDbGFzc05vZGVMaXN0KHRoaXMsIG1fb3JpZ2luYWxDbGFzc05hbWVzKTsKIH0gCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDE4NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBA
QAogCiAgICAgICAgIHZpcnR1YWwgflRhZ05vZGVMaXN0KCk7CiAKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHNfdGFnTm9kZUxpc3RDb3VudDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFRhZ05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDEwMTg2MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTMgQEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOYW1lTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJDbGFzc05vZGVMaXN0LmgiCisjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIK
KwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODM3LDYg
Kzg0NCw4IEBACiAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7CiB9CiAKK3Vu
c2lnbmVkIE5vZGVMaXN0c05vZGVEYXRhOjpzX25vZGVMaXN0Q291bnQgPSAwOworCiB2b2lkIENv
bnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSog
YmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsK
ICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2Us
IGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwpAQCAtMTEwOSw2ICsxMTE4LDEwIEBACiB7
CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogCisgICAgZnByaW50Zihz
dGRlcnIsICJjYWNoZXM6JWQsIG5vZGVsaXN0OiVkLCBuYW1lOiVkLCBjbGFzczolZCwgbGFiZWxz
OiVkLCBjaGlsZDolZCwgdGFnOiVkXG4iLAorICAgICAgICAgICAgY2hpbGQtPnRyZWVTY29wZSgp
LT5tX251bU5vZGVMaXN0Q2FjaGVzLCBOb2RlTGlzdHNOb2RlRGF0YTo6c19ub2RlTGlzdENvdW50
LCBOYW1lTm9kZUxpc3Q6OnNfbmFtZU5vZGVMaXN0Q291bnQsIENsYXNzTm9kZUxpc3Q6OnNfY2xh
c3NOb2RlTGlzdENvdW50LAorICAgICAgICAgICAgTGFiZWxzTm9kZUxpc3Q6OnNfbGFiZWxzTm9k
ZUxpc3RDb3VudCwgQ2hpbGROb2RlTGlzdDo6c19jaGlsZE5vZGVMaXN0Q291bnQsIFRhZ05vZGVM
aXN0OjpzX3RhZ05vZGVMaXN0Q291bnQpOworCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDE4NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTQgKzMxLDE4IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3Vuc2lnbmVkIE5h
bWVOb2RlTGlzdDo6c19uYW1lTm9kZUxpc3RDb3VudCA9IDA7CisKIE5hbWVOb2RlTGlzdDo6TmFt
ZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgbmFtZSkK
ICAgICA6IER5bmFtaWNOb2RlTGlzdChyb290Tm9kZSkKICAgICAsIG1fbm9kZU5hbWUobmFtZSkK
IHsKKyAgICBzX25hbWVOb2RlTGlzdENvdW50Kys7CiB9CiAKIE5hbWVOb2RlTGlzdDo6fk5hbWVO
b2RlTGlzdCgpCiB7CisgICAgc19uYW1lTm9kZUxpc3RDb3VudC0tOwogICAgIG1fcm9vdE5vZGUt
PnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdCh0aGlzLCBtX25vZGVOYW1lKTsKIH0gCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMTg2MikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
OSArMjcsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1bnNpZ25lZCBDaGlsZE5vZGVM
aXN0OjpzX2NoaWxkTm9kZUxpc3RDb3VudCA9IDA7CisKIENoaWxkTm9kZUxpc3Q6OkNoaWxkTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMq
IGluZm8pCiAgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGluZm8pCiB7CisgICAgc19j
aGlsZE5vZGVMaXN0Q291bnQrKzsKIH0KIAogdW5zaWduZWQgQ2hpbGROb2RlTGlzdDo6bGVuZ3Ro
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEwMTg2
MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtODcsOCArODcsMTYgQEAKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCisgICAgc3Rh
dGljIHVuc2lnbmVkIHNfbm9kZUxpc3RDb3VudDsKKworICAgIH5Ob2RlTGlzdHNOb2RlRGF0YSgp
IHsKKyAgICAgICAgc19ub2RlTGlzdENvdW50LS07CisgICAgfQorCiBwcml2YXRlOgotICAgIE5v
ZGVMaXN0c05vZGVEYXRhKCkgOiBtX2xhYmVsc05vZGVMaXN0Q2FjaGUoMCkge30KKyAgICBOb2Rl
TGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDApIHsKKyAgICAgICAgc19u
b2RlTGlzdENvdW50Kys7CisgICAgfQogfTsKIAogY2xhc3MgTm9kZVJhcmVEYXRhIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9uIDEwMTg2MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAg
RG9jdW1lbnRPcmRlcmVkTWFwIG1fZWxlbWVudHNCeUlkOwogICAgIERvY3VtZW50T3JkZXJlZE1h
cCBtX2ltYWdlTWFwc0J5TmFtZTsKLQorcHVibGljOgogICAgIHVuc2lnbmVkIG1fbnVtTm9kZUxp
c3RDYWNoZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDEwMTg2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE2ICsyOSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3Vu
c2lnbmVkIFRhZ05vZGVMaXN0OjpzX3RhZ05vZGVMaXN0Q291bnQgPSAwOworCiBUYWdOb2RlTGlz
dDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgIDog
RHluYW1pY05vZGVMaXN0KHJvb3ROb2RlKQogICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNl
VVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewogICAgIEFTU0VSVChtX25hbWVz
cGFjZVVSSS5pc051bGwoKSB8fCAhbV9uYW1lc3BhY2VVUkkuaXNFbXB0eSgpKTsKKyAgICBzX3Rh
Z05vZGVMaXN0Q291bnQrKzsKIH0KIAogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlzdCgpCiB7Cisg
ICAgc190YWdOb2RlTGlzdENvdW50LS07CiAgICAgaWYgKG1fbmFtZXNwYWNlVVJJID09IHN0YXJB
dG9tKQogICAgICAgICBtX3Jvb3ROb2RlLT5yZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCh0aGlzLCBt
X2xvY2FsTmFtZSk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTAx
ODYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDM0LDcgKzEwMzQsNiBAQAogICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CiAg
ICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFp
c0F0dHJpYnV0ZU5vZGUoKSkKICAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVD
YWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMTAxODYyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05hbWVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAKICAgICAg
ICAgdmlydHVhbCB+TmFtZU5vZGVMaXN0KCk7CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNf
bmFtZU5vZGVMaXN0Q291bnQ7CisKICAgICBwcml2YXRlOgogICAgICAgICBOYW1lTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDE4NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4
IEBACiAKICAgICAgICAgdmlydHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwogCisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBzX2NsYXNzTm9kZUxpc3RDb3VudDsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBj
bGFzc05hbWVzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAkocmV2
aXNpb24gMTAxODYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAgICAgfQogICAgIH5MYWJlbHNOb2RlTGlz
dCgpOwogCisgICAgc3RhdGljIHVuc2lnbmVkIHNfbGFiZWxzTm9kZUxpc3RDb3VudDsKKwogcHJv
dGVjdGVkOgogICAgIExhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAxODYyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDEzICszMiwxNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCit1bnNpZ25lZCBM
YWJlbHNOb2RlTGlzdDo6c19sYWJlbHNOb2RlTGlzdENvdW50ID0gMDsKKwogTGFiZWxzTm9kZUxp
c3Q6OkxhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUgKQogICAgIDogRHluYW1pY05vZGVMaXN0
KGZvck5vZGUtPmRvY3VtZW50KCkpICwgbV9mb3JOb2RlKGZvck5vZGUpCiB7CisgICAgc19sYWJl
bHNOb2RlTGlzdENvdW50Kys7CiB9CiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3Qo
KQogeworICAgIHNfbGFiZWxzTm9kZUxpc3RDb3VudC0tOwogICAgIG1fZm9yTm9kZS0+cmVtb3Zl
Q2FjaGVkTGFiZWxzTm9kZUxpc3QodGhpcyk7CiB9IAogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118119</attachid>
            <date>2011-12-06 15:14:48 -0800</date>
            <delta_ts>2011-12-20 12:13:32 -0800</delta_ts>
            <desc>updated stat collecting diff</desc>
            <filename>node-stat2</filename>
            <type>text/plain</type>
            <size>11090</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMTAxODYyKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
OCArMzksMTEgQEAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAorICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgc19jaGlsZE5vZGVMaXN0Q291bnQ7CisKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIENoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVz
Kik7CisgICAgICAgIH5DaGlsZE5vZGVMaXN0KCkgeyBzX2NoaWxkTm9kZUxpc3RDb3VudC0tOyB9
CiAKICAgICAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKICAg
ICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAx
ODYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxNSArMzUsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1bnNpZ25l
ZCBDbGFzc05vZGVMaXN0OjpzX2NsYXNzTm9kZUxpc3RDb3VudCA9IDA7CisKIENsYXNzTm9kZUxp
c3Q6OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5n
JiBjbGFzc05hbWVzKQogICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlKQogICAgICwgbV9j
bGFzc05hbWVzKGNsYXNzTmFtZXMsIG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpKQogICAgICwgbV9vcmlnaW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKIHsKKyAgICBzX2Ns
YXNzTm9kZUxpc3RDb3VudCsrOwogfQogCiBDbGFzc05vZGVMaXN0Ojp+Q2xhc3NOb2RlTGlzdCgp
CiB7CisgICAgc19jbGFzc05vZGVMaXN0Q291bnQtLTsKICAgICBtX3Jvb3ROb2RlLT5yZW1vdmVD
YWNoZWRDbGFzc05vZGVMaXN0KHRoaXMsIG1fb3JpZ2luYWxDbGFzc05hbWVzKTsKIH0gCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDE4NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBA
QAogCiAgICAgICAgIHZpcnR1YWwgflRhZ05vZGVMaXN0KCk7CiAKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHNfdGFnTm9kZUxpc3RDb3VudDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFRhZ05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEwMTg2MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMs
OCBAQAogICAgICAgICBib29sIG1fb3duc0NhY2hlczsKIAogICAgIHByaXZhdGU6CisgICAgICAg
IG11dGFibGUgdW5zaWduZWQgbV9sYXN0RE9NVmVyc2lvbjsKKwogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNEeW5hbWljTm9kZUxpc3QoKSBjb25zdDsKICAgICAgICAgTm9kZSogaXRlbUZvcndhcmRz
RnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09m
ZnNldCkgY29uc3Q7CiAgICAgICAgIE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2Rl
KiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDEwMTg2MikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNiArNDQsMTMgQEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKKyNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOYW1l
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJDbGFzc05vZGVMaXN0LmgiCisjaW5jbHVkZSAiTGFiZWxz
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCisjaW5jbHVkZSAiVGFnTm9k
ZUxpc3QuaCIKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtODM3LDYgKzg0NCw4IEBACiAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUodHJ1ZSk7
CiB9CiAKK3Vuc2lnbmVkIE5vZGVMaXN0c05vZGVEYXRhOjpzX25vZGVMaXN0Q291bnQgPSAwOwor
CiB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNl
ciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnRE
ZWx0YSkKIHsKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZv
cmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwpAQCAtMTEwOSw2ICsxMTE4
LDEwIEBACiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogCisvKiAg
ICBmcHJpbnRmKHN0ZGVyciwgImNhY2hlczolZCwgbm9kZWxpc3Q6JWQsIG5hbWU6JWQsIGNsYXNz
OiVkLCBsYWJlbHM6JWQsIGNoaWxkOiVkLCB0YWc6JWRcbiIsCisgICAgICAgICAgICBjaGlsZC0+
dHJlZVNjb3BlKCktPm1fbnVtTm9kZUxpc3RDYWNoZXMsIE5vZGVMaXN0c05vZGVEYXRhOjpzX25v
ZGVMaXN0Q291bnQsIE5hbWVOb2RlTGlzdDo6c19uYW1lTm9kZUxpc3RDb3VudCwgQ2xhc3NOb2Rl
TGlzdDo6c19jbGFzc05vZGVMaXN0Q291bnQsCisgICAgICAgICAgICBMYWJlbHNOb2RlTGlzdDo6
c19sYWJlbHNOb2RlTGlzdENvdW50LCBDaGlsZE5vZGVMaXN0OjpzX2NoaWxkTm9kZUxpc3RDb3Vu
dCwgVGFnTm9kZUxpc3Q6OnNfdGFnTm9kZUxpc3RDb3VudCk7Ki8KKwogICAgIFJlZlB0cjxOb2Rl
PiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1
bWVudCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkocmV2aXNpb24g
MTAxODYyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE0ICszMSwxOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Cit1bnNpZ25lZCBOYW1lTm9kZUxpc3Q6OnNfbmFtZU5vZGVMaXN0Q291bnQgPSAwOworCiBOYW1l
Tm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiAgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUpCiAgICAgLCBtX25v
ZGVOYW1lKG5hbWUpCiB7CisgICAgc19uYW1lTm9kZUxpc3RDb3VudCsrOwogfQogCiBOYW1lTm9k
ZUxpc3Q6On5OYW1lTm9kZUxpc3QoKQogeworICAgIHNfbmFtZU5vZGVMaXN0Q291bnQtLTsKICAg
ICBtX3Jvb3ROb2RlLT5yZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QodGhpcywgbV9ub2RlTmFtZSk7
CiB9IAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAx
MDE4NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordW5zaWdu
ZWQgQ2hpbGROb2RlTGlzdDo6c19jaGlsZE5vZGVMaXN0Q291bnQgPSAwOworCiBDaGlsZE5vZGVM
aXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIER5bmFtaWNOb2Rl
TGlzdDo6Q2FjaGVzKiBpbmZvKQogICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCBpbmZv
KQogeworICAgIHNfY2hpbGROb2RlTGlzdENvdW50Kys7CiB9CiAKIHVuc2lnbmVkIENoaWxkTm9k
ZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShy
ZXZpc2lvbiAxMDE4NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDE2IEBACiAKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKIAorICAgIHN0YXRpYyB1bnNpZ25lZCBzX25vZGVMaXN0Q291bnQ7CisKKyAgICB+Tm9kZUxp
c3RzTm9kZURhdGEoKSB7CisgICAgICAgIHNfbm9kZUxpc3RDb3VudC0tOworICAgIH0KKwogcHJp
dmF0ZToKLSAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIDogbV9sYWJlbHNOb2RlTGlzdENhY2hlKDAp
IHt9CisgICAgTm9kZUxpc3RzTm9kZURhdGEoKSA6IG1fbGFiZWxzTm9kZUxpc3RDYWNoZSgwKSB7
CisgICAgICAgIHNfbm9kZUxpc3RDb3VudCsrOworICAgIH0KIH07CiAKIGNsYXNzIE5vZGVSYXJl
RGF0YSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShyZXZpc2lvbiAxMDE4NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAKIAogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1
bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7Ci0KK3B1YmxpYzoKICAgICB1bnNpZ25l
ZCBtX251bU5vZGVMaXN0Q2FjaGVzOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Rh
Z05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAxMDE4NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNiArMjksMjAgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCit1bnNpZ25lZCBUYWdOb2RlTGlzdDo6c190YWdOb2RlTGlzdENvdW50ID0gMDsK
KwogVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSkKICAgICA6IER5bmFtaWNOb2RlTGlzdChyb290Tm9kZSkKICAgICAsIG1fbmFtZXNwYWNl
VVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKICAgICBB
U1NFUlQobV9uYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgIW1fbmFtZXNwYWNlVVJJLmlzRW1wdHko
KSk7CisgICAgc190YWdOb2RlTGlzdENvdW50Kys7CiB9CiAKIFRhZ05vZGVMaXN0Ojp+VGFnTm9k
ZUxpc3QoKQogeworICAgIHNfdGFnTm9kZUxpc3RDb3VudC0tOwogICAgIGlmIChtX25hbWVzcGFj
ZVVSSSA9PSBzdGFyQXRvbSkKICAgICAgICAgbV9yb290Tm9kZS0+cmVtb3ZlQ2FjaGVkVGFnTm9k
ZUxpc3QodGhpcywgbV9sb2NhbE5hbWUpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHJldmlzaW9uIDEwMTg2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzNCw3ICsxMDM0LDYgQEAKICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBy
YXJlRGF0YSgpOwogICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCiAgICAgICAgIHJldHVybjsK
LQogICAgIGlmICghaXNBdHRyaWJ1dGVOb2RlKCkpCiAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygp
LT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogICAgIGVsc2UKQEAg
LTI4NTcsMTEgKzI4NTYsMTUgQEAKIHsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KHRoaXMsIEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Y3JlYXRlKGV2ZW50KSk7CiB9
Ci0KKyAgICAKK3Vuc2lnbmVkIGluc2VydGlvbkNvdW50ID0gMDsKKyAgICAKIHZvaWQgTm9kZTo6
ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3Bh
dGNoRm9yYmlkZGVuKCkpOwogICAgIAorICAgIGluc2VydGlvbkNvdW50Kys7CisgICAgCiAgICAg
ZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIG5vdGlmeU5vZGVMaXN0c0F0
dHJpYnV0ZUNoYW5nZWQoKTsgLy8gRklYTUU6IENhbiBkbyBiZXR0ZXIgc29tZSBkYXkuIFJlYWxs
eSBvbmx5IGNhcmUgYWJvdXQgdGhlIG5hbWUgYXR0cmlidXRlIGNoYW5naW5nLgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMTAxODYyKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05hbWVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAK
ICAgICAgICAgdmlydHVhbCB+TmFtZU5vZGVMaXN0KCk7CiAKKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIHNfbmFtZU5vZGVMaXN0Q291bnQ7CisKICAgICBwcml2YXRlOgogICAgICAgICBOYW1lTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDE4NjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2
ICs0NSw4IEBACiAKICAgICAgICAgdmlydHVhbCB+Q2xhc3NOb2RlTGlzdCgpOwogCisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzX2NsYXNzTm9kZUxpc3RDb3VudDsKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3Ry
aW5nJiBjbGFzc05hbWVzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlz
dC5jcHAJKHJldmlzaW9uIDEwMTg2MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9k
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitleHRlcm4gdW5zaWduZWQgaW5zZXJ0aW9uQ291bnQ7CisKIER5bmFtaWNO
b2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpCiAgICAg
OiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9jYWNoZXMoQ2FjaGVzOjpjcmVhdGUoKSkK
ICAgICAsIG1fb3duc0NhY2hlcyh0cnVlKQorICAgICwgbV9pbnNlcnRpb25WZXJzaW9uKGluc2Vy
dGlvbkNvdW50KQogewogICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRo
aXMpOwogfSAgICAKQEAgLTQwLDYgKzQzLDcgQEAKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUp
CiAgICAgLCBtX2NhY2hlcyhjYWNoZXMpCiAgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCisgICAg
LCBtX2luc2VydGlvblZlcnNpb24oaW5zZXJ0aW9uQ291bnQpCiB7CiAgICAgbV9yb290Tm9kZS0+
cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIApAQCAtMTAxLDExICsxMDUsMTcg
QEAKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0K
IAorc3RhdGljIHVuc2lnbmVkIGxpbmVDb3VudCA9IDA7CisKIE5vZGUqIER5bmFtaWNOb2RlTGlz
dDo6aXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IHJlbWFpbmluZ09mZnNl
dCA9IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsK
ICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQpIHsKKyAgICAgICAgaWYgKG1fbGFz
dERPTVZlcnNpb24gPCBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5kb21UcmVlVmVyc2lvbigpKQor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIrIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAifCIpOwogICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVz
LT5sYXN0SXRlbU9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07
CiAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBt
X2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKQEAgLTExMyw2ICsx
MjMsMTQgQEAKICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQ7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIl8iKTsKKyAgICBtX2xhc3RET01WZXJzaW9uID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQo
KS0+ZG9tVHJlZVZlcnNpb24oKTsKKyAgICBsaW5lQ291bnQrKzsKKyAgICBpZiAobGluZUNvdW50
ID09IDk5KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgbGluZUNv
dW50ID0gMDsKKyAgICB9CiAKICAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDwgMCkKICAgICAgICAg
cmV0dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdP
ZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAkocmV2aXNpb24g
MTAxODYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAgICAgfQogICAgIH5MYWJlbHNOb2RlTGlzdCgpOwog
CisgICAgc3RhdGljIHVuc2lnbmVkIHNfbGFiZWxzTm9kZUxpc3RDb3VudDsKKwogcHJvdGVjdGVk
OgogICAgIExhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAxODYyKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICsz
MiwxNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCit1bnNpZ25lZCBMYWJlbHNO
b2RlTGlzdDo6c19sYWJlbHNOb2RlTGlzdENvdW50ID0gMDsKKwogTGFiZWxzTm9kZUxpc3Q6Okxh
YmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUgKQogICAgIDogRHluYW1pY05vZGVMaXN0KGZvck5v
ZGUtPmRvY3VtZW50KCkpICwgbV9mb3JOb2RlKGZvck5vZGUpCiB7CisgICAgc19sYWJlbHNOb2Rl
TGlzdENvdW50Kys7CiB9CiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3QoKQogewor
ICAgIHNfbGFiZWxzTm9kZUxpc3RDb3VudC0tOwogICAgIG1fZm9yTm9kZS0+cmVtb3ZlQ2FjaGVk
TGFiZWxzTm9kZUxpc3QodGhpcyk7CiB9IAogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>118121</attachid>
            <date>2011-12-06 15:19:34 -0800</date>
            <delta_ts>2011-12-06 15:19:34 -0800</delta_ts>
            <desc>Raw data for hit rate in DynamicNodeList::item (_ for misses, | for hits, and + for hits that will be missed in my proposal)</desc>
            <filename>node-sample</filename>
            <type>application/octet-stream</type>
            <size>0</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119733</attachid>
            <date>2011-12-17 11:55:54 -0800</date>
            <delta_ts>2011-12-20 12:13:36 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>wip73853</filename>
            <type>text/plain</type>
            <size>23083</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMzE0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDbGFzc05vZGVMaXN0OjpD
bGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xh
c3NOYW1lcykKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCisgICAgOiBE
eW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBDbGFzc05vZGVMaXN0VHlwZSkKICAgICAs
IG1fY2xhc3NOYW1lcyhjbGFzc05hbWVzLCBub2RlKCktPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpKQogICAgICwgbV9vcmlnaW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkocmV2aXNpb24gMTAzMTQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxOSBAQAogICAgIFN5bnRoZXRpY1N0eWxlQ2hh
bmdlID0gMyA8PCBub2RlU3R5bGVDaGFuZ2VTaGlmdAogfTsKIAorZW51bSBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0VHlwZSB7CisgICAgQ2xhc3NOb2RlTGlzdFR5cGUsCisgICAgTmFtZU5vZGVMaXN0
VHlwZSwKKyAgICBUYWdOb2RlTGlzdFR5cGUsCisgICAgVGFnTm9kZUxpc3ROU1R5cGUsCisjaWYg
RU5BQkxFKE1JQ1JPREFUQSkKKyAgICBNaWNyb0RhdGFJdGVtTGlzdFR5cGUsCisjZW5kaWYKKyAg
ICBMYWJlbE5vZGVMaXN0VHlwZSwKKyAgICBJbnZhbGlkTm9kZUxpc3RUeXBlCit9OworY29uc3Qg
dW5zaWduZWQgbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgPSBJbnZhbGlkTm9kZUxpc3RU
eXBlOworCiBjbGFzcyBOb2RlIDogcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgU2NyaXB0V3Jh
cHBhYmxlLCBwdWJsaWMgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPiB7CiAgICAgZnJpZW5kIGNs
YXNzIERvY3VtZW50OwogICAgIGZyaWVuZCBjbGFzcyBUcmVlU2NvcGU7CkBAIC01MTcsOCArNTMw
LDggQEAKICAgICB2b2lkIHNob3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1lKCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0
KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCopOworICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdFR5cGUsIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lk
IGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJik7CiAgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxk
cmVuQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZpc2lvbiAxMDMxNDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNiBAQAogVHJlZVNjb3BlOjpUcmVlU2NvcGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1
Y3Rpb25UeXBlIGNvbnN0cnVjdGlvblR5cGUpCiAgICAgOiBDb250YWluZXJOb2RlKGRvY3VtZW50
LCBjb25zdHJ1Y3Rpb25UeXBlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUoMCkKLSAgICAsIG1f
bnVtTm9kZUxpc3RDYWNoZXMoMCkKIHsKIH0KIApAQCAtMTM3LDUgKzEzNiw2MyBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCit2b2lkIFRyZWVTY29wZTo6YWRkTm9kZUxpc3RDYWNoZShEeW5hbWlj
U3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQor
eworICAgIEFTU0VSVChsaXN0KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5
cGUpIDwgbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUpOworICAgIGlmICghbV9ub2RlTGlz
dHMpCisgICAgICAgIG1fbm9kZUxpc3RzID0gYWRvcHRBcnJheVB0cihuZXcgRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdEluZm9bbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGVdKTsKKworICAgIEFT
U0VSVCghbGlzdC0+aGFzVmFsaWRDYWNoZSgpKTsKKyAgICBtX25vZGVMaXN0c1t0eXBlXS5ub2Rl
TGlzdC5hZGQobGlzdCk7Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjpyZW1vdmVOb2RlTGlzdENhY2hl
KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RUeXBlIHR5cGUsIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qq
IGxpc3QpCit7CisgICAgQVNTRVJUKGxpc3QpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odHlwZSkgPCBudW1EeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSk7CisgICAgQVNTRVJU
KG1fbm9kZUxpc3RzKTsKKyAgICBBU1NFUlQobV9ub2RlTGlzdHNbdHlwZV0ubm9kZUxpc3QuY29u
dGFpbnMobGlzdCkpOworICAgIG1fbm9kZUxpc3RzW3R5cGVdLm5vZGVMaXN0LnJlbW92ZShsaXN0
KTsKKyAgICBpZiAobGlzdC0+aGFzVmFsaWRDYWNoZSgpKQorICAgICAgICBtX25vZGVMaXN0c1t0
eXBlXS5udW1WYWxpZENhY2hlcy0tOworCisgICAgLy8gRklYTUU6IGRvIHJlbW92ZU5vZGVMaXN0
Q2FjaGVJZlBvc3NpYmxlCit9CisKK2Jvb2wgVHJlZVNjb3BlOjpoYXNOb2RlTGlzdENhY2hlcygp
IGNvbnN0Cit7CisgICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yICh1bnNpZ25lZCB0eXBlID0gMDsgdHlwZSA8IG51bUR5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3RUeXBlOyB0eXBlKyspIHsKKyAgICAgICAgaWYgKG1fbm9kZUxpc3RzW3R5cGVdLm5vZGVM
aXN0LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBUcmVlU2NvcGU6OmNsZWFyTm9kZUxpc3RDYWNoZXMoRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHR5cGUpIDwgbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUpOworICAgIGlmICgh
bV9ub2RlTGlzdHMpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCo+OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0c1t0eXBlXS5ub2RlTGlzdC5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+OjppdGVyYXRv
ciBpdCA9IG1fbm9kZUxpc3RzW3R5cGVdLm5vZGVMaXN0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgpOworICAgIEFTU0VSVCghbV9ub2Rl
TGlzdHNbdHlwZV0ubnVtVmFsaWRDYWNoZXMpOworfQorCit2b2lkIFRyZWVTY29wZTo6Y2xlYXJO
b2RlTGlzdENhY2hlc0ZvckFsbFR5cGVzKCkKK3sKKyAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgbnVtRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdFR5cGU7IHR5cGUrKykKKyAgICAgICAgY2xlYXJOb2RlTGlzdENh
Y2hlcyhzdGF0aWNfY2FzdDxEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZT4odHlwZSkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5h
bWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05v
ZGVMaXN0LmgJKHJldmlzaW9uIDEwMzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWlj
Tm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBEeW5h
bWljTm9kZUxpc3RfaAogI2RlZmluZSBEeW5hbWljTm9kZUxpc3RfaAogCisjaW5jbHVkZSAiTm9k
ZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNzIsMTYgKzczLDIyIEBACiAgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgaW52YWxpZGF0ZUNh
Y2hlKCk7CisgICAgYm9vbCBoYXNWYWxpZENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZXMt
PmlzTGVuZ3RoQ2FjaGVWYWxpZCB8fCBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZDsgfQogICAg
IE5vZGUqIHJvb3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbm9kZSgpOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwot
ICAgIG11dGFibGUgUmVmUHRyPENhY2hlcz4gbV9jYWNoZXM7CisgICAgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+LCBEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSk7CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0KCkgY29uc3Q7CiAg
ICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9m
ZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJk
c0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdP
ZmZzZXQpIGNvbnN0OworCisgICAgdm9pZCBjYWNoZUxlbmd0aCh1bnNpZ25lZCkgY29uc3Q7Cisg
ICAgdm9pZCBjYWNoZUl0ZW0oTm9kZSosIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxDYWNoZXM+IG1fY2FjaGVzOworICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3RUeXBlIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMxNDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDog
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Qocm9vdE5vZGUsIE5hbWVOb2RlTGlzdFR5cGUpCiAgICAgLCBtX25vZGVOYW1lKG5hbWUp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShyZXZpc2lvbiAxMDMxNDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4
LDEyIEBACiAKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRP
cmRlcmVkTWFwLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3du
QXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogCkBAIC01
MSwxMCArNTQsMjUgQEAKICAgICB2b2lkIHJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7
CiAgICAgSFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25z
dDsKIAotICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNoZSgpIHsgKyttX251bU5vZGVMaXN0Q2FjaGVz
OyB9Ci0gICAgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hlKCkgeyBBU1NFUlQobV9udW1Ob2RlTGlz
dENhY2hlcyA+IDApOyAtLW1fbnVtTm9kZUxpc3RDYWNoZXM7IH0KLSAgICBib29sIGhhc05vZGVM
aXN0Q2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Ob2RlTGlzdENhY2hlczsgfQorICAgIHZv
aWQgYWRkTm9kZUxpc3RDYWNoZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1
YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQgcmVtb3ZlTm9kZUxpc3RDYWNoZShEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIGJvb2wgaGFz
Tm9kZUxpc3RDYWNoZXMoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyTm9kZUxpc3RDYWNoZXMoRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUpOworICAgIHZvaWQgY2xlYXJOb2RlTGlzdENhY2hlc0Zv
ckFsbFR5cGVzKCk7CisgICAgCisgICAgdm9pZCBub2RlTGlzdEFkZFZhbGlkQ2FjaGVkKER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3RUeXBlIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9ub2Rl
TGlzdHMpOworICAgICAgICBtX25vZGVMaXN0c1t0eXBlXS5udW1WYWxpZENhY2hlcysrOworICAg
IH0KIAorICAgIHZvaWQgbm9kZWxpc3RSZW1vdmVkVmFsaWRDYWNoZWQoRHluYW1pY1N1YnRyZWVO
b2RlTGlzdFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX25vZGVMaXN0cyk7Cisg
ICAgICAgIEFTU0VSVChtX25vZGVMaXN0c1t0eXBlXS5udW1WYWxpZENhY2hlcyk7CisgICAgICAg
IG1fbm9kZUxpc3RzW3R5cGVdLm51bVZhbGlkQ2FjaGVzLS07CisgICAgfQorCiAgICAgLy8gRmlu
ZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KICAgICAvLyBGaXJzdCBzZWFyY2hl
cyBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBJRCwgYnV0IGlmIHRoYXQgZmFpbHMsIHRo
ZW4gbG9va3MKICAgICAvLyBmb3IgYW4gYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuIElEIG1h
dGNoaW5nIGlzIGFsd2F5cyBjYXNlIHNlbnNpdGl2ZSwgYnV0CkBAIC03Niw3ICs5NCwxMiBAQAog
ICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1bWVudE9yZGVy
ZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAgICB1bnNpZ25lZCBtX251bU5vZGVMaXN0Q2Fj
aGVzOworICAgIHN0cnVjdCBEeW5hbWljU3VidHJlZU5vZGVMaXN0SW5mbyB7CisgICAgICAgIER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3RJbmZvKCkgOiBudW1WYWxpZENhY2hlcygwKSB7IH0KKyAgICAg
ICAgSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj4gbm9kZUxpc3Q7CisgICAgICAgIHVu
c2lnbmVkIG51bVZhbGlkQ2FjaGVzOworICAgIH07CisgICAgT3duQXJyYXlQdHI8RHluYW1pY1N1
YnRyZWVOb2RlTGlzdEluZm8+IG1fbm9kZUxpc3RzOwogfTsKIAogaW5saW5lIGJvb2wgVHJlZVNj
b3BlOjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMTAzMTQ0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCw2IEBA
CiBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5v
ZGVMaXN0c05vZGVEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
dHlwZWRlZiBIYXNoU2V0PER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKLSAg
ICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0aENhY2hlczsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIENsYXNzTm9kZUxpc3QqPiBDbGFzc05vZGVMaXN0Q2FjaGU7CiAgICAgQ2xhc3NOb2Rl
TGlzdENhY2hlIG1fY2xhc3NOb2RlTGlzdENhY2hlOwogCkBAIC03Niw3ICs3Myw3IEBACiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKICAgICB9
Ci0gICAgCisKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKICAgICB2b2lkIGludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UYWdOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Rh
Z05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAzMTQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Rh
Z05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBUYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkK
KyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIG5hbWVzcGFjZVVSSSA9PSBz
dGFyQXRvbSA/IFRhZ05vZGVMaXN0VHlwZSA6IFRhZ05vZGVMaXN0TlNUeXBlKQogICAgICwgbV9u
YW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTAzMTQ0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNyArNDk3LDE0IEBACiAgICAg
aWYgKGN1cnJlbnREb2N1bWVudCAmJiBjdXJyZW50RG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpCiAg
ICAgICAgIGN1cnJlbnREb2N1bWVudC0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAorICAgIC8vIFRo
aXMgc2hvdWxkIHJlbW92ZSBhbGwgbm9kZSBsaXN0IGNhY2hlcyBpbiB0aGUgc3VidHJlZQorICAg
IC8vIEZJWE1FOiB0aGlzIGlzbid0IHJpZ2h0LiBJIG5lZWQgdG8gbW92ZSBub2RlIGxpc3RzIGZy
b20gb25lIHBsYWNlIHRvIGFub3RoZXIgOigKKyAgICBpZiAoY3VycmVudFRyZWVTY29wZSkKKyAg
ICAgICAgY3VycmVudFRyZWVTY29wZS0+Y2xlYXJOb2RlTGlzdENhY2hlc0ZvckFsbFR5cGVzKCk7
CisKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbmNsdWRlUm9vdCA/IHRoaXMgOiB0cmF2ZXJzZU5l
eHROb2RlKHRoaXMpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkg
eworICAgICAgICAvLyBGSVhNRTogYXNzZXJ0IHRoYXQgbm9kZXMgZG9uJ3QgaGF2ZSBub2RlIGxp
c3RzCisKICAgICAgICAgaWYgKG5ld1RyZWVTY29wZSA9PSBuZXdEb2N1bWVudCkgewogICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+cmFy
ZURhdGEoKS0+c2V0VHJlZVNjb3BlKDApOwpAQCAtNTA2LDEyICs1MTMsNiBAQAogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIG5vZGUtPmVuc3VyZVJhcmVEYXRhKCktPnNldFRyZWVTY29wZShu
ZXdUcmVlU2NvcGUpOwogCi0gICAgICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpICYmIG5vZGUt
PnJhcmVEYXRhKCktPm5vZGVMaXN0cygpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRyZWVT
Y29wZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50VHJlZVNjb3BlLT5yZW1vdmVOb2RlTGlzdENh
Y2hlKCk7Ci0gICAgICAgICAgICBuZXdUcmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIG5vZGUtPnNldERvY3VtZW50KG5ld0RvY3VtZW50KTsKIAogICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKQEAgLTU1MCw4ICs1NTEsNiBAQAogdm9p
ZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKIHsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0g
ICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQotICAgICAgICB0
cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9O
X09CU0VSVkVSUykKICAgICBBU1NFUlQoIXRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpIHx8IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLT5pc0VtcHR5KCkpOwpA
QCAtOTkzLDMzICs5OTIsNTIgQEAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lk
IHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKE5vZGUqIG5vZGUsIE5vZGVSYXJlRGF0YSog
ZGF0YSkKK3N0YXRpYyB2b2lkIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKE5vZGVSYXJl
RGF0YSogZGF0YSkKIHsKICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBkYXRhLT5jbGVhck5vZGVMaXN0cygpOwotICAgIG5vZGUtPnRy
ZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiB9CiAKLXZvaWQgTm9kZTo6cmVnaXN0
ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCit2
b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5v
ZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQogewogICAgIE5v
ZGVSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgLy8gV2UgaGF2ZW4ndCBi
ZWVuIHJlY2VpdmluZyBub3RpZmljYXRpb25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJl
ZCBsaXN0cywgc28gdGhlIGNhY2hlIGlzIGludmFsaWQgbm93LgogICAgIGlmIChkYXRhLT5ub2Rl
TGlzdHMoKSAmJiAoIXRyZWVTY29wZSgpIHx8ICF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNo
ZXMoKSkpCiAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAK
LSAgICBkYXRhLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChs
aXN0KTsKKyAgICB0cmVlU2NvcGUoKS0+YWRkTm9kZUxpc3RDYWNoZSh0eXBlLCBsaXN0KTsKIH0K
IAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KiBsaXN0KQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KiBsaXN0KQogeworICAgIHRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKHR5
cGUsIGxpc3QpOworCiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJl
RGF0YSgpLT5ub2RlTGlzdHMoKSk7CiAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KTsKLSAgICBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMucmVtb3ZlKGxpc3Qp
OwotICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKHRoaXMsIGRhdGEpOworICAgIHJl
bW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKGRhdGEpOwogfQogCitzdGF0aWMgRHluYW1pY1N1
YnRyZWVOb2RlTGlzdFR5cGUgYXR0clRvTm9kZUxpc3RUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQoreworICAgIGlmIChhdHRyTmFtZSA9PSBjbGFzc0F0dHIpCisgICAgICAgIHJl
dHVybiBDbGFzc05vZGVMaXN0VHlwZTsKKworICAgIGlmIChhdHRyTmFtZSA9PSBuYW1lQXR0cikK
KyAgICAgICAgcmV0dXJuIE5hbWVOb2RlTGlzdFR5cGU7CisKKyNpZiBFTkFCTEUoTUlDUk9EQVRB
KQorICAgIGlmIChhdHRyTmFtZSA9PSBpdGVtc2NvcGVBdHRyKQorICAgICAgICByZXR1cm4gTWlj
cm9EYXRhTm9kZUxpc3RUeXBlOworICAgIGlmIChhdHRyTmFtZSA9PSBpdGVtcHJvcEF0dHIpCisg
ICAgICAgIHJldHVybiBNaWNyb0RhdGFOb2RlTGlzdFR5cGU7CisjZW5kaWYKKworICAgIHJldHVy
biBJbnZhbGlkTm9kZUxpc3RUeXBlOworICAgIC8vIExhYmVsc05vZGVMaXN0IGlzIGludmFsaWRh
dGVkIHZpYSBub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCBpbiBwYXJzZU1hcHBlZEF0
dHJpYnV0ZQorfQorCiB2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIHsKICAgICBpZiAo
aGFzUmFyZURhdGEoKSAmJiBpc0F0dHJpYnV0ZU5vZGUoKSkgewpAQCAtMTAyOCwyOSArMTA0Niw5
IEBACiAgICAgICAgIGRhdGEtPmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCi0g
ICAgLy8gVGhpcyBsaXN0IHNob3VsZCBiZSBzeW5jJ2VkIHdpdGggTm9kZUxpc3RzTm9kZURhdGEu
Ci0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgotI2lmIEVOQUJMRShNSUNST0RBVEEpCi0g
ICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0dHIKLSAgICAgICAgJiYgYXR0ck5hbWUg
IT0gaXRlbXByb3BBdHRyCi0jZW5kaWYKLSAgICAgICAgJiYgYXR0ck5hbWUgIT0gbmFtZUF0dHIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2Fj
aGVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgQVNTRVJUKHRoaXMgPT0g
bm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpOwotICAgICAgICBpZiAoIW5vZGUtPmhh
c1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRh
KiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5p
bnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwotICAgICAgICByZW1vdmVO
b2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRhKTsKLSAgICB9CisgICAgRHluYW1pY1N1
YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSA9IGF0dHJUb05vZGVMaXN0VHlwZShhdHRyTmFtZSk7Cisg
ICAgaWYgKHR5cGUgIT0gSW52YWxpZE5vZGVMaXN0VHlwZSkKKyAgICAgICAgdHJlZVNjb3BlKCkt
PmNsZWFyTm9kZUxpc3RDYWNoZXModHlwZSk7CiB9CiAKIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKQpAQCAtMTA1OCwyMyArMTA1Niw5IEBA
CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpCiAgICAgICAgIHJhcmVEYXRhKCktPmNsZWFyQ2hpbGRO
b2RlTGlzdENhY2hlKCk7CiAKLSAgICBpZiAoIXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hl
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVE
YXRhKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRh
ID0gbm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlk
YXRlQ2FjaGVzKCk7Ci0KLSAgICAgICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0Ojpp
dGVyYXRvciBlbmQgPSBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7
Ci0gICAgICAgIGZvciAoTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBp
dCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0KLSAgICAg
ICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7Ci0gICAgfQorICAg
IC8vIEZJWE1FOiBXZSBkb24ndCBoYXZlIHRvIGludmFsaWRhdGUgY2FjaGVzIGlmIHRoZSBpbnNl
cnRlZCBvciByZW1vdmVkIG5vZGUKKyAgICAvLyBkaWRuJ3QgaGF2ZSBhbiBhdHRyaWJ1dGUgd2Ug
Y2FyZSBhYm91dC4KKyAgICB0cmVlU2NvcGUoKS0+Y2xlYXJOb2RlTGlzdENhY2hlc0ZvckFsbFR5
cGVzKCk7CiB9CiAKIHZvaWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQo
KQpAQCAtMTA5Nyw2ICsxMDgxLDggQEAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJh
cmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBk
YXRhLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5nZXQoY2xhc3NOYW1lKSk7CiAgICAgZGF0YS0+bV9j
bGFzc05vZGVMaXN0Q2FjaGUucmVtb3ZlKGNsYXNzTmFtZSk7CisKKyAgICB1bnJlZ2lzdGVyRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdChDbGFzc05vZGVMaXN0VHlwZSwgbGlzdCk7CiB9CiAKIHZvaWQg
Tm9kZTo6cmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KE5hbWVOb2RlTGlzdCogbGlzdCwgY29uc3Qg
U3RyaW5nJiBub2RlTmFtZSkKQEAgLTExMDcsNiArMTA5Myw4IEBACiAgICAgTm9kZUxpc3RzTm9k
ZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKICAgICBBU1NFUlRfVU5VU0VE
KGxpc3QsIGxpc3QgPT0gZGF0YS0+bV9uYW1lTm9kZUxpc3RDYWNoZS5nZXQobm9kZU5hbWUpKTsK
ICAgICBkYXRhLT5tX25hbWVOb2RlTGlzdENhY2hlLnJlbW92ZShub2RlTmFtZSk7CisKKyAgICB1
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChOYW1lTm9kZUxpc3RUeXBlLCBsaXN0KTsK
IH0KIAogdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdOb2RlTGlzdCogbGlz
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpAQCAtMTExNyw2ICsxMTA1LDggQEAKICAgICBO
b2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFT
U0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05vZGVMaXN0Q2FjaGUuZ2V0KG5h
bWUuaW1wbCgpKSk7CiAgICAgZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLnJlbW92ZShuYW1lLmlt
cGwoKSk7CisKKyAgICB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChUYWdOb2RlTGlz
dFR5cGUsIGxpc3QpOwogfQogCiB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KFRh
Z05vZGVMaXN0KiBsaXN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQpAQCAtMTEyNyw2ICsx
MTE3LDggQEAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVM
aXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05vZGVM
aXN0Q2FjaGVOUy5nZXQobmFtZS5pbXBsKCkpKTsKICAgICBkYXRhLT5tX3RhZ05vZGVMaXN0Q2Fj
aGVOUy5yZW1vdmUobmFtZS5pbXBsKCkpOworCisgICAgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QoVGFnTm9kZUxpc3ROU1R5cGUsIGxpc3QpOwogfQogCiB2b2lkIE5vZGU6OnJlbW92
ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCkBAIC0x
MTM3LDYgKzExMjksOCBAQAogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KS0+bm9kZUxpc3RzKCk7CiAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1f
bGFiZWxzTm9kZUxpc3RDYWNoZSk7CiAgICAgZGF0YS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlID0g
MDsKKworICAgIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KExhYmVsTm9kZUxpc3RU
eXBlLCBsaXN0KTsKIH0KIAogTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2Rl
KiBzdGF5V2l0aGluKSBjb25zdApAQCAtMjQwMSwyMyArMjM5NSwzMSBAQAogICAgIGlmIChtX2xh
YmVsc05vZGVMaXN0Q2FjaGUpCiAgICAgICAgIG1fbGFiZWxzTm9kZUxpc3RDYWNoZS0+aW52YWxp
ZGF0ZUNhY2hlKCk7CiAgICAgVGFnTm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgdGFnQ2Fj
aGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChUYWdOb2RlTGlzdENh
Y2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAh
PSB0YWdDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hl
KCk7CisgICAgZm9yIChUYWdOb2RlTGlzdENhY2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFn
Tm9kZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkgeworICAgICAg
ICBpZiAoaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNo
ZSgpOworICAgIH0KICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0Nh
Y2hlTlNFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKLSAgICBmb3IgKFRhZ05vZGVM
aXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdp
bigpOyBpdCAhPSB0YWdDYWNoZU5TRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZh
bGlkYXRlQ2FjaGUoKTsKKyAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZU5TRW5k
OyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICAgICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgfQogICAgIGludmFsaWRhdGVDYWNoZXNUaGF0RGVw
ZW5kT25BdHRyaWJ1dGVzKCk7CiB9CiAKIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCkKIHsKICAgICBDbGFzc05vZGVMaXN0Q2Fj
aGU6Oml0ZXJhdG9yIGNsYXNzQ2FjaGVFbmQgPSBtX2NsYXNzTm9kZUxpc3RDYWNoZS5lbmQoKTsK
LSAgICBmb3IgKENsYXNzTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX2NsYXNzTm9kZUxp
c3RDYWNoZS5iZWdpbigpOyBpdCAhPSBjbGFzc0NhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+
c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICBmb3IgKENsYXNzTm9kZUxpc3RDYWNoZTo6
aXRlcmF0b3IgaXQgPSBtX2NsYXNzTm9kZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBjbGFzc0Nh
Y2hlRW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICAgICAgaXQt
PnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgfQogCiAgICAgTmFtZU5vZGVMaXN0Q2Fj
aGU6Oml0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZU5vZGVMaXN0Q2FjaGUuZW5kKCk7Ci0g
ICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0b3IgaXQgPSBtX25hbWVOb2RlTGlzdENh
Y2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgZm9yIChOYW1lTm9kZUxpc3RDYWNoZTo6aXRlcmF0
b3IgaXQgPSBtX25hbWVOb2RlTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsg
KytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQt
PmludmFsaWRhdGVDYWNoZSgpOworICAgIH0KICAgICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hl
KQogICAgICAgICBtX2xhYmVsc05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOwogCkBA
IC0yNDMwLDE2ICsyNDMyLDE1IEBACiB2b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRl
TWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKQogewogICAgIE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6
Oml0ZXJhdG9yIGl0ZW1MaXN0Q2FjaGVFbmQgPSBtX21pY3JvRGF0YUl0ZW1MaXN0Q2FjaGUuZW5k
KCk7Ci0gICAgZm9yIChNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1fbWlj
cm9EYXRhSXRlbUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBpdGVtTGlzdENhY2hlRW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICBmb3IgKE1pY3Jv
RGF0YUl0ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9taWNyb0RhdGFJdGVtTGlzdENhY2hl
LmJlZ2luKCk7IGl0ICE9IGl0ZW1MaXN0Q2FjaGVFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0
LT5zZWNvbmQpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAg
ICB9CiB9CiAjZW5kaWYKIAogYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0eSgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2xpc3RzV2l0aENhY2hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQogICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlTlMuaXNFbXB0eSgp
KQpAQCAtMjk4OSwxMiArMjk5MCw5IEBACiB9CiAjZW5kaWYKIAotdm9pZCBOb2RlUmFyZURhdGE6
OmNyZWF0ZU5vZGVMaXN0cyhOb2RlKiBub2RlKQordm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5v
ZGVMaXN0cyhOb2RlKikKIHsKLSAgICBBU1NFUlQobm9kZSk7CiAgICAgc2V0Tm9kZUxpc3RzKE5v
ZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgaWYgKFRyZWVTY29wZSogdHJlZVNjb3Bl
ID0gbm9kZS0+dHJlZVNjb3BlKCkpCi0gICAgICAgIHRyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNo
ZSgpOwogfQogCiB2b2lkIE5vZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMzE0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxOCArMjgsMjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EeW5hbWlj
U3VidHJlZU5vZGVMaXN0OjpEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKK0R5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiBub2RlLCBEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlKQogICAg
IDogRHluYW1pY05vZGVMaXN0KG5vZGUpCiAgICAgLCBtX2NhY2hlcyhDYWNoZXM6OmNyZWF0ZSgp
KQorICAgICwgbV90eXBlKHR5cGUpCiB7Ci0gICAgcm9vdE5vZGUoKS0+cmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KHRoaXMpOworICAgIHJvb3ROb2RlKCktPnJlZ2lzdGVyRHluYW1pY1N1
YnRyZWVOb2RlTGlzdCh0eXBlLCB0aGlzKTsKIH0KIAogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
fkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoKQogewotICAgIHJvb3ROb2RlKCktPnVucmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCitpbmxpbmUgdm9pZCBEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0OjpjYWNoZUl0ZW0oTm9kZSogaXRlbSwgdW5zaWduZWQgb2Zmc2V0KSBjb25z
dAoreworICAgIGlmICghaGFzVmFsaWRDYWNoZSgpKQorICAgICAgICBub2RlKCktPnRyZWVTY29w
ZSgpLT5ub2RlTGlzdEFkZFZhbGlkQ2FjaGVkKG1fdHlwZSk7CisKKyAgICBtX2NhY2hlcy0+bGFz
dEl0ZW0gPSBpdGVtOworICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKKyAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Cit9CisKIHVuc2lnbmVkIER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fY2FjaGVzLT5p
c0xlbmd0aENhY2hlVmFsaWQpCkBAIC01MCw2ICs2MCw5IEBACiAgICAgZm9yIChOb2RlKiBuID0g
bm9kZSgpLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2Rl
KCkpKQogICAgICAgICBsZW5ndGggKz0gbi0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVz
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CiAKKyAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUoKSkK
KyAgICAgICAgbm9kZSgpLT50cmVlU2NvcGUoKS0+bm9kZUxpc3RBZGRWYWxpZENhY2hlZChtX3R5
cGUpOworCiAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbmd0aDsKICAgICBtX2NhY2hl
cy0+aXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKIApAQCAtNjIsOSArNzUsNyBAQAogICAgIGZv
ciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSgp
KSkgewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVzKHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihuKSkpIHsKICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAg
ICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
bV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNhY2hl
SXRlbShuLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgLS1yZW1haW5pbmdPZmZzZXQ7CkBAIC04MCw5ICs5MSw3IEBACiAgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290
Tm9kZSgpKSkgewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVz
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSkpIHsKICAgICAgICAgICAgIGlmICghcmVtYWluaW5n
T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAg
ICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGNhY2hlSXRlbShuLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgKytyZW1haW5pbmdPZmZzZXQ7CkBAIC0xMzksNiArMTQ4LDgg
QEAKIAogdm9pZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUoKQogewor
ICAgIGlmIChoYXNWYWxpZENhY2hlKCkpCisgICAgICAgIG5vZGUoKS0+dHJlZVNjb3BlKCktPm5v
ZGVsaXN0UmVtb3ZlZFZhbGlkQ2FjaGVkKG1fdHlwZSk7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwCShyZXZpc2lv
biAxMDMxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUgKQotICAgIDog
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChmb3JOb2RlLT5kb2N1bWVudCgpKSAsIG1fZm9yTm9kZShm
b3JOb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChmb3JOb2RlLT5kb2N1bWVudCgp
LCBMYWJlbE5vZGVMaXN0VHlwZSkKKyAgICAsIG1fZm9yTm9kZShmb3JOb2RlKQogewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120057</attachid>
            <date>2011-12-20 12:13:58 -0800</date>
            <delta_ts>2011-12-21 18:19:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73853-20111220121357.patch</filename>
            <type>text/plain</type>
            <size>30884</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzM0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDExLTEyLTIwICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYW5hZ2UgdGhl
IGxpc3Qgb2Ygbm9kZSBsaXN0IGNhY2hlcyBwZXIgdHJlZSBzY29wZSBpbnN0ZWFkIG9mIHBlciBu
b2RlLiBUaGlzIGF2b2lkcworICAgICAgICBoYXZpbmcgdG8gd2FsayB1cCB0aGUgdHJlZSB0byBp
bnZhbGlkYXRlIHRoZSBjYWNoZXMuCisKKyAgICAgICAgRHluYW1pY05vZGVMaXN0IG5vdyBpbmZv
cm1zIG9mIHRoZSB0cmVlIHNjb3BlIHdoZW4gaXQgY2FjaGVzIGEgdmFsdWUgb3IgaW52YWxpZGF0
ZXMKKyAgICAgICAgdGhlIGNhY2hlLiBUcmVlU2NvcGUga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJl
ciBvZiBub2RlIGxpc3RzIHBlciB0eXBlLgorCisgICAgICAgIEFsc28gZml4ZWQgYSBidWcgaW4g
TGFiZWxzTm9kZUxpc3QgdGhhdCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCB3YXMg
Y2FsbGVkCisgICAgICAgIG9uIHRoZSBkb2N1bWVudCBpbnN0ZWFkIG9mIG1fZm9yTm9kZS4gVGhp
cyByZXN1bHRlZCBpbiBjcmFzaGVzIG9mIGV4aXN0aW5nIHRlc3RzCisgICAgICAgIHdoZW4gdGhp
cyBwYXRjaCBpcyBhcHBsaWVkLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2ludmFsaWRhdGUt
Y2FjaGUtYWZ0ZXItdHJlZXNjb3BlLWNoYW5nZS5odG1sCisKKyAgICAgICAgKiBkb20vQ2xhc3NO
b2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVMaXN0OjpDbGFzc05vZGVM
aXN0KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Y2FjaGVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtRm9yd2FyZHNG
cm9tQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojpp
dGVtQmFja3dhcmRzRnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVM
aXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpoYXNWYWxp
ZENhY2hlKToKKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjptb3ZlVHJlZVNjb3BlT2ZOb2RlTGlzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVOb2RlTGlz
dENhY2hlSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6YXR0clRvTm9kZUxpc3RU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFm
dGVyQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRl
Tm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVNaWNyb2Rh
dGFJdGVtTGlzdENhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0
cyk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6
CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05v
ZGVMaXN0OjpUYWdOb2RlTGlzdCk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OlRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlU2NvcGU6OmFkZE5vZGVMaXN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjpyZW1vdmVOb2RlTGlzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6aGFz
Tm9kZUxpc3RDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpjbGVhck5vZGVM
aXN0Q2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6Y2xlYXJOb2RlTGlzdENh
Y2hlc0ZvckFsbFR5cGVzKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlU2NvcGU6Om5vZGVMaXN0Q2FjaGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpub2RlTGlzdEludmFsaWRhdGVkQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0SW5mbzo6RHluYW1pY1N1YnRyZWVO
b2RlTGlzdEluZm8pOgorICAgICAgICAqIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3QpOgorCiAyMDExLTEyLTE5ICBB
ZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbmFtZSBFbGVtZW50
OjpzZXRBdHRyaWJ1dGVNYXAgdG8gcGFyc2VyU2V0QXR0cmlidXRlTWFwIGFuZCBsaW1pdCBpdHMg
dXNlIHRvIHRoZSBwYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJ
KHJldmlzaW9uIDEwMzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBDbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
cm9vdE5vZGUpCi0gICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgbm9kZSgpLT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5v
ZGUsIENsYXNzTm9kZUxpc3RUeXBlKQorICAgICwgbV9jbGFzc05hbWVzKGNsYXNzTmFtZXMsIHRo
aXMtPnJvb3ROb2RlKCktPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQogICAgICwgbV9vcmln
aW5hbENsYXNzTmFtZXMoY2xhc3NOYW1lcykKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDI5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCitEeW5hbWljU3VidHJlZU5v
ZGVMaXN0OjpEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSkKICAgICA6IER5bmFtaWNOb2RlTGlzdChub2Rl
KQogICAgICwgbV9jYWNoZXMoQ2FjaGVzOjpjcmVhdGUoKSkKKyAgICAsIG1fdHlwZSh0eXBlKQog
ewotICAgIHJvb3ROb2RlKCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsK
KyAgICBpZiAodHlwZSAhPSBMYWJlbE5vZGVMaXN0VHlwZSkKKyAgICAgICAgcm9vdE5vZGUoKS0+
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHR5cGUsIHRoaXMpOwogfQogCiBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1YnRyZWVOb2RlTGlzdCgpCiB7Ci0gICAgcm9vdE5v
ZGUoKS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CisgICAgaWYgKG1f
dHlwZSAhPSBMYWJlbE5vZGVMaXN0VHlwZSkKKyAgICAgICAgcm9vdE5vZGUoKS0+dW5yZWdpc3Rl
ckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobV90eXBlLCB0aGlzKTsKK30KKworaW5saW5lIHZvaWQg
RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Y2FjaGVJdGVtKE5vZGUqIGl0ZW0sIHVuc2lnbmVkIG9m
ZnNldCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUoKSkKKyAgICAgICAgbm9kZSgp
LT50cmVlU2NvcGUoKS0+bm9kZUxpc3RDYWNoZWRWYWx1ZShtX3R5cGUpOworCisgICAgbV9jYWNo
ZXMtPmxhc3RJdGVtID0gaXRlbTsKKyAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZz
ZXQ7CisgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOwogfQogCiB1bnNpZ25l
ZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdApAQCAtNTAsNiArNjMsOSBA
QCB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoCiAgICAgZm9yIChOb2Rl
KiBuID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHJv
b3ROb2RlKCkpKQogICAgICAgICBsZW5ndGggKz0gbi0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGVN
YXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CiAKKyAgICBpZiAoIWhhc1ZhbGlkQ2Fj
aGUoKSkKKyAgICAgICAgbm9kZSgpLT50cmVlU2NvcGUoKS0+bm9kZUxpc3RDYWNoZWRWYWx1ZSht
X3R5cGUpOworCiAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbmd0aDsKICAgICBtX2Nh
Y2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKIApAQCAtNjIsOSArNzgsNyBAQCBOb2Rl
KiBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtRm9yd2FyCiAgICAgZm9yIChOb2RlKiBuID0g
c3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKCkpKSB7CiAgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNoZXMoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAg
ICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgIG1fY2FjaGVz
LT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJ
dGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY2FjaGVJdGVtKG4sIG9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAtLXJlbWFpbmluZ09mZnNldDsKQEAgLTgwLDkgKzk0LDcgQEAgTm9kZSogRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5vZGUoKSkpIHsKICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7
CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgIG1f
Y2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVt
T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZh
bGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjYWNoZUl0ZW0obiwgb2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsrcmVtYWlu
aW5nT2Zmc2V0OwpAQCAtMTM5LDYgKzE1MSw4IEBAIGJvb2wgRHluYW1pY1N1YnRyZWVOb2RlTGlz
dDo6aXNEeW5hbWljTm8KIAogdm9pZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppbnZhbGlkYXRl
Q2FjaGUoKQogeworICAgIGlmIChoYXNWYWxpZENhY2hlKCkpCisgICAgICAgIG5vZGUoKS0+dHJl
ZVNjb3BlKCktPm5vZGVMaXN0SW52YWxpZGF0ZWRDYWNoZShtX3R5cGUpOwogICAgIG1fY2FjaGVz
LT5yZXNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShy
ZXZpc2lvbiAxMDMxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZm5kZWYgRHluYW1pY05vZGVMaXN0
X2gKICNkZWZpbmUgRHluYW1pY05vZGVMaXN0X2gKIAorI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KQEAgLTcyLDE2ICs3MywyMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hl
KCk7CisgICAgYm9vbCBoYXNWYWxpZENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZXMtPmlz
TGVuZ3RoQ2FjaGVWYWxpZCB8fCBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZDsgfQogICAgIE5v
ZGUqIHJvb3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbm9kZSgpOyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwotICAg
IG11dGFibGUgUmVmUHRyPENhY2hlcz4gbV9jYWNoZXM7CisgICAgRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+LCBEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSk7CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0KCkgY29uc3Q7CiAgICAg
Tm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNl
dCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zy
b21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZz
ZXQpIGNvbnN0OworCisgICAgdm9pZCBjYWNoZUxlbmd0aCh1bnNpZ25lZCkgY29uc3Q7CisgICAg
dm9pZCBjYWNoZUl0ZW0oTm9kZSosIHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CisKKyAgICBtdXRh
YmxlIFJlZlB0cjxDYWNoZXM+IG1fY2FjaGVzOworICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RU
eXBlIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMxNDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBOYW1lTm9k
ZUxpc3Q6Ok5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlKQorICAgIDog
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSwgTmFtZU5vZGVMaXN0VHlwZSkKICAgICAs
IG1fbm9kZU5hbWUobmFtZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEw
MzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDc3LDYgKzQ3Nyw0NSBAQCBUcmVlU2NvcGUqIE5vZGU6OnRyZWVTY29wZSgpIGNvbnN0CiAgICAg
cmV0dXJuIHNjb3BlID8gc2NvcGUgOiBtX2RvY3VtZW50OwogfQogCitzdGF0aWMgdm9pZCBtb3Zl
VHJlZVNjb3BlT2ZOb2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cywgVHJlZVNj
b3BlKiBjdXJyZW50VHJlZVNjb3BlLCBUcmVlU2NvcGUqIG5ld1RyZWVTY29wZSkKK3sKKyAgICBm
b3IgKE5vZGVMaXN0c05vZGVEYXRhOjpDbGFzc05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5iZWdpbigpOworICAgICAgICAg
aXQgIT0gbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5lbmQoKTsgKytpdCkgeworICAg
ICAgICBpZiAoY3VycmVudFRyZWVTY29wZSkKKyAgICAgICAgICAgIGN1cnJlbnRUcmVlU2NvcGUt
PnJlbW92ZU5vZGVMaXN0Q2FjaGUoQ2xhc3NOb2RlTGlzdFR5cGUsIGl0LT5zZWNvbmQpOworICAg
ICAgICBuZXdUcmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoQ2xhc3NOb2RlTGlzdFR5cGUsIGl0
LT5zZWNvbmQpOworICAgIH0KKworICAgIGZvciAoTm9kZUxpc3RzTm9kZURhdGE6OlRhZ05vZGVM
aXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm9kZUxpc3RzLT5tX3RhZ05vZGVMaXN0Q2Fj
aGUuYmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IG5vZGVMaXN0cy0+bV90YWdOb2RlTGlzdENhY2hl
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChjdXJyZW50VHJlZVNjb3BlKQorICAgICAgICAg
ICAgY3VycmVudFRyZWVTY29wZS0+cmVtb3ZlTm9kZUxpc3RDYWNoZShUYWdOb2RlTGlzdFR5cGUs
IGl0LT5zZWNvbmQpOworICAgICAgICBuZXdUcmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoVGFn
Tm9kZUxpc3RUeXBlLCBpdC0+c2Vjb25kKTsKKyAgICB9CisKKyAgICBmb3IgKE5vZGVMaXN0c05v
ZGVEYXRhOjpUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm9kZUxpc3Rz
LT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOworICAgICAgICAgaXQgIT0gbm9kZUxpc3Rz
LT5tX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoY3VycmVu
dFRyZWVTY29wZSkKKyAgICAgICAgICAgIGN1cnJlbnRUcmVlU2NvcGUtPnJlbW92ZU5vZGVMaXN0
Q2FjaGUoVGFnTm9kZUxpc3ROU1R5cGUsIGl0LT5zZWNvbmQpOworICAgICAgICBuZXdUcmVlU2Nv
cGUtPmFkZE5vZGVMaXN0Q2FjaGUoVGFnTm9kZUxpc3ROU1R5cGUsIGl0LT5zZWNvbmQpOworICAg
IH0KKworI2lmIEVOQUJMRShNSUNST0RBVEEpCisgICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6
TWljcm9EYXRhTm9kZUNhY2hlOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vZGVMaXN0cy0+bV9taWNy
b0RhdGFJdGVtTGlzdENhY2hlLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBub2RlTGlzdHMtPm1f
bWljcm9EYXRhSXRlbUxpc3RDYWNoZS5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoY3VycmVu
dFRyZWVTY29wZSkKKyAgICAgICAgICAgIGN1cnJlbnRUcmVlU2NvcGUtPnJlbW92ZU5vZGVMaXN0
Q2FjaGUoTWljcm9EYXRhTm9kZUxpc3RUeXBlLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbmV3VHJl
ZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKE1pY3JvRGF0YU5vZGVMaXN0VHlwZSwgaXQtPnNlY29u
ZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAobm9kZUxpc3RzLT5tX2xhYmVsc05vZGVMaXN0
Q2FjaGUpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRUcmVlU2NvcGUpCisgICAgICAgICAgICBjdXJy
ZW50VHJlZVNjb3BlLT5yZW1vdmVOb2RlTGlzdENhY2hlKExhYmVsTm9kZUxpc3RUeXBlLCBub2Rl
TGlzdHMtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSk7CisgICAgICAgIG5ld1RyZWVTY29wZS0+YWRk
Tm9kZUxpc3RDYWNoZShMYWJlbE5vZGVMaXN0VHlwZSwgbm9kZUxpc3RzLT5tX2xhYmVsc05vZGVM
aXN0Q2FjaGUpOworICAgIH0KK30KKwogdm9pZCBOb2RlOjpzZXRUcmVlU2NvcGVSZWN1cnNpdmVs
eShUcmVlU2NvcGUqIG5ld1RyZWVTY29wZSwgYm9vbCBpbmNsdWRlUm9vdCkKIHsKICAgICBBU1NF
UlQodGhpcyk7CkBAIC00OTcsNyArNTM2LDEyIEBAIHZvaWQgTm9kZTo6c2V0VHJlZVNjb3BlUmVj
dXJzaXZlbHkoVHJlZVMKICAgICBpZiAoY3VycmVudERvY3VtZW50ICYmIGN1cnJlbnREb2N1bWVu
dCAhPSBuZXdEb2N1bWVudCkKICAgICAgICAgY3VycmVudERvY3VtZW50LT5pbmNET01UcmVlVmVy
c2lvbigpOwogCisgICAgaWYgKGN1cnJlbnRUcmVlU2NvcGUpCisgICAgICAgIGN1cnJlbnRUcmVl
U2NvcGUtPmNsZWFyTm9kZUxpc3RDYWNoZXNGb3JBbGxUeXBlcygpOworCiAgICAgZm9yIChOb2Rl
KiBub2RlID0gaW5jbHVkZVJvb3QgPyB0aGlzIDogdHJhdmVyc2VOZXh0Tm9kZSh0aGlzKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICAgICAgLy8gRklY
TUU6IGFzc2VydCB0aGF0IG5vZGVzIGRvbid0IGhhdmUgbm9kZSBsaXN0cworCiAgICAgICAgIGlm
IChuZXdUcmVlU2NvcGUgPT0gbmV3RG9jdW1lbnQpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5o
YXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgICAgIG5vZGUtPnJhcmVEYXRhKCktPnNldFRyZWVT
Y29wZSgwKTsKQEAgLTUwNiwxMCArNTUwLDkgQEAgdm9pZCBOb2RlOjpzZXRUcmVlU2NvcGVSZWN1
cnNpdmVseShUcmVlUwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5vZGUtPmVuc3VyZVJh
cmVEYXRhKCktPnNldFRyZWVTY29wZShuZXdUcmVlU2NvcGUpOwogCi0gICAgICAgIGlmIChub2Rl
LT5oYXNSYXJlRGF0YSgpICYmIG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0cygpKSB7Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudFRyZWVTY29wZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50VHJl
ZVNjb3BlLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7Ci0gICAgICAgICAgICBuZXdUcmVlU2NvcGUt
PmFkZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsK
KyAgICAgICAgICAgIGlmIChOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gbm9kZS0+cmFy
ZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICAgICAgbW92ZVRyZWVTY29wZU9mTm9k
ZUxpc3RzKG5vZGVMaXN0cywgY3VycmVudFRyZWVTY29wZSwgbmV3VHJlZVNjb3BlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIG5vZGUtPnNldERvY3VtZW50KG5ld0RvY3VtZW50KTsKQEAgLTU1MCw4
ICs1OTMsNiBAQCBPd25QdHI8Tm9kZVJhcmVEYXRhPiBOb2RlOjpjcmVhdGVSYXJlRGF0CiB2b2lk
IE5vZGU6OmNsZWFyUmFyZURhdGEoKQogewogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKLSAg
ICBpZiAodHJlZVNjb3BlKCkgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHRy
ZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CiAKICNpZiBFTkFCTEUoTVVUQVRJT05f
T0JTRVJWRVJTKQogICAgIEFTU0VSVCghdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5
KCkgfHwgdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCktPmlzRW1wdHkoKSk7CkBA
IC05OTMsMzEgKzEwMzQsNTAgQEAgdW5zaWduZWQgTm9kZTo6bm9kZUluZGV4KCkgY29uc3QKICAg
ICByZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBv
c3NpYmxlKE5vZGUqIG5vZGUsIE5vZGVSYXJlRGF0YSogZGF0YSkKK3N0YXRpYyB2b2lkIHJlbW92
ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKE5vZGVSYXJlRGF0YSogZGF0YSkKIHsKICAgICBpZiAo
IWRhdGEtPm5vZGVMaXN0cygpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBkYXRh
LT5jbGVhck5vZGVMaXN0cygpOwotICAgIG5vZGUtPnRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlz
dENhY2hlKCk7CiB9CiAKLXZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0
KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0KQogewogICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IGVuc3Vy
ZVJhcmVEYXRhKCk7CiAgICAgLy8gV2UgaGF2ZW4ndCBiZWVuIHJlY2VpdmluZyBub3RpZmljYXRp
b25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJlZCBsaXN0cywgc28gdGhlIGNhY2hlIGlz
IGludmFsaWQgbm93LgogICAgIGlmIChkYXRhLT5ub2RlTGlzdHMoKSAmJiAoIXRyZWVTY29wZSgp
IHx8ICF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkpCiAgICAgICAgIGRhdGEtPm5v
ZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAgICBkYXRhLT5lbnN1cmVOb2RlTGlz
dHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKKyAgICB0cmVlU2NvcGUoKS0+
YWRkTm9kZUxpc3RDYWNoZSh0eXBlLCBsaXN0KTsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQordm9p
ZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5v
ZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQogeworICAgIHRy
ZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKHR5cGUsIGxpc3QpOworCiAgICAgQVNTRVJU
KGhhc1JhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7CiAg
ICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKLSAgICBkYXRhLT5ub2RlTGlzdHMo
KS0+bV9saXN0c1dpdGhDYWNoZXMucmVtb3ZlKGxpc3QpOwotICAgIHJlbW92ZU5vZGVMaXN0Q2Fj
aGVJZlBvc3NpYmxlKHRoaXMsIGRhdGEpOworICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3Np
YmxlKGRhdGEpOworfQorCitzdGF0aWMgRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgYXR0clRv
Tm9kZUxpc3RUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQoreworICAgIGlmIChh
dHRyTmFtZSA9PSBjbGFzc0F0dHIpCisgICAgICAgIHJldHVybiBDbGFzc05vZGVMaXN0VHlwZTsK
KworICAgIGlmIChhdHRyTmFtZSA9PSBuYW1lQXR0cikKKyAgICAgICAgcmV0dXJuIE5hbWVOb2Rl
TGlzdFR5cGU7CisKKyNpZiBFTkFCTEUoTUlDUk9EQVRBKQorICAgIGlmIChhdHRyTmFtZSA9PSBp
dGVtc2NvcGVBdHRyKQorICAgICAgICByZXR1cm4gTWljcm9EYXRhTm9kZUxpc3RUeXBlOworICAg
IGlmIChhdHRyTmFtZSA9PSBpdGVtcHJvcEF0dHIpCisgICAgICAgIHJldHVybiBNaWNyb0RhdGFO
b2RlTGlzdFR5cGU7CisjZW5kaWYKKworICAgIHJldHVybiBJbnZhbGlkTm9kZUxpc3RUeXBlOwor
ICAgIC8vIExhYmVsc05vZGVMaXN0IGlzIGludmFsaWRhdGVkIHZpYSBub3RpZnlMb2NhbE5vZGVM
aXN0c0xhYmVsQ2hhbmdlZCBpbiBwYXJzZU1hcHBlZEF0dHJpYnV0ZQogfQogCiB2b2lkIE5vZGU6
OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTEwMjgsMjkgKzEwODgsOSBAQCB2b2lkIE5vZGU6Omlu
dmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyCiAgICAgICAgIGRhdGEtPmNsZWFyQ2hpbGROb2Rl
TGlzdENhY2hlKCk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBsaXN0IHNob3VsZCBiZSBzeW5jJ2Vk
IHdpdGggTm9kZUxpc3RzTm9kZURhdGEuCi0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgot
I2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0
dHIKLSAgICAgICAgJiYgYXR0ck5hbWUgIT0gaXRlbXByb3BBdHRyCi0jZW5kaWYKLSAgICAgICAg
JiYgYXR0ck5hbWUgIT0gbmFtZUF0dHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJl
ZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
ciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsK
LSAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkp
OwotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKLSAgICAg
ICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmli
dXRlcygpOwotICAgICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRh
KTsKLSAgICB9CisgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSA9IGF0dHJUb05v
ZGVMaXN0VHlwZShhdHRyTmFtZSk7CisgICAgaWYgKHR5cGUgIT0gSW52YWxpZE5vZGVMaXN0VHlw
ZSkKKyAgICAgICAgdHJlZVNjb3BlKCktPmNsZWFyTm9kZUxpc3RDYWNoZXModHlwZSk7CiB9CiAK
IHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQo
KQpAQCAtMTA1OCwyMyArMTA5OCw5IEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0Nh
Y2hlQWZ0ZXIKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+Y2xl
YXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKIAotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVM
aXN0Q2FjaGVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlz
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+
aGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBOb2RlUmFyZURh
dGEqIGRhdGEgPSBub2RlLT5yYXJlRGF0YSgpOwotICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0
cygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCkt
PmludmFsaWRhdGVDYWNoZXMoKTsKLQotICAgICAgICBOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxp
c3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hl
cy5lbmQoKTsKLSAgICAgICAgZm9yIChOb2RlTGlzdHNOb2RlRGF0YTo6Tm9kZUxpc3RTZXQ6Oml0
ZXJhdG9yIGl0ID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5pbnZhbGlkYXRlQ2FjaGUoKTsK
LQotICAgICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRhKTsKLSAg
ICB9CisgICAgLy8gRklYTUU6IFdlIGRvbid0IGhhdmUgdG8gaW52YWxpZGF0ZSBjYWNoZXMgaWYg
dGhlIGluc2VydGVkIG9yIHJlbW92ZWQgbm9kZQorICAgIC8vIGRpZG4ndCBoYXZlIGFuIGF0dHJp
YnV0ZSB3ZSBjYXJlIGFib3V0LgorICAgIHRyZWVTY29wZSgpLT5jbGVhck5vZGVMaXN0Q2FjaGVz
Rm9yQWxsVHlwZXMoKTsKIH0KIAogdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVs
Q2hhbmdlZCgpCkBAIC0yNDAxLDIzICsyNDI3LDMxIEBAIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6
OmludmFsaWRhdGVDYWNoZXMKICAgICBpZiAobV9sYWJlbHNOb2RlTGlzdENhY2hlKQogICAgICAg
ICBtX2xhYmVsc05vZGVMaXN0Q2FjaGUtPmludmFsaWRhdGVDYWNoZSgpOwogICAgIFRhZ05vZGVM
aXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hl
LmVuZCgpOwotICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RhZ05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVFbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAgIGZvciAoVGFnTm9kZUxpc3RD
YWNoZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQg
IT0gdGFnQ2FjaGVFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAg
ICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICB9CiAgICAgVGFnTm9kZUxp
c3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdDYWNoZU5TRW5kID0gbV90YWdOb2RlTGlzdENh
Y2hlTlMuZW5kKCk7Ci0gICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVOU0VuZDsg
KytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgZm9yIChU
YWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlzdENhY2hl
TlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVOU0VuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQt
PnNlY29uZCkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAg
IH0KICAgICBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogfQogCiB2
b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmli
dXRlcygpCiB7CiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBjbGFzc0NhY2hlRW5k
ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChDbGFzc05vZGVMaXN0Q2Fj
aGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gY2xh
c3NDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7
CisgICAgZm9yIChDbGFzc05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVM
aXN0Q2FjaGUuYmVnaW4oKTsgaXQgIT0gY2xhc3NDYWNoZUVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoaXQtPnNlY29uZCkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgp
OworICAgIH0KIAogICAgIE5hbWVOb2RlTGlzdENhY2hlOjppdGVyYXRvciBuYW1lQ2FjaGVFbmQg
PSBtX25hbWVOb2RlTGlzdENhY2hlLmVuZCgpOwotICAgIGZvciAoTmFtZU5vZGVMaXN0Q2FjaGU6
Oml0ZXJhdG9yIGl0ID0gbV9uYW1lTm9kZUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBuYW1lQ2Fj
aGVFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworICAg
IGZvciAoTmFtZU5vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9uYW1lTm9kZUxpc3RDYWNo
ZS5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5z
ZWNvbmQpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICB9
CiAgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKICAgICAgICAgbV9sYWJlbHNOb2RlTGlz
dENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIApAQCAtMjQzMCwxNiArMjQ2NCwxNSBAQCB2b2lk
IE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzCiB2b2lkIE5vZGVMaXN0c05vZGVE
YXRhOjppbnZhbGlkYXRlTWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKQogewogICAgIE1pY3JvRGF0
YUl0ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ZW1MaXN0Q2FjaGVFbmQgPSBtX21pY3JvRGF0YUl0
ZW1MaXN0Q2FjaGUuZW5kKCk7Ci0gICAgZm9yIChNaWNyb0RhdGFJdGVtTGlzdENhY2hlOjppdGVy
YXRvciBpdCA9IG1fbWljcm9EYXRhSXRlbUxpc3RDYWNoZS5iZWdpbigpOyBpdCAhPSBpdGVtTGlz
dENhY2hlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2FjaGUoKTsK
KyAgICBmb3IgKE1pY3JvRGF0YUl0ZW1MaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9taWNyb0Rh
dGFJdGVtTGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGl0ZW1MaXN0Q2FjaGVFbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlk
YXRlQ2FjaGUoKTsKKyAgICB9CiB9CiAjZW5kaWYKIAogYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6
aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2xpc3RzV2l0aENhY2hlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV90YWdOb2RlTGlzdENh
Y2hlTlMuaXNFbXB0eSgpKQpAQCAtMjk4OSwxMiArMzAyMiw5IEBAIEhUTUxQcm9wZXJ0aWVzQ29s
bGVjdGlvbiogTm9kZTo6cHJvcGVydGkKIH0KICNlbmRpZgogCi12b2lkIE5vZGVSYXJlRGF0YTo6
Y3JlYXRlTm9kZUxpc3RzKE5vZGUqIG5vZGUpCit2b2lkIE5vZGVSYXJlRGF0YTo6Y3JlYXRlTm9k
ZUxpc3RzKE5vZGUqKQogewotICAgIEFTU0VSVChub2RlKTsKICAgICBzZXROb2RlTGlzdHMoTm9k
ZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICBpZiAoVHJlZVNjb3BlKiB0cmVlU2NvcGUg
PSBub2RlLT50cmVlU2NvcGUoKSkKLSAgICAgICAgdHJlZVNjb3BlLT5hZGROb2RlTGlzdENhY2hl
KCk7CiB9CiAKIHZvaWQgTm9kZVJhcmVEYXRhOjpjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEwMzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsMTkgQEAgZW51bSBTdHlsZUNoYW5n
ZVR5cGUgeyAKICAgICBTeW50aGV0aWNTdHlsZUNoYW5nZSA9IDMgPDwgbm9kZVN0eWxlQ2hhbmdl
U2hpZnQKIH07CiAKK2VudW0gRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgeworICAgIENsYXNz
Tm9kZUxpc3RUeXBlLAorICAgIE5hbWVOb2RlTGlzdFR5cGUsCisgICAgVGFnTm9kZUxpc3RUeXBl
LAorICAgIFRhZ05vZGVMaXN0TlNUeXBlLAorI2lmIEVOQUJMRShNSUNST0RBVEEpCisgICAgTWlj
cm9EYXRhSXRlbUxpc3RUeXBlLAorI2VuZGlmCisgICAgTGFiZWxOb2RlTGlzdFR5cGUsCisgICAg
SW52YWxpZE5vZGVMaXN0VHlwZQorfTsKK2NvbnN0IHVuc2lnbmVkIG51bUR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3RUeXBlID0gSW52YWxpZE5vZGVMaXN0VHlwZTsKKwogY2xhc3MgTm9kZSA6IHB1Ymxp
YyBFdmVudFRhcmdldCwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFRyZWVTaGFyZWQ8
Q29udGFpbmVyTm9kZT4gewogICAgIGZyaWVuZCBjbGFzcyBEb2N1bWVudDsKICAgICBmcmllbmQg
Y2xhc3MgVHJlZVNjb3BlOwpAQCAtNTE3LDggKzUzMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNo
b3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgcmVn
aXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWlj
U3VidHJlZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQg
dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5
cGUsIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlz
dHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAg
dm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOwogICAg
IHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEwMzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsNiBAQCBjbGFzcyBU
cmVlU2NvcGU7CiBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE5vZGVMaXN0c05vZGVEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqPiBOb2RlTGlz
dFNldDsKLSAgICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0aENhY2hlczsKLQogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIENsYXNzTm9kZUxpc3QqPiBDbGFzc05vZGVMaXN0Q2FjaGU7CiAgICAg
Q2xhc3NOb2RlTGlzdENhY2hlIG1fY2xhc3NOb2RlTGlzdENhY2hlOwogCkBAIC03Niw3ICs3Myw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9kZUxpc3Rz
Tm9kZURhdGEpOwogICAgIH0KLSAgICAKKwogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOwog
ICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMxNDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCi0gICAgOiBEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KHJvb3ROb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSwg
bmFtZXNwYWNlVVJJID09IHN0YXJBdG9tID8gVGFnTm9kZUxpc3RUeXBlIDogVGFnTm9kZUxpc3RO
U1R5cGUpCiAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAgLCBtX2xvY2Fs
TmFtZShsb2NhbE5hbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2aXNp
b24gMTAzMTQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFRyZWVT
Y29wZTo6VHJlZVNjb3BlKERvY3VtZW50KiBkb2N1bWVudCwgQ29uc3RydWN0aW9uVHlwZSBjb25z
dHJ1Y3Rpb25UeXBlKQogICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCwgY29uc3RydWN0aW9u
VHlwZSkKICAgICAsIG1fcGFyZW50VHJlZVNjb3BlKDApCi0gICAgLCBtX251bU5vZGVMaXN0Q2Fj
aGVzKDApCiB7CiB9CiAKQEAgLTEzNyw1ICsxMzYsNjIgQEAgYm9vbCBUcmVlU2NvcGU6OmFwcGx5
QXV0aG9yU2hlZXRzKCkgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFRyZWVTY29w
ZTo6YWRkTm9kZUxpc3RDYWNoZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlLCBEeW5h
bWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQoreworICAgIEFTU0VSVChsaXN0KTsKKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIDwgbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlz
dFR5cGUpOworICAgIGlmICghbV9ub2RlTGlzdHMpCisgICAgICAgIG1fbm9kZUxpc3RzID0gYWRv
cHRBcnJheVB0cihuZXcgRHluYW1pY1N1YnRyZWVOb2RlTGlzdEluZm9bbnVtRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdFR5cGVdKTsKKworICAgIG1fbm9kZUxpc3RzW3R5cGVdLm5vZGVMaXN0LmFkZChs
aXN0KTsKKyAgICBpZiAobGlzdC0+aGFzVmFsaWRDYWNoZSgpKQorICAgICAgICBtX25vZGVMaXN0
c1t0eXBlXS5udW1WYWxpZENhY2hlcysrOworfQorCit2b2lkIFRyZWVTY29wZTo6cmVtb3ZlTm9k
ZUxpc3RDYWNoZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlLCBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KiBsaXN0KQoreworICAgIEFTU0VSVChsaXN0KTsKKyAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIDwgbnVtRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUpOwor
ICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CisgICAgQVNTRVJUKG1fbm9kZUxpc3RzW3R5cGVdLm5v
ZGVMaXN0LmNvbnRhaW5zKGxpc3QpKTsKKyAgICBtX25vZGVMaXN0c1t0eXBlXS5ub2RlTGlzdC5y
ZW1vdmUobGlzdCk7CisgICAgaWYgKGxpc3QtPmhhc1ZhbGlkQ2FjaGUoKSkKKyAgICAgICAgbV9u
b2RlTGlzdHNbdHlwZV0ubnVtVmFsaWRDYWNoZXMtLTsKK30KKworYm9vbCBUcmVlU2NvcGU6Omhh
c05vZGVMaXN0Q2FjaGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgbnVt
RHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGU7IHR5cGUrKykgeworICAgICAgICBpZiAobV9ub2Rl
TGlzdHNbdHlwZV0ubm9kZUxpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRyZWVTY29wZTo6Y2xlYXJOb2Rl
TGlzdENhY2hlcyhEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSB0eXBlKQoreworICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgPCBudW1EeW5hbWljU3VidHJlZU5vZGVMaXN0
VHlwZSk7CisgICAgaWYgKCFtX25vZGVMaXN0cyB8fCAhbV9ub2RlTGlzdHNbdHlwZV0ubnVtVmFs
aWRDYWNoZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVO
b2RlTGlzdCo+OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0c1t0eXBlXS5ub2RlTGlzdC5lbmQo
KTsKKyAgICBmb3IgKEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+OjppdGVyYXRvciBp
dCA9IG1fbm9kZUxpc3RzW3R5cGVdLm5vZGVMaXN0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgpOworICAgIEFTU0VSVCghbV9ub2RlTGlz
dHNbdHlwZV0ubnVtVmFsaWRDYWNoZXMpOworfQorCit2b2lkIFRyZWVTY29wZTo6Y2xlYXJOb2Rl
TGlzdENhY2hlc0ZvckFsbFR5cGVzKCkKK3sKKyAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGUgPSAwOyB0eXBlIDwgbnVtRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdFR5cGU7IHR5cGUrKykKKyAgICAgICAgY2xlYXJOb2RlTGlzdENhY2hl
cyhzdGF0aWNfY2FzdDxEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZT4odHlwZSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlz
aW9uIDEwMzE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOSArMjgsMTIgQEAKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNp
bmNsdWRlICJEb2N1bWVudE9yZGVyZWRNYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSFRNTE1h
cEVsZW1lbnQ7CiAKQEAgLTUxLDkgKzU0LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUlt
YWdlTWFwKEhUTUxNYXBFbGVtZW50Kik7CiAgICAgSFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFw
KGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNoZSgp
IHsgKyttX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hl
KCkgeyBBU1NFUlQobV9udW1Ob2RlTGlzdENhY2hlcyA+IDApOyAtLW1fbnVtTm9kZUxpc3RDYWNo
ZXM7IH0KLSAgICBib29sIGhhc05vZGVMaXN0Q2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1O
b2RlTGlzdENhY2hlczsgfQorICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNoZShEeW5hbWljU3VidHJl
ZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQgcmVtb3Zl
Tm9kZUxpc3RDYWNoZShEeW5hbWljU3VidHJlZU5vZGVMaXN0VHlwZSwgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCopOworICAgIGJvb2wgaGFzTm9kZUxpc3RDYWNoZXMoKSBjb25zdDsKKyAgICB2b2lk
IGNsZWFyTm9kZUxpc3RDYWNoZXMoRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUpOworICAgIHZv
aWQgY2xlYXJOb2RlTGlzdENhY2hlc0ZvckFsbFR5cGVzKCk7CisKKyAgICB2b2lkIG5vZGVMaXN0
Q2FjaGVkVmFsdWUoRHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CisgICAgICAgIG1fbm9kZUxpc3RzW3R5cGVdLm51bVZh
bGlkQ2FjaGVzKys7CisgICAgfQorCisgICAgdm9pZCBub2RlTGlzdEludmFsaWRhdGVkQ2FjaGUo
RHluYW1pY1N1YnRyZWVOb2RlTGlzdFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X25vZGVMaXN0cyk7CisgICAgICAgIEFTU0VSVChtX25vZGVMaXN0c1t0eXBlXS5udW1WYWxpZENh
Y2hlcyk7CisgICAgICAgIG1fbm9kZUxpc3RzW3R5cGVdLm51bVZhbGlkQ2FjaGVzLS07CisgICAg
fQogCiAgICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KICAgICAv
LyBGaXJzdCBzZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBJRCwgYnV0IGlm
IHRoYXQgZmFpbHMsIHRoZW4gbG9va3MKQEAgLTc2LDcgKzk0LDEyIEBAIHByaXZhdGU6CiAgICAg
RG9jdW1lbnRPcmRlcmVkTWFwIG1fZWxlbWVudHNCeUlkOwogICAgIERvY3VtZW50T3JkZXJlZE1h
cCBtX2ltYWdlTWFwc0J5TmFtZTsKIAotICAgIHVuc2lnbmVkIG1fbnVtTm9kZUxpc3RDYWNoZXM7
CisgICAgc3RydWN0IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RJbmZvIHsKKyAgICAgICAgRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdEluZm8oKSA6IG51bVZhbGlkQ2FjaGVzKDApIHsgfQorICAgICAgICBI
YXNoU2V0PER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqPiBub2RlTGlzdDsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtVmFsaWRDYWNoZXM7CisgICAgfTsKKyAgICBPd25BcnJheVB0cjxEeW5hbWljU3VidHJl
ZU5vZGVMaXN0SW5mbz4gbV9ub2RlTGlzdHM7CiB9OwogCiBpbmxpbmUgYm9vbCBUcmVlU2NvcGU6
Omhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAzMTQ0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDE2ICszMiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLUxhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdChOb2RlKiBmb3JOb2RlICkK
LSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoZm9yTm9kZS0+ZG9jdW1lbnQoKSkgLCBtX2Zv
ck5vZGUoZm9yTm9kZSkKK0xhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdChOb2RlKiBmb3JO
b2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChmb3JOb2RlLT5kb2N1bWVudCgpLCBM
YWJlbE5vZGVMaXN0VHlwZSkKKyAgICAsIG1fZm9yTm9kZShmb3JOb2RlKQogeworICAgIG1fZm9y
Tm9kZS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KExhYmVsTm9kZUxpc3RUeXBlLCB0
aGlzKTsKIH0KIAogTGFiZWxzTm9kZUxpc3Q6On5MYWJlbHNOb2RlTGlzdCgpCiB7CiAgICAgbV9m
b3JOb2RlLT5yZW1vdmVDYWNoZWRMYWJlbHNOb2RlTGlzdCh0aGlzKTsKLX0gCi0gICAgCisgICAg
bV9mb3JOb2RlLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChMYWJlbE5vZGVMaXN0
VHlwZSwgdGhpcyk7Cit9CisKIGJvb2wgTGFiZWxzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1l
bnQqIHRlc3ROb2RlKSBjb25zdAogewogICAgIHJldHVybiB0ZXN0Tm9kZS0+aGFzVGFnTmFtZShs
YWJlbFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KHRlc3ROb2RlKS0+Y29u
dHJvbCgpID09IG1fZm9yTm9kZTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzM0MCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTEy
LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGlu
ZyBub2RlcyBpcyBzbG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFu
Z2VkICgyMCUrKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM4NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSByZWdyZXNzaW9uIHRlc3QgdG8gZW5zdXJlIGludmFsaWRhdGlvbiBvZiBub2RlIGxp
c3QgY2FjaGUgYWZ0ZXIKKyAgICAgICAgdGhlIG5vZGUgaXMgbW92ZWQgZnJvbSBvbmUgdHJlZSBz
Y29wZSB0byBhbm90aGVyIHdvcmtzIHByb3Blcmx5LgorCisgICAgICAgICogZmFzdC9kb20vaW52
YWxpZGF0ZS1jYWNoZS1hZnRlci10cmVlc2NvcGUtY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vaW52YWxpZGF0ZS1jYWNoZS1hZnRlci10cmVlc2NvcGUtY2hh
bmdlLmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTIwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIDIgZWRpdGluZyB0ZXN0cyBpbnRyb2R1
Y2VkIGluIHIxMDMwNzMgZmFpbHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2ludmFsaWRh
dGUtY2FjaGUtYWZ0ZXItdHJlZXNjb3BlLWNoYW5nZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vaW52YWxpZGF0ZS1jYWNoZS1hZnRlci10cmVlc2NvcGUt
Y2hhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L2ludmFsaWRhdGUtY2FjaGUtYWZ0ZXItdHJlZXNjb3BlLWNoYW5nZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUEFTUyB0ZXN0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdiJykubGVuZ3RoIGlzIDIKK1BBU1MgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHRlc3QpOyB0ZXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiJykubGVuZ3RoIGlzIDIK
K1BBU1MgdGVzdC5yZW1vdmVDaGlsZCh0ZXN0LmZpcnN0Q2hpbGQpOyB0ZXN0LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdiJykubGVuZ3RoIGlzIDEKK1RoaXMgdGVzdHMgaW52YWxpZGF0aW5nIG5vZGUg
bGlzdCBjYWNoZSBhZnRlciBjaGFuZ2luZyB0aGUgdHJlZSBzY29wZS4KKworCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9pbnZhbGlkYXRlLWNhY2hlLWFmdGVyLXRyZWVzY29wZS1jaGFuZ2Uu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9pbnZhbGlkYXRlLWNhY2hl
LWFmdGVyLXRyZWVzY29wZS1jaGFuZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL2ludmFsaWRhdGUtY2FjaGUtYWZ0ZXItdHJlZXNjb3BlLWNoYW5nZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJv
ZHk+Cis8cD5UaGlzIHRlc3RzIGludmFsaWRhdGluZyBub2RlIGxpc3QgY2FjaGUgYWZ0ZXIgY2hh
bmdpbmcgdGhlIHRyZWUgc2NvcGUuPC9wPgorPGlmcmFtZSBpZD0iaWZyYW1lIiBzcmM9ImRhdGE6
dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIDwhRE9DVFlQRSBodG1sPjxodG1sPjxib2R5PiI+PC9p
ZnJhbWU+Cis8c3BhbiBpZD0idGVzdCI+PGI+aGVsbG88L2I+IDxiPndvcmxkPC9iPjwvc3Bhbj4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKwordmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwor
dmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZnJhbWUnKTsKK3Nob3VsZEJl
KCJ0ZXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiJykubGVuZ3RoIiwgIjIiKTsKK3Nob3VsZEJl
KCJpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdCk7IHRlc3QuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2InKS5sZW5ndGgiLCAiMiIpOworc2hvdWxkQmUoInRlc3QucmVt
b3ZlQ2hpbGQodGVzdC5maXJzdENoaWxkKTsgdGVzdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYicp
Lmxlbmd0aCIsICIxIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120253</attachid>
            <date>2011-12-21 18:19:25 -0800</date>
            <delta_ts>2011-12-30 22:59:56 -0800</delta_ts>
            <desc>kling&apos;s approach</desc>
            <filename>bug-73853-20111221181924.patch</filename>
            <type>text/plain</type>
            <size>19442</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzQ3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDExLTEyLTIxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXppbHkgaW52
YWxpZGF0ZSB0aGUgbm9kZSBsaXN0IGNhY2hlcyBpbnN0ZWFkIG9mIGludmFsaWRpbmcgdGhlbSBh
dCB0aGUgdGltZSBvZiBtb2RpZmljYXRpb24uIFdlIHVzZQorICAgICAgICB0aGUgRE9NIHRyZWUg
dmVyc2lvbiB0byBkZXRlY3Qgd2hldGhlciBjYWNoZXMgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBv
ciBub3QuIFdlIG5vdyBpbnZhbGlkYXRlIGNhY2hlcyBtb3JlCisgICAgICAgIGZyZXF1ZW50bHkg
YWZ0ZXIgdGhpcyBwYXRjaCAoaW4gcGFydGljdWxhciwgaW52YWxpZGF0ZXMgY2FjaGVzIHRoYXQg
YXJlIHN0b3JlZCBvbiBub2RlcyBub3QgcHJlc2VudCBpbgorICAgICAgICB0aGUgYW5jZXN0cnkg
b2YgdGhlIG1vZGlmaWVkIG5vZGVzKTsgaG93ZXZlciwgb3VyIHN0dWR5IG9uIG1ham9yIFdlYiBz
aXRlcyBzdWNoIGFzIEdtYWlsLCBGYWNlYm9vaywgVHdpdHRlciwKKyAgICAgICAgZXRjLi4uIGlu
ZGljYXRlIHRoYXQgYWJvdXQgMSUgb2YgcmVhbC13b3JsZCB1c2FnZSBiZW5lZml0cyBmcm9tIGtl
ZXBpbmcgdGhlIGNhY2hlcyBhbGl2ZSBhY3Jvc3MgZGlmZmVyZW50CisgICAgICAgIERPTSB0cmVl
IHZlcnNpb25zLgorCisgICAgICAgIEluIG9yZGVyIHRvIGludmFsaWRhdGUgY2FjaGVzIGxhemls
eSwgdGhpcyBwYXRjaCBhZGRzIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXMg
d2hpY2ggaW5oZXJpdHMKKyAgICAgICAgZnJvbSBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcy4gVGhp
cyBjbGFzcyBlbmNhcHN1bGF0ZXMgbWVtYmVyIHZhcmlhYmxlcyBpbiBEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlcyBhbmQKKyAgICAgICAgaW52YWxpZGF0ZXMgdmFsdWVzIGFzIG5lZWRlZC4KKworICAg
ICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9k
ZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjppdGVtKToK
KyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9t
Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6Q2Fj
aGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6
cmVzZXQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpTdWJ0cmVlQ2FjaGVzOjppc0xl
bmd0aENhY2hlVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlz
dDo6U3VidHJlZUNhY2hlczo6aXNJdGVtQ2FjaGVWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpE
eW5hbWljU3VidHJlZU5vZGVMaXN0OjpTdWJ0cmVlQ2FjaGVzOjpsZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6bGFzdEl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hl
czo6bGFzdEl0ZW1PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6U3VidHJlZUNhY2hlczo6c2V0TGVuZ3RoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6c2V0SXRlbUNhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OlN1
YnRyZWVDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
U3VidHJlZUNhY2hlczo6ZG9tVmVyc2lvbklzQ29uc2lzdGVudCk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRh
dGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKToKKyAgICAgICAgKiBkb20vTm9k
ZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKiBodG1sL0hUTUxF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuaDoKKwogMjAxMS0xMi0yMSAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBSZW5kZXJMYXllciBj
b2RlIHRoYXQgYXBwbGllcyBmaWx0ZXJzIGFuZCB0cmFuc2Zvcm1zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMzODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNSBA
QCBDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8CiAKIHVuc2lnbmVkIENo
aWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0
aENhY2hlVmFsaWQpCi0gICAgICAgIHJldHVybiBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOworICAg
IGlmIChtX2NhY2hlcy0+bV9pc0xlbmd0aENhY2hlVmFsaWQpCisgICAgICAgIHJldHVybiBtX2Nh
Y2hlcy0+bV9sZW5ndGg7CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogICAgIGZvciAoTm9kZSog
biA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgbGVuKys7CiAKLSAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoID0gbGVuOwotICAgIG1fY2Fj
aGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIG1fY2FjaGVzLT5tX2xlbmd0aCA9
IGxlbjsKKyAgICBtX2NhY2hlcy0+bV9pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOwogCiAgICAg
cmV0dXJuIGxlbjsKIH0KQEAgLTUzLDI3ICs1MywyNyBAQCBOb2RlKiBDaGlsZE5vZGVMaXN0Ojpp
dGVtKHVuc2lnbmVkIGluZGV4CiAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7CiAgICAgTm9kZSog
biA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOwogCi0gICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNo
ZVZhbGlkKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQp
Ci0gICAgICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgIGlmIChtX2NhY2hl
cy0+bV9pc0l0ZW1DYWNoZVZhbGlkKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBtX2NhY2hlcy0+
bV9sYXN0SXRlbU9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bV9sYXN0SXRl
bTsKICAgICAgICAgCi0gICAgICAgIGludCBkaWZmID0gaW5kZXggLSBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQ7CisgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBtX2NhY2hlcy0+bV9sYXN0SXRl
bU9mZnNldDsKICAgICAgICAgdW5zaWduZWQgZGlzdCA9IGFicyhkaWZmKTsKICAgICAgICAgaWYg
KGRpc3QgPCBpbmRleCkgewotICAgICAgICAgICAgbiA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAg
ICAgICAgICAgIHBvcyA9IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsKKyAgICAgICAgICAgIG4g
PSBtX2NhY2hlcy0+bV9sYXN0SXRlbTsKKyAgICAgICAgICAgIHBvcyA9IG1fY2FjaGVzLT5tX2xh
c3RJdGVtT2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fY2FjaGVzLT5pc0xl
bmd0aENhY2hlVmFsaWQpIHsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fY2FjaGVzLT5jYWNoZWRM
ZW5ndGgpCisgICAgaWYgKG1fY2FjaGVzLT5tX2lzTGVuZ3RoQ2FjaGVWYWxpZCkgeworICAgICAg
ICBpZiAoaW5kZXggPj0gbV9jYWNoZXMtPm1fbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAgICAgaW50IGRpZmYgPSBpbmRleCAtIHBvczsKICAgICAgICAgdW5zaWduZWQgZGlz
dCA9IGFicyhkaWZmKTsKLSAgICAgICAgaWYgKGRpc3QgPiBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3Ro
IC0gMSAtIGluZGV4KSB7CisgICAgICAgIGlmIChkaXN0ID4gbV9jYWNoZXMtPm1fbGVuZ3RoIC0g
MSAtIGluZGV4KSB7CiAgICAgICAgICAgICBuID0gbm9kZSgpLT5sYXN0Q2hpbGQoKTsKLSAgICAg
ICAgICAgIHBvcyA9IG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggLSAxOworICAgICAgICAgICAgcG9z
ID0gbV9jYWNoZXMtPm1fbGVuZ3RoIC0gMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTAsOSAr
OTAsOSBAQCBOb2RlKiBDaGlsZE5vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgfQog
CiAgICAgaWYgKG4pIHsKLSAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAg
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gcG9zOwotICAgICAgICBtX2NhY2hlcy0+aXNJdGVt
Q2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgIG1fY2FjaGVzLT5tX2xhc3RJdGVtID0gbjsKKyAg
ICAgICAgbV9jYWNoZXMtPm1fbGFzdEl0ZW1PZmZzZXQgPSBwb3M7CisgICAgICAgIG1fY2FjaGVz
LT5tX2lzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOwogICAgICAgICByZXR1cm4gbjsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDMz
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBub2Rl
KQogICAgIDogRHluYW1pY05vZGVMaXN0KG5vZGUpCi0gICAgLCBtX2NhY2hlcyhDYWNoZXM6OmNy
ZWF0ZSgpKQorICAgICwgbV9jYWNoZXMoU3VidHJlZUNhY2hlczo6Y3JlYXRlKCkpCiB7CiAgICAg
cm9vdE5vZGUoKS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQpAQCAt
NDIsMTYgKzQyLDE1IEBAIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWljU3VidHJlZU4K
IAogdW5zaWduZWQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIG1fY2Fj
aGVzLT5jYWNoZWRMZW5ndGg7CisgICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUoKSkpCiAgICAgICAgIGxlbmd0aCArPSBu
LT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNoZXMoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
KTsKIAotICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgbV9jYWNoZXMt
PmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgbV9jYWNoZXMtPnNldExlbmd0aENhY2hl
KG5vZGUoKSwgbGVuZ3RoKTsKIAogICAgIHJldHVybiBsZW5ndGg7CiB9CkBAIC02Miw5ICs2MSw3
IEBAIE5vZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3YXIKICAgICBmb3IgKE5v
ZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUoKSkpIHsK
ICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewot
ICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAg
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fY2Fj
aGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlcy0+
c2V0SXRlbUNhY2hlKG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAtLXJlbWFpbmluZ09mZnNldDsKQEAgLTgwLDkgKzc3LDcg
QEAgTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5vZGUoKSkp
IHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkg
ewotICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1f
Y2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NhY2hl
cy0+c2V0SXRlbUNhY2hlKG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICArK3JlbWFpbmluZ09mZnNldDsKQEAgLTk2LDEyICs5
MSwxMiBAQCBOb2RlKiBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtKHVuc2lnCiB7CiAgICAg
aW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IG5vZGUoKS0+
Zmlyc3RDaGlsZCgpOwotICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewotICAg
ICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkKLSAgICAgICAgICAg
IHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNldCA+IG1f
Y2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZz
ZXQgPCBvZmZzZXQpIHsKLSAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOwot
ICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsK
KyAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQoKSkgeworICAgICAgICBpZiAob2Zm
c2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIG1f
Y2FjaGVzLT5sYXN0SXRlbSgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxhc3RJ
dGVtT2Zmc2V0KCkgfHwgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KCkgLSBvZmZzZXQgPCBvZmZz
ZXQpIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtKCk7CisgICAgICAg
ICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTE0Myw5ICsxMzgsOSBAQCB2b2lkIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Q6OmludmFsaWRhdGVDCiB9CiAKIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6
Q2FjaGVzKCkKLSAgICA6IGxhc3RJdGVtKDApCi0gICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFs
c2UpCi0gICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQorICAgIDogbV9sYXN0SXRlbSgwKQor
ICAgICwgbV9pc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2lzSXRlbUNhY2hlVmFs
aWQoZmFsc2UpCiB7CiB9CiAKQEAgLTE1Niw5ICsxNTEsOSBAQCBQYXNzUmVmUHRyPER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3Q6OkNhY2hlCiAKIHZvaWQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2Fj
aGVzOjpyZXNldCgpCiB7Ci0gICAgbGFzdEl0ZW0gPSAwOwotICAgIGlzTGVuZ3RoQ2FjaGVWYWxp
ZCA9IGZhbHNlOwotICAgIGlzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsgICAgIAorICAgIG1fbGFz
dEl0ZW0gPSAwOworICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7CisgICAgbV9pc0l0
ZW1DYWNoZVZhbGlkID0gZmFsc2U7ICAgICAKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMTAzMzg5KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIER5bmFtaWNOb2RlTGlzdF9oCiAjZGVmaW5lIER5bmFt
aWNOb2RlTGlzdF9oCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgpAQCAtMzksMTUgKzQwLDE3IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgQ2FjaGVzIDogUmVmQ291
bnRlZDxDYWNoZXM+IHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FjaGVzPiBjcmVhdGUo
KTsKICAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY2Fj
aGVkTGVuZ3RoOwotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAgICAgICAgdW5zaWduZWQgbGFz
dEl0ZW1PZmZzZXQ7Ci0gICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKLSAgICAg
ICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKKyAgICAgICAgTm9kZSogbV9sYXN0SXRlbTsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0SXRl
bU9mZnNldDsKKyAgICAgICAgYm9vbCBtX2lzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CisgICAgICAg
IGJvb2wgbV9pc0l0ZW1DYWNoZVZhbGlkIDogMTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAg
Q2FjaGVzKCk7CiAgICAgfTsKKwogICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IG5vZGUpCiAgICAgICAgIDogbV9ub2RlKG5vZGUpCiAgICAgeyB9CkBAIC03Niw5ICs3OSw1MyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwotICAgIG11dGFibGUgUmVmUHRyPENhY2hlcz4gbV9jYWNo
ZXM7CiAKIHByaXZhdGU6CisKKyAgICBjbGFzcyBTdWJ0cmVlQ2FjaGVzIDogcHVibGljIER5bmFt
aWNOb2RlTGlzdDo6Q2FjaGVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN1YnRyZWVDYWNoZXM+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdWJ0cmVl
Q2FjaGVzKTsgfQorICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNMZW5ndGhDYWNoZVZhbGlkICYmIGRvbVZlcnNpb25Jc0NvbnNpc3RlbnQoKTsgfQor
ICAgICAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzSXRlbUNh
Y2hlVmFsaWQgJiYgZG9tVmVyc2lvbklzQ29uc2lzdGVudCgpOyB9CisKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgTm9kZSogbGFz
dEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2xhc3RJdGVtOyB9CisgICAgICAgIHVuc2lnbmVkIGxh
c3RJdGVtT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0SXRlbU9mZnNldDsgfQorCisgICAg
ICAgIHZvaWQgc2V0TGVuZ3RoQ2FjaGUoTm9kZSogbm9kZSwgdW5zaWduZWQgbGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV9pc0l0ZW1DYWNoZVZhbGlkICYmICFkb21WZXJzaW9u
SXNDb25zaXN0ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBtX2xhc3RJdGVtID0gbm9kZTsKKyAg
ICAgICAgICAgICAgICBtX2lzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIW1fbGFzdEl0ZW0pCisgICAgICAgICAgICAgICAgbV9sYXN0SXRlbSA9IG5vZGU7
IC8vIFVzZWQgaW4gZG9tVmVyc2lvbkhhc05vdEJlZW5JbmNyZW1lbnRlZDsKKyAgICAgICAgICAg
IG1fbGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgbV9pc0xlbmd0aENhY2hlVmFsaWQgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRJdGVtQ2FjaGUoTm9kZSogaXRlbSwg
dW5zaWduZWQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9pc0xlbmd0aENh
Y2hlVmFsaWQgJiYgIWRvbVZlcnNpb25Jc0NvbnNpc3RlbnQoKSkKKyAgICAgICAgICAgICAgICBt
X2lzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgbV9sYXN0SXRlbSA9IGl0
ZW07CisgICAgICAgICAgICBtX2xhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAg
bV9pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6bV9sZW5ndGg7CisgICAgICAgIER5bmFt
aWNOb2RlTGlzdDo6Q2FjaGVzOjptX2xhc3RJdGVtOworICAgICAgICBEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlczo6bV9sYXN0SXRlbU9mZnNldDsKKyAgICAgICAgRHluYW1pY05vZGVMaXN0OjpDYWNo
ZXM6Om1faXNMZW5ndGhDYWNoZVZhbGlkOworICAgICAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hl
czo6bV9pc0l0ZW1DYWNoZVZhbGlkOworCisgICAgICAgIFN1YnRyZWVDYWNoZXMoKSA6IG1fRE9N
VmVyc2lvbkF0VGltZU9mQ2FjaGluZygwKSB7IH0KKyAgICAgICAgYm9vbCBkb21WZXJzaW9uSXND
b25zaXN0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0SXRlbS0+ZG9jdW1lbnQoKSAmJiBtX2xh
c3RJdGVtLT5kb2N1bWVudCgpLT5kb21UcmVlVmVyc2lvbigpID09IG1fRE9NVmVyc2lvbkF0VGlt
ZU9mQ2FjaGluZzsgfQorICAgICAgICB1aW50NjRfdCBtX0RPTVZlcnNpb25BdFRpbWVPZkNhY2hp
bmc7CisgICAgfTsKKworICAgIG11dGFibGUgUmVmUHRyPFN1YnRyZWVDYWNoZXM+IG1fY2FjaGVz
OworCiAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0KCkgY29uc3Q7CiAgICAgTm9k
ZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwg
aW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21D
dXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTAzMzg5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIwLDczICsxMDIwLDE5
IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUwKICAgICByZW1vdmVO
b2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0aGlzLCBkYXRhKTsKIH0KIAotdm9pZCBOb2RlOjppbnZh
bGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCit2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVy
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKICAgICBpZiAoaGFzUmFy
ZURhdGEoKSAmJiBpc0F0dHJpYnV0ZU5vZGUoKSkgewogICAgICAgICBOb2RlUmFyZURhdGEqIGRh
dGEgPSByYXJlRGF0YSgpOwogICAgICAgICBBU1NFUlQoIWRhdGEtPm5vZGVMaXN0cygpKTsKICAg
ICAgICAgZGF0YS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9Ci0KLSAgICAvLyBU
aGlzIGxpc3Qgc2hvdWxkIGJlIHN5bmMnZWQgd2l0aCBOb2RlTGlzdHNOb2RlRGF0YS4KLSAgICBp
ZiAoYXR0ck5hbWUgIT0gY2xhc3NBdHRyCi0jaWYgRU5BQkxFKE1JQ1JPREFUQSkKLSAgICAgICAg
JiYgYXR0ck5hbWUgIT0gaXRlbXNjb3BlQXR0cgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBpdGVt
cHJvcEF0dHIKLSNlbmRpZgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBuYW1lQXR0cikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8
ICFub2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSk7Ci0gICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURh
dGEoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEg
PSBub2RlLT5yYXJlRGF0YSgpOwotICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgICAgIHJlbW92ZU5vZGVMaXN0
Q2FjaGVJZlBvc3NpYmxlKG5vZGUsIGRhdGEpOwotICAgIH0KIH0KIAogdm9pZCBOb2RlOjppbnZh
bGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpCiB7CiAgICAgaWYgKGhh
c1JhcmVEYXRhKCkpCiAgICAgICAgIHJhcmVEYXRhKCktPmNsZWFyQ2hpbGROb2RlTGlzdENhY2hl
KCk7Ci0KLSAgICBpZiAoIXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFy
ZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7
Ci0KLSAgICAgICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQg
PSBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBpdCA9IGRhdGEtPm5v
ZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0KLSAgICAgICAgcmVtb3ZlTm9k
ZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7Ci0gICAgfQotfQotCi12b2lkIE5vZGU6
Om5vdGlmeUxvY2FsTm9kZUxpc3RzTGFiZWxDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIWhhc1JhcmVE
YXRhKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSByYXJlRGF0
YSgpOwotICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkYXRhLT5ub2RlTGlzdHMoKS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlKQotICAgICAgICBk
YXRhLT5ub2RlTGlzdHMoKS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUo
KTsKIH0KIAogdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYXNzTm9kZUxp
c3QqIGxpc3QsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQpAQCAtMjI2MSwyMyArMjIwNyw2IEBA
IEZsb2F0UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEYKICAgICByZXR1cm4gcDsK
IH0KIAotI2lmIEVOQUJMRShNSUNST0RBVEEpCi12b2lkIE5vZGU6Oml0ZW1UeXBlQXR0cmlidXRl
Q2hhbmdlZCgpCi17Ci0gICAgTm9kZSAqIHJvb3ROb2RlID0gZG9jdW1lbnQoKTsKLQotICAgIGlm
ICghcm9vdE5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGVS
YXJlRGF0YSogZGF0YSA9IHJvb3ROb2RlLT5yYXJlRGF0YSgpOwotCi0gICAgaWYgKCFkYXRhLT5u
b2RlTGlzdHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YS0+bm9kZUxpc3RzKCktPmlu
dmFsaWRhdGVNaWNyb2RhdGFJdGVtTGlzdENhY2hlcygpOwotfQotI2VuZGlmCi0KICNpZm5kZWYg
TkRFQlVHCiAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2MoY29uc3QgTm9kZSogbm9k
ZSwgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJEZXNjKQpAQCAtMjQwNiwxMSArMjMzNSw3IEBAIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6
OmludmFsaWRhdGVDYWNoZXMKICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9y
IHRhZ0NhY2hlTlNFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRh
Z05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVO
Uy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZU5TRW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25k
LT5pbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0
cmlidXRlcygpOwotfQogCi12b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVz
VGhhdERlcGVuZE9uQXR0cmlidXRlcygpCi17CiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVy
YXRvciBjbGFzc0NhY2hlRW5kID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7CiAgICAgZm9y
IChDbGFzc05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUu
YmVnaW4oKTsgaXQgIT0gY2xhc3NDYWNoZUVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+
aW52YWxpZGF0ZUNhY2hlKCk7CkBAIC0yNDI0LDYgKzIzNDksNyBAQCB2b2lkIE5vZGVMaXN0c05v
ZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICBpbnZh
bGlkYXRlTWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKTsKICNlbmRpZgorICAgIAogfQogCiAjaWYg
RU5BQkxFKE1JQ1JPREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTAzMzg5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDcgKzUyMSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBp
bnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZvaWQg
bm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQoKTsKICAgICB2b2lkIHJlbW92ZUNhY2hl
ZENsYXNzTm9kZUxpc3QoQ2xhc3NOb2RlTGlzdCosIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCByZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFtZU5vZGVMaXN0KiwgY29uc3QgU3RyaW5nJik7
CkBAIC01ODksOCArNTg4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRh
KiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAg
dm9pZCBpdGVtVHlwZUF0dHJpYnV0ZUNoYW5nZWQoKTsKLQogICAgIERPTVNldHRhYmxlVG9rZW5M
aXN0KiBpdGVtUHJvcCgpOwogICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBpdGVtUmVmKCk7CiAg
ICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1UeXBlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAxMDMzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgcHVibGljOgogICAg
IH0KICAgICAKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoKTsKLSAgICB2b2lkIGludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRB
KQogICAgIHZvaWQgaW52YWxpZGF0ZU1pY3JvZGF0YUl0ZW1MaXN0Q2FjaGVzKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMTAzMzg5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsy
MTcsNiBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBCiAgICAgICAg
IHNldEl0ZW1SZWYoYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gaXRlbXR5cGVBdHRyKSB7CiAgICAgICAgIHNldEl0ZW1UeXBlKGF0dHItPnZhbHVlKCkpOwot
ICAgICAgICBpdGVtVHlwZUF0dHJpYnV0ZUNoYW5nZWQoKTsKICNlbmRpZgogICAgIH0KIC8vIHN0
YW5kYXJkIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMDMzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTUgKzE1NCw0IEBAIHZvaWQgSFRNTExh
YmVsRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGIKICAgICAgICAgSFRNTEVsZW1lbnQ6OmFjY2Vz
c0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMpOwogfQogCi12b2lkIEhUTUxMYWJlbEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cmlidXRlKQotewotICAgIGlmIChh
dHRyaWJ1dGUtPm5hbWUoKSA9PSBmb3JBdHRyKSB7Ci0gICAgICAgIC8vIGh0bWxGb3IgYXR0cmli
dXRlIGNoYW5nZSBhZmZlY3RzIG90aGVyIG5vZGVzIHRoYW4gdGhpcy4KLSAgICAgICAgLy8gQ2xl
YXIgdGhlIGNhY2hlcyB0byBlbnN1cmUgdGhhdCB0aGUgbGFiZWxzIGNhY2hlcyBhcmUgY2xlYXJl
ZC4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5ub3Rp
ZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCgpOwotICAgIH0gZWxzZQotICAgICAgICBIVE1M
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKLX0KLSAgICAgICAgICAg
ICAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJl
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVs
ZW1lbnQuaAkocmV2aXNpb24gMTAzMzg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFi
ZWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogCiAgICAgdm9pZCBm
b2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpOwotCi0gICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogfTsKIAogfSAvL25hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120828</attachid>
            <date>2011-12-30 23:00:02 -0800</date>
            <delta_ts>2012-01-05 03:18:03 -0800</delta_ts>
            <desc>Changed per Darin&apos;s comment</desc>
            <filename>bug-73853-20111230230001.patch</filename>
            <type>text/plain</type>
            <size>19165</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzg1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTEyLTMwICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXppbHkgaW52
YWxpZGF0ZSB0aGUgbm9kZSBsaXN0IGNhY2hlcyBpbnN0ZWFkIG9mIGludmFsaWRpbmcgdGhlbSBh
dCB0aGUgdGltZSBvZiBtb2RpZmljYXRpb24uIFdlIHVzZQorICAgICAgICB0aGUgRE9NIHRyZWUg
dmVyc2lvbiB0byBkZXRlY3Qgd2hldGhlciBjYWNoZXMgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBv
ciBub3QuIFdlIG5vdyBpbnZhbGlkYXRlIGNhY2hlcyBtb3JlCisgICAgICAgIGZyZXF1ZW50bHkg
YWZ0ZXIgdGhpcyBwYXRjaCAoaW4gcGFydGljdWxhciwgaW52YWxpZGF0ZXMgY2FjaGVzIHRoYXQg
YXJlIHN0b3JlZCBvbiBub2RlcyBub3QgcHJlc2VudCBpbgorICAgICAgICB0aGUgYW5jZXN0cnkg
b2YgdGhlIG1vZGlmaWVkIG5vZGVzKTsgaG93ZXZlciwgb3VyIHN0dWR5IG9uIG1ham9yIFdlYiBz
aXRlcyBzdWNoIGFzIEdtYWlsLCBGYWNlYm9vaywgVHdpdHRlciwKKyAgICAgICAgZXRjLi4uIGlu
ZGljYXRlIHRoYXQgYWJvdXQgMSUgb2YgcmVhbC13b3JsZCB1c2FnZSBiZW5lZml0cyBmcm9tIGtl
ZXBpbmcgdGhlIGNhY2hlcyBhbGl2ZSBhY3Jvc3MgZGlmZmVyZW50CisgICAgICAgIERPTSB0cmVl
IHZlcnNpb25zLgorCisgICAgICAgIEluIG9yZGVyIHRvIGludmFsaWRhdGUgY2FjaGVzIGxhemls
eSwgdGhpcyBwYXRjaCBhZGRzIHJlcGxhY2VzIHRoZSB0eXBlIG9mIG1fY2FjaGVzIGluIER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QKKyAgICAgICAgYnkgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3Vi
dHJlZUNhY2hlcyB3aGljaCBlbmNhcHN1bGF0ZXMgbWVtYmVyIHZhcmlhYmxlcyBpbiBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyBhbmQKKyAgICAgICAgaW52YWxpZGF0ZXMgdmFsdWVzIGFzIG5lZWRl
ZC4gQWxzbyB0aGlzIGNoYW5nZSBhbGxvd3MgbV9jYWNoZXMgdG8gYmUgYWxsb2NhdGVkIGFzIGEg
cGFydCBvZgorICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0IGluc3RlYWQgb2YgYSBzZXBh
cmF0ZSByZWYtY291bnRlZCBvYmplY3QuCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdHRyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpj
aGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUZvcndhcmRz
RnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlz
dDo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpD
YWNoZXM6OnJlc2V0KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpTdWJ0cmVlQ2FjaGVzOjpTdWJ0cmVl
Q2FjaGVzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0
OjpTdWJ0cmVlQ2FjaGVzOjppc0xlbmd0aENhY2hlVmFsaWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OmlzSXRlbUNhY2hl
VmFsaWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
OlN1YnRyZWVDYWNoZXM6OmNhY2hlZExlbmd0aCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6Y2FjaGVkSXRlbSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hl
czo6Y2FjaGVkSXRlbU9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1
YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6c2V0TGVuZ3RoQ2FjaGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OnNl
dEl0ZW1DYWNoZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6U3VidHJlZUNhY2hlczo6cmVzZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OmRvbVZlcnNpb25Jc0NvbnNpc3Rl
bnQpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojp1cGRhdGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5
KTogQ2xlYXIgY2FjaGVzIHdoZW4gYSBub2RlIG1vdmVzIGZyb20gb25lIGRvY3VtZW50IHRvIGFu
b3RoZXIuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVB
ZnRlckF0dHJpYnV0ZUNoYW5nZWQpOiBPbmx5IGNsZWFycyBjaGlsZCBub2RlIGxpc3Qgb2YgQXR0
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVy
Q2hpbGRyZW5DaGFuZ2VkKTogT25seSBjbGVhcnMgY2hpbGQgbm9kZSBsaXN0LgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMpOiBNZXJnZWQgd2l0
aCBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcy4KKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuaDoKKwogMjAxMS0xMi0zMCAgQW5kcmVhcyBLbGlu
ZyAgPGF3ZXNvbWVrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2FjaGUgYW5kIHJldXNlIHRo
ZSBIVE1MVGFibGVFbGVtZW50LnJvd3MgY29sbGVjdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9BdHRyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAJ
KHJldmlzaW9uIDEwMzg0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgQXR0cjo6c2V0VmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiAKICAgICBjcmVhdGVUZXh0Q2hpbGQoKTsKICAgICBtX2lnbm9yZUNoaWxkcmVu
Q2hhbmdlZC0tOwogCi0gICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVD
aGFuZ2VkKG1fYXR0cmlidXRlLT5uYW1lKCkpOworICAgIGludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCgpOwogfQogCiB2b2lkIEF0dHI6OnNldFZhbHVlKGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTc0LDcgKzE3NCw3IEBA
IHZvaWQgQXR0cjo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEIKIAogICAgIE5vZGU6OmNo
aWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2Us
IGNoaWxkQ291bnREZWx0YSk7CiAKLSAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0
dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGUtPm5hbWUoKSk7CisgICAgaW52YWxpZGF0ZU5vZGVM
aXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGluY2x1ZGUgZW50aXR5IHJlZmVyZW5jZXMgaW4gdGhlIHZhbHVlCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDM4NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgIDogRHlu
YW1pY05vZGVMaXN0KG5vZGUpCi0gICAgLCBtX2NhY2hlcyhDYWNoZXM6OmNyZWF0ZSgpKQogewog
ICAgIHJvb3ROb2RlKCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0K
QEAgLTQyLDE2ICs0MSwxNSBAQCBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1YnRy
ZWVOCiAKIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQpCi0gICAgICAgIHJldHVybiBt
X2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOworICAgIGlmIChtX2NhY2hlcy5pc0xlbmd0aENhY2hlVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVzLmNhY2hlZExlbmd0aCgpOwogCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gMDsKIAogICAgIGZvciAoTm9kZSogbiA9IG5vZGUoKS0+Zmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSgpKSkKICAgICAgICAgbGVu
Z3RoICs9IG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obikpOwogCi0gICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbmd0aDsKLSAgICBt
X2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBtX2NhY2hlcy5zZXRMZW5n
dGhDYWNoZShub2RlKCksIGxlbmd0aCk7CiAKICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNjIs
OSArNjAsNyBAQCBOb2RlKiBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtRm9yd2FyCiAgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2Rl
KCkpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZU1hdGNoZXMoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pKSkgewogICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZz
ZXQpIHsKLSAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAg
ICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9j
YWNoZXMuc2V0SXRlbUNhY2hlKG4sIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAtLXJlbWFpbmluZ09mZnNldDsKQEAgLTgwLDkg
Kzc2LDcgQEAgTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZv
ciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5v
ZGUoKSkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09m
ZnNldCkgewotICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAg
ICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBt
X2NhY2hlcy5zZXRJdGVtQ2FjaGUobiwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsrcmVtYWluaW5nT2Zmc2V0OwpAQCAtOTYs
MTIgKzkwLDEyIEBAIE5vZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0odW5zaWcKIHsK
ICAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0OwogICAgIE5vZGUqIHN0YXJ0ID0gbm9k
ZSgpLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7
Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQotICAgICAg
ICAgICAgcmV0dXJuIG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAgZWxzZSBpZiAob2Zmc2V0
ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAt
IG9mZnNldCA8IG9mZnNldCkgewotICAgICAgICAgICAgc3RhcnQgPSBtX2NhY2hlcy0+bGFzdEl0
ZW07Ci0gICAgICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0OworICAgIGlmIChtX2NhY2hlcy5pc0l0ZW1DYWNoZVZhbGlkKCkpIHsKKyAgICAgICAgaWYg
KG9mZnNldCA9PSBtX2NhY2hlcy5jYWNoZWRJdGVtT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gbV9jYWNoZXMuY2FjaGVkSXRlbSgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbV9jYWNoZXMu
Y2FjaGVkSXRlbU9mZnNldCgpIHx8IG1fY2FjaGVzLmNhY2hlZEl0ZW1PZmZzZXQoKSAtIG9mZnNl
dCA8IG9mZnNldCkgeworICAgICAgICAgICAgc3RhcnQgPSBtX2NhY2hlcy5jYWNoZWRJdGVtKCk7
CisgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMuY2FjaGVkSXRlbU9mZnNl
dCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzksNyArMTMzLDcgQEAgYm9vbCBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0Ojppc0R5bmFtaWNObwogCiB2b2lkIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3Q6OmludmFsaWRhdGVDYWNoZSgpCiB7Ci0gICAgbV9jYWNoZXMtPnJlc2V0KCk7CisgICAgbV9j
YWNoZXMucmVzZXQoKTsKIH0KIAogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2FjaGVzOjpDYWNo
ZXMoKQpAQCAtMTQ5LDEyICsxNDMsMTIgQEAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2FjaGVz
OjpDYWNoZXMoKQogewogfQogCi1QYXNzUmVmUHRyPER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNh
Y2hlcz4gRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2FjaGVzOjpjcmVhdGUoKQorUGFzc1JlZlB0
cjxEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gRHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OmNyZWF0
ZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYWNoZXMoKSk7CiB9CiAKLXZvaWQgRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCit2b2lkIER5bmFtaWNOb2RlTGlz
dDo6Q2FjaGVzOjpyZXNldCgpCiB7CiAgICAgbGFzdEl0ZW0gPSAwOwogICAgIGlzTGVuZ3RoQ2Fj
aGVWYWxpZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAko
cmV2aXNpb24gMTAzODQ3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIER5bmFtaWNOb2RlTGlz
dF9oCiAjZGVmaW5lIER5bmFtaWNOb2RlTGlzdF9oCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDUsOSArNDYsMTEgQEAgcHVibGljOgogICAgICAgICB1
bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKICAgICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQg
OiAxOwogICAgICAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOworCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICBDYWNoZXMoKTsKICAgICB9OworCiAgICAgRHluYW1pY05vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gbm9kZSkKICAgICAgICAgOiBtX25vZGUobm9kZSkKICAgICB7IH0KQEAgLTc2
LDkgKzc5LDY3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSk7Ci0gICAgbXV0YWJsZSBSZWZQdHI8Q2Fj
aGVzPiBtX2NhY2hlczsKIAogcHJpdmF0ZToKKworICAgIGNsYXNzIFN1YnRyZWVDYWNoZXMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgU3VidHJlZUNhY2hlcygpCisgICAgICAgICAgICA6IG1fY2Fj
aGVkSXRlbSgwKQorICAgICAgICAgICAgLCBtX2lzTGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9pc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQorICAgICAgICAgICAgLCBtX0RP
TVZlcnNpb25BdFRpbWVPZkNhY2hpbmcoMCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCBp
c0xlbmd0aENhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGVuZ3RoQ2FjaGVWYWxpZCAm
JiBkb21WZXJzaW9uSXNDb25zaXN0ZW50KCk7IH0KKyAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc0l0ZW1DYWNoZVZhbGlkICYmIGRvbVZlcnNpb25Jc0Nv
bnNpc3RlbnQoKTsgfQorCisgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkTGVuZ3RoOyB9CisgICAgICAgIE5vZGUqIGNhY2hlZEl0ZW0oKSBjb25z
dCB7IHJldHVybiBtX2NhY2hlZEl0ZW07IH0KKyAgICAgICAgdW5zaWduZWQgY2FjaGVkSXRlbU9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSXRlbU9mZnNldDsgfQorCisgICAgICAgIHZv
aWQgc2V0TGVuZ3RoQ2FjaGUoTm9kZSogbm9kZSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobV9pc0l0ZW1DYWNoZVZhbGlkICYmICFkb21WZXJzaW9uSXNDb25z
aXN0ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBtX2NhY2hlZEl0ZW0gPSBub2RlOworICAgICAg
ICAgICAgICAgIG1faXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9jYWNoZWRMZW5ndGggPSBsZW5ndGg7CisgICAgICAgICAgICBtX2lzTGVuZ3Ro
Q2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEl0ZW1DYWNo
ZShOb2RlKiBpdGVtLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX2lzTGVuZ3RoQ2FjaGVWYWxpZCAmJiAhZG9tVmVyc2lvbklzQ29uc2lzdGVudCgpKQorICAg
ICAgICAgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBt
X2NhY2hlZEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgbV9jYWNoZWRJdGVtT2Zmc2V0ID0gb2Zm
c2V0OworICAgICAgICAgICAgbV9pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCByZXNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2FjaGVk
SXRlbSA9IDA7CisgICAgICAgICAgICBtX2lzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNlOworICAg
ICAgICAgICAgbV9pc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIE5vZGUqIG1fY2FjaGVkSXRlbTsKKyAgICAgICAgdW5zaWduZWQgbV9j
YWNoZWRJdGVtT2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBtX2NhY2hlZExlbmd0aDsKKyAgICAg
ICAgYm9vbCBtX2lzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CisgICAgICAgIGJvb2wgbV9pc0l0ZW1D
YWNoZVZhbGlkIDogMTsKKworICAgICAgICBib29sIGRvbVZlcnNpb25Jc0NvbnNpc3RlbnQoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRJdGVtICYmIG1fY2Fj
aGVkSXRlbS0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKSA9PSBtX0RPTVZlcnNpb25BdFRp
bWVPZkNhY2hpbmc7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgbV9ET01WZXJzaW9uQXRU
aW1lT2ZDYWNoaW5nOworICAgIH07CisKKyAgICBtdXRhYmxlIFN1YnRyZWVDYWNoZXMgbV9jYWNo
ZXM7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljTm9kZUxpc3QoKSBjb25zdDsKICAgICBO
b2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJv
bUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNl
dCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDM4NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlCiAKIHZv
aWQgRWxlbWVudDo6dXBkYXRlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0cikK
IHsKLSAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoYXR0
ci0+bmFtZSgpKTsKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNo
YW5nZWQoKTsKIAogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTAzODQ3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODks
NiArNDg5LDcgQEAgdm9pZCBOb2RlOjpzZXRUcmVlU2NvcGVSZWN1cnNpdmVseShUcmVlUwogICAg
ICAgICAgICAgbm9kZS0+ZW5zdXJlUmFyZURhdGEoKS0+c2V0VHJlZVNjb3BlKG5ld1RyZWVTY29w
ZSk7CiAKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkgJiYgbm9kZS0+cmFyZURhdGEo
KS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgICAgIG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0
cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAgICAgICAgICAgICBpZiAoY3VycmVudFRyZWVTY29w
ZSkKICAgICAgICAgICAgICAgICBjdXJyZW50VHJlZVNjb3BlLT5yZW1vdmVOb2RlTGlzdENhY2hl
KCk7CiAgICAgICAgICAgICBuZXdUcmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKQEAgLTEw
MDIsNzMgKzEwMDMsMTkgQEAgdm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2Rl
TAogICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKHRoaXMsIGRhdGEpOwogfQogCi12
b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3ZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVM
aXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKICAgICBpZiAoaGFzUmFyZURhdGEo
KSAmJiBpc0F0dHJpYnV0ZU5vZGUoKSkgewogICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBy
YXJlRGF0YSgpOwogICAgICAgICBBU1NFUlQoIWRhdGEtPm5vZGVMaXN0cygpKTsKICAgICAgICAg
ZGF0YS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKICAgICB9Ci0KLSAgICAvLyBUaGlzIGxp
c3Qgc2hvdWxkIGJlIHN5bmMnZWQgd2l0aCBOb2RlTGlzdHNOb2RlRGF0YS4KLSAgICBpZiAoYXR0
ck5hbWUgIT0gY2xhc3NBdHRyCi0jaWYgRU5BQkxFKE1JQ1JPREFUQSkKLSAgICAgICAgJiYgYXR0
ck5hbWUgIT0gaXRlbXNjb3BlQXR0cgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBpdGVtcHJvcEF0
dHIKLSNlbmRpZgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBuYW1lQXR0cikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFub2Rl
LT5pc0F0dHJpYnV0ZU5vZGUoKSk7Ci0gICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBub2Rl
LT5yYXJlRGF0YSgpOwotICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNo
ZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0gICAgICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJ
ZlBvc3NpYmxlKG5vZGUsIGRhdGEpOwotICAgIH0KIH0KIAogdm9pZCBOb2RlOjppbnZhbGlkYXRl
Tm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpCiB7CiAgICAgaWYgKGhhc1JhcmVE
YXRhKCkpCiAgICAgICAgIHJhcmVEYXRhKCktPmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7Ci0K
LSAgICBpZiAoIXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQotICAgICAgICByZXR1
cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEo
KTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7Ci0KLSAg
ICAgICAgTm9kZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBkYXRh
LT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoTm9k
ZUxpc3RzTm9kZURhdGE6Ok5vZGVMaXN0U2V0OjppdGVyYXRvciBpdCA9IGRhdGEtPm5vZGVMaXN0
cygpLT5tX2xpc3RzV2l0aENhY2hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0KLSAgICAgICAgcmVtb3ZlTm9kZUxpc3RD
YWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7Ci0gICAgfQotfQotCi12b2lkIE5vZGU6Om5vdGlm
eUxvY2FsTm9kZUxpc3RzTGFiZWxDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOwot
ICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChk
YXRhLT5ub2RlTGlzdHMoKS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlKQotICAgICAgICBkYXRhLT5u
b2RlTGlzdHMoKS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKIH0K
IAogdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYXNzTm9kZUxpc3QqIGxp
c3QsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQpAQCAtMjI0MywyMyArMjE5MCw2IEBAIEZsb2F0
UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEYKICAgICByZXR1cm4gcDsKIH0KIAot
I2lmIEVOQUJMRShNSUNST0RBVEEpCi12b2lkIE5vZGU6Oml0ZW1UeXBlQXR0cmlidXRlQ2hhbmdl
ZCgpCi17Ci0gICAgTm9kZSAqIHJvb3ROb2RlID0gZG9jdW1lbnQoKTsKLQotICAgIGlmICghcm9v
dE5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGVSYXJlRGF0
YSogZGF0YSA9IHJvb3ROb2RlLT5yYXJlRGF0YSgpOwotCi0gICAgaWYgKCFkYXRhLT5ub2RlTGlz
dHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRh
dGVNaWNyb2RhdGFJdGVtTGlzdENhY2hlcygpOwotfQotI2VuZGlmCi0KICNpZm5kZWYgTkRFQlVH
CiAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2MoY29uc3QgTm9kZSogbm9kZSwgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJE
ZXNjKQpAQCAtMjM4OCwxMSArMjMxOCw3IEBAIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFs
aWRhdGVDYWNoZXMKICAgICBUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIHRhZ0Nh
Y2hlTlNFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKICAgICBmb3IgKFRhZ05vZGVM
aXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdp
bigpOyBpdCAhPSB0YWdDYWNoZU5TRW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5pbnZh
bGlkYXRlQ2FjaGUoKTsKLSAgICBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRl
cygpOwotfQogCi12b2lkIE5vZGVMaXN0c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzVGhhdERl
cGVuZE9uQXR0cmlidXRlcygpCi17CiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBj
bGFzc0NhY2hlRW5kID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuZW5kKCk7CiAgICAgZm9yIChDbGFz
c05vZGVMaXN0Q2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9jbGFzc05vZGVMaXN0Q2FjaGUuYmVnaW4o
KTsgaXQgIT0gY2xhc3NDYWNoZUVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKCk7CkBAIC0yNDA2LDYgKzIzMzIsNyBAQCB2b2lkIE5vZGVMaXN0c05vZGVEYXRh
OjppbnZhbGlkYXRlQ2FjaGVzCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICAgICBpbnZhbGlkYXRl
TWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKTsKICNlbmRpZgorICAgIAogfQogCiAjaWYgRU5BQkxF
KE1JQ1JPREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTAzODQ3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDkgKzUyMSw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVM
aXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKLSAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlz
dHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAg
dm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoKTsKICAg
ICB2b2lkIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0g
ICAgdm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCgpOwogICAgIHZvaWQgcmVt
b3ZlQ2FjaGVkQ2xhc3NOb2RlTGlzdChDbGFzc05vZGVMaXN0KiwgY29uc3QgU3RyaW5nJik7CiAK
ICAgICB2b2lkIHJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdChOYW1lTm9kZUxpc3QqLCBjb25zdCBT
dHJpbmcmKTsKQEAgLTU5MSw4ICs1OTAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCiAjaWYgRU5BQkxFKE1JQ1JPREFU
QSkKLSAgICB2b2lkIGl0ZW1UeXBlQXR0cmlidXRlQ2hhbmdlZCgpOwotCiAgICAgRE9NU2V0dGFi
bGVUb2tlbkxpc3QqIGl0ZW1Qcm9wKCk7CiAgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1S
ZWYoKTsKICAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVR5cGUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEwMzg0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcygpOwotICAgIHZvaWQg
aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKIAogI2lmIEVOQUJMRShN
SUNST0RBVEEpCiAgICAgdm9pZCBpbnZhbGlkYXRlTWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDM4NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM3LDcgKzIzNyw2IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEEK
ICAgICAgICAgc2V0SXRlbVJlZihhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBpdGVtdHlwZUF0dHIpIHsKICAgICAgICAgc2V0SXRlbVR5cGUoYXR0ci0+dmFs
dWUoKSk7Ci0gICAgICAgIGl0ZW1UeXBlQXR0cmlidXRlQ2hhbmdlZCgpOwogI2VuZGlmCiAgICAg
fQogLy8gc3RhbmRhcmQgZXZlbnRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJl
bEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVs
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwMzg0NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExhYmVsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxNSArMTU0LDQgQEAgdm9p
ZCBIVE1MTGFiZWxFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYgogICAgICAgICBIVE1MRWxlbWVu
dDo6YWNjZXNzS2V5QWN0aW9uKHNlbmRNb3VzZUV2ZW50cyk7CiB9CiAKLXZvaWQgSFRNTExhYmVs
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyaWJ1dGUpCi17Ci0g
ICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IGZvckF0dHIpIHsKLSAgICAgICAgLy8gaHRtbEZv
ciBhdHRyaWJ1dGUgY2hhbmdlIGFmZmVjdHMgb3RoZXIgbm9kZXMgdGhhbiB0aGlzLgotICAgICAg
ICAvLyBDbGVhciB0aGUgY2FjaGVzIHRvIGVuc3VyZSB0aGF0IHRoZSBsYWJlbHMgY2FjaGVzIGFy
ZSBjbGVhcmVkLgotICAgICAgICBpZiAoZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
KCktPm5vdGlmeUxvY2FsTm9kZUxpc3RzTGFiZWxDaGFuZ2VkKCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwotfQotICAg
ICAgICAgICAgICAgIAogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTExhYmVsRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExhYmVsRWxlbWVudC5oCShyZXZpc2lvbiAxMDM4NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMYWJlbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKICAg
ICB2b2lkIGZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uID0gdHJ1ZSk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiB9OwogCiB9
IC8vbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121252</attachid>
            <date>2012-01-05 03:18:10 -0800</date>
            <delta_ts>2012-06-22 19:14:50 -0700</delta_ts>
            <desc>Fixed a bug</desc>
            <filename>bug-73853-20120105031808.patch</filename>
            <type>text/plain</type>
            <size>19466</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTAxLTA0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBMYXppbHkgaW52
YWxpZGF0ZSB0aGUgbm9kZSBsaXN0IGNhY2hlcyBpbnN0ZWFkIG9mIGludmFsaWRpbmcgdGhlbSBh
dCB0aGUgdGltZSBvZiBtb2RpZmljYXRpb24uIFdlIHVzZQorICAgICAgICB0aGUgRE9NIHRyZWUg
dmVyc2lvbiB0byBkZXRlY3Qgd2hldGhlciBjYWNoZXMgbmVlZCB0byBiZSBpbnZhbGlkYXRlZCBv
ciBub3QuIFdlIG5vdyBpbnZhbGlkYXRlIGNhY2hlcyBtb3JlCisgICAgICAgIGZyZXF1ZW50bHkg
YWZ0ZXIgdGhpcyBwYXRjaCAoaW4gcGFydGljdWxhciwgaW52YWxpZGF0ZXMgY2FjaGVzIHRoYXQg
YXJlIHN0b3JlZCBvbiBub2RlcyBub3QgcHJlc2VudCBpbgorICAgICAgICB0aGUgYW5jZXN0cnkg
b2YgdGhlIG1vZGlmaWVkIG5vZGVzKTsgaG93ZXZlciwgb3VyIHN0dWR5IG9uIG1ham9yIFdlYiBz
aXRlcyBzdWNoIGFzIEdtYWlsLCBGYWNlYm9vaywgVHdpdHRlciwKKyAgICAgICAgZXRjLi4uIGlu
ZGljYXRlIHRoYXQgYWJvdXQgMSUgb2YgcmVhbC13b3JsZCB1c2FnZSBiZW5lZml0cyBmcm9tIGtl
ZXBpbmcgdGhlIGNhY2hlcyBhbGl2ZSBhY3Jvc3MgZGlmZmVyZW50CisgICAgICAgIERPTSB0cmVl
IHZlcnNpb25zLgorCisgICAgICAgIEluIG9yZGVyIHRvIGludmFsaWRhdGUgY2FjaGVzIGxhemls
eSwgdGhpcyBwYXRjaCBhZGRzIHJlcGxhY2VzIHRoZSB0eXBlIG9mIG1fY2FjaGVzIGluIER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QKKyAgICAgICAgYnkgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3Vi
dHJlZUNhY2hlcyB3aGljaCBlbmNhcHN1bGF0ZXMgbWVtYmVyIHZhcmlhYmxlcyBpbiBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyBhbmQKKyAgICAgICAgaW52YWxpZGF0ZXMgdmFsdWVzIGFzIG5lZWRl
ZC4gQWxzbyB0aGlzIGNoYW5nZSBhbGxvd3MgbV9jYWNoZXMgdG8gYmUgYWxsb2NhdGVkIGFzIGEg
cGFydCBvZgorICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0IGluc3RlYWQgb2YgYSBzZXBh
cmF0ZSByZWYtY291bnRlZCBvYmplY3QuCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBdHRyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpj
aGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUZvcndhcmRz
RnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlz
dDo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpD
YWNoZXM6OnJlc2V0KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpTdWJ0cmVlQ2FjaGVzOjpTdWJ0cmVl
Q2FjaGVzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJlZU5vZGVMaXN0
OjpTdWJ0cmVlQ2FjaGVzOjppc0xlbmd0aENhY2hlVmFsaWQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OmlzSXRlbUNhY2hl
VmFsaWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
OlN1YnRyZWVDYWNoZXM6OmNhY2hlZExlbmd0aCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6Y2FjaGVkSXRlbSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hl
czo6Y2FjaGVkSXRlbU9mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1
YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6c2V0TGVuZ3RoQ2FjaGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OnNl
dEl0ZW1DYWNoZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6U3VidHJlZUNhY2hlczo6cmVzZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OmRvbVZlcnNpb25Jc0NvbnNpc3Rl
bnQpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojp1cGRhdGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldFRyZWVTY29wZVJlY3Vyc2l2ZWx5
KTogQ2xlYXIgY2FjaGVzIHdoZW4gYSBub2RlIG1vdmVzIGZyb20gb25lIGRvY3VtZW50IHRvIGFu
b3RoZXIuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVB
ZnRlckF0dHJpYnV0ZUNoYW5nZWQpOiBPbmx5IGNsZWFycyBjaGlsZCBub2RlIGxpc3Qgb2YgQXR0
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVy
Q2hpbGRyZW5DaGFuZ2VkKTogT25seSBjbGVhcnMgY2hpbGQgbm9kZSBsaXN0LgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMpOiBNZXJnZWQgd2l0
aCBpbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcy4KKyAgICAgICAgKiBkb20v
Tm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuaDoKKwogMjAxMS0xMi0yMyAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0d28gKGN1cnJlbnRseSB1
bnVzZWQpIG5ldyBtZW1iZXIgZnVuY3Rpb25zIHRvIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Q2xpZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAxMDM2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2
b2lkIEF0dHI6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgCiAgICAgY3JlYXRlVGV4dENo
aWxkKCk7CiAgICAgbV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQtLTsKIAotICAgIGludmFsaWRhdGVO
b2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChtX2F0dHJpYnV0ZS0+bmFtZSgpKTsK
KyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoKTsKIH0K
IAogdm9pZCBBdHRyOjpzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJikKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEF0dHI6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCCiAKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2Vy
LCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogCi0gICAgaW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKG1fYXR0cmlidXRlLT5u
YW1lKCkpOworICAgIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdl
ZCgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbmNsdWRlIGVudGl0eSByZWZlcmVuY2Vz
IGluIHRoZSB2YWx1ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNw
cAkocmV2aXNpb24gMTAzNjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDQ0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3VidHJlZUNhY2hlczo6U3VidHJlZUNh
Y2hlcygpCisgICAgOiBtX2NhY2hlZEl0ZW0oMCkKKyAgICAsIG1faXNMZW5ndGhDYWNoZVZhbGlk
KGZhbHNlKQorICAgICwgbV9pc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQorICAgICwgbV9kb21UcmVl
VmVyc2lvbkF0VGltZU9mQ2FjaGluZygwKQoreworfQorCit2b2lkIER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Q6OlN1YnRyZWVDYWNoZXM6OnNldExlbmd0aENhY2hlKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBpZiAobV9pc0l0ZW1DYWNoZVZhbGlkICYmICFkb21WZXJzaW9uSXND
b25zaXN0ZW50KCkpIHsKKyAgICAgICAgbV9jYWNoZWRJdGVtID0gbm9kZTsKKyAgICAgICAgbV9p
c0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7CisgICAgfQorICAgIG1fY2FjaGVkTGVuZ3RoID0gbGVu
Z3RoOworICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBtX2RvbVRyZWVWZXJz
aW9uQXRUaW1lT2ZDYWNoaW5nID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9tVHJlZVZlcnNpb24oKTsK
K30KKwordm9pZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpTdWJ0cmVlQ2FjaGVzOjpzZXRJdGVt
Q2FjaGUoTm9kZSogaXRlbSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGlmIChtX2lzTGVuZ3Ro
Q2FjaGVWYWxpZCAmJiAhZG9tVmVyc2lvbklzQ29uc2lzdGVudCgpKQorICAgICAgICBtX2lzTGVu
Z3RoQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIG1fY2FjaGVkSXRlbSA9IGl0ZW07CisgICAgbV9j
YWNoZWRJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1faXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7
CisgICAgbV9kb21UcmVlVmVyc2lvbkF0VGltZU9mQ2FjaGluZyA9IGl0ZW0tPmRvY3VtZW50KCkt
PmRvbVRyZWVWZXJzaW9uKCk7Cit9CisKK3ZvaWQgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6U3Vi
dHJlZUNhY2hlczo6cmVzZXQoKQoreworICAgIG1fY2FjaGVkSXRlbSA9IDA7CisgICAgbV9pc0xl
bmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICBtX2lzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsK
K30KKwogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IG5vZGUpCiAgICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSkKLSAgICAsIG1f
Y2FjaGVzKENhY2hlczo6Y3JlYXRlKCkpCiB7CiAgICAgcm9vdE5vZGUoKS0+cmVnaXN0ZXJEeW5h
bWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQpAQCAtNDIsMTYgKzc3LDE1IEBAIER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWljU3VidHJlZU4KIAogdW5zaWduZWQgRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3Ro
Q2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7CisgICAg
aWYgKG1fY2FjaGVzLmlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQorICAgICAgICByZXR1cm4gbV9jYWNo
ZXMuY2FjaGVkTGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogCiAgICAgZm9y
IChOb2RlKiBuID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3ROb2RlKCkpKQogICAgICAgICBsZW5ndGggKz0gbi0+aXNFbGVtZW50Tm9kZSgpICYm
IG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CiAKLSAgICBtX2NhY2hlcy0+
Y2FjaGVkTGVuZ3RoID0gbGVuZ3RoOwotICAgIG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQg
PSB0cnVlOworICAgIG1fY2FjaGVzLnNldExlbmd0aENhY2hlKG5vZGUoKSwgbGVuZ3RoKTsKIAog
ICAgIHJldHVybiBsZW5ndGg7CiB9CkBAIC02Miw5ICs5Niw3IEBAIE5vZGUqIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Q6Oml0ZW1Gb3J3YXIKICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUoKSkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CiAg
ICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgIG1fY2Fj
aGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlcy5zZXRJdGVtQ2FjaGUobiwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC0tcmVtYWluaW5nT2Zmc2V0OwpAQCAtODAsOSArMTEyLDcgQEAgTm9kZSogRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdDo6aXRlbUJhY2t3YQogICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdE5vZGUoKSkpIHsKICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7
CiAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgIG1f
Y2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVt
T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZh
bGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlcy5zZXRJdGVtQ2FjaGUobiwgb2Zm
c2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICsrcmVtYWluaW5nT2Zmc2V0OwpAQCAtOTYsMTIgKzEyNiwxMiBAQCBOb2RlKiBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0OjppdGVtKHVuc2lnCiB7CiAgICAgaW50IHJlbWFpbmluZ09mZnNldCA9
IG9mZnNldDsKICAgICBOb2RlKiBzdGFydCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOwotICAgIGlm
IChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICBpZiAob2Zmc2V0ID09IG1f
Y2FjaGVzLT5sYXN0SXRlbU9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFz
dEl0ZW07Ci0gICAgICAgIGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNl
dCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAg
ICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOwotICAgICAgICAgICAgcmVtYWluaW5n
T2Zmc2V0IC09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsKKyAgICBpZiAobV9jYWNoZXMuaXNJ
dGVtQ2FjaGVWYWxpZCgpKSB7CisgICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNoZXMuY2FjaGVk
SXRlbU9mZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLmNhY2hlZEl0ZW0oKTsK
KyAgICAgICAgaWYgKG9mZnNldCA+IG1fY2FjaGVzLmNhY2hlZEl0ZW1PZmZzZXQoKSB8fCBtX2Nh
Y2hlcy5jYWNoZWRJdGVtT2Zmc2V0KCkgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAgICAg
IHN0YXJ0ID0gbV9jYWNoZXMuY2FjaGVkSXRlbSgpOworICAgICAgICAgICAgcmVtYWluaW5nT2Zm
c2V0IC09IG1fY2FjaGVzLmNhY2hlZEl0ZW1PZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTM5LDcgKzE2OSw3IEBAIGJvb2wgRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXNEeW5hbWlj
Tm8KIAogdm9pZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUoKQogewot
ICAgIG1fY2FjaGVzLT5yZXNldCgpOworICAgIG1fY2FjaGVzLnJlc2V0KCk7CiB9CiAKIER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKQEAgLTE0OSwxMiArMTc5LDEyIEBA
IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpDYWNoZXM+IER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3Q6OkNhY2hlczo6Y3JlYXRlKCkKK1Bhc3NSZWZQdHI8RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+
IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpjcmVhdGUoKQogewogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FjaGVzKCkpOwogfQogCi12b2lkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hl
czo6cmVzZXQoKQordm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQogewogICAg
IGxhc3RJdGVtID0gMDsKICAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEwMzYzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiAr
MjQsNyBAQAogI2lmbmRlZiBEeW5hbWljTm9kZUxpc3RfaAogI2RlZmluZSBEeW5hbWljTm9kZUxp
c3RfaAogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ1
LDkgKzQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CiAg
ICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKICAgICAgICAgYm9vbCBpc0l0ZW1D
YWNoZVZhbGlkIDogMTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgQ2FjaGVzKCk7CiAgICAg
fTsKKwogICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCiAgICAgICAg
IDogbV9ub2RlKG5vZGUpCiAgICAgeyB9CkBAIC03Niw5ICs3OSw0MCBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUpOwotICAgIG11dGFibGUgUmVmUHRyPENhY2hlcz4gbV9jYWNoZXM7CiAKIHByaXZhdGU6
CisKKyAgICBjbGFzcyBTdWJ0cmVlQ2FjaGVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1YnRy
ZWVDYWNoZXMoKTsKKworICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNMZW5ndGhDYWNoZVZhbGlkICYmIGRvbVZlcnNpb25Jc0NvbnNpc3RlbnQoKTsg
fQorICAgICAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzSXRl
bUNhY2hlVmFsaWQgJiYgZG9tVmVyc2lvbklzQ29uc2lzdGVudCgpOyB9CisKKyAgICAgICAgdW5z
aWduZWQgY2FjaGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRMZW5ndGg7IH0KKyAg
ICAgICAgTm9kZSogY2FjaGVkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSXRlbTsgfQor
ICAgICAgICB1bnNpZ25lZCBjYWNoZWRJdGVtT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRJdGVtT2Zmc2V0OyB9CisKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhDYWNoZShOb2RlKiBub2Rl
Rm9yRG9jdW1lbnRWZXJzaW9uLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICB2b2lkIHNldEl0
ZW1DYWNoZShOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCByZXNldCgpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgTm9kZSogbV9jYWNoZWRJdGVtOworICAgICAgICB1bnNp
Z25lZCBtX2NhY2hlZEl0ZW1PZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fY2FjaGVkTGVuZ3Ro
OworICAgICAgICBib29sIG1faXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKKyAgICAgICAgYm9vbCBt
X2lzSXRlbUNhY2hlVmFsaWQgOiAxOworCisgICAgICAgIGJvb2wgZG9tVmVyc2lvbklzQ29uc2lz
dGVudCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NhY2hlZEl0ZW0g
JiYgbV9jYWNoZWRJdGVtLT5kb2N1bWVudCgpLT5kb21UcmVlVmVyc2lvbigpID09IG1fZG9tVHJl
ZVZlcnNpb25BdFRpbWVPZkNhY2hpbmc7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgbV9k
b21UcmVlVmVyc2lvbkF0VGltZU9mQ2FjaGluZzsKKyAgICB9OworCisgICAgbXV0YWJsZSBTdWJ0
cmVlQ2FjaGVzIG1fY2FjaGVzOworCiAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0
KCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQs
IHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSog
aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGlu
dCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2
aXNpb24gMTAzNjM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNyArNjYyLDcgQEAgdm9pZCBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2Vk
KEF0dHJpYnV0ZQogCiB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZChB
dHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRy
aWJ1dGVDaGFuZ2VkKGF0dHItPm5hbWUoKSk7CisgICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHJldmlzaW9uIDEwMzYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTA3LDYgKzUwNyw3IEBAIHZvaWQgTm9kZTo6c2V0VHJlZVNjb3BlUmVjdXJz
aXZlbHkoVHJlZVMKICAgICAgICAgICAgIG5vZGUtPmVuc3VyZVJhcmVEYXRhKCktPnNldFRyZWVT
Y29wZShuZXdUcmVlU2NvcGUpOwogCiAgICAgICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpICYm
IG5vZGUtPnJhcmVEYXRhKCktPm5vZGVMaXN0cygpKSB7CisgICAgICAgICAgICBub2RlLT5yYXJl
RGF0YSgpLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogICAgICAgICAgICAgaWYg
KGN1cnJlbnRUcmVlU2NvcGUpCiAgICAgICAgICAgICAgICAgY3VycmVudFRyZWVTY29wZS0+cmVt
b3ZlTm9kZUxpc3RDYWNoZSgpOwogICAgICAgICAgICAgbmV3VHJlZVNjb3BlLT5hZGROb2RlTGlz
dENhY2hlKCk7CkBAIC0xMDIwLDczICsxMDIxLDE5IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUwKICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0aGlz
LCBkYXRhKTsKIH0KIAotdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCit2b2lkIE5vZGU6
OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCgpCiB7CiAgICAg
aWYgKGhhc1JhcmVEYXRhKCkgJiYgaXNBdHRyaWJ1dGVOb2RlKCkpIHsKICAgICAgICAgTm9kZVJh
cmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKICAgICAgICAgQVNTRVJUKCFkYXRhLT5ub2RlTGlz
dHMoKSk7CiAgICAgICAgIGRhdGEtPmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQot
Ci0gICAgLy8gVGhpcyBsaXN0IHNob3VsZCBiZSBzeW5jJ2VkIHdpdGggTm9kZUxpc3RzTm9kZURh
dGEuCi0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgotI2lmIEVOQUJMRShNSUNST0RBVEEp
Ci0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0dHIKLSAgICAgICAgJiYgYXR0ck5h
bWUgIT0gaXRlbXByb3BBdHRyCi0jZW5kaWYKLSAgICAgICAgJiYgYXR0ck5hbWUgIT0gbmFtZUF0
dHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0
Q2FjaGVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7
IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgQVNTRVJUKHRoaXMg
PT0gbm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpOwotICAgICAgICBpZiAoIW5vZGUt
Pmhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVE
YXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlz
dHMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygp
LT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwotICAgICAgICByZW1v
dmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRhKTsKLSAgICB9CiB9CiAKIHZvaWQg
Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKQogewog
ICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9k
ZUxpc3RDYWNoZSgpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0
YSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9
IG5vZGUtPnJhcmVEYXRhKCk7Ci0gICAgICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0
ZUNhY2hlcygpOwotCi0gICAgICAgIE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRl
cmF0b3IgZW5kID0gZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLmVuZCgpOwot
ICAgICAgICBmb3IgKE5vZGVMaXN0c05vZGVEYXRhOjpOb2RlTGlzdFNldDo6aXRlcmF0b3IgaXQg
PSBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgpOwotCi0gICAgICAg
IHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKG5vZGUsIGRhdGEpOwotICAgIH0KLX0KLQot
dm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCgpCi17Ci0gICAgaWYg
KCFoYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0gICAgTm9kZVJhcmVEYXRhKiBkYXRh
ID0gcmFyZURhdGEoKTsKLSAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCktPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSkK
LSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGFiZWxzTm9kZUxpc3RDYWNoZS0+aW52YWxp
ZGF0ZUNhY2hlKCk7CiB9CiAKIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2xhc3NOb2RlTGlzdChD
bGFzc05vZGVMaXN0KiBsaXN0LCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZSkKQEAgLTIyNjEsMjMg
KzIyMDgsNiBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBGCiAgICAg
cmV0dXJuIHA7CiB9CiAKLSNpZiBFTkFCTEUoTUlDUk9EQVRBKQotdm9pZCBOb2RlOjppdGVtVHlw
ZUF0dHJpYnV0ZUNoYW5nZWQoKQotewotICAgIE5vZGUgKiByb290Tm9kZSA9IGRvY3VtZW50KCk7
Ci0KLSAgICBpZiAoIXJvb3ROb2RlLT5oYXNSYXJlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSByb290Tm9kZS0+cmFyZURhdGEoKTsKLQotICAgIGlm
ICghZGF0YS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRhdGEtPm5vZGVM
aXN0cygpLT5pbnZhbGlkYXRlTWljcm9kYXRhSXRlbUxpc3RDYWNoZXMoKTsKLX0KLSNlbmRpZgot
CiAjaWZuZGVmIE5ERUJVRwogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVEZXNjKGNvbnN0
IE5vZGUqIG5vZGUsIFN0cmluZyYgc3RyaW5nLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBj
b25zdCBjaGFyKiBhdHRyRGVzYykKQEAgLTI0MDYsMTEgKzIzMzYsNyBAQCB2b2lkIE5vZGVMaXN0
c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzCiAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25z
dF9pdGVyYXRvciB0YWdDYWNoZU5TRW5kID0gbV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7CiAg
ICAgZm9yIChUYWdOb2RlTGlzdENhY2hlTlM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90YWdOb2Rl
TGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0gdGFnQ2FjaGVOU0VuZDsgKytpdCkKICAgICAgICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgaW52YWxpZGF0ZUNhY2hlc1RoYXRE
ZXBlbmRPbkF0dHJpYnV0ZXMoKTsKLX0KIAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxp
ZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKQotewogICAgIENsYXNzTm9kZUxpc3RD
YWNoZTo6aXRlcmF0b3IgY2xhc3NDYWNoZUVuZCA9IG1fY2xhc3NOb2RlTGlzdENhY2hlLmVuZCgp
OwogICAgIGZvciAoQ2xhc3NOb2RlTGlzdENhY2hlOjppdGVyYXRvciBpdCA9IG1fY2xhc3NOb2Rl
TGlzdENhY2hlLmJlZ2luKCk7IGl0ICE9IGNsYXNzQ2FjaGVFbmQ7ICsraXQpCiAgICAgICAgIGl0
LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwpAQCAtMjQyNCw2ICsyMzUwLDcgQEAgdm9pZCBO
b2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcwogI2lmIEVOQUJMRShNSUNST0RBVEEp
CiAgICAgaW52YWxpZGF0ZU1pY3JvZGF0YUl0ZW1MaXN0Q2FjaGVzKCk7CiAjZW5kaWYKKyAgICAK
IH0KIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEw
MzYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
OSw5ICs1MTksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7Ci0gICAgdm9pZCBp
bnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOworICAgIHZvaWQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1
dGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxk
cmVuQ2hhbmdlZCgpOwotICAgIHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQo
KTsKICAgICB2b2lkIHJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QoQ2xhc3NOb2RlTGlzdCosIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCByZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFtZU5v
ZGVMaXN0KiwgY29uc3QgU3RyaW5nJik7CkBAIC01ODksOCArNTg4LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAogI2lm
IEVOQUJMRShNSUNST0RBVEEpCi0gICAgdm9pZCBpdGVtVHlwZUF0dHJpYnV0ZUNoYW5nZWQoKTsK
LQogICAgIERPTVNldHRhYmxlVG9rZW5MaXN0KiBpdGVtUHJvcCgpOwogICAgIERPTVNldHRhYmxl
VG9rZW5MaXN0KiBpdGVtUmVmKCk7CiAgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1UeXBl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShyZXZpc2lvbiAxMDM2MzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGludmFsaWRhdGVDYWNo
ZXMoKTsKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7
CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogICAgIHZvaWQgaW52YWxpZGF0ZU1pY3JvZGF0YUl0
ZW1MaXN0Q2FjaGVzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2
aXNpb24gMTAzNjM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNiBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBCiAgICAgICAgIHNldEl0ZW1SZWYoYXR0ci0+dmFsdWUoKSk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaXRlbXR5cGVBdHRyKSB7CiAgICAgICAgIHNldEl0
ZW1UeXBlKGF0dHItPnZhbHVlKCkpOwotICAgICAgICBpdGVtVHlwZUF0dHJpYnV0ZUNoYW5nZWQo
KTsKICNlbmRpZgogICAgIH0KIC8vIHN0YW5kYXJkIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDM2MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQs
MTUgKzE1NCw0IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGIKICAg
ICAgICAgSFRNTEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihzZW5kTW91c2VFdmVudHMpOwogfQog
Ci12b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cmlidXRlKQotewotICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBmb3JBdHRyKSB7Ci0g
ICAgICAgIC8vIGh0bWxGb3IgYXR0cmlidXRlIGNoYW5nZSBhZmZlY3RzIG90aGVyIG5vZGVzIHRo
YW4gdGhpcy4KLSAgICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlcyB0byBlbnN1cmUgdGhhdCB0aGUg
bGFiZWxzIGNhY2hlcyBhcmUgY2xlYXJlZC4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkpCi0gICAg
ICAgICAgICBkb2N1bWVudCgpLT5ub3RpZnlMb2NhbE5vZGVMaXN0c0xhYmVsQ2hhbmdlZCgpOwot
ICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cmlidXRlKTsKLX0KLSAgICAgICAgICAgICAgICAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAkocmV2aXNpb24gMTAzNjM0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOwogCiAgICAgdm9pZCBmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlv
biA9IHRydWUpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogfTsKIAogfSAvL25hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149156</attachid>
            <date>2012-06-22 19:14:56 -0700</date>
            <delta_ts>2012-06-22 22:19:56 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>bug-73853-20120622191940.patch</filename>
            <type>text/plain</type>
            <size>12798</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTA4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA2LTIyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnZhbGlkYXRl
IGFsbCBub2RlIGxpc3RzIGF0IGRvY3VtZW50IGxldmVsIHRvIGF2b2lkIGhhdmluZyB0byB3YWxr
IHVwIHRoZSBET00gdHJlZSBpbiB0aGUgaW52YWxpZGF0aW9uLgorICAgICAgICBJbiBwYXJ0aWN1
bGFyLCB0aGlzIG1ha2VzIGFwcGVuZGluZyBub2RlIE8oMSkgd2l0aCByZXNwZWN0IHRvIHRoZSBk
ZXB0aCBvZiB0aGUgdHJlZSBpbiBjb21tb24gY2FzZXMgd2hlbgorICAgICAgICB3ZSBoYXZlIG5v
ZGUgbGlzdHMgc29tZXdoZXJlIGluIHRoZSB0cmVlIHNjb3BlLgorCisgICAgICAgIFdlIG5vdyBp
bnZhbGlkYXRlIG1vcmUgbm9kZSBsaXN0cyB0aGFuIHdlIHVzZWQgdG8gYnV0IGl0IHNob3VsZG4n
dCBtYXR0ZXIgbXVjaCBpbiBwcmFjdGljZSBiZWNhdXNlCisgICAgICAgIG1vc3Qgd2Vic2l0ZXMg
ZG9uJ3QgYWRkIG9yIHJlbW92ZSBub2RlcyBvciBtb2RpZnkgcmVsZXZhbnQgYXR0cmlidXRlcyB3
aGlsZSBpdGVyYXRpbmcgdGhyb3VnaCBub2RlIGxpc3RzLgorCisgICAgICAgIEFsc28sIFJhZGlv
Tm9kZUxpc3QgYW5kIExhYmVsc05vZGVMaXN0IGhhZCBhbHdheXMgYmVlbiBpbnZhbGlkYXRlZCBh
dCBkb2N1bWVudCBsZXZlbCBzbyB0aGlzIHJlZmFjdG9yaW5nCisgICAgICAgIGFsc28gYWxsb3dz
IHVzIHRvIG1vdmUgY2FsbHMgdG8gcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBpbgorICAgICAgICB0aG9zZSBub2RlIGxp
c3RzIHRvIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QsIGFuZCBldmVuIGRlbGV0ZSBOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcygpLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbGVhck5vZGVMaXN0Q2FjaGVzKTogT3B0
aW9uYWxseSB0YWtlcyBhIHF1YWxpZmllZCBhdHRyaWJ1dGUgbmFtZSBzbyB0aGF0IHdlIGRvbid0
CisgICAgICAgIGhhdmUgdG8gaW52YWxpZGF0ZSB0YWcgbm9kZSBsaXN0cyB3aGVuIG9ubHkgYXR0
cmlidXRlcyBhcmUgbW9kaWZpZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
ICogZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6IENhbGxzIHVucmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0LgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QpOiBDYWxscyByZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAg
ICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVM
aXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKTogTm8gbG9uZ2VyIHdhbGtzIHVwIHRoZSB0
cmVlIHRvIGludmFsaWRhdGUKKyAgICAgICAgbm9kZSBsaXN0IGNhY2hlcy4gQWxsIGludmFsaWRh
dGlvbnMgYXJlIGRvbmUgaW4gRG9jdW1lbnQ6OmNsZWFyTm9kZUxpc3RDYWNoZXMuCisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hh
bmdlZCk6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKE5v
ZGVMaXN0c05vZGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjph
ZG9wdFRyZWVTY29wZSk6IEludmFsaWRhdGUgbm9kZSBsaXN0IGNhY2hlcyB3aGlsZSByZWdpc3Rl
cmluZyBhbmQKKyAgICAgICAgdW5yZWdpc3RlcmluZyBub2RlIGxpc3RzIGZyb20gb2xkIGFuZCBu
ZXcgZG9jdW1lbnRzIHJlc3BlY3RpdmVseSBub3cgdGhhdCBpbnZhbGlkYXRlQ2FjaGVzKCkgaGFz
IGJlZW4KKyAgICAgICAgcmVtb3ZlZCBmcm9tIE5vZGVMaXN0c05vZGVEYXRhLgorICAgICAgICAq
IGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxp
c3Q6OkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0Ojp+
TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0OjpSYWRpb05vZGVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKwogMjAxMi0wNi0yMiAgRXVn
ZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJpZ0BnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogRml4IG5lZ2F0aXZlIHRpbWUgaW50ZXJ2YWwgb24gem9vbS1pbgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcyLDExICszODcyLDEzIEBAIHZv
aWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU4KICAgICBtX2xpc3RzSW52YWxp
ZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6Y2xlYXJO
b2RlTGlzdENhY2hlcygpCit2b2lkIERvY3VtZW50OjpjbGVhck5vZGVMaXN0Q2FjaGVzKGNvbnN0
IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQogewogICAgIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVO
b2RlTGlzdCo+OjppdGVyYXRvciBlbmQgPSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICgqaXQpLT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+OjppdGVyYXRvciBpdCA9IG1fbGlzdHNJbnZhbGlkYXRl
ZEF0RG9jdW1lbnQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghYXR0
ck5hbWUgfHwgKCppdCktPnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQorICAg
ICAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgpOworICAgIH0KIH0KIAogdm9pZCBEb2N1
bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxNCw3ICs3MTQsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0
Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0Kik7Ci0gICAgdm9pZCBjbGVhck5vZGVMaXN0Q2FjaGVzKCk7CisgICAgdm9p
ZCBjbGVhck5vZGVMaXN0Q2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKTsKIAog
ICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwogICAgIHZvaWQgZGV0
YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5
bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QoKQogeworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KHRoaXMpOwogfQogCiB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojps
ZW5ndGgoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2
aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAg
IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSBy
b290VHlwZSA9IFJvb3RlZEF0Tm9kZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBl
ID0gQWx3YXlzSW52YWxpZGF0ZSkKICAgICAgICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgcm9v
dFR5cGUsIGludmFsaWRhdGlvblR5cGUpCi0gICAgeyB9CisgICAgeworICAgICAgICBkb2N1bWVu
dCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CisgICAgfQogCiBwcml2
YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNp
Z25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NjcsMjEgKzk2Nyw3IEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXIKICAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0ciB8fCAhYXR0
cmlidXRlT3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygpOwotCi0gICAgaWYg
KCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFub2RlLT5pc0F0dHJpYnV0ZU5v
ZGUoKSk7Ci0gICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBub2RlLT5yYXJlRGF0YSgpOwot
ICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoJmF0dHJOYW1lKTsK
LSAgICB9CisgICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygmYXR0ck5hbWUpOwog
fQogCiB2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFu
Z2VkKCkKQEAgLTk4OSwyMCArOTc1LDcgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3Rz
Q2FjaGVBZnRlcgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5j
bGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlz
dENhY2hlcygpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRh
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0g
bm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRl
Q2FjaGVzKCk7Ci0gICAgfQorICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoMCk7
CiB9CiAKIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQpAQCAtMjIzOCwyOCAr
MjIxMSw2IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAKIAogLy8g
LS0tLS0tLS0KIAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25z
dCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKLXsKLSAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNo
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2Fj
aGVzLmVuZCgpOwotICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVD
YWNoZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWF0dHJOYW1lIHx8IGl0LT5zZWNvbmQtPnNo
b3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQotICAgICAgICAgICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgfQotCi0gICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKLSAgICBm
b3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hl
cy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFhdHRy
TmFtZSB8fCBpdC0+c2Vjb25kLT5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoKSkK
LSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0KLQotICAg
IGlmICghYXR0ck5hbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRhZ05vZGVMaXN0Q2FjaGVO
Uzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKLSAg
ICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2Fj
aGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIGFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyh1cmxzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlz
aW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnZhbGlkYXRl
Q2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lID0gMCk7CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2F0b21pY05hbWVDYWNoZXMuaXNF
bXB0eSgpICYmIG1fbmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV90YWdOb2RlTGlzdENhY2hlTlMu
aXNFbXB0eSgpOwpAQCAtMTIxLDI4ICsxMjAsMzAgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZG9w
dFRyZWVTY29wZShUcmVlU2NvcGUqIG9sZFRyZWVTY29wZSwgVHJlZVNjb3BlKiBuZXdUcmVlU2Nv
cGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQogICAgIHsK
LSAgICAgICAgaW52YWxpZGF0ZUNhY2hlcygpOwotCi0gICAgICAgIGlmIChvbGREb2N1bWVudCAh
PSBuZXdEb2N1bWVudCkgewotICAgICAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGF0b21pY05hbWVDYWNoZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5l
bmQoKTsKLSAgICAgICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05h
bWVDYWNoZUVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqIGxpc3QgPSBpdC0+c2Vjb25kOwotICAgICAgICAgICAgICAgIGlmIChsaXN0LT5pc1Jvb3Rl
ZEF0RG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdp
c3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5l
d0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRl
cmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOworICAg
ICAgICBmb3IgKE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgbGlzdC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgICAgICBp
ZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQgJiYgbGlzdC0+aXNSb290ZWRBdERvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QobGlzdCk7CisgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci0gICAgICAgICAgICBOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNh
Y2hlRW5kID0gbV9uYW1lQ2FjaGVzLmVuZCgpOwotICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5h
bWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQg
IT0gbmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3QtPmlz
Um9vdGVkQXREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVy
YXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMuZW5kKCk7CisgICAgICAgIGZvciAoTm9k
ZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2lu
KCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkgeworICAgICAgICAgICAgRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBsaXN0LT5pbnZhbGlk
YXRlQ2FjaGUoKTsKKyAgICAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVudCAm
JiBsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIG9sZERvY3Vt
ZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKKyAgICAgICAgICAg
ICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpp
dGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOworICAgICAg
ICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2Fj
aGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKKyAgICAgICAgICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOworCiAgICAgICAgIGlmIChvbGRUcmVlU2NvcGUpCiAg
ICAgICAgICAgICBvbGRUcmVlU2NvcGUtPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKICAgICAgICAg
bmV3VHJlZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVM
aXN0KE5vZGUqIGZvck5vZGUpCiAgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KGZvck5vZGUs
IFJvb3RlZEF0RG9jdW1lbnQpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0
KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21p
Y05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdFR5cGUsIHN0YXJBdG9t
KTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlz
KTsKIH0gCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0
ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAko
cmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDExIEBAIFJhZGlvTm9kZUxpc3Q6OlJhZGlv
Tm9kZUxpc3QoTm9kZSogcm9vdE4KICAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5v
ZGUsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpID8gUm9vdGVkQXREb2N1bWVudCA6IFJv
b3RlZEF0Tm9kZSkKICAgICAsIG1fbmFtZShuYW1lKQogewotICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogUmFkaW9Ob2RlTGlzdDo6flJh
ZGlvTm9kZUxpc3QoKQogewogICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2Fj
aGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBl
LCBtX25hbWUpOwotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVM
aXN0KHRoaXMpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRvUmFkaW9C
dXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149165</attachid>
            <date>2012-06-22 23:46:07 -0700</date>
            <delta_ts>2012-06-23 13:25:52 -0700</delta_ts>
            <desc>Removed more code</desc>
            <filename>bug-73853-20120622235049.patch</filename>
            <type>text/plain</type>
            <size>16344</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTA4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA2LTIyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnZhbGlkYXRl
IGFsbCBub2RlIGxpc3RzIGF0IGRvY3VtZW50IGxldmVsIHRvIGF2b2lkIGhhdmluZyB0byB3YWxr
IHVwIHRoZSBET00gdHJlZSBpbiB0aGUgaW52YWxpZGF0aW9uLgorICAgICAgICBJbiBwYXJ0aWN1
bGFyLCB0aGlzIG1ha2VzIGFwcGVuZGluZyBub2RlIE8oMSkgd2l0aCByZXNwZWN0IHRvIHRoZSBk
ZXB0aCBvZiB0aGUgdHJlZSBpbiBjb21tb24gY2FzZXMgd2hlbgorICAgICAgICB3ZSBoYXZlIG5v
ZGUgbGlzdHMgc29tZXdoZXJlIGluIHRoZSB0cmVlIHNjb3BlLgorCisgICAgICAgIFdlIG5vdyBp
bnZhbGlkYXRlIG1vcmUgbm9kZSBsaXN0cyB0aGFuIHdlIHVzZWQgdG8gYnV0IGl0IHNob3VsZG4n
dCBtYXR0ZXIgbXVjaCBpbiBwcmFjdGljZSBiZWNhdXNlCisgICAgICAgIG1vc3Qgd2Vic2l0ZXMg
ZG9uJ3QgYWRkIG9yIHJlbW92ZSBub2RlcyBvciBtb2RpZnkgcmVsZXZhbnQgYXR0cmlidXRlcyB3
aGlsZSBpdGVyYXRpbmcgdGhyb3VnaCBub2RlIGxpc3RzLgorCisgICAgICAgIEFsc28sIFJhZGlv
Tm9kZUxpc3QgYW5kIExhYmVsc05vZGVMaXN0IGhhZCBhbHdheXMgYmVlbiBpbnZhbGlkYXRlZCBh
dCBkb2N1bWVudCBsZXZlbCBzbyB0aGlzIHJlZmFjdG9yaW5nCisgICAgICAgIGFsc28gYWxsb3dz
IHVzIHRvIG1vdmUgY2FsbHMgdG8gcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBpbgorICAgICAgICB0aG9zZSBub2RlIGxp
c3RzIHRvIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QsIGFuZCBldmVuIGRlbGV0ZSBOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcygpLgorCisgICAgICAgIEluIGFkZGl0aW9uLCByZW1v
dmVkIG1fbnVtTm9kZUxpc3RDYWNoZXMgZnJvbSBUcmVlU2NvcGUgc2luY2UgaXQgd2FzIG9ubHkg
dXNlZCB0byBhdm9pZCB3YWxraW5nIHVwCisgICAgICAgIHRoZSBhbmNlc3RvcnMgaW4gaW52YWxp
ZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkIGFuZCBpbnZhbGlkYXRlTm9k
ZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZAorICAgICAgICBidXQgd2UgZG9uJ3Qgd2Fs
ayB1cCB0aGUgYW5jZXN0b3JzIGFueSBtb3JlLiBBbHNvIG5vdGUgdGhhdCBtX2xpc3RzSW52YWxp
ZGF0ZWRBdERvY3VtZW50IHRlbGxzIHVzIGV4YWN0bHkKKyAgICAgICAgaG93IG1hbnkgbm9kZSBs
aXN0cyBhcmUgcHJlc2VudCBmb3IgZWFjaCBkb2N1bWVudC4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hl
cyk6IE9wdGlvbmFsbHkgdGFrZXMgYSBxdWFsaWZpZWQgYXR0cmlidXRlIG5hbWUgc28gdGhhdCB3
ZSBkb24ndAorICAgICAgICBoYXZlIHRvIGludmFsaWRhdGUgdGFnIG5vZGUgbGlzdHMgd2hlbiBv
bmx5IGF0dHJpYnV0ZXMgYXJlIG1vZGlmaWVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgor
ICAgICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QpOiBDYWxscyB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4KKyAgICAg
ICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0OjpEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogQ2FsbHMgcmVnaXN0ZXJEeW5h
bWljU3VidHJlZU5vZGVMaXN0LgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJhcmVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmli
dXRlQ2hhbmdlZCk6IE5vIGxvbmdlciB3YWxrcyB1cCB0aGUgdHJlZSB0byBpbnZhbGlkYXRlCisg
ICAgICAgIG5vZGUgbGlzdCBjYWNoZXMuIEFsbCBpbnZhbGlkYXRpb25zIGFyZSBkb25lIGluIERv
Y3VtZW50OjpjbGVhck5vZGVMaXN0Q2FjaGVzLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjcmVhdGVOb2Rl
TGlzdHMpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKE5vZGVMaXN0
c05vZGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRy
ZWVTY29wZSk6IEludmFsaWRhdGUgbm9kZSBsaXN0IGNhY2hlcyB3aGlsZSByZWdpc3RlcmluZyBh
bmQKKyAgICAgICAgdW5yZWdpc3RlcmluZyBub2RlIGxpc3RzIGZyb20gb2xkIGFuZCBuZXcgZG9j
dW1lbnRzIHJlc3BlY3RpdmVseSBub3cgdGhhdCBpbnZhbGlkYXRlQ2FjaGVzKCkgaGFzIGJlZW4K
KyAgICAgICAgcmVtb3ZlZCBmcm9tIE5vZGVMaXN0c05vZGVEYXRhLgorICAgICAgICAqIGRvbS9U
cmVlU2NvcGUuY3BwOgorICAgICAgICAoVHJlZVNjb3BlKToKKyAgICAgICAgKiBkb20vVHJlZVNj
b3BlLmg6CisgICAgICAgIChUcmVlU2NvcGUpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9w
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9O
ZXdTY29wZSk6CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYWJlbHNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGFiZWxzTm9kZUxpc3Q6On5MYWJlbHNOb2RlTGlzdCk6CisgICAgICAgICogaHRtbC9SYWRp
b05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9k
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9kZUxpc3Qp
OgorCiAyMDEyLTA2LTIyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFRleHQgd2l0aCB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzIGFuZCB0ZXh0LWFsaWdu
OnJpZ2h0IGlzIGxlZnQgYWxpZ25lZApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAxMjEwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODcyLDExICszODcyLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJE
eW5hbWljU3VidHJlZU4KICAgICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShs
aXN0KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hlcygpCit2b2lkIERv
Y3VtZW50OjpjbGVhck5vZGVMaXN0Q2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1l
KQogewogICAgIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+OjppdGVyYXRvciBlbmQg
PSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxE
eW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9saXN0c0ludmFsaWRhdGVk
QXREb2N1bWVudC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5pbnZh
bGlkYXRlQ2FjaGUoKTsKKyAgICBmb3IgKEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+
OjppdGVyYXRvciBpdCA9IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghYXR0ck5hbWUgfHwgKCppdCktPnNob3VsZElu
dmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQorICAgICAgICAgICAgKCppdCktPmludmFsaWRh
dGVDYWNoZSgpOworICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9y
KE5vZGVJdGVyYXRvciogbmkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTIx
MDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxNCw3ICs3MTQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0Kik7Ci0gICAgdm9p
ZCBjbGVhck5vZGVMaXN0Q2FjaGVzKCk7CisgICAgdm9pZCBjbGVhck5vZGVMaXN0Q2FjaGVzKGNv
bnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKTsKIAogICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJh
dG9yKE5vZGVJdGVyYXRvciopOwogICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoKQogeworICAgIGRv
Y3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiB1
bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyAr
MTIzLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSByb290VHlwZSA9IFJvb3RlZEF0Tm9kZSwg
SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlID0gQWx3YXlzSW52YWxpZGF0ZSkKICAg
ICAgICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgcm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUp
Ci0gICAgeyB9CisgICAgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QodGhpcyk7CisgICAgfQogCiBwcml2YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3
YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5p
bmdPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTIxMDc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOSAr
NDgyLDYgQEAgT3duUHRyPE5vZGVSYXJlRGF0YT4gTm9kZTo6Y3JlYXRlUmFyZURhdAogdm9pZCBO
b2RlOjpjbGVhclJhcmVEYXRhKCkKIHsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0gICAg
aWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQotICAgICAgICB0cmVl
U2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwotCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKICAgICBBU1NFUlQoIXRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
IHx8IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLT5pc0VtcHR5KCkpOwogI2Vu
ZGlmCkBAIC05NjcsMjEgKzk2NCw3IEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0Nh
Y2hlQWZ0ZXIKICAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0ciB8fCAhYXR0cmlidXRlT3du
ZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygpOwotCi0gICAgaWYgKCF0cmVlU2Nv
cGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChO
b2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAg
ICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFub2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSk7Ci0g
ICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBub2RlLT5yYXJlRGF0YSgpOwotICAgICAgICBp
ZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoJmF0dHJOYW1lKTsKLSAgICB9Cisg
ICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygmYXR0ck5hbWUpOwogfQogCiB2b2lk
IE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCkKQEAg
LTk4OSwyMCArOTcyLDcgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRl
cgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxk
Tm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygp
OwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFy
ZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7
Ci0gICAgfQorICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoMCk7CiB9CiAKIE5v
ZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQpAQCAtMjIzOCwyOCArMjIwOCw2IEBA
IHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAKIAogLy8gLS0tLS0tLS0K
IAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZp
ZWROYW1lKiBhdHRyTmFtZSkKLXsKLSAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgp
OwotICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsg
KytpdCkgewotICAgICAgICBpZiAoIWF0dHJOYW1lIHx8IGl0LT5zZWNvbmQtPnNob3VsZEludmFs
aWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKCk7Ci0gICAgfQotCi0gICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKLSAgICBmb3IgKE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigp
OyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFhdHRyTmFtZSB8fCBp
dC0+c2Vjb25kLT5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoKSkKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0KLQotICAgIGlmICghYXR0
ck5hbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0
b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKLSAgICBmb3IgKFRh
Z05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdp
bigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyh1cmxzKTsKQEAgLTI3NTgsOCArMjcwNiw2IEBAIHZvaWQgTm9kZVJhcmVEYXRhOjpjcmVhdGVO
b2RlTGlzdHMoTm9kZSoKIHsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgc2V0Tm9kZUxpc3RzKE5v
ZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgaWYgKFRyZWVTY29wZSogdHJlZVNjb3Bl
ID0gbm9kZS0+dHJlZVNjb3BlKCkpCi0gICAgICAgIHRyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNo
ZSgpOwogfQogCiB2b2lkIE5vZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMTIxMDc3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzkg
KzExMywzNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9kZUxpc3Rz
Tm9kZURhdGEpOwogICAgIH0KIAotICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFs
aWZpZWROYW1lKiBhdHRyTmFtZSA9IDApOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV9hdG9taWNOYW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX25hbWVD
YWNoZXMuaXNFbXB0eSgpICYmIG1fdGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1wdHkoKTsKICAgICB9
CiAKLSAgICB2b2lkIGFkb3B0VHJlZVNjb3BlKFRyZWVTY29wZSogb2xkVHJlZVNjb3BlLCBUcmVl
U2NvcGUqIG5ld1RyZWVTY29wZSwgRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3
RG9jdW1lbnQpCisgICAgdm9pZCBhZG9wdFRyZWVTY29wZShEb2N1bWVudCogb2xkRG9jdW1lbnQs
IERvY3VtZW50KiBuZXdEb2N1bWVudCkKICAgICB7Ci0gICAgICAgIGludmFsaWRhdGVDYWNoZXMo
KTsKLQotICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpIHsKLSAgICAgICAg
ICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1l
Q2FjaGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKE5v
ZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFt
ZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgICAgICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0
KGxpc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgTm9kZUxp
c3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGF0b21pY05hbWVDYWNoZUVuZCA9
IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsKKyAgICAgICAgZm9yIChOb2RlTGlzdEF0b21pY05h
bWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4o
KTsgaXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KSB7CisgICAgICAgICAgICBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGxpc3QtPmlu
dmFsaWRhdGVDYWNoZSgpOworICAgICAgICAgICAgaWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3Vt
ZW50ICYmIGxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgb2xk
RG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOworICAgICAg
ICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlz
dCk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQo
KTsKLSAgICAgICAgICAgIGZvciAoTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25k
OwotICAgICAgICAgICAgICAgIGlmIChsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBO
b2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmFtZUNhY2hlRW5kID0gbV9uYW1l
Q2FjaGVzLmVuZCgpOworICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgbGlzdC0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgICAgICAgICBp
ZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQgJiYgbGlzdC0+aXNSb290ZWRBdERvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QobGlzdCk7CisgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChvbGRUcmVlU2NvcGUpCi0gICAgICAgICAgICBvbGRUcmVlU2NvcGUtPnJl
bW92ZU5vZGVMaXN0Q2FjaGUoKTsKLSAgICAgICAgbmV3VHJlZVNjb3BlLT5hZGROb2RlTGlzdENh
Y2hlKCk7CisgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQg
PSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKKyAgICAgICAgZm9yIChUYWdOb2RlTGlzdENh
Y2hlTlM6Oml0ZXJhdG9yIGl0ID0gbV90YWdOb2RlTGlzdENhY2hlTlMuYmVnaW4oKTsgaXQgIT0g
dGFnQ2FjaGVFbmQ7ICsraXQpCisgICAgICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlQ2Fj
aGUoKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAko
cmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IFRyZWVTY29wZTo6VHJlZVNjb3BlKENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKQogICAgIDogbV9y
b290Tm9kZShyb290Tm9kZSkKICAgICAsIG1fcGFyZW50VHJlZVNjb3BlKDApCi0gICAgLCBtX251
bU5vZGVMaXN0Q2FjaGVzKDApCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFwRWxl
bWVudCogZ2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCi0gICAgdm9pZCBh
ZGROb2RlTGlzdENhY2hlKCkgeyArK21fbnVtTm9kZUxpc3RDYWNoZXM7IH0KLSAgICB2b2lkIHJl
bW92ZU5vZGVMaXN0Q2FjaGUoKSB7IEFTU0VSVChtX251bU5vZGVMaXN0Q2FjaGVzID4gMCk7IC0t
bV9udW1Ob2RlTGlzdENhY2hlczsgfQotICAgIGJvb2wgaGFzTm9kZUxpc3RDYWNoZXMoKSBjb25z
dCB7IHJldHVybiBtX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0KICAgICBET01TZWxlY3Rpb24qIGdl
dFNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUg
Z2l2ZW4gbmFtZS4KQEAgLTk1LDggKzkxLDYgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVy
ZWRNYXAgbV9lbGVtZW50c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBz
QnlOYW1lOwogCi0gICAgdW5zaWduZWQgbV9udW1Ob2RlTGlzdENhY2hlczsKLQogICAgIG11dGFi
bGUgUmVmUHRyPERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogICAg
IGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3QpKSB7CiAgICAgICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEgPSBub2RlLT5zZXRU
cmVlU2NvcGUobmV3RG9jdW1lbnQgPT0gbV9uZXdTY29wZSA/IDAgOiBtX25ld1Njb3BlKTsKICAg
ICAgICAgaWYgKHJhcmVEYXRhICYmIHJhcmVEYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAg
IHJhcmVEYXRhLT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUobV9vbGRTY29wZSwgbV9uZXdT
Y29wZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgICAgIHJhcmVEYXRhLT5u
b2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKIAog
ICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQogICAgICAgICAgICAgbW92ZU5vZGVU
b05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDEzICszNiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogTGFiZWxzTm9kZUxpc3Q6
OkxhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUpCiAgICAgOiBEeW5hbWljU3VidHJlZU5vZGVM
aXN0KGZvck5vZGUsIFJvb3RlZEF0RG9jdW1lbnQpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0
ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBMYWJlbHNOb2RlTGlzdDo6fkxh
YmVsc05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNh
Y2hlV2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdFR5
cGUsIHN0YXJBdG9tKTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCh0aGlzKTsKIH0gCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0Ojpub2RlTWF0Y2hl
cyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFk
aW9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05v
ZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYWRp
b05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDExIEBAIFJhZGlvTm9k
ZUxpc3Q6OlJhZGlvTm9kZUxpc3QoTm9kZSogcm9vdE4KICAgICA6IER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Qocm9vdE5vZGUsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpID8gUm9vdGVkQXRE
b2N1bWVudCA6IFJvb3RlZEF0Tm9kZSkKICAgICAsIG1fbmFtZShuYW1lKQogewotICAgIGRvY3Vt
ZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogUmFkaW9O
b2RlTGlzdDo6flJhZGlvTm9kZUxpc3QoKQogewogICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMo
KS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlv
Tm9kZUxpc3RUeXBlLCBtX25hbWUpOwotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1l
bnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149179</attachid>
            <date>2012-06-23 13:25:58 -0700</date>
            <delta_ts>2012-06-23 13:33:23 -0700</delta_ts>
            <desc>Fixed Mac build &amp; per Ojan&apos;s comment</desc>
            <filename>bug-73853-20120623133038.patch</filename>
            <type>text/plain</type>
            <size>26049</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTA4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA2LTIyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnZhbGlkYXRl
IGFsbCBub2RlIGxpc3RzIGF0IGRvY3VtZW50IGxldmVsIHRvIGF2b2lkIGhhdmluZyB0byB3YWxr
IHVwIHRoZSBET00gdHJlZSBpbiB0aGUgaW52YWxpZGF0aW9uLgorICAgICAgICBJbiBwYXJ0aWN1
bGFyLCB0aGlzIG1ha2VzIGFwcGVuZGluZyBub2RlIE8oMSkgd2l0aCByZXNwZWN0IHRvIHRoZSBk
ZXB0aCBvZiB0aGUgdHJlZSBpbiBjb21tb24gY2FzZXMgd2hlbgorICAgICAgICB3ZSBoYXZlIG5v
ZGUgbGlzdHMgc29tZXdoZXJlIGluIHRoZSB0cmVlIHNjb3BlLgorCisgICAgICAgIFdlIG5vdyBp
bnZhbGlkYXRlIG1vcmUgbm9kZSBsaXN0cyB0aGFuIHdlIHVzZWQgdG8gYnV0IGl0IHNob3VsZG4n
dCBtYXR0ZXIgbXVjaCBpbiBwcmFjdGljZSBiZWNhdXNlCisgICAgICAgIG1vc3Qgd2Vic2l0ZXMg
ZG9uJ3QgYWRkIG9yIHJlbW92ZSBub2RlcyBvciBtb2RpZnkgcmVsZXZhbnQgYXR0cmlidXRlcyB3
aGlsZSBpdGVyYXRpbmcgdGhyb3VnaCBub2RlIGxpc3RzLgorICAgICAgICBUaGUgY2hhbmdlIHdv
dWxkIGFsc28gcmVnaXN0ZXIgZWFjaCBub2RlIGxpc3QgdG8gZG9jdW1lbnQgdGhlcmVieSBjb25z
dW1pbmcgb25lIGV4dHJhIHBvaW50ZXIsIGhvd2V2ZXIsCisgICAgICAgIHRoaXMgc2hvdWxkIG5v
dCBoYXZlIGEgc2lnbmlmaWNhbnQgbWVtb3J5IGltcGFjdCBnaXZlbiB3ZSB1c2VkIHRvIGRvIGl0
IHVuaW50ZW50aW9uYWxseSB1bnRpbCBJIGZpeGVkIGl0IGluCisgICAgICAgIHIxMTA3OTcgdGhy
ZWUgbW9udGhzIGFnby4KKworICAgICAgICBBbHNvLCBSYWRpb05vZGVMaXN0IGFuZCBMYWJlbHNO
b2RlTGlzdCBoYWQgYWx3YXlzIGJlZW4gaW52YWxpZGF0ZWQgYXQgZG9jdW1lbnQgbGV2ZWwgc28g
dGhpcyByZWZhY3RvcmluZworICAgICAgICBhbHNvIGFsbG93cyB1cyB0byBtb3ZlIGNhbGxzIHRv
IHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBhbmQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QgaW4KKyAgICAgICAgdGhvc2Ugbm9kZSBsaXN0cyB0byBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0LCBhbmQgZXZlbiBkZWxldGUgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVD
YWNoZXMoKS4KKworICAgICAgICBJbiBhZGRpdGlvbiwgcmVtb3ZlZCBtX251bU5vZGVMaXN0Q2Fj
aGVzIGZyb20gVHJlZVNjb3BlIHNpbmNlIGl0IHdhcyBvbmx5IHVzZWQgdG8gYXZvaWQgd2Fsa2lu
ZyB1cAorICAgICAgICB0aGUgYW5jZXN0b3JzIGluIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFm
dGVyQXR0cmlidXRlQ2hhbmdlZCBhbmQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGls
ZHJlbkNoYW5nZWQKKyAgICAgICAgYnV0IHdlIGRvbid0IHdhbGsgdXAgdGhlIGFuY2VzdG9ycyBh
bnkgbW9yZS4gQWxzbyBub3RlIHRoYXQgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudCB0ZWxs
cyB1cyBleGFjdGx5CisgICAgICAgIGhvdyBtYW55IG5vZGUgbGlzdHMgYXJlIHByZXNlbnQgZm9y
IGVhY2ggZG9jdW1lbnQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmNsZWFyTm9kZUxpc3RDYWNoZXMpOiBPcHRpb25hbGx5IHRha2Vz
IGEgcXVhbGlmaWVkIGF0dHJpYnV0ZSBuYW1lIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgaGF2
ZSB0byBpbnZhbGlkYXRlIHRhZyBub2RlIGxpc3RzIHdoZW4gb25seSBhdHRyaWJ1dGVzIGFyZSBt
b2RpZmllZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToK
KyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWljU3VidHJlZU5vZGVMaXN0KTogQ2FsbHMgdW5y
ZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2Rl
TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCk6IENhbGxzIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4K
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJSYXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOiBObyBsb25n
ZXIgd2Fsa3MgdXAgdGhlIHRyZWUgdG8gaW52YWxpZGF0ZQorICAgICAgICBub2RlIGxpc3QgY2Fj
aGVzLiBBbGwgaW52YWxpZGF0aW9ucyBhcmUgZG9uZSBpbiBEb2N1bWVudDo6Y2xlYXJOb2RlTGlz
dENhY2hlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Y3JlYXRlTm9kZUxpc3RzKToKKyAgICAgICAgKiBk
b20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChOb2RlTGlzdHNOb2RlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRUcmVlU2NvcGUpOiBJbnZhbGlkYXRl
IG5vZGUgbGlzdCBjYWNoZXMgd2hpbGUgcmVnaXN0ZXJpbmcgYW5kCisgICAgICAgIHVucmVnaXN0
ZXJpbmcgbm9kZSBsaXN0cyBmcm9tIG9sZCBhbmQgbmV3IGRvY3VtZW50cyByZXNwZWN0aXZlbHkg
bm93IHRoYXQgaW52YWxpZGF0ZUNhY2hlcygpIGhhcyBiZWVuCisgICAgICAgIHJlbW92ZWQgZnJv
bSBOb2RlTGlzdHNOb2RlRGF0YS4KKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAg
ICAgKFRyZWVTY29wZSk6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoVHJl
ZVNjb3BlKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlQWRvcHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcGUpOgorICAgICAgICAq
IGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxp
c3Q6OkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0Ojp+
TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0OjpSYWRpb05vZGVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKwogMjAxMi0wNi0yMiAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBUZXh0IHdpdGgg
dGV4dC1vdmVyZmxvdzplbGxpcHNpcyBhbmQgdGV4dC1hbGlnbjpyaWdodCBpcyBsZWZ0IGFsaWdu
ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyOCwxMCArMTQyOCwx
MCBAQAogCQk0RjE1MzRERTExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjE1MzRERDExQjUz
MkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEYxNTM0RTAxMUI1MzMwMjAwMjFGRDg2IC8qIEVk
aXRpbmdCZWhhdmlvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlw
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
RjJEMjA1NDEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMkQyMDUyMTJFQUU3QjMwMDVDMjg3
NCAvKiBJbnNwZWN0b3JBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTRGMzJCQjFCMTRGQTg1RTgwMEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGMzJCQjFBMTRGQTg1QUEwMEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjJEMjA1NTEy
RUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTMxMkVBRTdCMzAwNUMyODc0IC8qIElu
c3BlY3RvckFnZW50LmNwcCAqLzsgfTsKIAkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdFIC8qIElu
c3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVzLmNwcCAq
LzsgfTsKIAkJNEYzMjg5QjYxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYzMjg5QjQxMUE0
MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTRGMzJCQjFCMTRGQTg1RTgwMEY2QzFBMyAvKiBN
ZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRGMzJCQjFBMTRGQTg1QUEwMEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0RjRGNUZGQjExQ0JEMkUxMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEY0RjVGRkExMUNCRDJE
MjAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLzsgfTsKIAkJNEY2RkRENjQxMzQx
REVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjZGREQ2MjEzNDFERUREMDAxRjhFRTMgLyog
SW5zcGVjdG9yUGFnZUFnZW50LmNwcCAqLzsgfTsKIAkJNEY2RkRENjUxMzQxREVERDAwMUY4RUUz
IC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEY2RkRENjMxMzQxREVERDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VB
Z2VudC5oICovOyB9OwpAQCAtODUwMiwxMCArODUwMiwxMCBAQAogCQk0RjE1MzRERDExQjUzMkVD
MDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVkaXRpbmdCZWhhdmlvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3Bl
Y3RvckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckFn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRGMzJCQjFBMTRGQTg1QUEwMEY2
QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRGMkQyMDUzMTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JBZ2VudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMzI4OUIzMTFBNDJBQUIwMDVBQkU3RSAvKiBJ
bnNwZWN0b3JWYWx1ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9yVmFsdWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYzMjg5
QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JWYWx1ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEYzMkJCMUExNEZBODVBQTAwRjZDMUEzIC8qIE1lbW9yeUluc3RydW1lbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJbnN0cnVtZW50YXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEY0RjVGRkExMUNCRDJEMjAwQTE4
NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNEY0RjVGRkMxMUNCRDMwMTAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGNkZERDYyMTM0MURFREQwMDFGOEVFMyAvKiBJbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9yUGFnZUFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3MiwxMSArMzg3MiwxNCBA
QCB2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOCiAgICAgbV9saXN0c0lu
dmFsaWRhdGVkQXREb2N1bWVudC5yZW1vdmUobGlzdCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmNs
ZWFyTm9kZUxpc3RDYWNoZXMoKQordm9pZCBEb2N1bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hlcyhj
b25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKIHsKKyAgICAvLyBGSVhNRTogT25seSBpbnZh
bGlkYXRlIGNhY2hlcyBvZiBub2RlIGxpc3RzIHRoYXQgbWF0Y2ggYXR0ck5hbWUuCiAgICAgSGFz
aFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIGVuZCA9IG1fbGlzdHNJbnZh
bGlkYXRlZEF0RG9jdW1lbnQuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QqPjo6aXRlcmF0b3IgaXQgPSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgp
OworICAgIGZvciAoSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIGl0
ID0gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKCFhdHRyTmFtZSB8fCAoKml0KS0+c2hvdWxkSW52YWxpZGF0ZU9uQXR0
cmlidXRlQ2hhbmdlKCkpCisgICAgICAgICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKCk7Cisg
ICAgfQogfQogCiB2b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9y
KiBuaSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzE0LDcgKzcxNCw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKLSAgICB2b2lkIGNsZWFyTm9kZUxp
c3RDYWNoZXMoKTsKKyAgICB2b2lkIGNsZWFyTm9kZUxpc3RDYWNoZXMoY29uc3QgUXVhbGlmaWVk
TmFtZSogYXR0ck5hbWUpOwogCiAgICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJh
dG9yKik7CiAgICAgdm9pZCBkZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMDc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEeW5hbWljU3VidHJlZU5v
ZGVMaXN0Ojp+RHluYW1pY1N1YnRyZWVOb2RlTGlzdCgpCiB7CisgICAgZG9jdW1lbnQoKS0+dW5y
ZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIHVuc2lnbmVkIER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5
bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsOSBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFJvb3RUeXBlIHJvb3RUeXBlID0gUm9vdGVkQXROb2RlLCBJbnZhbGlkYXRpb25U
eXBlIGludmFsaWRhdGlvblR5cGUgPSBBbHdheXNJbnZhbGlkYXRlKQogICAgICAgICA6IER5bmFt
aWNOb2RlTGlzdChub2RlLCByb290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKLSAgICB7IH0KKyAg
ICB7CisgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0
aGlzKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJl
bnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw5ICs0ODIsNiBAQCBPd25Q
dHI8Tm9kZVJhcmVEYXRhPiBOb2RlOjpjcmVhdGVSYXJlRGF0CiB2b2lkIE5vZGU6OmNsZWFyUmFy
ZURhdGEoKQogewogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKLSAgICBpZiAodHJlZVNjb3Bl
KCkgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCi0gICAgICAgIHRyZWVTY29wZSgpLT5yZW1v
dmVOb2RlTGlzdENhY2hlKCk7Ci0KICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAg
IEFTU0VSVCghdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgfHwgdHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCktPmlzRW1wdHkoKSk7CiAjZW5kaWYKQEAgLTk1MSwx
MCArOTQ4LDEwIEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXIKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IE1vdmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRl
cyBlYWNoIE5vZGVMaXN0IHR5cGUgY2FyZXMgYWJvdXQgdG8gYmUgYSBzdGF0aWMgb24gdGhlCi0g
ICAgLy8gYXBwcm9wcmlhdGUgTm9kZUxpc3QgY2xhc3MuIFRoZW4gdXNlIHRob3NlIGxpc3RzIGhl
cmUgYW5kIGluIGludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzCisgICAgLy8g
YXBwcm9wcmlhdGUgTm9kZUxpc3QgY2xhc3MuIFRoZW4gdXNlIHRob3NlIGxpc3RzIGhlcmUgYW5k
IGluIGNsZWFyTm9kZUxpc3RDYWNoZXMKICAgICAvLyB0byBvbmx5IGludmFsaWRhdGUgdGhlIGNh
Y2hlIHR5cGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkLgogICAg
IC8vIEZJWE1FOiBLZWVwIHRyYWNrIG9mIHdoZW4gd2UgaGF2ZSBubyBjYWNoZXMgb2YgYSBnaXZl
biB0eXBlIHNvIHRoYXQgd2UgY2FuIGF2b2lkIHRoZSBmb3ItbG9vcAotICAgIC8vIGJlbG93IGV2
ZW4gaWYgYSByZWxhdGVkIGF0dHJpYnV0ZSBjaGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFk
aW9Ob2RlTGlzdHMsIHdlIGRvbid0IG5lZWQKKyAgICAvLyBpbiBjbGVhck5vZGVMaXN0Q2FjaGVz
IGV2ZW4gaWYgYSByZWxhdGVkIGF0dHJpYnV0ZSBjaGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8g
UmFkaW9Ob2RlTGlzdHMsIHdlIGRvbid0IG5lZWQKICAgICAvLyB0byBpbnZhbGlkYXRlIGFueSBj
YWNoZXMgd2hlbiBpZCBhdHRyaWJ1dGVzIGNoYW5nZS4pCiAgICAgaWYgKGF0dHJOYW1lICE9IGNs
YXNzQXR0cgogI2lmIEVOQUJMRShNSUNST0RBVEEpCkBAIC05NjcsMjEgKzk2NCw3IEBAIHZvaWQg
Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXIKICAgICAgICAgJiYgKGF0dHJOYW1l
ICE9IGlkQXR0ciB8fCAhYXR0cmlidXRlT3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENh
Y2hlcygpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFu
b2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSk7Ci0gICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBu
b2RlLT5yYXJlRGF0YSgpOwotICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVD
YWNoZXMoJmF0dHJOYW1lKTsKLSAgICB9CisgICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENh
Y2hlcygmYXR0ck5hbWUpOwogfQogCiB2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCkKQEAgLTk4OSwyMCArOTcyLDcgQEAgdm9pZCBOb2RlOjpp
bnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlcgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAg
ICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1l
bnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFz
Tm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
IW5vZGUtPmhhc1JhcmVEYXRhKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9k
ZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5u
b2RlTGlzdHMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVM
aXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7Ci0gICAgfQorICAgIGRvY3VtZW50KCktPmNsZWFy
Tm9kZUxpc3RDYWNoZXMoMCk7CiB9CiAKIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlz
dHMoKQpAQCAtMTU0OCw4ICsxNTE4LDggQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0
RWxlbWVudHNCeQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChkb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9k
ZUxpc3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2RlTGlzdD4odGhp
cywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7Ci0gICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRo
QXRvbWljTmFtZTxUYWdOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlz
dFR5cGUsIGxvY2FsTmFtZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFnTm9kZUxpc3Q+KHRo
aXMsIER5bmFtaWNOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOworICAgIHJl
dHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRv
bWljTmFtZTxUYWdOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5
cGUsIGxvY2FsTmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1l
bnRzQnlUYWdOYW1lTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lKQpAQCAtMTU2MCwyMyArMTUzMCwyMyBAQCBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBz
dGFyQXRvbSkKICAgICAgICAgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSk7
CiAKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5h
ZGRDYWNoZVdpdGhRdWFsaWZpZWROYW1lKHRoaXMsIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBu
dWxsQXRvbSA6IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFy
ZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhp
cywgbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2Nh
bE5hbWUpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5TmFt
ZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5v
ZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdFR5cGUsIGVsZW1lbnRO
YW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFk
ZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6
Ok5hbWVOb2RlTGlzdFR5cGUsIGVsZW1lbnROYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlz
dD4gTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMp
CiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+
YWRkQ2FjaGVXaXRoTmFtZTxDbGFzc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkNs
YXNzTm9kZUxpc3RUeXBlLCBjbGFzc05hbWVzKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEo
KS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aE5hbWU8Q2xhc3NOb2RlTGlzdD4odGhp
cywgRHluYW1pY05vZGVMaXN0OjpDbGFzc05vZGVMaXN0VHlwZSwgY2xhc3NOYW1lcyk7CiB9CiAK
IFBhc3NSZWZQdHI8UmFkaW9Ob2RlTGlzdD4gTm9kZTo6cmFkaW9Ob2RlTGlzdChjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9ybVRhZykgfHwgaGFz
VGFnTmFtZShmaWVsZHNldFRhZykpOwotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4o
dGhpcywgRHluYW1pY05vZGVMaXN0OjpSYWRpb05vZGVMaXN0VHlwZSwgbmFtZSk7CisgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9t
aWNOYW1lPFJhZGlvTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6UmFkaW9Ob2RlTGlz
dFR5cGUsIG5hbWUpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0
b3IoY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MjIzOCwyOCArMjIwOCw2IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUo
KSAKIAogLy8gLS0tLS0tLS0KIAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNh
Y2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkKLXsKLSAgICBOb2RlTGlzdEF0b21p
Y05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9t
aWNOYW1lQ2FjaGVzLmVuZCgpOwotICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0
b21pY05hbWVDYWNoZUVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWF0dHJOYW1lIHx8IGl0LT5z
ZWNvbmQtPnNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQotICAgICAgICAgICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci0gICAgfQotCi0gICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQo
KTsKLSAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKCFhdHRyTmFtZSB8fCBpdC0+c2Vjb25kLT5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVD
aGFuZ2UoKSkKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwotICAg
IH0KLQotICAgIGlmICghYXR0ck5hbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRhZ05vZGVM
aXN0Q2FjaGVOUzo6aXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5l
bmQoKTsKLSAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTm9kZTo6Z2V0U3VicmVz
b3VyY2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIGFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKQEAgLTI3NTQsMTIgKzI3MDIsOSBAQCBIVE1MUHJv
cGVydGllc0NvbGxlY3Rpb24qIE5vZGU6OnByb3BlcnRpCiB9CiAjZW5kaWYKIAotdm9pZCBOb2Rl
UmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cyhOb2RlKiBub2RlKQordm9pZCBOb2RlUmFyZURhdGE6
OmNyZWF0ZU5vZGVMaXN0cygpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwogICAgIHNldE5vZGVMaXN0
cyhOb2RlTGlzdHNOb2RlRGF0YTo6Y3JlYXRlKCkpOwotICAgIGlmIChUcmVlU2NvcGUqIHRyZWVT
Y29wZSA9IG5vZGUtPnRyZWVTY29wZSgpKQotICAgICAgICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0
Q2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlUmFyZURhdGE6OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hl
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEyMTA3NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDM5ICsxMTMsMzYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVM
aXN0c05vZGVEYXRhKTsKICAgICB9CiAKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoY29uc3Qg
UXVhbGlmaWVkTmFtZSogYXR0ck5hbWUgPSAwKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9u
YW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CiAg
ICAgfQogCi0gICAgdm9pZCBhZG9wdFRyZWVTY29wZShUcmVlU2NvcGUqIG9sZFRyZWVTY29wZSwg
VHJlZVNjb3BlKiBuZXdUcmVlU2NvcGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQq
IG5ld0RvY3VtZW50KQorICAgIHZvaWQgYWRvcHRUcmVlU2NvcGUoRG9jdW1lbnQqIG9sZERvY3Vt
ZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlQ2Fj
aGVzKCk7Ci0KLSAgICAgICAgaWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KSB7Ci0gICAg
ICAgICAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWlj
TmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwotICAgICAgICAgICAgZm9y
IChOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21p
Y05hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7
Ci0gICAgICAgICAgICAgICAgaWYgKGxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIE5v
ZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVF
bmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7CisgICAgICAgIGZvciAoTm9kZUxpc3RBdG9t
aWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJl
Z2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkgeworICAgICAgICAgICAgRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBsaXN0
LT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdE
b2N1bWVudCAmJiBsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKKyAg
ICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0
KGxpc3QpOwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVMaXN0
TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMu
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNl
Y29uZDsKLSAgICAgICAgICAgICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0
ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1f
bmFtZUNhY2hlcy5lbmQoKTsKKyAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5k
OyArK2l0KSB7CisgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIGxpc3QtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICAg
ICAgaWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50ICYmIGxpc3QtPmlzUm9vdGVkQXREb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KGxpc3QpOworICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdp
c3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAob2xkVHJlZVNjb3BlKQotICAgICAgICAgICAgb2xkVHJlZVNjb3Bl
LT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7Ci0gICAgICAgIG5ld1RyZWVTY29wZS0+YWRkTm9kZUxp
c3RDYWNoZSgpOworICAgICAgICBUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIHRhZ0NhY2hl
RW5kID0gbV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7CisgICAgICAgIGZvciAoVGFnTm9kZUxp
c3RDYWNoZU5TOjppdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0
ICE9IHRhZ0NhY2hlRW5kOyArK2l0KQorICAgICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0
ZUNhY2hlKCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjA1LDEwICsyMDIsMTAgQEAgcHVibGlj
OiAgICAKICAgICB2b2lkIGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigpOyB9
CiAgICAgdm9pZCBzZXROb2RlTGlzdHMoUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbGlz
dHMpIHsgbV9ub2RlTGlzdHMgPSBsaXN0czsgfQogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2Rl
TGlzdHMoKSBjb25zdCB7IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQotICAgIE5vZGVMaXN0
c05vZGVEYXRhKiBlbnN1cmVOb2RlTGlzdHMoTm9kZSogbm9kZSkKKyAgICBOb2RlTGlzdHNOb2Rl
RGF0YSogZW5zdXJlTm9kZUxpc3RzKCkKICAgICB7CiAgICAgICAgIGlmICghbV9ub2RlTGlzdHMp
Ci0gICAgICAgICAgICBjcmVhdGVOb2RlTGlzdHMobm9kZSk7CisgICAgICAgICAgICBjcmVhdGVO
b2RlTGlzdHMoKTsKICAgICAgICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KICAg
ICB2b2lkIGNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7CkBAIC0zMzgsNyArMzM1LDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgc2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJB
dHRhY2goYm9vbCBuZWVkcykgeyBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVy
QXR0YWNoID0gbmVlZHM7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZU5vZGVMaXN0cyhO
b2RlKik7CisgICAgdm9pZCBjcmVhdGVOb2RlTGlzdHMoKTsKIAogICAgIFRyZWVTY29wZSogbV90
cmVlU2NvcGU7CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZpc2lvbiAxMjEwNzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFp
bmVyTm9kZSogcm9vdE5vZGUpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9w
YXJlbnRUcmVlU2NvcGUoMCkKLSAgICAsIG1fbnVtTm9kZUxpc3RDYWNoZXMoMCkKIHsKICAgICBB
U1NFUlQocm9vdE5vZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkocmV2aXNpb24g
MTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSwxMCArNjEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1M
TWFwRWxlbWVudCopOwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE5vZGVMaXN0Q2FjaGUoKSB7ICsrbV9udW1O
b2RlTGlzdENhY2hlczsgfQotICAgIHZvaWQgcmVtb3ZlTm9kZUxpc3RDYWNoZSgpIHsgQVNTRVJU
KG1fbnVtTm9kZUxpc3RDYWNoZXMgPiAwKTsgLS1tX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAg
Ym9vbCBoYXNOb2RlTGlzdENhY2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTm9kZUxpc3RDYWNo
ZXM7IH0KLQogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICAv
LyBGaW5kIGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpAQCAtOTUsOCArOTEsNiBA
QCBwcml2YXRlOgogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBE
b2N1bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAgICB1bnNpZ25lZCBtX251
bU5vZGVMaXN0Q2FjaGVzOwotCiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NU2VsZWN0aW9uPiBtX3Nl
bGVjdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5j
cHAJKHJldmlzaW9uIDEyMTA3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9w
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFRyZWVTY29wZUFk
b3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKICAgICAgICAgTm9kZVJh
cmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnNldFRyZWVTY29wZShuZXdEb2N1bWVudCA9PSBtX25l
d1Njb3BlID8gMCA6IG1fbmV3U2NvcGUpOwogICAgICAgICBpZiAocmFyZURhdGEgJiYgcmFyZURh
dGEtPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgcmFyZURhdGEtPm5vZGVMaXN0cygpLT5hZG9w
dFRyZWVTY29wZShtX29sZFNjb3BlLCBtX25ld1Njb3BlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1l
bnQpOworICAgICAgICAgICAgcmFyZURhdGEtPm5vZGVMaXN0cygpLT5hZG9wdFRyZWVTY29wZShv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogCiAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9j
dW1lbnQpCiAgICAgICAgICAgICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgb2xkRG9jdW1l
bnQsIG5ld0RvY3VtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFi
bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBMYWJlbGFibGVFbGVtZW50OjpsCiAgICAgaWYgKCFkb2N1bWVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9kZUxpc3Q+
KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7Cisg
ICAgcmV0dXJuIE5vZGU6OmVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRD
YWNoZVdpdGhBdG9taWNOYW1lPExhYmVsc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6
OkxhYmVsc05vZGVMaXN0VHlwZSwgc3RhckF0b20pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJj
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24g
MTIxMDc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
TGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUpCiAgICAgOiBEeW5h
bWljU3VidHJlZU5vZGVMaXN0KGZvck5vZGUsIFJvb3RlZEF0RG9jdW1lbnQpCiB7Ci0gICAgZG9j
dW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBMYWJl
bHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxp
c3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpM
YWJlbHNOb2RlTGlzdFR5cGUsIHN0YXJBdG9tKTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0gCiAgICAgCiBib29sIExhYmVsc05vZGVM
aXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMDc3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQx
LDExIEBAIFJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QoTm9kZSogcm9vdE4KICAgICA6IER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1U
YWcpID8gUm9vdGVkQXREb2N1bWVudCA6IFJvb3RlZEF0Tm9kZSkKICAgICAsIG1fbmFtZShuYW1l
KQogewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlz
KTsKIH0KIAogUmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9kZUxpc3QoKQogewogICAgIG93bmVyTm9k
ZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWlj
Tm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBtX25hbWUpOwotICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBzdGF0aWMgaW5saW5l
IEhUTUxJbnB1dEVsZW1lbnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149180</attachid>
            <date>2012-06-23 13:33:30 -0700</date>
            <delta_ts>2012-06-23 19:49:12 -0700</delta_ts>
            <desc>Updated ChangeLog &amp; reverted xcodeproj change</desc>
            <filename>bug-73853-20120623133809.patch</filename>
            <type>text/plain</type>
            <size>21984</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA2LTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEluc2VydGluZyBub2RlcyBpcyBz
bG93IGR1ZSB0byBOb2RlOjpub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkICgyMCUrKQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnZhbGlkYXRl
IGFsbCBub2RlIGxpc3RzIGF0IGRvY3VtZW50IGxldmVsIHRvIGF2b2lkIGhhdmluZyB0byB3YWxr
IHVwIHRoZSBET00gdHJlZSBpbiB0aGUgaW52YWxpZGF0aW9uLgorICAgICAgICBJbiBwYXJ0aWN1
bGFyLCB0aGlzIG1ha2VzIGFwcGVuZGluZyBub2RlIE8oMSkgd2l0aCByZXNwZWN0IHRvIHRoZSBk
ZXB0aCBvZiB0aGUgdHJlZSBpbiBjb21tb24gY2FzZXMgd2hlbgorICAgICAgICB3ZSBoYXZlIG5v
ZGUgbGlzdHMgc29tZXdoZXJlIGluIHRoZSB0cmVlIHNjb3BlLgorCisgICAgICAgIFdlIG5vdyBp
bnZhbGlkYXRlIG1vcmUgbm9kZSBsaXN0cyB0aGFuIHdlIHVzZWQgdG8gYnV0IGl0IHNob3VsZG4n
dCBtYXR0ZXIgbXVjaCBpbiBwcmFjdGljZSBiZWNhdXNlCisgICAgICAgIG1vc3Qgd2Vic2l0ZXMg
ZG9uJ3QgYWRkIG9yIHJlbW92ZSBub2RlcyBvciBtb2RpZnkgcmVsZXZhbnQgYXR0cmlidXRlcyB3
aGlsZSBpdGVyYXRpbmcgdGhyb3VnaCBub2RlIGxpc3RzLgorICAgICAgICBUaGUgY2hhbmdlIHdv
dWxkIGFsc28gcmVnaXN0ZXIgZWFjaCBub2RlIGxpc3QgdG8gZG9jdW1lbnQgdGhlcmVieSBjb25z
dW1pbmcgb25lIGV4dHJhIHBvaW50ZXIsIGhvd2V2ZXIsCisgICAgICAgIHRoaXMgc2hvdWxkIG5v
dCBoYXZlIGEgc2lnbmlmaWNhbnQgbWVtb3J5IGltcGFjdCBnaXZlbiB3ZSB1c2VkIHRvIGRvIGl0
IHVuaW50ZW50aW9uYWxseSB1bnRpbCBJIGZpeGVkIGl0IGluCisgICAgICAgIHIxMTA3OTcgdGhy
ZWUgbW9udGhzIGFnby4KKworICAgICAgICBBbHNvLCBSYWRpb05vZGVMaXN0IGFuZCBMYWJlbHNO
b2RlTGlzdCBoYWQgYWx3YXlzIGJlZW4gaW52YWxpZGF0ZWQgYXQgZG9jdW1lbnQgbGV2ZWwgc28g
dGhpcyByZWZhY3RvcmluZworICAgICAgICBhbHNvIGFsbG93cyB1cyB0byBtb3ZlIGNhbGxzIHRv
IHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBhbmQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QgaW4KKyAgICAgICAgdGhvc2Ugbm9kZSBsaXN0cyB0byBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0LCBhbmQgZXZlbiBkZWxldGUgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVD
YWNoZXMoKS4KKworICAgICAgICBJbiBhZGRpdGlvbiwgcmVtb3ZlZCBtX251bU5vZGVMaXN0Q2Fj
aGVzIGZyb20gVHJlZVNjb3BlIHNpbmNlIGl0IHdhcyBvbmx5IHVzZWQgdG8gYXZvaWQgd2Fsa2lu
ZyB1cAorICAgICAgICB0aGUgYW5jZXN0b3JzIGluIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFm
dGVyQXR0cmlidXRlQ2hhbmdlZCBhbmQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGls
ZHJlbkNoYW5nZWQKKyAgICAgICAgYnV0IHdlIGRvbid0IHdhbGsgdXAgdGhlIGFuY2VzdG9ycyBh
bnkgbW9yZS4gQWxzbyBub3RlIHRoYXQgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudCB0ZWxs
cyB1cyBleGFjdGx5CisgICAgICAgIGhvdyBtYW55IG5vZGUgbGlzdHMgYXJlIHByZXNlbnQgZm9y
IGVhY2ggZG9jdW1lbnQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmNsZWFyTm9kZUxpc3RDYWNoZXMpOiBPcHRpb25hbGx5IHRha2Vz
IGEgcXVhbGlmaWVkIGF0dHJpYnV0ZSBuYW1lIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgaGF2
ZSB0byBpbnZhbGlkYXRlIHRhZyBub2RlIGxpc3RzIHdoZW4gb25seSBhdHRyaWJ1dGVzIGFyZSBt
b2RpZmllZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToK
KyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWljU3VidHJlZU5vZGVMaXN0KTogQ2FsbHMgdW5y
ZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2Rl
TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCk6IENhbGxzIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4K
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjbGVhclJh
cmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCk6IE5vIGxvbmdlciB3YWxrcyB1cCB0aGUgdHJlZSB0byBp
bnZhbGlkYXRlCisgICAgICAgIG5vZGUgbGlzdCBjYWNoZXMuIEFsbCBpbnZhbGlkYXRpb25zIGFy
ZSBkb25lIGluIERvY3VtZW50OjpjbGVhck5vZGVMaXN0Q2FjaGVzLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyYWRp
b05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJh
cmVEYXRhOjpjcmVhdGVOb2RlTGlzdHMpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoK
KyAgICAgICAgKE5vZGVMaXN0c05vZGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjphZG9wdFRyZWVTY29wZSk6IEludmFsaWRhdGUgbm9kZSBsaXN0IGNhY2hlcyB3
aGlsZSByZWdpc3RlcmluZyBhbmQKKyAgICAgICAgdW5yZWdpc3RlcmluZyBub2RlIGxpc3RzIGZy
b20gb2xkIGFuZCBuZXcgZG9jdW1lbnRzIHJlc3BlY3RpdmVseSBub3cgdGhhdCBpbnZhbGlkYXRl
Q2FjaGVzKCkgaGFzIGJlZW4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJl
Tm9kZUxpc3RzKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisgICAgICAgICogZG9tL1RyZWVT
Y29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OlRyZWVTY29wZSk6CisgICAg
ICAgICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoVHJlZVNjb3BlKToKKyAgICAgICAgKiBk
b20vVHJlZVNjb3BlQWRvcHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9w
dGVyOjptb3ZlVHJlZVRvTmV3U2NvcGUpOgorICAgICAgICAqIGh0bWwvTGFiZWxhYmxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYWJlbGFibGVFbGVtZW50OjpsYWJlbHMpOgorICAg
ICAgICAqIGh0bWwvTGFiZWxzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxz
Tm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVM
aXN0Ojp+TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0OjpSYWRpb05vZGVMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKwogMjAxMi0wNi0y
MyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMTA1OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMTIxMTAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3MiwxMSArMzg3MiwxNCBAQCB2b2lkIERvY3VtZW50Ojp1
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOCiAgICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVu
dC5yZW1vdmUobGlzdCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmNsZWFyTm9kZUxpc3RDYWNoZXMo
KQordm9pZCBEb2N1bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1l
KiBhdHRyTmFtZSkKIHsKKyAgICAvLyBGSVhNRTogT25seSBpbnZhbGlkYXRlIGNhY2hlcyBvZiBu
b2RlIGxpc3RzIHRoYXQgbWF0Y2ggYXR0ck5hbWUuCiAgICAgSGFzaFNldDxEeW5hbWljU3VidHJl
ZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIGVuZCA9IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQu
ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqPjo6aXRlcmF0
b3IgaXQgPSBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNoZSgpOworICAgIGZvciAoSGFzaFNl
dDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9saXN0c0ludmFsaWRh
dGVkQXREb2N1bWVudC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFh
dHRyTmFtZSB8fCAoKml0KS0+c2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKCkpCisg
ICAgICAgICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKCk7CisgICAgfQogfQogCiB2b2lkIERv
Y3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKiBuaSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMjExMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzE0LDcgKzcxNCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QqKTsKLSAgICB2b2lkIGNsZWFyTm9kZUxpc3RDYWNoZXMoKTsKKyAgICB2
b2lkIGNsZWFyTm9kZUxpc3RDYWNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUpOwog
CiAgICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CiAgICAgdm9pZCBk
ZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMTAxKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1
YnRyZWVOb2RlTGlzdCgpCiB7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
Omxlbmd0aCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShy
ZXZpc2lvbiAxMjExMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgRHluYW1pY1N1YnRyZWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFJvb3RUeXBl
IHJvb3RUeXBlID0gUm9vdGVkQXROb2RlLCBJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5
cGUgPSBBbHdheXNJbnZhbGlkYXRlKQogICAgICAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlLCBy
b290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgIGRvY3Vt
ZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKKyAgICB9CiAKIHBy
aXZhdGU6CiAgICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVu
c2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiAxMjExMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4Miw5ICs0ODIsNiBAQCBPd25QdHI8Tm9kZVJhcmVEYXRhPiBO
b2RlOjpjcmVhdGVSYXJlRGF0CiB2b2lkIE5vZGU6OmNsZWFyUmFyZURhdGEoKQogewogICAgIEFT
U0VSVChoYXNSYXJlRGF0YSgpKTsKLSAgICBpZiAodHJlZVNjb3BlKCkgJiYgcmFyZURhdGEoKS0+
bm9kZUxpc3RzKCkpCi0gICAgICAgIHRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7
Ci0KICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIEFTU0VSVCghdHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgfHwgdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCktPmlzRW1wdHkoKSk7CiAjZW5kaWYKQEAgLTk1MSwxMCArOTQ4LDEwIEBAIHZvaWQg
Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXIKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRklYTUU6IE1vdmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBlYWNoIE5vZGVMaXN0IHR5
cGUgY2FyZXMgYWJvdXQgdG8gYmUgYSBzdGF0aWMgb24gdGhlCi0gICAgLy8gYXBwcm9wcmlhdGUg
Tm9kZUxpc3QgY2xhc3MuIFRoZW4gdXNlIHRob3NlIGxpc3RzIGhlcmUgYW5kIGluIGludmFsaWRh
dGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzCisgICAgLy8gYXBwcm9wcmlhdGUgTm9kZUxp
c3QgY2xhc3MuIFRoZW4gdXNlIHRob3NlIGxpc3RzIGhlcmUgYW5kIGluIGNsZWFyTm9kZUxpc3RD
YWNoZXMKICAgICAvLyB0byBvbmx5IGludmFsaWRhdGUgdGhlIGNhY2hlIHR5cGVzIHRoYXQgZGVw
ZW5kIG9uIHRoZSBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkLgogICAgIC8vIEZJWE1FOiBLZWVwIHRy
YWNrIG9mIHdoZW4gd2UgaGF2ZSBubyBjYWNoZXMgb2YgYSBnaXZlbiB0eXBlIHNvIHRoYXQgd2Ug
Y2FuIGF2b2lkIHRoZSBmb3ItbG9vcAotICAgIC8vIGJlbG93IGV2ZW4gaWYgYSByZWxhdGVkIGF0
dHJpYnV0ZSBjaGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFkaW9Ob2RlTGlzdHMsIHdlIGRv
bid0IG5lZWQKKyAgICAvLyBpbiBjbGVhck5vZGVMaXN0Q2FjaGVzIGV2ZW4gaWYgYSByZWxhdGVk
IGF0dHJpYnV0ZSBjaGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFkaW9Ob2RlTGlzdHMsIHdl
IGRvbid0IG5lZWQKICAgICAvLyB0byBpbnZhbGlkYXRlIGFueSBjYWNoZXMgd2hlbiBpZCBhdHRy
aWJ1dGVzIGNoYW5nZS4pCiAgICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgogI2lmIEVOQUJM
RShNSUNST0RBVEEpCkBAIC05NjcsMjEgKzk2NCw3IEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXIKICAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0ciB8fCAhYXR0
cmlidXRlT3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygpOwotCi0gICAgaWYg
KCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFub2RlLT5pc0F0dHJpYnV0ZU5v
ZGUoKSk7Ci0gICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBub2RlLT5yYXJlRGF0YSgpOwot
ICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXMoJmF0dHJOYW1lKTsK
LSAgICB9CisgICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygmYXR0ck5hbWUpOwog
fQogCiB2b2lkIE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFu
Z2VkKCkKQEAgLTk4OSwyMCArOTcyLDcgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3Rz
Q2FjaGVBZnRlcgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5j
bGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlz
dENhY2hlcygpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRh
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0g
bm9kZS0+cmFyZURhdGEoKTsKLSAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRl
Q2FjaGVzKCk7Ci0gICAgfQorICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoMCk7
CiB9CiAKIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQpAQCAtMTU0OCw4ICsx
NTE4LDggQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRD
YWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0
OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2Rl
TGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7
CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRk
Q2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFnTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlz
dDo6VGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2RlTGlz
dD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7CiB9
CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lKQpAQCAtMTU2MCwyMyArMTUzMCwyMyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpn
ZXRFbGVtZW50c0J5CiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSkKICAgICAgICAg
cmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSk7CiAKLSAgICByZXR1cm4gZW5z
dXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhRdWFsaWZp
ZWROYW1lKHRoaXMsIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IG5hbWVzcGFj
ZVVSSSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9k
ZUxpc3RzKCktPmFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhpcywgbmFtZXNwYWNlVVJJLmlz
RW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwogfQogCiBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnROYW1lKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlz
dHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5vZGVMaXN0Pih0aGlzLCBEeW5h
bWljTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdFR5cGUsIGVsZW1lbnROYW1lKTsKKyAgICByZXR1cm4g
ZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05h
bWU8TmFtZU5vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdFR5cGUs
IGVsZW1lbnROYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVu
dHNCeUNsYXNzTmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCiB7Ci0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoTmFtZTxD
bGFzc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3RUeXBlLCBj
bGFzc05hbWVzKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3Rz
KCktPmFkZENhY2hlV2l0aE5hbWU8Q2xhc3NOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0
OjpDbGFzc05vZGVMaXN0VHlwZSwgY2xhc3NOYW1lcyk7CiB9CiAKIFBhc3NSZWZQdHI8UmFkaW9O
b2RlTGlzdD4gTm9kZTo6cmFkaW9Ob2RlTGlzdChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9ybVRhZykgfHwgaGFzVGFnTmFtZShmaWVsZHNldFRh
ZykpOwotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcykt
PmFkZENhY2hlV2l0aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVM
aXN0OjpSYWRpb05vZGVMaXN0VHlwZSwgbmFtZSk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxp
c3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6UmFkaW9Ob2RlTGlzdFR5cGUsIG5hbWUpOwogfQog
CiBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjIzOCwyOCArMjIwOCw2IEBA
IHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAKIAogLy8gLS0tLS0tLS0K
IAotdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZp
ZWROYW1lKiBhdHRyTmFtZSkKLXsKLSAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29u
c3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgp
OwotICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsg
KytpdCkgewotICAgICAgICBpZiAoIWF0dHJOYW1lIHx8IGl0LT5zZWNvbmQtPnNob3VsZEludmFs
aWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSgpKQotICAgICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKCk7Ci0gICAgfQotCi0gICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0
ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKLSAgICBmb3IgKE5vZGVM
aXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigp
OyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFhdHRyTmFtZSB8fCBp
dC0+c2Vjb25kLT5zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoKSkKLSAgICAgICAg
ICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0KLQotICAgIGlmICghYXR0
ck5hbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0
b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKLSAgICBmb3IgKFRh
Z05vZGVMaXN0Q2FjaGVOUzo6aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdp
bigpOyBpdCAhPSB0YWdDYWNoZUVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+aW52YWxp
ZGF0ZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RIYXNo
U2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyh1cmxzKTsKQEAgLTI3NTQsMTIgKzI3MDIsOSBAQCBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24q
IE5vZGU6OnByb3BlcnRpCiB9CiAjZW5kaWYKIAotdm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5v
ZGVMaXN0cyhOb2RlKiBub2RlKQordm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cygp
CiB7Ci0gICAgQVNTRVJUKG5vZGUpOwogICAgIHNldE5vZGVMaXN0cyhOb2RlTGlzdHNOb2RlRGF0
YTo6Y3JlYXRlKCkpOwotICAgIGlmIChUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG5vZGUtPnRyZWVT
Y29wZSgpKQotICAgICAgICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKIH0KIAogdm9p
ZCBOb2RlUmFyZURhdGE6OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEyMTEwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDM5ICsxMTMsMzYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKICAg
ICB9CiAKLSAgICB2b2lkIGludmFsaWRhdGVDYWNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0
ck5hbWUgPSAwKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9uYW1lQ2FjaGVzLmlzRW1wdHko
KSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CiAgICAgfQogCi0gICAgdm9pZCBh
ZG9wdFRyZWVTY29wZShUcmVlU2NvcGUqIG9sZFRyZWVTY29wZSwgVHJlZVNjb3BlKiBuZXdUcmVl
U2NvcGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KQorICAg
IHZvaWQgYWRvcHRUcmVlU2NvcGUoRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3
RG9jdW1lbnQpCiAgICAgewotICAgICAgICBpbnZhbGlkYXRlQ2FjaGVzKCk7Ci0KLSAgICAgICAg
aWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlTGlzdEF0
b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWljTmFtZUNhY2hlRW5kID0gbV9h
dG9taWNOYW1lQ2FjaGVzLmVuZCgpOwotICAgICAgICAgICAgZm9yIChOb2RlTGlzdEF0b21pY05h
bWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4o
KTsgaXQgIT0gYXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAg
aWYgKGxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9s
ZERvY3VtZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlz
dChsaXN0KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNh
Y2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2FjaGVFbmQgPSBtX2F0b21pY05hbWVD
YWNoZXMuZW5kKCk7CisgICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0b21p
Y05hbWVDYWNoZUVuZDsgKytpdCkgeworICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2RlTGlz
dCogbGlzdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBsaXN0LT5pbnZhbGlkYXRlQ2FjaGUo
KTsKKyAgICAgICAgICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVudCAmJiBsaXN0LT5p
c1Jvb3RlZEF0RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJl
Z2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKKyAgICAgICAgICAgICAgICBuZXdE
b2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwogICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25z
dF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVDYWNoZXMuZW5kKCk7Ci0gICAgICAgICAg
ICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbmFtZUNh
Y2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAg
ICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAg
ICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgTm9kZUxpc3ROYW1lQ2Fj
aGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsK
KyAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0gbmFtZUNhY2hlRW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIGxpc3QtPmludmFsaWRhdGVDYWNoZSgpOworICAgICAgICAgICAgaWYgKG9sZERvY3VtZW50
ICE9IG5ld0RvY3VtZW50ICYmIGxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxp
c3QpOworICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
b2xkVHJlZVNjb3BlKQotICAgICAgICAgICAgb2xkVHJlZVNjb3BlLT5yZW1vdmVOb2RlTGlzdENh
Y2hlKCk7Ci0gICAgICAgIG5ld1RyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOworICAgICAg
ICBUYWdOb2RlTGlzdENhY2hlTlM6Oml0ZXJhdG9yIHRhZ0NhY2hlRW5kID0gbV90YWdOb2RlTGlz
dENhY2hlTlMuZW5kKCk7CisgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRv
ciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5kOyAr
K2l0KQorICAgICAgICAgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMjA1LDEwICsyMDIsMTAgQEAgcHVibGljOiAgICAKICAgICB2b2lkIGNs
ZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigpOyB9CiAgICAgdm9pZCBzZXROb2Rl
TGlzdHMoUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbGlzdHMpIHsgbV9ub2RlTGlzdHMg
PSBsaXN0czsgfQogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMoKSBjb25zdCB7IHJl
dHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1cmVO
b2RlTGlzdHMoTm9kZSogbm9kZSkKKyAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxp
c3RzKCkKICAgICB7CiAgICAgICAgIGlmICghbV9ub2RlTGlzdHMpCi0gICAgICAgICAgICBjcmVh
dGVOb2RlTGlzdHMobm9kZSk7CisgICAgICAgICAgICBjcmVhdGVOb2RlTGlzdHMoKTsKICAgICAg
ICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQ2hpbGRO
b2RlTGlzdENhY2hlKCk7CkBAIC0zMzgsNyArMzM1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goYm9vbCBuZWVkcykg
eyBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gbmVlZHM7IH0K
IAogcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZU5vZGVMaXN0cyhOb2RlKik7CisgICAgdm9pZCBj
cmVhdGVOb2RlTGlzdHMoKTsKIAogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7CiAgICAgT3du
UHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuY3BwCShyZXZpc2lvbiAxMjExMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogVHJlZVNjb3BlOjpUcmVlU2NvcGUoQ29udGFpbmVyTm9kZSogcm9vdE5vZGUp
CiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUoMCkK
LSAgICAsIG1fbnVtTm9kZUxpc3RDYWNoZXMoMCkKIHsKICAgICBBU1NFUlQocm9vdE5vZGUpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkocmV2aXNpb24gMTIxMTAxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMCArNjEsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAg
IEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAK
LSAgICB2b2lkIGFkZE5vZGVMaXN0Q2FjaGUoKSB7ICsrbV9udW1Ob2RlTGlzdENhY2hlczsgfQot
ICAgIHZvaWQgcmVtb3ZlTm9kZUxpc3RDYWNoZSgpIHsgQVNTRVJUKG1fbnVtTm9kZUxpc3RDYWNo
ZXMgPiAwKTsgLS1tX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAgYm9vbCBoYXNOb2RlTGlzdENh
Y2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtTm9kZUxpc3RDYWNoZXM7IH0KLQogICAgIERPTVNl
bGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBGaW5kIGZpcnN0IGFuY2hv
ciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpAQCAtOTUsOCArOTEsNiBAQCBwcml2YXRlOgogICAgIERv
Y3VtZW50T3JkZXJlZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1bWVudE9yZGVyZWRNYXAg
bV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAgICB1bnNpZ25lZCBtX251bU5vZGVMaXN0Q2FjaGVzOwot
CiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDEyMTEw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9O
ZXdTY29wCiAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9
IG5vZGUtPnNldFRyZWVTY29wZShuZXdEb2N1bWVudCA9PSBtX25ld1Njb3BlID8gMCA6IG1fbmV3
U2NvcGUpOwogICAgICAgICBpZiAocmFyZURhdGEgJiYgcmFyZURhdGEtPm5vZGVMaXN0cygpKQot
ICAgICAgICAgICAgcmFyZURhdGEtPm5vZGVMaXN0cygpLT5hZG9wdFRyZWVTY29wZShtX29sZFNj
b3BlLCBtX25ld1Njb3BlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICAgICAg
cmFyZURhdGEtPm5vZGVMaXN0cygpLT5hZG9wdFRyZWVTY29wZShvbGREb2N1bWVudCwgbmV3RG9j
dW1lbnQpOwogCiAgICAgICAgIGlmICh3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAgICAg
ICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MTIxMTAxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBMYWJlbGFi
bGVFbGVtZW50OjpsCiAgICAgaWYgKCFkb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBOb2RlOjplbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcykt
PmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2Rl
TGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7CisgICAgcmV0dXJuIE5vZGU6OmVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1l
PExhYmVsc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0VHlw
ZSwgc3RhckF0b20pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJjb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIxMTAxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEz
ICszNiwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogTGFiZWxzTm9kZUxpc3Q6Okxh
YmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUpCiAgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0
KGZvck5vZGUsIFJvb3RlZEF0RG9jdW1lbnQpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBMYWJlbHNOb2RlTGlzdDo6fkxhYmVs
c05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hl
V2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdFR5cGUs
IHN0YXJBdG9tKTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCh0aGlzKTsKIH0gCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhF
bGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9O
b2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVM
aXN0LmNwcAkocmV2aXNpb24gMTIxMTAxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05v
ZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDExIEBAIFJhZGlvTm9kZUxp
c3Q6OlJhZGlvTm9kZUxpc3QoTm9kZSogcm9vdE4KICAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3Qocm9vdE5vZGUsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpID8gUm9vdGVkQXREb2N1
bWVudCA6IFJvb3RlZEF0Tm9kZSkKICAgICAsIG1fbmFtZShuYW1lKQogewotICAgIGRvY3VtZW50
KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogUmFkaW9Ob2Rl
TGlzdDo6flJhZGlvTm9kZUxpc3QoKQogewogICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+
cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9k
ZUxpc3RUeXBlLCBtX25hbWUpOwotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQq
IHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkK
</data>
<flag name="review"
          id="157125"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>