<?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>166960</bug_id>
          
          <creation_ts>2017-01-11 19:01:28 -0800</creation_ts>
          <short_desc>Concurrent GC has a bug where we would detect a race but fail to rescan the object</short_desc>
          <delta_ts>2017-01-12 19:13:21 -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>JavaScriptCore</component>
          <version>WebKit Local 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165909</blocked>
    
    <blocked>166944</blocked>
    
    <blocked>166989</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1266033</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-11 19:01:28 -0800</bug_when>
    <thetext>I&apos;m still investigating what&apos;s going on. I think I might have found it, but I&apos;m about to run tests.
If you put the tests from bug #166707 into a directory, and run them using run-jsc-stress-tests, about a quarter of the run-jsc-stress-tests invocations will hit a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266034</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-11 19:05:59 -0800</bug_when>
    <thetext>Ok, I think there is a place where we may be forgetting to writeBarrier. Testing out locally now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266038</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-11 19:36:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/29983526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266052</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-11 20:10:09 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Ok, I think there is a place where we may be forgetting to writeBarrier.
&gt; Testing out locally now.

Ok, ran tests for over an hour with no crashes, so I think I&apos;ve found it.
The bug is, we have code like this:

```
ALWAYS_INLINE PropertyOffset JSObject::prepareToPutDirectWithoutTransition(VM&amp; vm, PropertyName propertyName, unsigned attributes, StructureID structureID, Structure* structure)
{
    unsigned oldOutOfLineCapacity = structure-&gt;outOfLineCapacity();
    PropertyOffset result;
    structure-&gt;addPropertyWithoutTransition(
        vm, propertyName, attributes,
        [&amp;] (const GCSafeConcurrentJSLocker&amp;, PropertyOffset offset, PropertyOffset newLastOffset) {
            unsigned newOutOfLineCapacity = Structure::outOfLineCapacity(newLastOffset);
            if (newOutOfLineCapacity != oldOutOfLineCapacity) {
                Butterfly* butterfly = allocateMoreOutOfLineStorage(vm, oldOutOfLineCapacity, newOutOfLineCapacity);
                nukeStructureAndSetButterfly(vm, structureID, butterfly);
                structure-&gt;setLastOffset(newLastOffset);
                WTF::storeStoreFence();
                setStructureIDDirectly(structureID);
            } else
                structure-&gt;setLastOffset(newLastOffset);
            result = offset;
        });
    return result;
}
```

However, we&apos;re missing a writeBarrier after re-setting the StructureID to be non-nuked.
So the code should be something like:

```
ALWAYS_INLINE PropertyOffset JSObject::prepareToPutDirectWithoutTransition(VM&amp; vm, PropertyName propertyName, unsigned attributes, StructureID structureID, Structure* structure)
{
    unsigned oldOutOfLineCapacity = structure-&gt;outOfLineCapacity();
    PropertyOffset result;
    structure-&gt;addPropertyWithoutTransition(
        vm, propertyName, attributes,
        [&amp;] (const GCSafeConcurrentJSLocker&amp;, PropertyOffset offset, PropertyOffset newLastOffset) {
            unsigned newOutOfLineCapacity = Structure::outOfLineCapacity(newLastOffset);
            if (newOutOfLineCapacity != oldOutOfLineCapacity) {
                Butterfly* butterfly = allocateMoreOutOfLineStorage(vm, oldOutOfLineCapacity, newOutOfLineCapacity);
                nukeStructureAndSetButterfly(vm, structureID, butterfly);
                structure-&gt;setLastOffset(newLastOffset);
                WTF::storeStoreFence();
                setStructureIDDirectly(structureID);
            } else
                structure-&gt;setLastOffset(newLastOffset);
            result = offset;
            vm.heap.writeBarrier(this);
        });
    return result;
}
```

Not doing the writeBarrier could cause some weird issues. I believe this would be one:
(Mutator Thread: M, Collector Thread: C, assuming sequential consistency via proper barriers)

M: allocate new butterfly
M: Set nuked structure ID
M: Set butterfly (this does a barrier)
C: Start scanning O
C: load structure ID
C: See it&apos;s nuked and bail, relying on the barrier to rescan
Note, we never rescan, so the butterfly that we just allocated could not be kept alive, and could be allocated over!

I think there are probably other bugs, but I haven&apos;t worked out all the possibilities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266085</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-11 22:07:49 -0800</bug_when>
    <thetext>It almost seems like setStructureIDDirectly should fire a write barrier by default, and the variant of it that we use in nukeBlahBlah should be a special one that doesn&apos;t barrier. Maybe that one can have an extra funky name like setStructureIDDirectlyWithoutWriteBarrier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266086</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-01-11 22:13:23 -0800</bug_when>
    <thetext>This looks like the same issue as my bug &lt;rdar://problem/29779787&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266288</commentid>
    <comment_count>6</comment_count>
      <attachid>298709</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-12 14:31:14 -0800</bug_when>
    <thetext>Created attachment 298709
WIP

RFC. Going to write up a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266292</commentid>
    <comment_count>7</comment_count>
      <attachid>298709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-12 14:35:44 -0800</bug_when>
    <thetext>Comment on attachment 298709
WIP

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

I think that this is right.

&gt; Source/JavaScriptCore/heap/Heap.cpp:531
&gt; +    // FIXME: maybe debug assert?

Release asserts are better.

&gt; Source/JavaScriptCore/heap/Heap.cpp:2257
&gt; +        &quot;Mms&quot;, &quot;Mutator/Race Mark Stack&quot;,

The abbreviation codes are meant to be created like this:

- Take first letter of each word on the long version.
- Capitalize the first letter.
- Downcase all other letters.

In this convention, the short name should become &quot;Mrms&quot;.

The use of first-letter-capital means that we can print these without delimiters.  For example the GC might print &quot;WrhCbMrms(100)&quot;, which means that it evaluated the weak reference harvester (Wrh), CodeBlock (Cb), and Mutator/Race Mark Stack (Mrms) constraints in that order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266293</commentid>
    <comment_count>8</comment_count>
      <attachid>298709</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-12 14:42:58 -0800</bug_when>
    <thetext>Comment on attachment 298709
WIP

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:2257
&gt; +        &quot;Mms&quot;, &quot;Mutator/Race Mark Stack&quot;,

How about &quot;Mutator+Race&quot; which is a more accurate description.

&gt; Source/JavaScriptCore/runtime/Structure.cpp:798
&gt; +    vm.heap.writeBarrier(object);

Is this still needed given that SlotVisitor::didRace() now ensures re-scanning on races?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266296</commentid>
    <comment_count>9</comment_count>
      <attachid>298709</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-01-12 14:47:02 -0800</bug_when>
    <thetext>Comment on attachment 298709
WIP

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

&gt;&gt; Source/JavaScriptCore/runtime/Structure.cpp:798
&gt;&gt; +    vm.heap.writeBarrier(object);
&gt; 
&gt; Is this still needed given that SlotVisitor::didRace() now ensures re-scanning on races?

In general, write barriers are supposed to happen after stores rather than before. This change corrects the ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266300</commentid>
    <comment_count>10</comment_count>
      <attachid>298709</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-12 14:49:36 -0800</bug_when>
    <thetext>Comment on attachment 298709
WIP

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/Structure.cpp:798
&gt;&gt;&gt; +    vm.heap.writeBarrier(object);
&gt;&gt; 
&gt;&gt; Is this still needed given that SlotVisitor::didRace() now ensures re-scanning on races?
&gt; 
&gt; In general, write barriers are supposed to happen after stores rather than before. This change corrects the ordering.

Yes, but I think the purpose of this writeBarrier is because we&apos;re changing the structureID, and may race with the GC.  The GC now automatically takes care this with the raceMarkStack.  Hence, there shouldn&apos;t be a need for these manually issue barriers anymore.  That is unless there&apos;s another reason we need this here (which is what I&apos;m really asking)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266322</commentid>
    <comment_count>11</comment_count>
      <attachid>298716</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-12 15:14:24 -0800</bug_when>
    <thetext>Created attachment 298716
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266324</commentid>
    <comment_count>12</comment_count>
      <attachid>298716</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-01-12 15:16:22 -0800</bug_when>
    <thetext>Comment on attachment 298716
