<?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>135750</bug_id>
          
          <creation_ts>2014-08-08 00:50:19 -0700</creation_ts>
          <short_desc>REGRESSION(r172129): ftlopt branch merge made performance tests flakey crash</short_desc>
          <delta_ts>2014-08-18 19:32:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136055</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027813</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-08-08 00:50:19 -0700</bug_when>
    <thetext>The ftlopt branch merge (https://trac.webkit.org/changeset/172129)
made some performance tests flakey crash everywhere.

logs from the Apple ML bot:
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9681
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9687
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9689
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9691
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9692
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9695
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9696
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9697
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9698
http://build.webkit.org/builders/Apple%20MountainLion%20Release%20%28Perf%29/builds/9699

logs from the Apple Mavericks bot:
http://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Perf%29/builds/2208
http://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Perf%29/builds/2209
http://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Perf%29/builds/2219
http://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Perf%29/builds/2221

logs from the EFL bot:
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2823
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2826
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2827
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2851
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2852
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2853
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2854
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2857
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2858
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2859
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2%20%28Perf%29/builds/2860</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027814</commentid>
    <comment_count>1</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-08-08 00:55:32 -0700</bug_when>
    <thetext>Unfortunately the Apple bots don&apos;t provide crash backtrace, but EFL bots does.

After checking the history, it seems only 2 tests 
crash because of this regression:
- Dromaeo/dromaeo-object-regexp.html
- Speedometer/Full.html

Running Dromaeo/dromaeo-object-regexp.html (58 of 139)
error: Dromaeo/dromaeo-object-regexp.html
1   0x7f38ed37fee0
2   0x7f38ed714ff0
3   0x7f38ecef0e40 JSC::WatchpointSet::add(JSC::Watchpoint*)
4   0x7f38ecf85fc1 JSC::DFG::DesiredWatchpoints::reallyAdd(JSC::CodeBlock*, JSC::DFG::CommonData&amp;)
5   0x7f38ecfeedb0 JSC::DFG::Plan::reallyAdd(JSC::DFG::CommonData*)
6   0x7f38ecfeeec3 JSC::DFG::Plan::finalizeWithoutNotifyingCallback()
7   0x7f38ecfeef54 JSC::DFG::Plan::finalizeAndNotifyCallback()
8   0x7f38ed063e9e JSC::DFG::Worklist::completeAllReadyPlansForVM(JSC::VM&amp;, JSC::DFG::CompilationKey)
9   0x7f38ed10cd4e
10  0x7f388c041059

FAILED
Finished: 944.707192 s


Running Speedometer/Full.html (139 of 139)
error: Speedometer/Full.html
1   0x7f2360a632a0
2   0x7f2360dfbff0
3   0x7f23605c46a0 JSC::WatchpointSet::add(JSC::Watchpoint*)
4   0x7f236065c659 JSC::DFG::DesiredWatchpoints::reallyAdd(JSC::CodeBlock*, JSC::DFG::CommonData&amp;)
5   0x7f23606c5a10 JSC::DFG::Plan::reallyAdd(JSC::DFG::CommonData*)
6   0x7f23606c5b23 JSC::DFG::Plan::finalizeWithoutNotifyingCallback()
7   0x7f23606c5bb4 JSC::DFG::Plan::finalizeAndNotifyCallback()
8   0x7f236073d40e JSC::DFG::Worklist::completeAllReadyPlansForVM(JSC::VM&amp;, JSC::DFG::CompilationKey)
9   0x7f23607e6b7e
10  0x7f23000fdaa6

FAILED
Finished: 600.103697 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028330</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-11 14:47:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/17793974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028733</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-12 23:41:32 -0700</bug_when>
    <thetext>This crash seems to be associated with the ones that crashed in BasicRawSentinelNode called from SentinelLinkedList::push():

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x0000000110f33934 WTF::BasicRawSentinelNode&lt;JSC::Watchpoint&gt;::setPrev(WTF::BasicRawSentinelNode&lt;JSC::Watchpoint&gt;*) + 20 (SentinelLinkedList.h:59)
1   com.apple.JavaScriptCore      	0x0000000111683b4f WTF::SentinelLinkedList&lt;JSC::Watchpoint, WTF::BasicRawSentinelNode&lt;JSC::Watchpoint&gt; &gt;::push(JSC::Watchpoint*) + 479 (SentinelLinkedList.h:139)
2   com.apple.JavaScriptCore      	0x0000000111683589 JSC::WatchpointSet::add(JSC::Watchpoint*) + 185 (Watchpoint.cpp:68)
3   com.apple.JavaScriptCore      	0x0000000111683705 JSC::InlineWatchpointSet::add(JSC::Watchpoint*) + 37 (Watchpoint.cpp:96)
4   com.apple.JavaScriptCore      	0x00000001110706d1 JSC::DFG::GenericSetAdaptor&lt;JSC::InlineWatchpointSet&gt;::add(JSC::CodeBlock*, JSC::InlineWatchpointSet*, JSC::Watchpoint*) + 33 (DFGDesiredWatchpoints.h:48)
5   com.apple.JavaScriptCore      	0x000000011106cb85 JSC::DFG::GenericDesiredWatchpoints&lt;JSC::InlineWatchpointSet, JSC::DFG::GenericSetAdaptor&lt;JSC::InlineWatchpointSet&gt; &gt;::reallyAdd(JSC::CodeBlock*, JSC::DFG::CommonData&amp;) + 277 (DFGDesiredWatchpoints.h:87)
6   com.apple.JavaScriptCore      	0x000000011106c641 JSC::DFG::DesiredWatchpoints::reallyAdd(JSC::CodeBlock*, JSC::DFG::CommonData&amp;) + 81 (DFGDesiredWatchpoints.cpp:77)
7   com.apple.JavaScriptCore      	0x000000011111f1c7 JSC::DFG::Plan::reallyAdd(JSC::DFG::CommonData*) + 71 (DFGPlan.cpp:427)
8   com.apple.JavaScriptCore      	0x000000011111f3f9 JSC::DFG::Plan::finalizeWithoutNotifyingCallback() + 249 (DFGPlan.cpp:463)
9   com.apple.JavaScriptCore      	0x000000011111f474 JSC::DFG::Plan::finalizeAndNotifyCallback() + 84 (DFGPlan.cpp:470)
10  com.apple.JavaScriptCore      	0x00000001111ce4cb JSC::DFG::Worklist::completeAllReadyPlansForVM(JSC::VM&amp;, JSC::DFG::CompilationKey) + 315 (DFGWorklist.cpp:188)
11  com.apple.JavaScriptCore      	0x000000011135ce3e operationOptimize + 974 (JITOperations.cpp:1102)
12  ???                           	0x00003a5d3941bbfc 0 + 64172066978812
13  com.apple.JavaScriptCore      	0x00000001114b4a2a callToJavaScript + 346
...

For example, http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r172513%20(6220)/js/getter-setter-gc-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028737</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-12 23:47:25 -0700</bug_when>
    <thetext>I was able to get the crash to manifest fairly immediately when I run Safari as follows:

$ JSC_useFTLJIT=false JSC_reportCompileTimes=true JSC_slowPathAllocsBetweenGCs=10 JSC_bytecodeRangeToDFGCompile=42:67 ./Tools/Scripts/run-safari --release

And load OpenSource/PerformanceTests/Speedometer/Full.html but have doctored OpenSource/PerformanceTests/Speedometer/resources/tests.js to only run the last test.

However, if I use a white list for functions to DFG compile (with the list from the functions that are generated from the above repro case), the issue stops reproducing.  Similarly, if I change the GC frequency, the issue also stops reproducing.

If I run with a debug build, the issue also stops reproducing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028740</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-13 00:00:05 -0700</bug_when>
    <thetext>The next step I took is to add memory fences and release asserts to the SentinelLinkedList, which led me to adding these fences and asserts to the HandleSet and HandleNode classes since HandleSet uses the SentinelLinkedList.  With these traps, I saw some an interesting crash here:

(lldb) bt 10
* thread #1: tid = 0x6971ba, 0x00000001072f187a JavaScriptCore`WTFCrash + 42 at Assertions.cpp:329, queue = &apos;com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
    frame #0: 0x00000001072f187a JavaScriptCore`WTFCrash + 42 at Assertions.cpp:329
    frame #1: 0x0000000106ee41f2 JavaScriptCore`JSC::HandleNode::validate(this=0x0000000116cb8020) const + 82 at HandleSet.cpp:41
    frame #2: 0x0000000106afaa57 JavaScriptCore`WTF::SentinelLinkedList&lt;JSC::HandleNode, JSC::HandleNode&gt;::push(this=0x00007f7fab0517d8, node=0x0000000116cb8068) + 247 at SentinelLinkedList.h:192
    frame #3: 0x0000000106ee47d1 JavaScriptCore`JSC::HandleSet::writeBarrier(this=0x00007f7fab0517c0, slot=0x0000000116cb8068, value=0x00007fff5afd5078) + 337 at HandleSet.cpp:101
    frame #4: 0x00000001072a3543 JavaScriptCore`JSC::Strong&lt;JSC::Structure&gt;::set(this=0x00007f7fab051ab0, externalType=0x0000000116ffff20) + 147 at Strong.h:137
    frame #5: 0x0000000107299bef JavaScriptCore`JSC::Strong&lt;JSC::Structure&gt;::set(this=0x00007f7fab051ab0, vm=0x00007f7fab046800, value=0x0000000116ffff20) + 111 at StrongInlines.h:52
    frame #6: 0x0000000107294b45 JavaScriptCore`JSC::VM::VM(this=0x00007f7fab046800, vmType=Default, heapType=LargeHeap) + 3749 at VM.cpp:208
    frame #7: 0x0000000107293c91 JavaScriptCore`JSC::VM::VM(this=0x00007f7fab046800, vmType=Default, heapType=LargeHeap) + 33 at VM.cpp:291
    frame #8: 0x000000010729773c JavaScriptCore`JSC::VM::create(heapType=LargeHeap) + 60 at VM.cpp:346
    frame #9: 0x000000010729777a JavaScriptCore`JSC::VM::createLeaked(heapType=LargeHeap) + 26 at VM.cpp:351
    ...

The interesting thing here is that HandleSet::writeBarrier() will push a HandleSlot (from a Strong ref) onto a SentinelLinkedList.  However, a Strong ref only has storage for a single JSValue, but the SentinelLinkedList expects at least 2 pointers for next and pref pointers.  The SentinelLinkedList is expecting a node of shape BasicRawSentinelNode.  For the HandleSet, the HandleNode satisfies that requirement.  However, HandleSet::writeBarrier() is casting a HandleSlot* into a HandleNode* and pushing it onto the SentinelLinkedList.  When the SentinelLinkedList sets the node&apos;s prev and next pointers, it will smash memory.  The fences and assertions I added basically detected this issue.

It seems strange that this issue has not caused more havoc sooner.  I will double check the code and my reasoning in case I made a mistake.  I&apos;m also not sure if this is the only issue at play here because we haven&apos;t even gotten to WatchpointSets yet.  Regardless, I will need to resolve this immediate issue before I can continue testing for other scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028813</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-13 09:58:00 -0700</bug_when>
    <thetext>Looks like there is an error in my analysis so far.  The missing piece of info is that Strong refs are allocated from HandleNodes and hence should have the proper size to be used by HandleSets.  My checksum test on the HandleNodes did not account for its JSValue field being modified directly by clients (via a HandleSlot) without going thru the HandleNode methods.  Will update and continue with testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029187</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-14 13:07:54 -0700</bug_when>
    <thetext>I have evidence that at least part of the issue is that DFG::DesiredWatchpoints::m_sets is holding onto WatchpointSet pointers without using a RefPtr.  WatchpointSet implements ThreadSafeRefCounted&lt;WatchpointSet&gt;.  When the original owner of the WatchpointSet destructs, so goes the WatchpointSet.  The DFG::DesiredWatchpoints::m_sets would be left holding a dangling pointer, and using it results in smashing memory and/or reading from freed memory.

Now looking into what the proper fix should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029295</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-14 19:42:17 -0700</bug_when>
    <thetext>Turns out it wasn&apos;t that difficult to change DFG:;DesiredWatchpoints::m_set to be of type GenericDesiredWatchpoints&lt;RefPtr&lt;WatchpointSet&gt;&gt; instead of GenericDesiredWatchpoints&lt;WatchpointSet*&gt;.  With that change, the SentinelLinkedList crashes no longer manifest.

Currently prepping for a performance test.  Will upload the patch once the perf test is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029297</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-14 20:32:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I have evidence that at least part of the issue is that DFG::DesiredWatchpoints::m_sets is holding onto WatchpointSet pointers without using a RefPtr.  WatchpointSet implements ThreadSafeRefCounted&lt;WatchpointSet&gt;.  When the original owner of the WatchpointSet destructs, so goes the WatchpointSet.  The DFG::DesiredWatchpoints::m_sets would be left holding a dangling pointer, and using it results in smashing memory and/or reading from freed memory.

Here&apos;s the evidence I spoke of above:
I basically added prints in the WatchpointSet constructor and destructor, and set up lldb to automatically dump the backtrace when the relevant WatchpointSet destructor is called.  I also have a lot of debug code that asserts that we&apos;re not accessing a WatchpointSet that has been destructed.  At the point of the assertion failure, I confirmed that we are indeed accessing a destructed WatchpointSet.  I did this by having its destructor set some fields to 0xdead... values, and confirmed that I am seeing these 0xdead... values at the assertion failure.

For there, I have the this pointer of the destructed WatchpointSet, and search backwards in the lldb buffer to find the backtrace when the WatchpointSet was destructed.  I also searched the stdout output for my printfs that indicate that the WatchpointSet has been destructed.

Here&apos;s the backtrace at the point of WatchpointSet destruction:

* thread #1: tid = 0x10b48c, 0x000000010fdb6e44 JavaScriptCore`JSC::WatchpointSet::~WatchpointSet(this=0x00007fd884893220) + 68 at Watchpoint.cpp:59, queue = &apos;com.apple.main-thread, stop reason = breakpoint 4.1
    frame #0: 0x000000010fdb6e44 JavaScriptCore`JSC::WatchpointSet::~WatchpointSet(this=0x00007fd884893220) + 68 at Watchpoint.cpp:59
    frame #1: 0x000000010fdb6df5 JavaScriptCore`JSC::WatchpointSet::~WatchpointSet(this=0x00007fd884893220) + 21 at Watchpoint.cpp:56

    frame #2: 0x000000010f5c4c59 JavaScriptCore`WTF::ThreadSafeRefCounted&lt;JSC::WatchpointSet&gt;::deref(this=0x00007fd884893220) + 73 at ThreadSafeRefCounted.h:112
    frame #3: 0x000000010f5c4c09 JavaScriptCore`void WTF::derefIfNotNull&lt;JSC::WatchpointSet&gt;(ptr=0x00007fd884893220) + 57 at PassRefPtr.h:39
    frame #4: 0x000000010f5c50c8 JavaScriptCore`WTF::RefPtr&lt;JSC::WatchpointSet&gt;::~RefPtr(this=0x00007fd884890398) + 24 at RefPtr.h:55
    frame #5: 0x000000010f5c50a5 JavaScriptCore`WTF::RefPtr&lt;JSC::WatchpointSet&gt;::~RefPtr(this=0x00007fd884890398) + 21 at RefPtr.h:55
    frame #6: 0x000000010fd799ac JavaScriptCore`WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt;::~KeyValuePair(this=0x00007fd884890390) + 28 at HashTraits.h:169
    frame #7: 0x000000010fd79985 JavaScriptCore`WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt;::~KeyValuePair(this=0x00007fd884890390) + 21 at HashTraits.h:169

    frame #8: 0x000000010fd79948 JavaScriptCore`WTF::HashTable&lt;int, WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, WTF::IntHash&lt;int&gt;, WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;::KeyValuePairTraits, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt; &gt;::deallocateTable(table=0x00007fd884890340, size=8) + 88 at HashTable.h:1078
    frame #9: 0x000000010fd79f0c JavaScriptCore`WTF::HashTable&lt;int, WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, WTF::IntHash&lt;int&gt;, WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;::KeyValuePairTraits, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt; &gt;::~HashTable(this=0x00007fd884892e10) + 60 at HashTable.h:353
    frame #10: 0x000000010fd79ec5 JavaScriptCore`WTF::HashTable&lt;int, WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, WTF::IntHash&lt;int&gt;, WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;::KeyValuePairTraits, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt; &gt;::~HashTable(this=0x00007fd884892e10) + 21 at HashTable.h:350
    frame #11: 0x000000010fd79ea5 JavaScriptCore`WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;::~HashMap(this=0x00007fd884892e10) + 21 at HashMap.h:36
    frame #12: 0x000000010fd79e55 JavaScriptCore`WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;::~HashMap(this=0x00007fd884892e10) + 21 at HashMap.h:36
    frame #13: 0x000000010fd7fdc8 JavaScriptCore`JSC::StructureRareData::~StructureRareData() [inlined] std::__1::default_delete&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt; &gt;::operator(this=0x00000001182ea698, this=0x00000001182ea698, __ptr=0x00007fd884892e10)(WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;*) const + 30 at memory:2488
    frame #14: 0x000000010fd7fdaa JavaScriptCore`JSC::StructureRareData::~StructureRareData() [inlined] std::__1::unique_ptr&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, std::__1::default_delete&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt; &gt; &gt;::reset(this=0x00000001182ea698, __p=0x0000000000000000) + 80 at memory:2687
    frame #15: 0x000000010fd7fd5a JavaScriptCore`JSC::StructureRareData::~StructureRareData() [inlined] std::__1::unique_ptr&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, std::__1::default_delete&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt; &gt; &gt;::~unique_ptr(this=0x00000001182ea698) at memory:2655
    frame #16: 0x000000010fd7fd5a JavaScriptCore`JSC::StructureRareData::~StructureRareData() [inlined] std::__1::unique_ptr&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt;, std::__1::default_delete&lt;WTF::HashMap&lt;int, WTF::RefPtr&lt;JSC::WatchpointSet&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;JSC::WatchpointSet&gt; &gt; &gt; &gt; &gt;::~unique_ptr(this=0x00000001182ea698) at memory:2655

    frame #17: 0x000000010fd7fd5a JavaScriptCore`JSC::StructureRareData::~StructureRareData(this=0x00000001182ea670) + 74 at StructureRareData.h:39
    frame #18: 0x000000010fd7f825 JavaScriptCore`JSC::StructureRareData::~StructureRareData(this=0x00000001182ea670) + 21 at StructureRareData.h:39
    frame #19: 0x000000010fd7f2a5 JavaScriptCore`JSC::StructureRareData::destroy(cell=0x00000001182ea670) + 21 at StructureRareData.cpp:51

    frame #20: 0x000000010fc04a65 JavaScriptCore`void JSC::MarkedBlock::callDestructor&lt;(this=0x00000001182e0000, cell=0x00000001182ea670)1&gt;(JSC::JSCell*) + 165 at MarkedBlock.cpp:68
    frame #21: 0x000000010fc0495b JavaScriptCore`JSC::MarkedBlock::FreeList JSC::MarkedBlock::specializedSweep&lt;(this=0x00000001182e0000)3, (JSC::MarkedBlock::SweepMode)0, (JSC::MarkedBlock::DestructorType)1&gt;() + 235 at MarkedBlock.cpp:92
    frame #22: 0x000000010fc0320e JavaScriptCore`JSC::MarkedBlock::FreeList JSC::MarkedBlock::sweepHelper&lt;(this=0x00000001182e0000, sweepMode=SweepOnly)1&gt;(JSC::MarkedBlock::SweepMode) + 302 at MarkedBlock.cpp:146
    frame #23: 0x000000010fc02b5c JavaScriptCore`JSC::MarkedBlock::sweep(this=0x00000001182e0000, sweepMode=SweepOnly) + 188 at MarkedBlock.cpp:122
    frame #24: 0x000000010fc08461 JavaScriptCore`JSC::ZombifySweep::operator(this=0x00007fff58019ce0, block=0x00000001182e0000)(JSC::MarkedBlock*) + 49 at MarkedSpace.h:70
    frame #25: 0x000000010fc083c6 JavaScriptCore`void JSC::MarkedAllocator::forEachBlock&lt;JSC::ZombifySweep&gt;(this=0x00007fd883033ba0, functor=0x00007fff58019ce0) + 86 at MarkedAllocator.h:138
    frame #26: 0x000000010fc082aa JavaScriptCore`JSC::ZombifySweep::ReturnType JSC::MarkedSpace::forEachBlock&lt;JSC::ZombifySweep&gt;(this=0x00007fd883030328, functor=0x00007fff58019ce0) + 586 at MarkedSpace.h:269
    frame #27: 0x000000010fc06029 JavaScriptCore`JSC::ZombifySweep::ReturnType JSC::MarkedSpace::forEachBlock&lt;JSC::ZombifySweep&gt;(this=0x00007fd883030328) + 25 at MarkedSpace.h:280
    frame #28: 0x000000010fc050ff JavaScriptCore`JSC::MarkedSpace::zombifySweep(this=0x00007fd883030328) + 79 at MarkedSpace.cpp:133
    frame #29: 0x000000010f9f629f JavaScriptCore`JSC::Heap::zombifyDeadObjects(this=0x00007fd883030018) + 79 at Heap.cpp:1354
    frame #30: 0x000000010f9f5f89 JavaScriptCore`JSC::Heap::didFinishCollection(this=0x00007fd883030018, gcStartTime=102700.874627688) + 249 at Heap.cpp:1229
    frame #31: 0x000000010f9f54f1 JavaScriptCore`JSC::Heap::collect(this=0x00007fd883030018, collectionType=FullCollection) + 753 at Heap.cpp:1024
    frame #32: 0x000000010f9f51a4 JavaScriptCore`JSC::Heap::collectAllGarbage(this=0x00007fd883030018) + 52 at Heap.cpp:958
    frame #33: 0x000000010fc0052c JavaScriptCore`JSC::MarkedAllocator::doTestCollectionsIfNeeded(this=0x00007fd883030460) + 92 at MarkedAllocator.cpp:155
    frame #34: 0x000000010fbffe83 JavaScriptCore`JSC::MarkedAllocator::allocateSlowCase(this=0x00007fd883030460, bytes=64) + 99 at MarkedAllocator.cpp:165
    frame #35: 0x000000010f5b33bf JavaScriptCore`JSC::MarkedAllocator::allocate(this=0x00007fd883030460, bytes=64) + 79 at MarkedAllocator.h:95
    frame #36: 0x000000010f5d5149 JavaScriptCore`JSC::MarkedSpace::allocateWithNormalDestructor(this=0x00007fd883030328, bytes=64) + 41 at MarkedSpace.h:251
    frame #37: 0x000000010f5d5116 JavaScriptCore`JSC::Heap::allocateWithNormalDestructor(this=0x00007fd883030018, bytes=64) + 118 at HeapInlines.h:187
    frame #38: 0x000000010f6acbd7 JavaScriptCore`void* JSC::allocateCell&lt;JSC::JSFunction&gt;(heap=0x00007fd883030018, size=64) + 151 at JSCellInlines.h:123
    frame #39: 0x000000010f6ac6af JavaScriptCore`void* JSC::allocateCell&lt;JSC::JSFunction&gt;(heap=0x00007fd883030018) + 31 at JSCellInlines.h:137
    frame #40: 0x000000010f6a8a27 JavaScriptCore`JSC::JSFunction::create(vm=0x00007fd883030000, executable=0x000000011a5fef70, scope=0x00000001182be270) + 39 at JSFunction.h:65
    frame #41: 0x000000010f834184 JavaScriptCore`operationNewFunctionNoCheck(exec=0x00007fff5801a060, functionExecutable=0x000000011a5fef70) + 164 at DFGOperations.cpp:823
    frame #42: 0x000043a38dc3b208
    frame #43: 0x000043a38dc1e307
    frame #44: 0x000043a38dc4d1f1
    frame #45: 0x000043a38dc1ed59
    frame #46: 0x000043a38dc505b1
    frame #47: 0x000043a38dc1ed59
    ...

Note that  the WatchpointSet came from a HashMap that was in a StructureRareData.  The only HashMap of WatchpointSets in StructureRareData is this:

    typedef HashMap&lt;PropertyOffset, RefPtr&lt;WatchpointSet&gt;, WTF::IntHash&lt;PropertyOffset&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;PropertyOffset&gt;&gt; PropertyWatchpointMap;
    std::unique_ptr&lt;PropertyWatchpointMap&gt; m_replacementWatchpointSets;

This gives me confirmation that the destructed WatchpointSet came from the StructureRareData.  However, I haven&apos;t figured out how this WatchpointSet got added to the DFGPlan&apos;s DesiredWatchpoints::m_sets.  I&apos;ll need to dig a little further for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029382</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-15 10:57:08 -0700</bug_when>
    <thetext>&gt; This gives me confirmation that the destructed WatchpointSet came from the StructureRareData.  However, I haven&apos;t figured out how this WatchpointSet got added to the DFGPlan&apos;s DesiredWatchpoints::m_sets.  I&apos;ll need to dig a little further for that.

In particular, what we want to know is, when the DFG added a desired watchpoint W for Structure S, did the DFG (or should it have) also put S into a data structure that should visit S during garbage collection?

If so, why wasn&apos;t S visited during garbage collection?

If not, why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029384</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-15 11:05:01 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; This gives me confirmation that the destructed WatchpointSet came from the StructureRareData.  However, I haven&apos;t figured out how this WatchpointSet got added to the DFGPlan&apos;s DesiredWatchpoints::m_sets.  I&apos;ll need to dig a little further for that.

It was right under my nose.  I have been staring at this code so many times but just could not see it.  Anyway, a few tricks with the help of lldb gave me the following backtrace when the WatchpointSet of interest was added to the DFGPlan&apos;s  DesiredWatchpoints:

  thread #15: tid = 0x140329, 0x000000010b3bbf6c JavaScriptCore`JSC::DFG::DesiredWatchpoints::addLazily_WS(this=0x00007fc6a2835918, set=0x00007fc6a600a890) + 188 at DFGDesiredWatchpoints.cpp:66, name = &apos;DFG Worklist Worker Thread, stop reason = breakpoint 6.1
    frame #0: 0x000000010b3bbf6c JavaScriptCore`JSC::DFG::DesiredWatchpoints::addLazily_WS(this=0x00007fc6a2835918, set=0x00007fc6a600a890) + 188 at DFGDesiredWatchpoints.cpp:66
    frame #1: 0x000000010b3e3160 JavaScriptCore`JSC::DFG::Graph::tryGetConstantProperty1(this=0x000000011643e5d0, base=JSValue at 0x0000000116439138, structureSet=0x000000011643a068, offset=114) + 368 at DFGGraph.cpp:856
    frame #2: 0x000000010b318d1c JavaScriptCore`JSC::DFG::ByteCodeParser::handleGetByOffset(this=0x000000011643dc40, prediction=0, base=0x0000000116b99500, structureSet=0x000000011643a068, identifierNumber=18, offset=114, op=GetByOffset) + 124 at DFGByteCodeParser.cpp:1705
    frame #3: 0x000000010b32119f JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(this=0x000000011643dc40, limit=103) + 27247 at DFGByteCodeParser.cpp:2979
    frame #4: 0x000000010b318390 JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock(this=0x000000011643dc40) + 2016 at DFGByteCodeParser.cpp:3577
    frame #5: 0x000000010b3172af JavaScriptCore`JSC::DFG::ByteCodeParser::handleInlining(this=0x000000011643dc40, callTargetNode=0x0000000116b96c80, resultOperand=-7, callLinkStatus=0x000000011643b720, registerOffset=-16, argumentCountIncludingThis=2, nextOffset=1934, kind=Call) + 1583 at DFGByteCodeParser.cpp:1265
    frame #6: 0x000000010b31518c JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x000000011643dc40, result=-7, op=Call, kind=Call, instructionSize=9, callTarget=0x0000000116b96c80, argumentCountIncludingThis=2, registerOffset=-16, callLinkStatus=CallLinkStatus at 0x000000011643b720, prediction=268435456) + 812 at DFGByteCodeParser.cpp:1066
    frame #7: 0x000000010b314e45 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x000000011643dc40, result=-7, op=Call, kind=Call, instructionSize=9, callTarget=0x0000000116b96c80, argumentCountIncludingThis=2, registerOffset=-16, callLinkStatus=CallLinkStatus at 0x000000011643b7e0) + 229 at DFGByteCodeParser.cpp:1013
    frame #8: 0x000000010b314d52 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x000000011643dc40, result=-7, op=Call, kind=CodeForCall, instructionSize=9, callee=-7, argumentCountIncludingThis=2, registerOffset=-16) + 418 at DFGByteCodeParser.cpp:1002
    frame #9: 0x000000010b314ba7 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x000000011643dc40, pc=0x00007fc6a582ac30, op=Call, kind=CodeForCall) + 87 at DFGByteCodeParser.cpp:986
    frame #10: 0x000000010b320499 JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(this=0x000000011643dc40, limit=1962) + 23913 at DFGByteCodeParser.cpp:2844
    frame #11: 0x000000010b318390 JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock(this=0x000000011643dc40) + 2016 at DFGByteCodeParser.cpp:3577
    frame #12: 0x000000010b324db8 JavaScriptCore`JSC::DFG::ByteCodeParser::parse(this=0x000000011643dc40) + 968 at DFGByteCodeParser.cpp:3637
    frame #13: 0x000000010b3250ee JavaScriptCore`JSC::DFG::parse(graph=0x000000011643e5d0) + 62 at DFGByteCodeParser.cpp:3662
    frame #14: 0x000000010b46e7b1 JavaScriptCore`JSC::DFG::Plan::compileInThreadImpl(this=0x00007fc6a28357f0, longLivedState=0x000000011643ed08) + 193 at DFGPlan.cpp:205
    frame #15: 0x000000010b46e3c6 JavaScriptCore`JSC::DFG::Plan::compileInThread(this=0x00007fc6a28357f0, longLivedState=0x000000011643ed08, threadData=0x00007fc6a2f48860) + 390 at DFGPlan.cpp:162
    frame #16: 0x000000010b51f639 JavaScriptCore`JSC::DFG::Worklist::runThread(this=0x00007fc6a2f30000, data=0x00007fc6a2f48860) + 745 at DFGWorklist.cpp:358
    frame #17: 0x000000010b51db64 JavaScriptCore`JSC::DFG::Worklist::threadFunction(argument=0x00007fc6a2f48860) + 36 at DFGWorklist.cpp:400
    ...

Nothing exotic here.  The WatchpointSet came right out of the structure itself.  Next step, find out how the DFGPlan keeps relevant Structures alive.

Also need to find out if all WatchpointSets come from Structures (I presume not).  If not, is there any lifecycle issue there as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029832</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-18 13:03:16 -0700</bug_when>
    <thetext>Here&apos;s the back trace where the WatchpointSet gets added to the DFGPlan&apos;s DesiredWatchpoints:

Command #2 &apos;c&apos; continued the target.
  thread #17: tid = 0x2730ce, 0x0000000109f3ab5c JavaScriptCore`JSC::DFG::DesiredWatchpoints::addLazily_WS(this=0x00007fa998638da8, set=0x00007fa99a15c760) + 188 at DFGDesiredWatchpoints.cpp:66, name = &apos;DFG Worklist Worker Thread, stop reason = breakpoint 2.1
    frame #0: 0x0000000109f3ab5c JavaScriptCore`JSC::DFG::DesiredWatchpoints::addLazily_WS(this=0x00007fa998638da8, set=0x00007fa99a15c760) + 188 at DFGDesiredWatchpoints.cpp:66
    frame #1: 0x0000000109f61db0 JavaScriptCore`JSC::DFG::Graph::tryGetConstantProperty1(this=0x0000000114b805d0, base=JSValue at 0x0000000114b7b0b8, structureSet=0x0000000114b7c028, offset=114) + 368 at DFGGraph.cpp:856
    frame #2: 0x0000000109e9782c JavaScriptCore`JSC::DFG::ByteCodeParser::handleGetByOffset(this=0x0000000114b7fc40, prediction=0, base=0x0000000114b96780, structureSet=0x0000000114b7c028, identifierNumber=10, offset=114, op=GetByOffset) + 124 at DFGByteCodeParser.cpp:1705
    frame #3: 0x0000000109e9fe6e JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(this=0x0000000114b7fc40, limit=147) + 27694 at DFGByteCodeParser.cpp:2990
    frame #4: 0x0000000109e96ea0 JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock(this=0x0000000114b7fc40) + 2016 at DFGByteCodeParser.cpp:3588
    frame #5: 0x0000000109e95dbf JavaScriptCore`JSC::DFG::ByteCodeParser::handleInlining(this=0x0000000114b7fc40, callTargetNode=0x0000000114b93680, resultOperand=-3, callLinkStatus=0x0000000114b7d6e0, registerOffset=-12, argumentCountIncludingThis=2, nextOffset=180, kind=Call) + 1583 at DFGByteCodeParser.cpp:1265
    frame #6: 0x0000000109e93c9c JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x0000000114b7fc40, result=-3, op=Call, kind=Call, instructionSize=9, callTarget=0x0000000114b93680, argumentCountIncludingThis=2, registerOffset=-12, callLinkStatus=CallLinkStatus at 0x0000000114b7d6e0, prediction=268435456) + 812 at DFGByteCodeParser.cpp:1066
    frame #7: 0x0000000109e93955 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x0000000114b7fc40, result=-3, op=Call, kind=Call, instructionSize=9, callTarget=0x0000000114b93680, argumentCountIncludingThis=2, registerOffset=-12, callLinkStatus=CallLinkStatus at 0x0000000114b7d7a0) + 229 at DFGByteCodeParser.cpp:1013
    frame #8: 0x0000000109e93862 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x0000000114b7fc40, result=-3, op=Call, kind=CodeForCall, instructionSize=9, callee=-3, argumentCountIncludingThis=2, registerOffset=-12) + 418 at DFGByteCodeParser.cpp:1002
    frame #9: 0x0000000109e936b7 JavaScriptCore`JSC::DFG::ByteCodeParser::handleCall(this=0x0000000114b7fc40, pc=0x00007fa99b84db60, op=Call, kind=CodeForCall) + 87 at DFGByteCodeParser.cpp:986
    frame #10: 0x0000000109e9f168 JavaScriptCore`JSC::DFG::ByteCodeParser::parseBlock(this=0x0000000114b7fc40, limit=208) + 24360 at DFGByteCodeParser.cpp:2855
    frame #11: 0x0000000109e96ea0 JavaScriptCore`JSC::DFG::ByteCodeParser::parseCodeBlock(this=0x0000000114b7fc40) + 2016 at DFGByteCodeParser.cpp:3588
    frame #12: 0x0000000109ea3a78 JavaScriptCore`JSC::DFG::ByteCodeParser::parse(this=0x0000000114b7fc40) + 968 at DFGByteCodeParser.cpp:3648
    frame #13: 0x0000000109ea3dae JavaScriptCore`JSC::DFG::parse(graph=0x0000000114b805d0) + 62 at DFGByteCodeParser.cpp:3673
    frame #14: 0x0000000109fed581 JavaScriptCore`JSC::DFG::Plan::compileInThreadImpl(this=0x00007fa998638c80, longLivedState=0x0000000114b80d08) + 193 at DFGPlan.cpp:207
    frame #15: 0x0000000109fed196 JavaScriptCore`JSC::DFG::Plan::compileInThread(this=0x00007fa998638c80, longLivedState=0x0000000114b80d08, threadData=0x00007fa99a14aad0) + 390 at DFGPlan.cpp:164
    frame #16: 0x000000010a09e349 JavaScriptCore`JSC::DFG::Worklist::runThread(this=0x00007fa99a14a8e0, data=0x00007fa99a14aad0) + 745 at DFGWorklist.cpp:358
    frame #17: 0x000000010a09c874 JavaScriptCore`JSC::DFG::Worklist::threadFunction(argument=0x00007fa99a14aad0) + 36 at DFGWorklist.cpp:400
    frame #18: 0x000000010a5d5d90 JavaScriptCore`WTF::threadEntryPoint(contextData=0x00007fa99a14ab30) + 144 at Threading.cpp:67
    frame #19: 0x000000010a5d6a98 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x00007fa99a149bd0) + 296 at ThreadingPthreads.cpp:170
    ...

Filip says that it looks like the issue is that WatchpointSets get added because some code uses the structure.  However, later the code that does that check gets optimized out or elided.  This results in the relevant structure not being scanned by the GC.  This results in the structure and its WatchpointSets being collected.  However, the DFGPlan&apos;s DesiredWatchpoints still has the stale WatchpointSet pointer.  Filip is now working on a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029839</commentid>
    <comment_count>13</comment_count>
      <attachid>236779</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-18 13:20:40 -0700</bug_when>
    <thetext>Created attachment 236779
possible fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029900</commentid>
    <comment_count>14</comment_count>
      <attachid>236779</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-18 15:16:23 -0700</bug_when>
    <thetext>Comment on attachment 236779
possible fix

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

r=me with comment fixes.

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:76
&gt;              // We should be able to assume that the watchpoint for this has already been set.
&gt;              // But we can&apos;t because our view of what structure a value has keeps changing. That&apos;s
&gt;              // why we call consider().

Does this comment need to be updated now that we&apos;re not calling consider() here?

&gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:47
&gt;          // These are pretty dumb, but needed to placate subsequent assertions. We con&apos;t actually

/con&apos;t/don&apos;t/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029908</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-18 16:17:33 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 236779 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236779&amp;action=review
&gt; 
&gt; r=me with comment fixes.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:76
&gt; &gt;              // We should be able to assume that the watchpoint for this has already been set.
&gt; &gt;              // But we can&apos;t because our view of what structure a value has keeps changing. That&apos;s
&gt; &gt;              // why we call consider().
&gt; 
&gt; Does this comment need to be updated now that we&apos;re not calling consider() here?
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:47
&gt; &gt;          // These are pretty dumb, but needed to placate subsequent assertions. We con&apos;t actually
&gt; 
&gt; /con&apos;t/don&apos;t/

Thanks for the review.  I&apos;m still running benchmarks.  Hopefully I can land this later tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029926</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-18 17:54:23 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 236779 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236779&amp;action=review
&gt; &gt; 
&gt; &gt; r=me with comment fixes.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractValue.cpp:76
&gt; &gt; &gt;              // We should be able to assume that the watchpoint for this has already been set.
&gt; &gt; &gt;              // But we can&apos;t because our view of what structure a value has keeps changing. That&apos;s
&gt; &gt; &gt;              // why we call consider().
&gt; &gt; 
&gt; &gt; Does this comment need to be updated now that we&apos;re not calling consider() here?

Turns out the comment was wrong and the code is probably dead.  It&apos;s a benign bug.  Filed:

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

I&apos;ll add a FIXME and link to that bug.

&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGStructureRegistrationPhase.cpp:47
&gt; &gt; &gt;          // These are pretty dumb, but needed to placate subsequent assertions. We con&apos;t actually
&gt; &gt; 
&gt; &gt; /con&apos;t/don&apos;t/
&gt; 
&gt; Thanks for the review.  I&apos;m still running benchmarks.  Hopefully I can land this later tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029927</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-18 17:56:13 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/172737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029933</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-18 19:32:34 -0700</bug_when>
    <thetext>Build fix for non-Mac build landed in r172739: &lt;http://trac.webkit.org/r172739&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236779</attachid>
            <date>2014-08-18 13:20:40 -0700</date>
            <delta_ts>2014-08-18 15:16:22 -0700</delta_ts>
            <desc>possible fix</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59430</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzI3MTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzcxLDYgKzM3MSw4IEBACiAJCTBGNzY2RDM4MTVBRTRB
MUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDM2MTVBRTRBMUEw
MDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCAqLzsgfTsKIAkJ
MEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2
RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAw
OTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKKwkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBD
IC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzkwODUzMTlBMjkwQjIwMEY2MzEwQyAvKiBE
RkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIx
IC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Iy
OTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdD
b21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjdCMzY2MTE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjdCMzY1RjE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5jcHAgKi87IH07CkBAIC01MjYsOCArNTI4LDYgQEAKIAkJMEZDRUZBREYxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
Ki87IH07CiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhD
MDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVy
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEMkQ0RkUxOTJGRUU1
ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkQ0RkMxOTJGRUU1
ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwICovOyB9
OwotCQkwRkQyRDRGRjE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBG
RDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3
MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsKQEAgLTI1NzksNiArMjU3OSw4IEBACiAJCTBG
NzY2RDM3MTVBRTRBMUEwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAy
RkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMxMEMgLyogREZH
U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjM2NUYxOTdDNTI1QzAw
RUQxRERDIC8qIERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0IzNjYwMTk3QzUyNUMwMEVEMUREQyAvKiBE
RkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ0LDggKzI3NDYsNiBAQAogCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQg
LyogRlRMTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGgg
PSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5
MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJp
dmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBw
YXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNzM5LDE3ICszNzM5LDE3IEBACiAJCUMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJF
QSAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IF9f
aW5pdF9fLnB5OyBwYXRoID0gX19pbml0X18ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRz
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2Vu
ZF9jb21tYW5kcy5weTsgcGF0aCA9IGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgcGF0
aCA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5w
eXRob247IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weTsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M4MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5w
eTsgcGF0aCA9IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IG5hbWUgPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBn
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxh
dGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weTsgcGF0aCA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0b3IucHk7IHBhdGgg
PSBnZW5lcmF0b3IucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM0NzAzQ0NDMTky
ODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IG5hbWUgPSBtb2RlbHMucHk7IHBhdGggPSBtb2RlbHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IF9faW5pdF9fLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdl
bmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzgxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVy
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVu
dGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQTE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0
LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0b3IucHk7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMu
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBtb2RlbHMucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRl
Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0
ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTI5NSw2ICs1Mjk1LDggQEAKIAkJCQkwRjg5M0JEQTE5MzZFMjND
MDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJMEY2Mzk0
NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJ
CQkwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgg
Ki8sCisJCQkJMEY3OTA4NTMxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJh
dGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjc5MDg1NDE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3
RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCAqLywKQEAgLTUzMzAsOCArNTMzMiw2IEBACiAJCQkJMEYyQkRDNDMxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLywKIAkJCQkwRkZGQzk1
MzE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkZGQzk1NDE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlLmggKi8sCi0JCQkJMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJGIC8qIERG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwICovLAotCQkJCTBGRDJENEZEMTky
RkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi8s
CiAJCQkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8q
IERGR1dvcmtsaXN0LmNwcCAqLywKQEAgLTYyMDUsNiArNjIwNSw3IEBACiAJCQkJMEYyRkNDRkEx
OEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIxNEUyMTE4MTI1NzBCMDA5QjZCNEQgLyogREZHSW5saW5lQ2FjaGVXcmFwcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkIxNEUyMzE4MTMwOTU1MDA5QjZCNEQgLyogREZHSW5saW5lQ2Fj
aGVXcmFwcGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3OTA4NTYxOUEyOTBCMjAw
RjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzA0RDkwNjE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNl
cnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAv
KiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzEw
LDcgKzYzMTEsNiBAQAogCQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFi
bGVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTENhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2
OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZEMkQ0
RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21w
aWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRM
RGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBG
QiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNzgxOSw3ICs3
ODE5LDYgQEAKIAkJCQkwRkYwRjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3Rh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJE
QzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMEZEMkQ0RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3
NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2
QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFC
QTE1MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Nzg5MSw2ICs3ODkwLDcgQEAKIAkJCQkwRjAzMzJDMDE4QURGQUUxMDA1Rjk3OUEgLyogRXhpdGlu
Z0pJVFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgwRjAwRjhBQjZF
IC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTFDMTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3OTA4NTUx
OUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTFFMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI3MTg3REZERUMwMDgz
QjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEEwOTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTcyNzE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzczLDcgKzE3NzMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNpdGlvbigKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
d2F0Y2hwb2ludHMoKS5jb25zaWRlcih2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUodmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBs
YWNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAkocmV2aXNpb24gMTcyNzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OnNldE9TUkVudHJ5VmFsdWUoR3JhCiB7CiAgICAgaWYgKCEhdmFsdWUg
JiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwotICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmNvbnNp
ZGVyKHN0cnVjdHVyZSk7CisgICAgICAgIGdyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CiAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNl
IHsKQEAgLTYzLDE0ICs2MywxNCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE9TUkVudHJ5VmFs
dWUoR3JhCiAgICAgbV92YWx1ZSA9IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworICAgIGFzc2VydElz
UmVnaXN0ZXJlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBn
cmFwaCwgY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xv
YmJlclN0YXRlKQogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkp
IHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKLSAg
ICAgICAgaWYgKGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKSkgeworICAg
ICAgICBpZiAoZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKSA9PSBTdHJ1Y3R1cmVS
ZWdpc3RlcmVkQW5kV2F0Y2hlZCkgewogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUg
dG8gYXNzdW1lIHRoYXQgdGhlIHdhdGNocG9pbnQgZm9yIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBz
ZXQuCiAgICAgICAgICAgICAvLyBCdXQgd2UgY2FuJ3QgYmVjYXVzZSBvdXIgdmlldyBvZiB3aGF0
IHN0cnVjdHVyZSBhIHZhbHVlIGhhcyBrZWVwcyBjaGFuZ2luZy4gVGhhdCdzCiAgICAgICAgICAg
ICAvLyB3aHkgd2UgY2FsbCBjb25zaWRlcigpLgpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvCiAgICAgbV92YWx1ZSA9IHZhbHVlLnZhbHVl
KCk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGFzc2VydElzV2F0Y2hlZChn
cmFwaCk7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTEwNSw3
ICsxMDUsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIFN0CiAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
YXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKKyAgICBhc3NlcnRJc1JlZ2lzdGVyZWQoZ3JhcGgpOwog
fQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdy
YXBoJiBncmFwaCwgY28KICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgIAogICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworICAgIGFzc2VydElz
UmVnaXN0ZXJlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJl
cHJlc2VudGF0aW9uKE5vZGVGbGFncyByZXByZXNlbnRhdGlvbikKQEAgLTM2NCw3ICszNjQsNyBA
QCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6CiBGaWx0cmF0aW9uUmVz
dWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6ZUNsYXJpdHkoR3JhcGgmIGdyYXBoKQogewogICAg
IEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0gbm9ybWFsaXplQ2xhcml0eSgpOwotICAgIGFzc2Vy
dElzV2F0Y2hlZChncmFwaCk7CisgICAgYXNzZXJ0SXNSZWdpc3RlcmVkKGdyYXBoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zOTQsOSArMzk0LDkgQEAgdm9pZCBBYnN0cmFjdFZhbHVl
OjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuCiB9
CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29u
c3QKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNSZWdpc3RlcmVkKEdyYXBoJiBncmFwaCkg
Y29uc3QKIHsKLSAgICBtX3N0cnVjdHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworICAgIG1f
c3RydWN0dXJlLmFzc2VydElzUmVnaXN0ZXJlZChncmFwaCk7CiB9CiAjZW5kaWYKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDE3MjcxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsMTAgKzMyMSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZSB7CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3QgeyB9Ci0gICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdCB7IH0K
KyAgICB2b2lkIGFzc2VydElzUmVnaXN0ZXJlZChHcmFwaCYpIGNvbnN0IHsgfQogI2Vsc2UKICAg
ICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKLSAgICB2b2lkIGFzc2VydElzV2F0Y2hl
ZChHcmFwaCYpIGNvbnN0OworICAgIHZvaWQgYXNzZXJ0SXNSZWdpc3RlcmVkKEdyYXBoJikgY29u
c3Q7CiAjZW5kaWYKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxNzI3MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDkgQEAgZW51bSBQcmVkaWN0aW9u
UGFzcyB7CiAgICAgRml4dXBQYXNzCiB9OwogCi1lbnVtIFN0cnVjdHVyZVdhdGNocG9pbnRTdGF0
ZSB7IEhhdmVOb3RTdGFydGVkV2F0Y2hpbmcsIFdhdGNoaW5nQWxsV2F0Y2hhYmxlU3RydWN0dXJl
cyB9OworZW51bSBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25TdGF0ZSB7IEhhdmVOb3RTdGFydGVkUmVn
aXN0ZXJpbmcsIEFsbFN0cnVjdHVyZXNBcmVSZWdpc3RlcmVkIH07CisKK2VudW0gU3RydWN0dXJl
UmVnaXN0cmF0aW9uUmVzdWx0IHsgU3RydWN0dXJlUmVnaXN0ZXJlZE5vcm1hbGx5LCBTdHJ1Y3R1
cmVSZWdpc3RlcmVkQW5kV2F0Y2hlZCB9OwogCiBlbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3Rh
dGUgeyBCZWZvcmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZpeHBvaW50Q29udmVy
Z2VkIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzI3MTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcxLDggKzU3MSwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
SlNDZWxsKiBjZWxsLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGlmICht
X2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoY2VsbC0+c3RydWN0dXJlKCkpKQorICAgICAg
ICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSkgPT0gU3Ry
dWN0dXJlUmVnaXN0ZXJlZEFuZFdhdGNoZWQpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAKICAgICAg
ICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIEpTQ29uc3Rh
bnQsIG9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdl
YWtSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE3MjcxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDE3IEBAIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6fkRlc2ly
ZWRXZWFrUmVmZXIKIAogdm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OmFkZExhemlseShKU0Nl
bGwqIGNlbGwpCiB7Ci0gICAgbV9yZWZlcmVuY2VzLmFwcGVuZChjZWxsKTsKKyAgICBtX3JlZmVy
ZW5jZXMuYWRkKGNlbGwpOworfQorCitib29sIERlc2lyZWRXZWFrUmVmZXJlbmNlczo6Y29udGFp
bnMoSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBtX3JlZmVyZW5jZXMuY29udGFpbnMoY2Vs
bCk7CiB9CiAKIHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0mIHZtLCBD
b21tb25EYXRhKiBjb21tb24pCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVm
ZXJlbmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBKU0NlbGwqIHRhcmdldCA9IG1fcmVmZXJl
bmNlc1tpXTsKKyAgICBmb3IgKEpTQ2VsbCogdGFyZ2V0IDogbV9yZWZlcmVuY2VzKSB7CiAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzRHluYW1pY0Nhc3Q8U3RydWN0dXJlKj4o
dGFyZ2V0KSkgewogICAgICAgICAgICAgY29tbW9uLT53ZWFrU3RydWN0dXJlUmVmZXJlbmNlcy5h
cHBlbmQoCiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4odm0sIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKSk7CkBAIC02OSw4ICs3Myw4IEBA
IHZvaWQgRGVzaXJlZFdlYWtSZWZlcmVuY2VzOjpyZWFsbHlBZGQoVk0KIAogdm9pZCBEZXNpcmVk
V2Vha1JlZmVyZW5jZXM6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWZlcmVuY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoJm1fcmVmZXJlbmNlc1tpXSk7CisgICAg
Zm9yIChKU0NlbGwqIHRhcmdldCA6IG1fcmVmZXJlbmNlcykKKyAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFBvaW50ZXIoJnRhcmdldCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZl
cmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuaAkocmV2aXNpb24gMTcyNzE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXNfaAogI2RlZmlu
ZSBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXNfaAogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtNDgs
MTMgKzQ4LDE1IEBAIHB1YmxpYzoKICAgICB+RGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CiAKICAg
ICB2b2lkIGFkZExhemlseShKU0NlbGwqKTsKKyAgICBib29sIGNvbnRhaW5zKEpTQ2VsbCopOwor
ICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKFZNJiwgQ29tbW9uRGF0YSopOwogICAgIAogICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7Ci0gICAgVmVjdG9yPEpTQ2VsbCo+IG1fcmVmZXJlbmNlczsKKyAgICBI
YXNoU2V0PEpTQ2VsbCo+IG1fcmVmZXJlbmNlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTcyNzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw3ICsxMzkzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmplY3QgPSBhc09i
amVjdChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKICAgICAgICAg
U3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGVPYmpl
Y3QtPnN0cnVjdHVyZSgpOwotICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25z
aWRlcihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpKQorICAgICAgICBpZiAobV9ncmFwaC5yZWdp
c3RlclN0cnVjdHVyZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpICE9IFN0cnVjdHVyZVJlZ2lz
dGVyZWRBbmRXYXRjaGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgaWYgKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcyNzE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDcgKzY1LDcgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xp
dgogICAgICwgbV9uZXh0TWFjaGluZUxvY2FsKDApCiAgICAgLCBtX21hY2hpbmVDYXB0dXJlU3Rh
cnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fZml4cG9pbnRTdGF0
ZShCZWZvcmVGaXhwb2ludCkKLSAgICAsIG1fc3RydWN0dXJlV2F0Y2hwb2ludFN0YXRlKEhhdmVO
b3RTdGFydGVkV2F0Y2hpbmcpCisgICAgLCBtX3N0cnVjdHVyZVJlZ2lzdHJhdGlvblN0YXRlKEhh
dmVOb3RTdGFydGVkUmVnaXN0ZXJpbmcpCiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwg
bV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQogICAgICwgbV9yZWZDb3VudFN0YXRl
KEV2ZXJ5dGhpbmdJc0xpdmUpCkBAIC05NDMsOCArOTQzLDggQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogewogICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5yZXNpemUo
MCk7CiAgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewotICAg
ICAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpICYmIHZhbHVlLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hv
dWxkV2F0Y2goKSkKLSAgICAgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHko
dmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgaWYgKHZhbHVlLT5zdHJ1Y3R1cmUoKSkKKyAg
ICAgICAgICAgIEFTU0VSVChtX3BsYW4ud2Vha1JlZmVyZW5jZXMuY29udGFpbnModmFsdWUtPnN0
cnVjdHVyZSgpKSk7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5zdHJlbmd0aCgp
KSB7CiAgICAgICAgIGNhc2UgRnJhZ2lsZVZhbHVlOiB7CkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBG
cm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZyhKU1ZhbHVlCiB2b2lkIEdyYXBoOjpjb252
ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYg
KHZhbHVlLT5zdHJ1Y3R1cmUoKSkKLSAgICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLT5zdHJ1
Y3R1cmUoKSk7CisgICAgICAgIGFzc2VydElzUmVnaXN0ZXJlZCh2YWx1ZS0+c3RydWN0dXJlKCkp
OwogICAgIGlmIChtX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICBkZXRocmVhZCgpOwpAQCAtMTA5MSwxMSArMTA5
MSwyMSBAQCB2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlCiAgICAgY29u
dmVydFRvQ29uc3RhbnQobm9kZSwgZnJlZXplU3Ryb25nKHZhbHVlKSk7CiB9CiAKLXZvaWQgR3Jh
cGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZVJlZ2lz
dHJhdGlvblJlc3VsdCBHcmFwaDo6cmVnaXN0ZXJTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7Ci0gICAgaWYgKG1fc3RydWN0dXJlV2F0Y2hwb2ludFN0YXRlID09IEhhdmVOb3RTdGFy
dGVkV2F0Y2hpbmcpCisgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShzdHJ1Y3R1
cmUpOworICAgIGlmIChtX3BsYW4ud2F0Y2hwb2ludHMuY29uc2lkZXIoc3RydWN0dXJlKSkKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZVJlZ2lzdGVyZWRBbmRXYXRjaGVkOworICAgIHJldHVybiBT
dHJ1Y3R1cmVSZWdpc3RlcmVkTm9ybWFsbHk7Cit9CisKK3ZvaWQgR3JhcGg6OmFzc2VydElzUmVn
aXN0ZXJlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAobV9zdHJ1Y3R1cmVSZWdp
c3RyYXRpb25TdGF0ZSA9PSBIYXZlTm90U3RhcnRlZFJlZ2lzdGVyaW5nKQogICAgICAgICByZXR1
cm47CiAgICAgCisgICAgREZHX0FTU0VSVCgqdGhpcywgbnVsbHB0ciwgbV9wbGFuLndlYWtSZWZl
cmVuY2VzLmNvbnRhaW5zKHN0cnVjdHVyZSkpOworICAgIAogICAgIGlmICghc3RydWN0dXJlLT5k
ZmdTaG91bGRXYXRjaCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHdhdGNocG9pbnRzKCku
aXNXYXRjaGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzI3MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3
ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2Rl
LCBKU1ZhbHVlIHZhbHVlKTsKICAgICB2b2lkIGNvbnZlcnRUb1N0cm9uZ0NvbnN0YW50KE5vZGUq
IG5vZGUsIEpTVmFsdWUgdmFsdWUpOwogICAgIAotICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKFN0
cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1bHQgcmVn
aXN0ZXJTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIHZvaWQgYXNzZXJ0SXNS
ZWdpc3RlcmVkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAgICAKICAgICAvLyBDb2RlQmxvY2sg
aXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBk
dW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiA9IFdURjo6ZGF0YUZpbGUoKSwgRHVtcENvbnRleHQqID0gMCk7CkBAIC03NTcsNyArNzU4LDcg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBt
X2ZpeHBvaW50U3RhdGU7Ci0gICAgU3RydWN0dXJlV2F0Y2hwb2ludFN0YXRlIG1fc3RydWN0dXJl
V2F0Y2hwb2ludFN0YXRlOworICAgIFN0cnVjdHVyZVJlZ2lzdHJhdGlvblN0YXRlIG1fc3RydWN0
dXJlUmVnaXN0cmF0aW9uU3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKICAgICBVbmlmaWNh
dGlvblN0YXRlIG1fdW5pZmljYXRpb25TdGF0ZTsKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291
bnRTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTcyNzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBACiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlz
aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiCisjaW5j
bHVkZSAiREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdW
YWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5o
IgotI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0yMzcsNyArMjM3LDcgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9w
YWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAg
ICBwZXJmb3JtRml4dXAoZGZnKTsKLSAgICBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmcoZGZnKTsKKyAgICBwZXJmb3JtU3RydWN0dXJlUmVnaXN0cmF0aW9uKGRmZyk7CiAgICAgcGVy
Zm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVR5cGVDaGVj
a0hvaXN0aW5nKGRmZyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE3Mjcx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE1ICszOCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAvLyNkZWZpbmUgU0FNUExFKG5hbWUpIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKG5hbWUpCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lkIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit2b2lk
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzUmVnaXN0ZXJlZChHcmFwaCYgZ3JhcGgp
IGNvbnN0CiB7Ci0gICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFzc2VydElzV2F0
Y2hlZCIpOworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBhc3NlcnRJc1JlZ2lz
dGVyZWQiKTsKIAogICAgIGlmIChpc1RvcCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQotICAgICAgICBncmFwaC5hc3NlcnRJc1dh
dGNoZWQoYXQoaSkpOworICAgICAgICBncmFwaC5hc3NlcnRJc1JlZ2lzdGVyZWQoYXQoaSkpOwog
fQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDE3MjcxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw5ICs4Nyw5IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECi0gICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3Jh
cGgmKSBjb25zdCB7IH0KKyAgICB2b2lkIGFzc2VydElzUmVnaXN0ZXJlZChHcmFwaCYpIGNvbnN0
IHsgfQogI2Vsc2UKLSAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OworICAg
IHZvaWQgYXNzZXJ0SXNSZWdpc3RlcmVkKEdyYXBoJikgY29uc3Q7CiAjZW5kaWYKICAgICAKICAg
ICB2b2lkIGNsb2JiZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzI3MTQpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5jcHA6MTcyNzE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1Bo
YXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworcHVibGljOgorICAgIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAid2F0Y2hhYmxlIHN0cnVjdHVy
ZSB3YXRjaGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBz
dWJzZXF1ZW50IGFzc2VydGlvbnMuIFdlIGNvbid0IGFjdHVhbGx5CisgICAgICAgIC8vIGhhdmUg
dG8gd2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5
IGZyb20gaXQsIGJ1dCB0aGV5IGFyZQorICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdp
bGwgYXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHRyeVdhdGNoKG1fZ3Jh
cGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICB0cnlXYXRjaChtX2dyYXBo
Lm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9ncmFwaC5tX2Zyb3plblZhbHVlcykKKyAgICAgICAg
ICAgIHRyeVdhdGNoKHZhbHVlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tFeGVjdXRhYmxlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRh
YmxlKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5l
d09iamVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHRy
eVdhdGNoKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgICAgICAgICAgICAgICAgICB0cnlX
YXRjaChub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0
aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3Nl
ZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVz
ZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHZhcmlhbnRzIGRpZCB0aGF0LgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2
YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheToK
KyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICAgICAgICAgICAg
ICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgICAg
ICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+dHlwZWRBcnJheVN0cnVjdHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1JlZ2V4
cDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fc3RydWN0
dXJlV2F0Y2hwb2ludFN0YXRlID0gV2F0Y2hpbmdBbGxXYXRjaGFibGVTdHJ1Y3R1cmVzOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
dHJ5V2F0Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNo
cG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1X
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBXYXRjaGFibGUgU3RydWN0dXJlIFdhdGNoaW5nIik7
CisgICAgcmV0dXJuIHJ1blBoYXNlPFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
UmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgi
CisjaW5jbHVkZSAiREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCIKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCkBAIC0zNSwxMCArMzUsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi1jbGFzcyBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKK2NsYXNzIFN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKIHB1YmxpYzoKLSAgICBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlKEdyYXBo
JiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgIndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2F0
Y2hpbmciKQorICAgIFN0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBQaGFzZShncmFwaCwgInN0cnVjdHVyZSByZWdpc3RyYXRpb24iKQogICAgIHsKICAg
ICB9CiAgICAgCkBAIC00NywxMSArNDcsMTEgQEAgcHVibGljOgogICAgICAgICAvLyBUaGVzZSBh
cmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2VydGlv
bnMuIFdlIGNvbid0IGFjdHVhbGx5CiAgICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2UgYmVj
YXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0aGV5
IGFyZQogICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRoZXkg
YXJlbid0IHdhdGNoZWQuCi0gICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpOwotICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVy
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5tX3Zt
LnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3Jh
cGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAg
Zm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2dyYXBoLm1fZnJvemVuVmFsdWVzKQotICAgICAg
ICAgICAgdHJ5V2F0Y2godmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJlZ2lzdGVy
U3RydWN0dXJlKHZhbHVlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKQEAgLTYzLDMwICs2MywzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENoZWNr
RXhlY3V0YWJsZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+ZXhlY3V0YWJs
ZSgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJl
KG5vZGUtPmV4ZWN1dGFibGUoKS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyhub2RlLT5zdHJ1Y3R1cmVT
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKLSAg
ICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZShub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobm9kZS0+dHJhbnNpdGlvbigpLT5w
cmV2aW91cyk7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBH
ZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFy
aWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVj
dHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2
YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRo
YXQgd291bGQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2Vk
IGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNl
IE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQpAQCAtOTgsMzEgKzk4LDM2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlcyh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZSh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheToKICAgICAgICAgICAg
ICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCht
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIE5ld1R5cGVkQXJyYXk6Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
clN0cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT50eXBlZEFycmF5U3RydWN0dXJlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgVG9TdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAgICAgICAgICAgICAgICAg
ICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
LT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0
cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5h
Y3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBOZXdSZWdleHA6Ci0gICAgICAg
ICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJTdHJ1Y3R1cmUobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJl
c3Npb246CisgICAgICAgICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKQEAgLTEzMSwyOSArMTM2LDI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX3N0cnVjdHVyZVdhdGNocG9pbnRTdGF0
ZSA9IFdhdGNoaW5nQWxsV2F0Y2hhYmxlU3RydWN0dXJlczsKKyAgICAgICAgbV9ncmFwaC5tX3N0
cnVjdHVyZVJlZ2lzdHJhdGlvblN0YXRlID0gQWxsU3RydWN0dXJlc0FyZVJlZ2lzdGVyZWQ7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB2b2lkIHJlZ2lzdGVyU3Ry
dWN0dXJlcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCi0gICAgICAgICAgICB0cnlXYXRjaChzZXRbaV0p
OworICAgICAgICAgICAgcmVnaXN0ZXJTdHJ1Y3R1cmUoc2V0W2ldKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB2b2lkIHJlZ2lzdGVy
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgaWYgKHN0cnVj
dHVyZSkKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwog
ICAgIH0KIH07CiAKLWJvb2wgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBo
JiBncmFwaCkKK2Jvb2wgcGVyZm9ybVN0cnVjdHVyZVJlZ2lzdHJhdGlvbihHcmFwaCYgZ3JhcGgp
CiB7Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBXYXRjaGFibGUgU3Ry
dWN0dXJlIFdhdGNoaW5nIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNlPFdhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFN0cnVjdHVyZSBSZWdpc3RyYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8U3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVSZWdpc3RyYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaAkocmV2aXNpb24gMTcyNzE0KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaDoxNzI3MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorI2RlZmluZSBERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTZXQgd2F0Y2hw
b2ludHMgb24gYW55IHN0cnVjdHVyZXMgdGhhdCB3ZSBrbm93IG9mIHRoYXQgYXJlIGN1cnJlbnRs
eSB3YXRjaGFibGUuIEl0J3MKKy8vIHNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmUsIGJ1dCB0aGlz
IGVuZHMgdXAgYmVpbmcgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVmZmVjdGl2ZSB3YXkKKy8vIG9m
IHJlZHVjaW5nIHN0cnVjdHVyZSBjaGVja3Mgb24gdGVybWluYWwgc3RydWN0dXJlczoKKy8vCisv
LyAtIFdlIHVzZWQgdG8gb25seSBzZXQgd2F0Y2hwb2ludHMgb24gd2F0Y2hhYmxlIHN0cnVjdHVy
ZXMgaWYgd2Uga25ldyB0aGF0IHRoaXMgd291bGQKKy8vICAgcmVtb3ZlIGEgc3RydWN0dXJlIGNo
ZWNrLiBFeHBlcmltZW50cyBzaG93IHRoYXQgc3dpdGNoaW5nIGZyb20gdGhhdCwgdG8gYmxpbmRs
eQorLy8gICBzZXR0aW5nIHdhdGNocG9pbnRzIG9uIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcywg
d2FzIG5vdCBhIHJlZ3Jlc3Npb24uCisvLworLy8gLSBJdCBtYWtlcyBhYnN0cmFjdCBpbnRlcnBy
ZXRhdGlvbiBhIHdob2xlIGxvdCBlYXNpZXIuIFdlIGp1c3QgYXNzdW1lIHRoYXQgd2F0Y2hhYmxl
CisvLyAgIHN0cnVjdHVyZXMgYXJlIHVuY2xvYmJlcmFibGUgd2l0aG91dCBoYXZpbmcgdG8gZG8g
YW55IG90aGVyIGxvZ2ljLgorCitib29sIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
ZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lz
dHJhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCi0jZGVmaW5lIERGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorI2lmbmRlZiBERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlX2gKIAog
I2lmIEVOQUJMRShERkdfSklUKQogCkBAIC0zMiw5ICszMiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBTZXQgd2F0Y2hwb2ludHMgb24g
YW55IHN0cnVjdHVyZXMgdGhhdCB3ZSBrbm93IG9mIHRoYXQgYXJlIGN1cnJlbnRseSB3YXRjaGFi
bGUuIEl0J3MKLS8vIHNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmUsIGJ1dCB0aGlzIGVuZHMgdXAg
YmVpbmcgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVmZmVjdGl2ZSB3YXkKLS8vIG9mIHJlZHVjaW5n
IHN0cnVjdHVyZSBjaGVja3Mgb24gdGVybWluYWwgc3RydWN0dXJlczoKKy8vIFJlZ2lzdGVycyBh
bnkgc3RydWN0dXJlcyB3ZSBrbm93IGFib3V0IGFzIHdlYWsgcmVmZXJlbmNlcywgYW5kIHNldHMg
d2F0Y2hwb2ludHMgb24gYW55CisvLyBzdWNoIHN0cnVjdHVyZXMgdGhhdCB3ZSBrbm93IG9mIHRo
YXQgYXJlIGN1cnJlbnRseSB3YXRjaGFibGUuIEl0J3Mgc29tZXdoYXQKKy8vIGNvdW50ZXJpbnR1
aXRpdmUsIGJ1dCB0aGlzIGVuZHMgdXAgYmVpbmcgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVmZmVj
dGl2ZSB3YXkgb2YgcmVkdWNpbmcKKy8vIHN0cnVjdHVyZSBjaGVja3Mgb24gdGVybWluYWwgc3Ry
dWN0dXJlczoKIC8vCiAvLyAtIFdlIHVzZWQgdG8gb25seSBzZXQgd2F0Y2hwb2ludHMgb24gd2F0
Y2hhYmxlIHN0cnVjdHVyZXMgaWYgd2Uga25ldyB0aGF0IHRoaXMgd291bGQKIC8vICAgcmVtb3Zl
IGEgc3RydWN0dXJlIGNoZWNrLiBFeHBlcmltZW50cyBzaG93IHRoYXQgc3dpdGNoaW5nIGZyb20g
dGhhdCwgdG8gYmxpbmRseQpAQCAtNDMsMTEgKzQ0LDExIEBAIGNsYXNzIEdyYXBoOwogLy8gLSBJ
dCBtYWtlcyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhIHdob2xlIGxvdCBlYXNpZXIuIFdlIGp1
c3QgYXNzdW1lIHRoYXQgd2F0Y2hhYmxlCiAvLyAgIHN0cnVjdHVyZXMgYXJlIHVuY2xvYmJlcmFi
bGUgd2l0aG91dCBoYXZpbmcgdG8gZG8gYW55IG90aGVyIGxvZ2ljLgogCi1ib29sIHBlcmZvcm1X
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYpOworYm9vbCBwZXJmb3JtU3RydWN0dXJl
UmVnaXN0cmF0aW9uKEdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi0jZW5kaWYgLy8gREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZV9oCisjZW5kaWYgLy8gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Vf
aAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjcx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKLQotI2lm
IEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKLSNp
bmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkRGR1BoYXNlLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFdh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewotcHVibGljOgot
ICAgIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQotICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAid2F0Y2hhYmxlIHN0cnVjdHVyZSB3YXRjaGluZyIpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBib29sIHJ1bigpCi0gICAgewotICAgICAgICAvLyBUaGVzZSBhcmUg
cHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2VydGlvbnMu
IFdlIGNvbid0IGFjdHVhbGx5Ci0gICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2UgYmVjYXVz
ZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0aGV5IGFy
ZQotICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRoZXkgYXJl
bid0IHdhdGNoZWQuCi0gICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpOwotICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3Ry
dWN0dXJlLmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVl
IDogbV9ncmFwaC5tX2Zyb3plblZhbHVlcykKLSAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLT5z
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCktPnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
bm9kZS0+c3RydWN0dXJlU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKLSAgICAgICAgICAg
ICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXMtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT50cmFuc2l0aW9u
KCktPm5leHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ld
OwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRo
aW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJl
J3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBj
YWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlm
IGFueSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0
LgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZz
ZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgICAgICAgICBjYXNl
IE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGNhc2UgTmV3VHlwZWRBcnJheToKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+dHlwZWRBcnJheVN0
cnVjdHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFRvU3RyaW5n
OgotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25T
dHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKLSAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KS0+cmVnRXhwU3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBtX2dyYXBoLm1fc3RydWN0dXJlV2F0Y2hwb2ludFN0YXRlID0g
V2F0Y2hpbmdBbGxXYXRjaGFibGVTdHJ1Y3R1cmVzOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgdHJ5V2F0Y2goY29uc3QgU3RydWN0
dXJlU2V0JiBzZXQpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgp
OyBpLS07KQotICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ldKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmUpCi0gICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3Ry
dWN0dXJlKTsKLSAgICB9Ci19OwotCi1ib29sIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZyhHcmFwaCYgZ3JhcGgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBXYXRjaGFibGUgU3RydWN0dXJlIFdhdGNoaW5nIik7Ci0gICAgcmV0dXJuIHJ1blBoYXNl
PFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U+KGdyYXBoKTsKLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oCShyZXZpc2lvbiAxNzI3MTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZV9oCi0jZGVmaW5lIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQot
Y2xhc3MgR3JhcGg7Ci0KLS8vIFNldCB3YXRjaHBvaW50cyBvbiBhbnkgc3RydWN0dXJlcyB0aGF0
IHdlIGtub3cgb2YgdGhhdCBhcmUgY3VycmVudGx5IHdhdGNoYWJsZS4gSXQncwotLy8gc29tZXdo
YXQgY291bnRlcmludHVpdGl2ZSwgYnV0IHRoaXMgZW5kcyB1cCBiZWluZyB0aGUgY2xlYW5lc3Qg
YW5kIG1vc3QgZWZmZWN0aXZlIHdheQotLy8gb2YgcmVkdWNpbmcgc3RydWN0dXJlIGNoZWNrcyBv
biB0ZXJtaW5hbCBzdHJ1Y3R1cmVzOgotLy8KLS8vIC0gV2UgdXNlZCB0byBvbmx5IHNldCB3YXRj
aHBvaW50cyBvbiB3YXRjaGFibGUgc3RydWN0dXJlcyBpZiB3ZSBrbmV3IHRoYXQgdGhpcyB3b3Vs
ZAotLy8gICByZW1vdmUgYSBzdHJ1Y3R1cmUgY2hlY2suIEV4cGVyaW1lbnRzIHNob3cgdGhhdCBz
d2l0Y2hpbmcgZnJvbSB0aGF0LCB0byBibGluZGx5Ci0vLyAgIHNldHRpbmcgd2F0Y2hwb2ludHMg
b24gYWxsIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzLCB3YXMgbm90IGEgcmVncmVzc2lvbi4KLS8vCi0v
LyAtIEl0IG1ha2VzIGFic3RyYWN0IGludGVycHJldGF0aW9uIGEgd2hvbGUgbG90IGVhc2llci4g
V2UganVzdCBhc3N1bWUgdGhhdCB3YXRjaGFibGUKLS8vICAgc3RydWN0dXJlcyBhcmUgdW5jbG9i
YmVyYWJsZSB3aXRob3V0IGhhdmluZyB0byBkbyBhbnkgb3RoZXIgbG9naWMuCi0KLWJvb2wgcGVy
Zm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBoJik7Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCi0K
</data>
<flag name="review"
          id="261462"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>