patch

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

&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:705
&gt; +    heap()-&gt;addToRaceMarkStack(race.cell());

You should just inline addToRaceMarkStack here and make SlotVisitor a friend of Heap if it isn&apos;t already.  I bet it already is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266327</commentid>
    <comment_count>13</comment_count>
      <attachid>298716</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-01-12 15:19:26 -0800</bug_when>
    <thetext>Comment on attachment 298716
patch

r=me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266336</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-01-12 15:28:27 -0800</bug_when>
    <thetext>Using the work in progress patch with a debug build I got the crash below on the 8th run.

Test:
DYLD_FRAMEWORK_PATH=WebKitBuild/Debug/ WebKitBuild/Debug/jsc  --useFTLJIT\=false --useFunctionDotArguments\=true --maxPerThreadStackUsage\=1572864 --thresholdForJITAfterWarmUp\=10 --thresholdForJITSoon\=10 --thresholdForOptimizeAfterWarmUp\=20 --thresholdForOptimizeAfterLongWarmUp\=20 --thresholdForOptimizeSoon\=20 --thresholdForFTLOptimizeAfterWarmUp\=20 --thresholdForFTLOptimizeSoon\=20 --maximumEvalCacheableSourceLength\=150000 --useEagerCodeBlockJettisonTiming\=true --collectContinuously\=true --useGenerationalGC\=false JSTests/stress/has-own-property-name-cache-string-keys.js

Backtrace:
ASSERTION FAILED: cell-&gt;cellState() == CellState::PossiblyGrey
/Volumes/Data/src/webkit/Source/JavaScriptCore/heap/SlotVisitor.cpp(287) : void JSC::SlotVisitor::appendToMarkStack(ContainerType &amp;, JSC::JSCell *) [ContainerType = JSC::MarkedBlock]
1   0x108e6d71d WTFCrash
2   0x108cafa4a void JSC::SlotVisitor::appendToMarkStack&lt;JSC::MarkedBlock&gt;(JSC::MarkedBlock&amp;, JSC::JSCell*)
3   0x108caf82d void JSC::SlotVisitor::setMarkedAndAppendToMarkStack&lt;JSC::MarkedBlock&gt;(JSC::MarkedBlock&amp;, JSC::JSCell*)
4   0x108caf44a JSC::SlotVisitor::setMarkedAndAppendToMarkStack(JSC::JSCell*)
5   0x108caf4dc JSC::SlotVisitor::appendHidden(JSC::JSValue)
6   0x1088d4c25 void JSC::SlotVisitor::appendHidden&lt;JSC::Unknown&gt;(JSC::WriteBarrierBase&lt;JSC::Unknown&gt; const&amp;)
7   0x108975ca6 JSC::JSSegmentedVariableObject::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;)
8   0x108cafe04 JSC::SlotVisitor::visitChildren(JSC::JSCell const*)
9   0x108cb02cb JSC::SlotVisitor::drain(WTF::MonotonicTime)
10  0x108cb0b78 JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode, WTF::MonotonicTime)
11  0x10870900e JSC::Heap::markToFixpoint(double)::$_2::operator()() const
12  0x108708c19 WTF::SharedTaskFunctor&lt;void (), JSC::Heap::markToFixpoint(double)::$_2&gt;::run()
13  0x108ea921d WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&lt;void ()&gt; &gt;)
14  0x108ea9f8f WTF::ParallelHelperPool::Thread::work()
15  0x108e7b86d WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0::operator()() const
16  0x108e7b62d void std::__1::__invoke_void_return_wrapper&lt;void&gt;::__call&lt;WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&amp;&gt;(WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&amp;&amp;&amp;)
17  0x108e7b3c9 std::__1::__function::__func&lt;WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0, std::__1::allocator&lt;WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
18  0x10846586a std::__1::function&lt;void ()&gt;::operator()() const
19  0x108edeaa7 WTF::threadEntryPoint(void*)
20  0x108ee0471 WTF::wtfThreadEntryPoint(void*)
21  0x7fffbfc9faab _pthread_body
22  0x7fffbfc9f9f7 _pthread_body
23  0x7fffbfc9f221 thread_start
Segmentation fault: 11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266337</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-01-12 15:33:44 -0800</bug_when>
    <thetext>For my crash, the main thread had this backtrace.  All other threads were waiting.

Thread 0:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x0000000108cdb991 JSC::Structure::pin(JSC::VM&amp;, JSC::PropertyTable*) + 1 (Structure.cpp:804)
1   com.apple.JavaScriptCore      	0x0000000107a97622 int JSC::Structure::addPropertyWithoutTransition&lt;JSC::JSObject::prepareToPutDirectWithoutTransition(JSC::VM&amp;, JSC::PropertyName, unsigned int, unsigned int, JSC::Structure*)::&apos;lambda&apos;(JSC::GCSafeConcurrentJSLocker const&amp;, int, int)&gt;(JSC::VM&amp;, JSC::PropertyName, unsigned int, JSC::JSObject::prepareToPutDirectWithoutTransition(JSC::VM&amp;, JSC::PropertyName, unsigned int, unsigned int, JSC::Structure*)::&apos;lambda&apos;(JSC::GCSafeConcurrentJSLocker const&amp;, int, int) const&amp;) + 82 (StructureInlines.h:354)
2   com.apple.JavaScriptCore      	0x0000000107a9606a JSC::JSObject::prepareToPutDirectWithoutTransition(JSC::VM&amp;, JSC::PropertyName, unsigned int, unsigned int, JSC::Structure*) + 138 (JSObjectInlines.h:192)
3   com.apple.JavaScriptCore      	0x00000001080e90c0 bool JSC::JSObject::putDirectInternal&lt;(JSC::JSObject::PutMode)0&gt;(JSC::VM&amp;, JSC::PropertyName, JSC::JSValue, unsigned int, JSC::PutPropertySlot&amp;) + 928 (JSObjectInlines.h:278)
4   com.apple.JavaScriptCore      	0x00000001080e89dc JSC::JSObject::putInline(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 924 (JSObjectInlines.h:215)
5   com.apple.JavaScriptCore      	0x000000010893f845 JSC::JSObject::put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 69 (JSObject.cpp:751)
6   com.apple.JavaScriptCore      	0x00000001080e32fe JSC::JSValue::put(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;) + 206 (JSCJSValueInlines.h:867)
7   com.apple.JavaScriptCore      	0x00000001083caeb7 void JSC::DFG::operationPutByValInternal&lt;false, false&gt;(JSC::ExecState*, long long, long long, long long) + 807 (DFGOperations.cpp:145)
8   com.apple.JavaScriptCore      	0x00000001083cab7b operationPutByValNonStrict + 75 (DFGOperations.cpp:624)
9   ???                           	0x00003def31a03067 0 + 68097539059815
10  com.apple.JavaScriptCore      	0x0000000108a3928e vmEntryToJavaScript + 334
11  com.apple.JavaScriptCore      	0x000000010884d269 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 329 (JITCode.cpp:81)
12  com.apple.JavaScriptCore      	0x0000000108805534 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*) + 4788 (Interpreter.cpp:871)
13  com.apple.JavaScriptCore      	0x00000001080ebd8d JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 669 (Completion.cpp:110)
14  jsc                           	0x000000010798a9eb runWithScripts(GlobalObject*, WTF::Vector&lt;Script, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String const&amp;, bool, bool, bool) + 2123 (jsc.cpp:2957)
15  jsc                           	0x000000010797c46a runJSC(JSC::VM*, CommandLine) + 1370 (jsc.cpp:3237)
16  jsc                           	0x000000010797afcd jscmain(int, char**) + 157 (jsc.cpp:3292)
17  jsc                           	0x000000010797af1e main + 46 (jsc.cpp:2804)
18  libdyld.dylib                 	0x00007fffbfa88255 start + 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266357</commentid>
    <comment_count>16</comment_count>
      <attachid>298729</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-12 16:09:20 -0800</bug_when>
    <thetext>Created attachment 298729
patch for landing

Discussed with Fil and other how the race could happen over IRC and why that assert is wrong:

[15:36:24]  &lt;&amp;pizlo&gt;	1) mutator fires write barrier on black-unmarked object during full GC
[15:36:33]  &lt;&amp;pizlo&gt;	2) mutator CASes the color of the object from black to white
[15:36:37]  &lt;&amp;pizlo&gt;	3) GC marks the object
[15:36:43]  &lt;&amp;pizlo&gt;	4) GC sets the object&apos;s color to grey
[15:36:54]  &lt;&amp;pizlo&gt;	5) mutator realizes that the object is now marked
[15:36:59]  &lt;&amp;pizlo&gt;	6) mutator sets the object&apos;s color to black
[15:37:07]  &lt;&amp;pizlo&gt;	7) GC crashes because the color of the object is not grey

Also note, that it could end up being white, since the setState(PossiblyGrey) isn&apos;t CAS and can leave it being white in a not sequentially consistent world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266409</commentid>
    <comment_count>17</comment_count>
      <attachid>298729</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-12 19:13:14 -0800</bug_when>
    <thetext>Comment on attachment 298729
patch for landing

Clearing flags on attachment: 298729

Committed r210694: &lt;http://trac.webkit.org/changeset/210694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266410</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-12 19:13:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298709</attachid>
            <date>2017-01-12 14:31:14 -0800</date>
            <delta_ts>2017-01-12 15:14:24 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>8631</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMTA2NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU5LDYgKzI1OSw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3Io
c3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQogICAgICwgbV9tdXRhdG9yTWFy
a1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3JhY2VN
YXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFu
ZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2Nr
U2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHVi
Um91dGluZVNldD4oKSkKQEAgLTMxMSw2ICszMTIsNyBAQCBIZWFwOjp+SGVhcCgpCiAgICAgICAg
IHNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5jbGVhck1hcmtTdGFja3MoKTsKICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7
CisgICAgbV9yYWNlTWFya1N0YWNrLT5jbGVhcigpOwogICAgIAogICAgIGZvciAoV2Vha0Jsb2Nr
KiBibG9jayA6IG1fbG9naWNhbGx5RW1wdHlXZWFrQmxvY2tzKQogICAgICAgICBXZWFrQmxvY2s6
OmRlc3Ryb3koKnRoaXMsIGJsb2NrKTsKQEAgLTUyNiw2ICs1MjgsOSBAQCB2b2lkIEhlYXA6Om1h
cmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0CiAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+
Y2xlYXIoKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogbWF5YmUgZGVidWcgYXNzZXJ0PworICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKwogICAgIGJlZ2lu
TWFya2luZygpOwogCiAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CkBA
IC03ODUsMTEgKzc5MCw2IEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBn
Y1MKIAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBpZiAoIW1fdmlzaXRSYWNlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZGF0YUxvZygiVW5yZXNvbHZlZCB2aXNpdCByYWNlczogIiwg
bGlzdER1bXAobV92aXNpdFJhY2VzKSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAogICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCkBAIC03OTcsNiArNzk3LDggQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIAog
ICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhh
cnZlc3RlcnMucmVtb3ZlQWxsKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JhY2VNYXJrU3Rh
Y2stPmlzRW1wdHkoKSk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CiAg
ICAgc2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigp
KTsKQEAgLTIyNTIsMTkgKzIyNTQsMjAgQEAgdm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQo
KQogICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAog
ICAgIG1fY29uc3RyYWludFNldC0+YWRkKAotICAgICAgICAiTW1zIiwgIk11dGF0b3IgTWFyayBT
dGFjayIsCisgICAgICAgICJNbXMiLCAiTXV0YXRvci9SYWNlIE1hcmsgU3RhY2siLAogICAgICAg
ICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciwgY29uc3QgVmlzaXRpbmdUaW1lb3V0
JikgewogICAgICAgICAgICAgLy8gSW5kaWNhdGUgdG8gdGhlIGZpeHBvaW50IHRoYXQgd2UgaW50
cm9kdWNlZCB3b3JrIQotICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JNYXJrU3Rh
Y2stPnNpemUoKTsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCkgKyBtX3JhY2VNYXJrU3RhY2stPnNpemUoKTsKICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLmFkZFRvVmlzaXRDb3VudChzaXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiKCIsIHNpemUsICIp
Iik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNm
ZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICAgICAgbV9yYWNl
TWFya1N0YWNrLT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CiAg
ICAgICAgIH0sCiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImKSAtPiBkb3VibGUgewotICAg
ICAgICAgICAgcmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAgICAgICAg
cmV0dXJuIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXpl
KCk7CiAgICAgICAgIH0sCiAgICAgICAgIE1hcmtpbmdDb25zdHJhaW50OjpHcmV5ZWRCeUV4ZWN1
dGlvbik7CiB9CkBAIC0yMzU5LDUgKzIzNjIsMTMgQEAgdm9pZCBIZWFwOjpzZXRNdXRhdG9yU2hv
dWxkQmVGZW5jZWQoYm9vbAogICAgIGZvciAoYm9vbCogY2FjaGUgOiBtX211dGF0b3JTaG91bGRC
ZUZlbmNlZENhY2hlcykKICAgICAgICAgKmNhY2hlID0gdmFsdWU7CiB9CisKK3ZvaWQgSGVhcDo6
YWRkVG9SYWNlTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoY2VsbC0+YXRvbWlj
Q29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaywg
Q2VsbFN0YXRlOjpQb3NzaWJseUdyZXkpID09IENlbGxTdGF0ZTo6UG9zc2libHlCbGFjaykgewor
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmFjZU1hcmtTdGFja0xvY2spOworICAg
ICAgICBtX3JhY2VNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKKyAgICB9Cit9CiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9u
IDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDcgKzEzOSw2IEBAIHB1YmxpYzoKICAgICBNYWNoaW5lVGhyZWFkcyYgbWFj
aGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICBTbG90Vmlz
aXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcjsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4g
Km1fbXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0
eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTUwNSw2ICs1
MDQsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgYXNzZXJ0U2hhcmVkTWFya1N0YWNrc0Vt
cHR5KCk7CiAKKyAgICB2b2lkIGFkZFRvUmFjZU1hcmtTdGFjayhKU0NlbGwqKTsKKwogICAgIGNv
bnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKICAg
ICBjb25zdCBzaXplX3QgbV9taW5CeXRlc1BlckN5Y2xlOwpAQCAtNTQwLDcgKzU0MSwxMCBAQCBw
cml2YXRlOgogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0
YXRvck1hcmtTdGFjazsKLSAgICAKKworICAgIExvY2sgbV9yYWNlTWFya1N0YWNrTG9jazsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fcmFjZU1hcmtTdGFjazsKKwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxNYXJraW5nQ29uc3RyYWludFNldD4gbV9jb25zdHJhaW50U2V0Owog
CiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtp
bmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwpAQCAtNTk3LDcgKzYwMSw2IEBA
IHByaXZhdGU6CiAKICAgICBIYXNoTWFwPHZvaWQqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1f
d2Vha0dDTWFwczsKICAgICAKLSAgICBIYXNoU2V0PFZpc2l0UmFjZUtleT4gbV92aXNpdFJhY2Vz
OwogICAgIExvY2sgbV92aXNpdFJhY2VMb2NrOwogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlz
aW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAyLDEwICs3MDIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
aWRSYWNlKGNvbnN0IFZpc2l0UmFjCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWaXNpdFJhY2Uo
KSkKICAgICAgICAgZGF0YUxvZyh0b0NTdHJpbmcoIkdDIHZpc2l0IHJhY2U6ICIsIHJhY2UsICJc
biIpKTsKICAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGhlYXAoKS0+bV92aXNpdFJhY2VMb2NrKTsKLSAgICAgICAgaGVhcCgp
LT5tX3Zpc2l0UmFjZXMuYWRkKHJhY2UpOwotICAgIH0KKyAgICBoZWFwKCktPmFkZFRvUmFjZU1h
cmtTdGFjayhyYWNlLmNlbGwoKSk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAkocmV2aXNpb24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDggKzE1MSw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CiAgICAgdm9pZCBk
aWRSYWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRS
YWNlS2V5KGNlbGwsIHJlYXNvbikpOyB9Ci0gICAgdm9pZCBkaWROb3RSYWNlKGNvbnN0IFZpc2l0
UmFjZUtleSYpOwotICAgIHZvaWQgZGlkTm90UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIq
IHJlYXNvbikgeyBkaWROb3RSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQogICAg
IAogICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
cmV2aXNpb24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxOCArMTA4LDQgQEAgaW5saW5lIGNv
bnN0IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogICAgIHJldHVybiAqbV9oZWFwLm1fdm07
CiB9CiAKLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpkaWROb3RSYWNlKGNvbnN0IFZpc2l0UmFj
ZUtleSYgcmFjZSkKLXsKLSAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spIHsKLSAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZmlyc3QgdmlzaXQgc28gd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgYW55dGhp
bmcuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhoZWFwKCktPm1fdmlzaXRSYWNlTG9jayk7Ci0gICAgaGVhcCgpLT5tX3Zpc2l0UmFjZXMu
cmVtb3ZlKHJhY2UpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMDY3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDkgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlz
aXQKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBs
KHZpc2l0b3IpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHZpc2l0b3IuZGlkTm90UmFjZSh0
aGlzLCByYWNlUmVhc29uKTsKLSAgICBlbHNlCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHZp
c2l0b3IuZGlkUmFjZSh0aGlzLCByYWNlUmVhc29uKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVz
LmgJKHJldmlzaW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgQUxXQVlT
X0lOTElORSBQcm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgICAgICAgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0
T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgICAgICBu
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmVJRCwgYnV0dGVyZmx5KTsK
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldExhc3RPZmZzZXQobmV3TGFzdE9mZnNldCk7
CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgICAgICAg
ICBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KHN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0TGFzdE9mZnNldChuZXdMYXN0T2Zmc2V0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkzLDEwICs3OTMsMTAgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1
dHRlcmZseUFmdGVyRmxhdHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNh
cGFjaXR5KTsKICAgICB9CiAgICAgCi0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob2JqZWN0KTsK
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSURE
aXJlY3RseShpZCgpKTsKLSAgICAKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihvYmplY3QpOwor
CiAgICAgcmV0dXJuIHRoaXM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298716</attachid>
            <date>2017-01-12 15:14:24 -0800</date>
            <delta_ts>2017-01-12 16:09:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>12864</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE3LTAxLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IENvbmN1cnJlbnQgR0MgaGFzIGEgYnVnIHdoZXJlIHdlIHdvdWxkIGRldGVjdCBhIHJhY2UgYnV0
IGZhaWwgdG8gcmVzY2FuIHRoZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk2MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk5ODM1
MjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ug
aGF2ZSBjb2RlIGxpa2UgdGhpcyBpbiBKU0M6CisgICAgICAgIAorICAgICAgICBgYGAKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZt
LCBvbGRPdXRPZkxpbmVDYXBhY2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICBu
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmVJRCwgYnV0dGVyZmx5KTsK
KyAgICAgICAgc3RydWN0dXJlLT5zZXRMYXN0T2Zmc2V0KG5ld0xhc3RPZmZzZXQpOworICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5
KHN0cnVjdHVyZUlEKTsKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBOb3RlIHRoYXQg
dGhlIGNvbGxlY3RvciBjb3VsZCBkZXRlY3QgYSByYWNlIGhlcmUsIHdoaWNoIHNvbWV0aW1lcwor
ICAgICAgICBpbmNvcnJlY3RseSBjYXVzZWQgdXMgdG8gbm90IHZpc2l0IHRoZSBvYmplY3QgYWdh
aW4uCisgICAgICAgIAorICAgICAgICBNdXRhdG9yIFRocmVhZDogTSwgQ29sbGVjdG9yIFRocmVh
ZDogQywgYXNzdW1pbmcgc2VxdWVudGlhbCBjb25zaXN0ZW5jeSB2aWEKKyAgICAgICAgcHJvcGVy
IGJhcnJpZXJzOgorICAgICAgICAKKyAgICAgICAgTTogYWxsb2NhdGUgbmV3IGJ1dHRlcmZseQor
ICAgICAgICBNOiBTZXQgbnVrZWQgc3RydWN0dXJlIElECisgICAgICAgIE06IFNldCBidXR0ZXJm
bHkgKHRoaXMgZG9lcyBhIGJhcnJpZXIpCisgICAgICAgIEM6IFN0YXJ0IHNjYW5uaW5nIE8KKyAg
ICAgICAgQzogbG9hZCBzdHJ1Y3R1cmUgSUQKKyAgICAgICAgQzogU2VlIGl0J3MgbnVrZWQgYW5k
IGJhaWwsICh3ZSB1c2VkIHRvIHJlbHkgb24gYSB3cml0ZSBiYXJyaWVyIHRvIHJlc2NhbikuCisg
ICAgICAgIAorICAgICAgICBXZSBzb21ldGltZXMgbmV2ZXIgcmVzY2FubmVkIGhlcmUgYmVjYXVz
ZSB3ZSB3ZXJlIGNhbGxpbmcKKyAgICAgICAgc2V0U3RydWN0dXJlSUREaXJlY3RseSB3aGljaCBk
b2Vzbid0IGRvIGEgd3JpdGUgYmFycmllci4KKyAgICAgICAgKE5vdGUsIHRoZSBwbGFjZXMgdGhh
dCBkbyB0aGlzIGJ1dCBjYWxsIHNldFN0cnVjdHVyZSB3ZXJlCisgICAgICAgIE9LIGJlY2F1c2Ug
c2V0U3RydWN0dXJlIHdpbGwgcGVyZm9ybSBhIHdyaXRlIGJhcnJpZXIuKQorICAgICAgICAKKyAg
ICAgICAgKFRoaXMgc2FtZSBpc3N1ZSBhbHNvIGV4aXN0ZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBj
b2xsZWN0b3IgdGhyZWFkCisgICAgICAgIGRldGVjdGVkIHJhY2VzIGZvciBTdHJ1Y3R1cmU6Om1f
b2Zmc2V0LCBidXQgcGxhY2VzIHRoYXQgY2hhbmdlZAorICAgICAgICBTdHJ1Y3R1cmU6Om1fb2Zm
c2V0IGRpZG4ndCBwZXJmb3JtIGEgd3JpdGUgYmFycmllciBvbiB0aGUgb2JqZWN0CisgICAgICAg
IGFmdGVyIGNoYW5naW5nIGl0cyBTdHJ1Y3R1cmUncyBtX29mZnNldC4pCisgICAgICAgIAorICAg
ICAgICBUbyBwcmV2ZW50IHN1Y2ggY29kZSBmcm9tIHJlcXVpcmluZyBldmVyeSBjYWxsIHNpdGUg
dG8gcGVyZm9ybQorICAgICAgICBhIHdyaXRlIGJhcnJpZXIgb24gdGhlIG9iamVjdCwgSSd2ZSBj
aGFuZ2VkIHRoZSBjb2xsZWN0b3IgY29kZQorICAgICAgICB0byBrZWVwIGEgc3RhY2sgb2YgY2Vs
bHMgdG8gYmUgcmV2aXNpdGVkIGR1ZSB0byByYWNlcy4gVGhpcyBzdGFjaworICAgICAgICBpcyB0
aGVuIGNvbnN1bHRlZCB3aGVuIHdlIGRvIG1hcmtpbmcuIEJlY2F1c2Ugc3VjaCByYWNlcyBhcmUg
cmFyZSwKKyAgICAgICAgd2UgaGF2ZSBhIHNpbmdsZSBzdGFjayBvbiBIZWFwIHRoYXQgaXMgZ3Vh
cmRlZCBieSBhIGxvY2suCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrVG9GaXhwb2ludCk6CisgICAgICAgIChKU0M6OkhlYXA6OmVuZE1hcmtpbmcp
OgorICAgICAgICAoSlNDOjpIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQpOgorICAgICAgICAoSlND
OjpIZWFwOjphZGRUb1JhY2VNYXJrU3RhY2spOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6Okhl
YXA6Om11dGF0b3JNYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0
b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkUmFjZSk6CisgICAgICAgICog
aGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkUmFjZSk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkaWROb3RSYWNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6ZGlkTm90UmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmVwYXJlVG9QdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKwogMjAx
Ny0wMS0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAg
ICBJbXBsZW1lbnQgSW5saW5lQ2xhc3NpY1NjcmlwdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgSGVhcDo6SGVh
cChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlz
KQogICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcykpCiAgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxN
YXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVC
bG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJS
b3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtMzExLDYg
KzMxMiw3IEBAIEhlYXA6On5IZWFwKCkKICAgICAgICAgc2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0
YWNrcygpOwogICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOwog
ICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICBtX3JhY2VNYXJrU3RhY2stPmNs
ZWFyKCk7CiAgICAgCiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9sb2dpY2FsbHlFbXB0
eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveSgqdGhpcywgYmxvY2spOwpA
QCAtNTI2LDYgKzUyOCw4IEBAIHZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3Rh
cnQKICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT5jbGVhcigpOwogICAgIH0KIAorICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmFjZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKwogICAgIGJlZ2luTWFy
a2luZygpOwogCiAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CkBAIC03
ODUsMTEgKzc4OSw2IEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MK
IAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBpZiAoIW1fdmlzaXRSYWNlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZGF0YUxvZygiVW5yZXNvbHZlZCB2aXNpdCByYWNlczogIiwgbGlz
dER1bXAobV92aXNpdFJhY2VzKSwgIlxuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotICAgIAogICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0
KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90Vmlz
aXRvcnMpCkBAIC03OTcsNiArNzk2LDggQEAgdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIAogICAg
IGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcnMucmVtb3ZlQWxsKCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JhY2VNYXJrU3RhY2st
PmlzRW1wdHkoKSk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CiAgICAg
c2V0TXV0YXRvclNob3VsZEJlRmVuY2VkKE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpKTsK
QEAgLTIyNTIsMTkgKzIyNTMsMjAgQEAgdm9pZCBIZWFwOjpidWlsZENvbnN0cmFpbnRTZXQoKQog
ICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRpb24pOwogICAgIAogICAg
IG1fY29uc3RyYWludFNldC0+YWRkKAotICAgICAgICAiTW1zIiwgIk11dGF0b3IgTWFyayBTdGFj
ayIsCisgICAgICAgICJNcm1zIiwgIk11dGF0b3IrUmFjZSBNYXJrIFN0YWNrIiwKICAgICAgICAg
W3RoaXNdIChTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IsIGNvbnN0IFZpc2l0aW5nVGltZW91dCYp
IHsKICAgICAgICAgICAgIC8vIEluZGljYXRlIHRvIHRoZSBmaXhwb2ludCB0aGF0IHdlIGludHJv
ZHVjZWQgd29yayEKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gbV9tdXRhdG9yTWFya1N0YWNr
LT5zaXplKCk7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRvck1hcmtTdGFjay0+
c2l6ZSgpICsgbV9yYWNlTWFya1N0YWNrLT5zaXplKCk7CiAgICAgICAgICAgICBzbG90VmlzaXRv
ci5hZGRUb1Zpc2l0Q291bnQoc2l6ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIigiLCBzaXplLCAiKSIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVy
VG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgICAgIG1fcmFjZU1h
cmtTdGFjay0+dHJhbnNmZXJUbyhzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNrKCkpOwogICAg
ICAgICB9LAogICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJikgLT4gZG91YmxlIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX211dGF0b3JNYXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgp
OwogICAgICAgICB9LAogICAgICAgICBNYXJraW5nQ29uc3RyYWludDo6R3JleWVkQnlFeGVjdXRp
b24pOwogfQpAQCAtMjM1OSw1ICsyMzYxLDEzIEBAIHZvaWQgSGVhcDo6c2V0TXV0YXRvclNob3Vs
ZEJlRmVuY2VkKGJvb2wKICAgICBmb3IgKGJvb2wqIGNhY2hlIDogbV9tdXRhdG9yU2hvdWxkQmVG
ZW5jZWRDYWNoZXMpCiAgICAgICAgICpjYWNoZSA9IHZhbHVlOwogfQorCit2b2lkIEhlYXA6OmFk
ZFRvUmFjZU1hcmtTdGFjayhKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwtPmF0b21pY0Nv
bXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2ssIENl
bGxTdGF0ZTo6UG9zc2libHlHcmV5KSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5QmxhY2spIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3JhY2VNYXJrU3RhY2tMb2NrKTsKKyAgICAg
ICAgbV9yYWNlTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CisgICAgfQorfQogICAgIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAy
MTA2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOSw3ICsxMzksNiBAQCBwdWJsaWM6CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hp
bmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgU2xvdFZpc2l0
b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkgeyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3I7IH0KLSAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICpt
X211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlD
YWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBH
Q0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CkBAIC01MDUsNiArNTA0
LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0
eSgpOwogCisgICAgdm9pZCBhZGRUb1JhY2VNYXJrU3RhY2soSlNDZWxsKik7CisKICAgICBjb25z
dCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNpemU7CiAgICAg
Y29uc3Qgc2l6ZV90IG1fbWluQnl0ZXNQZXJDeWNsZTsKQEAgLTU0MCw3ICs1NDEsMTAgQEAgcHJp
dmF0ZToKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9y
U2xvdFZpc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0
b3JNYXJrU3RhY2s7Ci0gICAgCisKKyAgICBMb2NrIG1fcmFjZU1hcmtTdGFja0xvY2s7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJrU3RhY2s7CisKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29uc3RyYWludFNldDsKIAog
ICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5n
IHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KQEAgLTU5Nyw3ICs2MDEsNiBAQCBw
cml2YXRlOgogCiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX3dl
YWtHQ01hcHM7CiAgICAgCi0gICAgSGFzaFNldDxWaXNpdFJhY2VLZXk+IG1fdmlzaXRSYWNlczsK
ICAgICBMb2NrIG1fdmlzaXRSYWNlTG9jazsKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyMTA2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwMiwxMCArNzAyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlk
UmFjZShjb25zdCBWaXNpdFJhYwogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmlzaXRSYWNlKCkp
CiAgICAgICAgIGRhdGFMb2codG9DU3RyaW5nKCJHQyB2aXNpdCByYWNlOiAiLCByYWNlLCAiXG4i
KSk7CiAgICAgCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhoZWFwKCktPm1fdmlzaXRSYWNlTG9jayk7Ci0gICAgICAgIGhlYXAoKS0+
bV92aXNpdFJhY2VzLmFkZChyYWNlKTsKLSAgICB9CisgICAgaGVhcCgpLT5hZGRUb1JhY2VNYXJr
U3RhY2socmFjZS5jZWxsKCkpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHJldmlzaW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw4ICsxNTEsNiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBkaWRSYWNlKGNvbnN0IFZpc2l0UmFjZUtleSYpOwogICAgIHZvaWQgZGlk
UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJlYXNvbikgeyBkaWRSYWNlKFZpc2l0UmFj
ZUtleShjZWxsLCByZWFzb24pKTsgfQotICAgIHZvaWQgZGlkTm90UmFjZShjb25zdCBWaXNpdFJh
Y2VLZXkmKTsKLSAgICB2b2lkIGRpZE5vdFJhY2UoSlNDZWxsKiBjZWxsLCBjb25zdCBjaGFyKiBy
ZWFzb24pIHsgZGlkTm90UmFjZShWaXNpdFJhY2VLZXkoY2VsbCwgcmVhc29uKSk7IH0KICAgICAK
ICAgICB2b2lkIHZpc2l0QXNDb25zdHJhaW50KGNvbnN0IEpTQ2VsbCopOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJl
dmlzaW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTggKzEwOCw0IEBAIGlubGluZSBjb25z
dCBWTSYgU2xvdFZpc2l0b3I6OnZtKCkgY29uc3QKICAgICByZXR1cm4gKm1faGVhcC5tX3ZtOwog
fQogCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZGlkTm90UmFjZShjb25zdCBWaXNpdFJhY2VL
ZXkmIHJhY2UpCi17Ci0gICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKSB7Ci0gICAgICAgIC8vIFRo
aXMgaXMgdGhlIGZpcnN0IHZpc2l0IHNvIHdlIGRvbid0IG5lZWQgdG8gcmVtb3ZlIGFueXRoaW5n
LgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soaGVhcCgpLT5tX3Zpc2l0UmFjZUxvY2spOwotICAgIGhlYXAoKS0+bV92aXNpdFJhY2VzLnJl
bW92ZShyYWNlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMTA2NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw5ICsxMjAsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
CiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJhY2VSZWFzb24gPSAiSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5IjsKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IHZpc2l0QnV0dGVyZmx5SW1wbCh2
aXNpdG9yKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICB2aXNpdG9yLmRpZE5vdFJhY2UodGhp
cywgcmFjZVJlYXNvbik7Ci0gICAgZWxzZQorICAgIGlmICghcmVzdWx0KQogICAgICAgICB2aXNp
dG9yLmRpZFJhY2UodGhpcywgcmFjZVJlYXNvbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTE4OCw3ICsxODYsNyBAQCBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZSogSlNPYmplY3Q6OnZpc2l0
CiAgICAgLy8KICAgICAvLyBCRUZPUkU6IFNjYW4gdGhlIG9iamVjdCB3aXRoIHRoZSBzdHJ1Y3R1
cmUgYW5kIGJ1dHRlcmZseSAqYmVmb3JlKiB0aGUgbXV0YXRvcidzIHRyYW5zaXRpb24uCiAgICAg
Ly8gQUZURVI6IFNjYW4gdGhlIG9iamVjdCB3aXRoIHRoZSBzdHJ1Y3R1cmUgYW5kIGJ1dHRlcmZs
eSAqYWZ0ZXIqIHRoZSBtdXRhdG9yJ3MgdHJhbnNpdGlvbi4KLSAgICAvLyBJR05PUkU6IEdpdmUg
dXAsIHNvIGxvbmcgYXMgdGhlIHdyaXRlIGJhcnJpZXIgb24gUHV0TmV3U3RydWN0dXJlIGV4ZWN1
dGVzIGFmdGVyIFJlYWRTdHJ1Y3R1cmVFYXJseS4KKyAgICAvLyBJR05PUkU6IElnbm9yZSB0aGUg
YnV0dGVyZmx5IGFuZCBjYWxsIGRpZFJhY2UgdG8gc2NoZWR1bGUgdXMgdG8gYmUgcmV2aXN0ZWQg
YWdhaW4gaW4gdGhlIGZ1dHVyZS4KICAgICAvLwogICAgIC8vIEluIG90aGVyIHdvcmRzLCB0aGUg
Y29sbGVjdG9yIHdpbGwgbmV2ZXIgc2VlIGFueSB0b3JuIHN0cnVjdHVyZS9idXR0ZXJmbHkgbWl4
LiBJdCB3aWxsCiAgICAgLy8gYWx3YXlzIHNlZSB0aGUgc3RydWN0dXJlL2J1dHRlcmZseSBiZWZv
cmUgdGhlIHRyYW5zaXRpb24gb3IgYWZ0ZXIgYnV0IG5vdCBpbiBiZXR3ZWVuLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlz
aW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgQUxXQVlTX0lOTElORSBQ
cm9wZXJ0eU9mZnNldCBKU09iamVjdDo6cAogICAgICAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2Fw
YWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgICAgICAgICBudWtlU3RydWN0
dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmVJRCwgYnV0dGVyZmx5KTsKICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPnNldExhc3RPZmZzZXQobmV3TGFzdE9mZnNldCk7CisgICAgICAg
ICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgICAgICAgICBzZXRTdHJ1
Y3R1cmVJRERpcmVjdGx5KHN0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c2V0TGFzdE9mZnNldChuZXdMYXN0T2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzkzLDEwICs3OTMsMTQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsK
ICAgICB9CiAgICAgCi0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob2JqZWN0KTsKICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG9iamVjdC0+c2V0U3RydWN0dXJlSUREaXJlY3RseShp
ZCgpKTsKLSAgICAKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByb2JhYmx5IG5vIGxvbmdlciBu
ZWVkZWQgc2luY2Ugd2UgaGF2ZSBhIHN0cm9uZ2VyIG1lY2hhbmlzbQorICAgIC8vIGZvciBkZXRl
Y3RpbmcgcmFjZXMgYW5kIHJlc2Nhbm5pbmcgYW4gb2JqZWN0LgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY5ODkKKyAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvYmplY3QpOworCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAK
</data>
<flag name="review"
          id="320824"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298729</attachid>
            <date>2017-01-12 16:09:20 -0800</date>
            <delta_ts>2017-01-12 19:13:14 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>12578</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwNjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE3LTAxLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IENvbmN1cnJlbnQgR0MgaGFzIGEgYnVnIHdoZXJlIHdlIHdvdWxkIGRldGVjdCBhIHJhY2UgYnV0
IGZhaWwgdG8gcmVzY2FuIHRoZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Njk2MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk5ODM1
MjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8gYW5kIE1hcmsgTGFtLgorCisg
ICAgICAgIFdlIGhhdmUgY29kZSBsaWtlIHRoaXMgaW4gSlNDOgorICAgICAgICAKKyAgICAgICAg
YGBgCisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5l
U3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIG5ld091dE9mTGluZUNhcGFjaXR5KTsK
KyAgICAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlSUQsIGJ1
dHRlcmZseSk7CisgICAgICAgIHN0cnVjdHVyZS0+c2V0TGFzdE9mZnNldChuZXdMYXN0T2Zmc2V0
KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0U3RydWN0dXJl
SUREaXJlY3RseShzdHJ1Y3R1cmVJRCk7CisgICAgICAgIGBgYAorICAgICAgICAKKyAgICAgICAg
Tm90ZSB0aGF0IHRoZSBjb2xsZWN0b3IgY291bGQgZGV0ZWN0IGEgcmFjZSBoZXJlLCB3aGljaCBz
b21ldGltZXMKKyAgICAgICAgaW5jb3JyZWN0bHkgY2F1c2VkIHVzIHRvIG5vdCB2aXNpdCB0aGUg
b2JqZWN0IGFnYWluLgorICAgICAgICAKKyAgICAgICAgTXV0YXRvciBUaHJlYWQ6IE0sIENvbGxl
Y3RvciBUaHJlYWQ6IEMsIGFzc3VtaW5nIHNlcXVlbnRpYWwgY29uc2lzdGVuY3kgdmlhCisgICAg
ICAgIHByb3BlciBiYXJyaWVyczoKKyAgICAgICAgCisgICAgICAgIE06IGFsbG9jYXRlIG5ldyBi
dXR0ZXJmbHkKKyAgICAgICAgTTogU2V0IG51a2VkIHN0cnVjdHVyZSBJRAorICAgICAgICBNOiBT
ZXQgYnV0dGVyZmx5ICh0aGlzIGRvZXMgYSBiYXJyaWVyKQorICAgICAgICBDOiBTdGFydCBzY2Fu
bmluZyBPCisgICAgICAgIEM6IGxvYWQgc3RydWN0dXJlIElECisgICAgICAgIEM6IFNlZSBpdCdz
IG51a2VkIGFuZCBiYWlsLCAod2UgdXNlZCB0byByZWx5IG9uIGEgd3JpdGUgYmFycmllciB0byBy
ZXNjYW4pLgorICAgICAgICAKKyAgICAgICAgV2Ugc29tZXRpbWVzIG5ldmVyIHJlc2Nhbm5lZCBo
ZXJlIGJlY2F1c2Ugd2Ugd2VyZSBjYWxsaW5nCisgICAgICAgIHNldFN0cnVjdHVyZUlERGlyZWN0
bHkgd2hpY2ggZG9lc24ndCBkbyBhIHdyaXRlIGJhcnJpZXIuCisgICAgICAgIChOb3RlLCB0aGUg
cGxhY2VzIHRoYXQgZG8gdGhpcyBidXQgY2FsbCBzZXRTdHJ1Y3R1cmUgd2VyZQorICAgICAgICBP
SyBiZWNhdXNlIHNldFN0cnVjdHVyZSB3aWxsIHBlcmZvcm0gYSB3cml0ZSBiYXJyaWVyLikKKyAg
ICAgICAgCisgICAgICAgIChUaGlzIHNhbWUgaXNzdWUgYWxzbyBleGlzdGVkIGluIHBsYWNlcyB3
aGVyZSB0aGUgY29sbGVjdG9yIHRocmVhZAorICAgICAgICBkZXRlY3RlZCByYWNlcyBmb3IgU3Ry
dWN0dXJlOjptX29mZnNldCwgYnV0IHBsYWNlcyB0aGF0IGNoYW5nZWQKKyAgICAgICAgU3RydWN0
dXJlOjptX29mZnNldCBkaWRuJ3QgcGVyZm9ybSBhIHdyaXRlIGJhcnJpZXIgb24gdGhlIG9iamVj
dAorICAgICAgICBhZnRlciBjaGFuZ2luZyBpdHMgU3RydWN0dXJlJ3MgbV9vZmZzZXQuKQorICAg
ICAgICAKKyAgICAgICAgVG8gcHJldmVudCBzdWNoIGNvZGUgZnJvbSByZXF1aXJpbmcgZXZlcnkg
Y2FsbCBzaXRlIHRvIHBlcmZvcm0KKyAgICAgICAgYSB3cml0ZSBiYXJyaWVyIG9uIHRoZSBvYmpl
Y3QsIEkndmUgY2hhbmdlZCB0aGUgY29sbGVjdG9yIGNvZGUKKyAgICAgICAgdG8ga2VlcCBhIHN0
YWNrIG9mIGNlbGxzIHRvIGJlIHJldmlzaXRlZCBkdWUgdG8gcmFjZXMuIFRoaXMgc3RhY2sKKyAg
ICAgICAgaXMgdGhlbiBjb25zdWx0ZWQgd2hlbiB3ZSBkbyBtYXJraW5nLiBCZWNhdXNlIHN1Y2gg
cmFjZXMgYXJlIHJhcmUsCisgICAgICAgIHdlIGhhdmUgYSBzaW5nbGUgc3RhY2sgb24gSGVhcCB0
aGF0IGlzIGd1YXJkZWQgYnkgYSBsb2NrLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6On5IZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQpOgorICAgICAgICAoSlNDOjpIZWFwOjpl
bmRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YnVpbGRDb25zdHJhaW50U2V0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6YWRkVG9SYWNlTWFya1N0YWNrKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yU2xvdFZpc2l0b3IpOgorICAgICAg
ICAoSlNDOjpIZWFwOjptdXRhdG9yTWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFJhY2UpOgor
ICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmRpZFJhY2UpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZGlkTm90UmFjZSk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OmRpZE5vdFJhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHlJbXBsKToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJlcGFyZVRv
UHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZSk6CisKIDIwMTctMDEtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgSW1wbGVtZW50IElubGluZUNsYXNzaWNTY3JpcHQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMTA2NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw3IEBA
IEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fbWFjaGluZVRo
cmVhZHModGhpcykKICAgICAsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1
ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQogICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3JhY2VNYXJrU3RhY2soc3RkOjpt
YWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAg
ICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwg
bV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkK
QEAgLTMxMSw2ICszMTIsNyBAQCBIZWFwOjp+SGVhcCgpCiAgICAgICAgIHNsb3RWaXNpdG9yLT5j
bGVhck1hcmtTdGFja3MoKTsKICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtT
dGFja3MoKTsKICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7CisgICAgbV9yYWNlTWFy
a1N0YWNrLT5jbGVhcigpOwogICAgIAogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA6IG1fbG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2tzKQogICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKnRoaXMs
IGJsb2NrKTsKQEAgLTUyNiw2ICs1MjgsOCBAQCB2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRv
dWJsZSBnY1N0YXJ0CiAgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKICAgICB9
CiAKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JhY2VNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisKICAg
ICBiZWdpbk1hcmtpbmcoKTsKIAogICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IGZh
bHNlOwpAQCAtNzg1LDExICs3ODksNiBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhk
b3VibGUgZ2NTCiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgaWYgKCFtX3Zpc2l0
UmFjZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRhdGFMb2coIlVucmVzb2x2ZWQgdmlzaXQgcmFj
ZXM6ICIsIGxpc3REdW1wKG1fdmlzaXRSYWNlcyksICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFs
bGVsU2xvdFZpc2l0b3JzKQpAQCAtNzk3LDYgKzc5Niw4IEBAIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiAKICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKTsKICAgICBtX3dlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV9yYWNl
TWFya1N0YWNrLT5pc0VtcHR5KCkpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwogICAgIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChPcHRpb25zOjpmb3JjZUZlbmNlZEJh
cnJpZXIoKSk7CkBAIC0yMjUyLDE5ICsyMjUzLDIwIEBAIHZvaWQgSGVhcDo6YnVpbGRDb25zdHJh
aW50U2V0KCkKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXllZEJ5RXhlY3V0aW9uKTsK
ICAgICAKICAgICBtX2NvbnN0cmFpbnRTZXQtPmFkZCgKLSAgICAgICAgIk1tcyIsICJNdXRhdG9y
IE1hcmsgU3RhY2siLAorICAgICAgICAiTXJtcyIsICJNdXRhdG9yK1JhY2UgTWFyayBTdGFjayIs
CiAgICAgICAgIFt0aGlzXSAoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yLCBjb25zdCBWaXNpdGlu
Z1RpbWVvdXQmKSB7CiAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0byB0aGUgZml4cG9pbnQgdGhh
dCB3ZSBpbnRyb2R1Y2VkIHdvcmshCi0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fbXV0YXRv
ck1hcmtTdGFjay0+c2l6ZSgpOworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBtX211dGF0b3JN
YXJrU3RhY2stPnNpemUoKSArIG1fcmFjZU1hcmtTdGFjay0+c2l6ZSgpOwogICAgICAgICAgICAg
c2xvdFZpc2l0b3IuYWRkVG9WaXNpdENvdW50KHNpemUpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIoIiwg
c2l6ZSwgIikiKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNr
LT50cmFuc2ZlclRvKHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgICAgICAg
ICBtX3JhY2VNYXJrU3RhY2stPnRyYW5zZmVyVG8oc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFj
aygpKTsKICAgICAgICAgfSwKICAgICAgICAgW3RoaXNdIChTbG90VmlzaXRvciYpIC0+IGRvdWJs
ZSB7Ci0gICAgICAgICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9tdXRhdG9yTWFya1N0YWNrLT5zaXplKCkgKyBtX3JhY2VNYXJrU3Rh
Y2stPnNpemUoKTsKICAgICAgICAgfSwKICAgICAgICAgTWFya2luZ0NvbnN0cmFpbnQ6OkdyZXll
ZEJ5RXhlY3V0aW9uKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDIxMDY3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw2IEBAIHB1YmxpYzoKICAgICBNYWNoaW5lVGhyZWFkcyYg
bWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICBTbG90
VmlzaXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsgfQotICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1
cm4gKm1fbXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rp
dml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTU0MCw3
ICs1MzksMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0
b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFj
a0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7Ci0gICAgCisKKyAgICBMb2NrIG1fcmFjZU1hcmtT
dGFja0xvY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3JhY2VNYXJr
U3RhY2s7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnRTZXQ+IG1fY29u
c3RyYWludFNldDsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBw
YXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KQEAgLTU5
Nyw3ICs1OTksNiBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDx2b2lkKiwgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+PiBtX3dlYWtHQ01hcHM7CiAgICAgCi0gICAgSGFzaFNldDxWaXNpdFJhY2VLZXk+
IG1fdmlzaXRSYWNlczsKICAgICBMb2NrIG1fdmlzaXRSYWNlTG9jazsKIAogICAgIExvY2sgbV9t
YXJraW5nTXV0ZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCShyZXZpc2lvbiAyMTA2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhlYXA6Omlz
TWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkp
OwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OlBvc3NpYmx5R3Jl
eSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAgICAKQEAgLTcwMiwxMCAr
NzAxLDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFJhY2UoY29uc3QgVmlzaXRSYWMKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZVZpc2l0UmFjZSgpKQogICAgICAgICBkYXRhTG9nKHRvQ1N0cmlu
ZygiR0MgdmlzaXQgcmFjZTogIiwgcmFjZSwgIlxuIikpOwogICAgIAotICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soaGVhcCgpLT5tX3Zp
c2l0UmFjZUxvY2spOwotICAgICAgICBoZWFwKCktPm1fdmlzaXRSYWNlcy5hZGQocmFjZSk7Ci0g
ICAgfQorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soaGVhcCgpLT5tX3JhY2VNYXJrU3RhY2tM
b2NrKTsKKyAgICBKU0NlbGwqIGNlbGwgPSByYWNlLmNlbGwoKTsKKyAgICBjZWxsLT5zZXRDZWxs
U3RhdGUoQ2VsbFN0YXRlOjpQb3NzaWJseUdyZXkpOworICAgIGhlYXAoKS0+bV9yYWNlTWFya1N0
YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAkocmV2aXNpb24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDggKzE1MSw2IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGRpZFJhY2UoY29uc3QgVmlzaXRSYWNlS2V5Jik7CiAgICAgdm9pZCBkaWRS
YWNlKEpTQ2VsbCogY2VsbCwgY29uc3QgY2hhciogcmVhc29uKSB7IGRpZFJhY2UoVmlzaXRSYWNl
S2V5KGNlbGwsIHJlYXNvbikpOyB9Ci0gICAgdm9pZCBkaWROb3RSYWNlKGNvbnN0IFZpc2l0UmFj
ZUtleSYpOwotICAgIHZvaWQgZGlkTm90UmFjZShKU0NlbGwqIGNlbGwsIGNvbnN0IGNoYXIqIHJl
YXNvbikgeyBkaWROb3RSYWNlKFZpc2l0UmFjZUtleShjZWxsLCByZWFzb24pKTsgfQogICAgIAog
ICAgIHZvaWQgdmlzaXRBc0NvbnN0cmFpbnQoY29uc3QgSlNDZWxsKik7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2
aXNpb24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxOCArMTA4LDQgQEAgaW5saW5lIGNvbnN0
IFZNJiBTbG90VmlzaXRvcjo6dm0oKSBjb25zdAogICAgIHJldHVybiAqbV9oZWFwLm1fdm07CiB9
CiAKLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpkaWROb3RSYWNlKGNvbnN0IFZpc2l0UmFjZUtl
eSYgcmFjZSkKLXsKLSAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spIHsKLSAgICAgICAgLy8gVGhp
cyBpcyB0aGUgZmlyc3QgdmlzaXQgc28gd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgYW55dGhpbmcu
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhoZWFwKCktPm1fdmlzaXRSYWNlTG9jayk7Ci0gICAgaGVhcCgpLT5tX3Zpc2l0UmFjZXMucmVt
b3ZlKHJhY2UpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIxMDY3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIwLDkgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQK
IHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogcmFjZVJlYXNvbiA9ICJKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkiOwogICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gdmlzaXRCdXR0ZXJmbHlJbXBsKHZp
c2l0b3IpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHZpc2l0b3IuZGlkTm90UmFjZSh0aGlz
LCByYWNlUmVhc29uKTsKLSAgICBlbHNlCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHZpc2l0
b3IuZGlkUmFjZSh0aGlzLCByYWNlUmVhc29uKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
MTg4LDcgKzE4Niw3IEBAIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlKiBKU09iamVjdDo6dmlzaXQK
ICAgICAvLwogICAgIC8vIEJFRk9SRTogU2NhbiB0aGUgb2JqZWN0IHdpdGggdGhlIHN0cnVjdHVy
ZSBhbmQgYnV0dGVyZmx5ICpiZWZvcmUqIHRoZSBtdXRhdG9yJ3MgdHJhbnNpdGlvbi4KICAgICAv
LyBBRlRFUjogU2NhbiB0aGUgb2JqZWN0IHdpdGggdGhlIHN0cnVjdHVyZSBhbmQgYnV0dGVyZmx5
ICphZnRlciogdGhlIG11dGF0b3IncyB0cmFuc2l0aW9uLgotICAgIC8vIElHTk9SRTogR2l2ZSB1
cCwgc28gbG9uZyBhcyB0aGUgd3JpdGUgYmFycmllciBvbiBQdXROZXdTdHJ1Y3R1cmUgZXhlY3V0
ZXMgYWZ0ZXIgUmVhZFN0cnVjdHVyZUVhcmx5LgorICAgIC8vIElHTk9SRTogSWdub3JlIHRoZSBi
dXR0ZXJmbHkgYW5kIGNhbGwgZGlkUmFjZSB0byBzY2hlZHVsZSB1cyB0byBiZSByZXZpc3RlZCBh
Z2FpbiBpbiB0aGUgZnV0dXJlLgogICAgIC8vCiAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZSBj
b2xsZWN0b3Igd2lsbCBuZXZlciBzZWUgYW55IHRvcm4gc3RydWN0dXJlL2J1dHRlcmZseSBtaXgu
IEl0IHdpbGwKICAgICAvLyBhbHdheXMgc2VlIHRoZSBzdHJ1Y3R1cmUvYnV0dGVyZmx5IGJlZm9y
ZSB0aGUgdHJhbnNpdGlvbiBvciBhZnRlciBidXQgbm90IGluIGJldHdlZW4uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNp
b24gMjEwNjc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNyBAQCBBTFdBWVNfSU5MSU5FIFBy
b3BlcnR5T2Zmc2V0IEpTT2JqZWN0OjpwCiAgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBh
Y2l0eSwgbmV3T3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAgICAgICAgIG51a2VTdHJ1Y3R1
cmVBbmRTZXRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZUlELCBidXR0ZXJmbHkpOwogICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZS0+c2V0TGFzdE9mZnNldChuZXdMYXN0T2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICAgICAgICAgIHNldFN0cnVj
dHVyZUlERGlyZWN0bHkoc3RydWN0dXJlSUQpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zZXRMYXN0T2Zmc2V0KG5ld0xhc3RPZmZzZXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAy
MTA2NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OTMsMTAgKzc5MywxNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0
ZXJGbGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwog
ICAgIH0KICAgICAKLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihvYmplY3QpOwogICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KGlk
KCkpOwotICAgIAorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm8gbG9uZ2VyIG5l
ZWRlZCBzaW5jZSB3ZSBoYXZlIGEgc3Ryb25nZXIgbWVjaGFuaXNtCisgICAgLy8gZm9yIGRldGVj
dGluZyByYWNlcyBhbmQgcmVzY2FubmluZyBhbiBvYmplY3QuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Njk4OQorICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKG9iamVjdCk7CisKICAgICByZXR1cm4gdGhpczsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>