<?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>132148</bug_id>
          
          <creation_ts>2014-04-24 15:16:11 -0700</creation_ts>
          <short_desc>REGRESSION (r125251): wrapper lifetimes of SVGElementInstance are incorrect; assertion seen in svg/custom/use-instanceRoot-event-listeners.xhtml</short_desc>
          <delta_ts>2015-01-18 22:53:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ossy</cc>
    
    <cc>philipj</cc>
    
    <cc>roger_fong</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1003797</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-24 15:16:11 -0700</bug_when>
    <thetext>Build a debug build of ToT (any revision after r167772), and run the following:
$ JSC_slowPathAllocsBetweenGCs=1 DumpRenderTree LayoutTests/svg/custom/use-instanceRoot-event-listeners.xhtml

You&apos;ll see the following assertion failure:

(lldb) r LayoutTests/svg/custom/use-instanceRoot-event-listeners.xhtml
Process 65778 launched: &apos;/Volumes/Data/ws4/OpenSource/WebKitBuild/Debug/DumpRenderTree&apos; (x86_64)
ASSERTION FAILED: !m_isolatedWorld-&gt;isNormal() || m_wrapper || !m_jsFunction
/Volumes/Data/ws4/OpenSource/Source/WebCore/bindings/js/JSEventListener.h(96) : JSC::JSObject *WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext *) const
1   0x100a69fc0 WTFCrash
2   0x102ec8b60 WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) const
3   0x103187e1b WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*)
4   0x10295982f WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow&gt;&amp;)
5   0x1029590fe WebCore::EventTarget::fireEventListeners(WebCore::Event*)
6   0x1037fcdec WebCore::Node::handleLocalEvents(WebCore::Event&amp;)
7   0x1029234c1 WebCore::EventContext::handleLocalEvents(WebCore::Event&amp;) const
8   0x1029237d7 WebCore::MouseOrFocusEventContext::handleLocalEvents(WebCore::Event&amp;) const
9   0x102924ad4 WebCore::dispatchEventInDOM(WebCore::Event&amp;, WebCore::EventPath const&amp;, WebCore::WindowEventContext&amp;)
10  0x10292450f WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::Event&gt;)
11  0x1037fce6d WebCore::Node::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;)
12  0x1028f9664 WebCore::Element::dispatchMouseEvent(WebCore::PlatformMouseEvent const&amp;, WTF::AtomicString const&amp;, int, WebCore::Element*)
13  0x102935685 WebCore::EventHandler::updateMouseEventTargetNode(WebCore::Node*, WebCore::PlatformMouseEvent const&amp;, bool)
14  0x1029333fc WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&amp;, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&amp;, bool)
15  0x102934816 WebCore::EventHandler::handleMouseMoveEvent(WebCore::PlatformMouseEvent const&amp;, WebCore::HitTestResult*, bool)
16  0x102933ee6 WebCore::EventHandler::mouseMoved(WebCore::PlatformMouseEvent const&amp;)
17  0x102946854 WebCore::EventHandler::mouseMoved(NSEvent*)
...

(lldb) up
frame #1: 0x0000000102ec8b60 WebCore`WebCore::JSEventListener::jsFunction(this=0x000000010f92ea80, scriptExecutionContext=0x000000010c02a0a0) const + 432 at JSEventListener.h:96
   93  	        // Verify that we have a valid wrapper protecting our function from
   94  	        // garbage collection. That is except for when we&apos;re not in the normal
   95  	        // world and can have zombie m_jsFunctions.
-&gt; 96  	        ASSERT(!m_isolatedWorld-&gt;isNormal() || m_wrapper || !m_jsFunction);
   97  	
   98  	        // If m_wrapper is 0, then m_jsFunction is zombied, and should never be accessed.
   99  	        if (!m_wrapper)

(lldb) p m_isolatedWorld-&gt;isNormal()
(bool) $3 = true

(lldb) p !!m_wrapper
(bool) $4 = false

(lldb) p !m_jsFunction
(bool) $6 = false

(lldb) bt
* thread #1: tid = 0xe9faec, 0x0000000100a69fca JavaScriptCore`WTFCrash + 42 at Assertions.cpp:333, queue = &apos;com.apple.main-thread&apos;, stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
    frame #0: 0x0000000100a69fca JavaScriptCore`WTFCrash + 42 at Assertions.cpp:333
  * frame #1: 0x0000000102ec8b60 WebCore`WebCore::JSEventListener::jsFunction(this=0x000000010f92ea80, scriptExecutionContext=0x000000010c02a0a0) const + 432 at JSEventListener.h:96
    frame #2: 0x0000000103187e1b WebCore`WebCore::JSEventListener::handleEvent(this=0x000000010f92ea80, scriptExecutionContext=0x000000010c02a0a0, event=0x000000010f927cc0) + 171 at JSEventListener.cpp:81
    frame #3: 0x000000010295982f WebCore`WebCore::EventTarget::fireEventListeners(this=0x000000010b710280, event=0x000000010f927cc0, d=0x000000010b70fff0, entry=0x000000010f9283f0) + 1503 at EventTarget.cpp:246
    frame #4: 0x00000001029590fe WebCore`WebCore::EventTarget::fireEventListeners(this=0x000000010b710280, event=0x000000010f927cc0) + 334 at EventTarget.cpp:197
    frame #5: 0x00000001037fcdec WebCore`WebCore::Node::handleLocalEvents(this=0x000000010b710280, event=0x000000010f927cc0) + 156 at Node.cpp:2013
    frame #6: 0x00000001029234c1 WebCore`WebCore::EventContext::handleLocalEvents(this=0x000000010f91e3b0, event=0x000000010f927cc0) const + 177 at EventContext.cpp:54
    frame #7: 0x00000001029237d7 WebCore`WebCore::MouseOrFocusEventContext::handleLocalEvents(this=0x000000010f91e3b0, event=0x000000010f927cc0) const + 343 at EventContext.cpp:86
    frame #8: 0x0000000102924ad4 WebCore`WebCore::dispatchEventInDOM(event=0x000000010f927cc0, path=0x00007fff5fbfaa08, windowEventContext=0x00007fff5fbfa9e8) + 356 at EventDispatcher.cpp:302
    frame #9: 0x000000010292450f WebCore`WebCore::EventDispatcher::dispatchEvent(origin=0x000000010b710280, prpEvent=0x00007fff5fbfab60) + 815 at EventDispatcher.cpp:358
    frame #10: 0x00000001037fce6d WebCore`WebCore::Node::dispatchEvent(this=0x000000010b710280, event=&lt;unavailable&gt;) + 45 at Node.cpp:2027
    frame #11: 0x00000001028f9664 WebCore`WebCore::Element::dispatchMouseEvent(this=0x000000010b710280, platformEvent=0x00007fff5fbfb680, eventType=0x0000000114003bf0, detail=0, relatedTarget=0x000000010b70b120) + 484 at Element.cpp:232
    frame #12: 0x0000000102935685 WebCore`WebCore::EventHandler::updateMouseEventTargetNode(this=0x000000010f8134d0, targetNode=0x000000010b70b120, mouseEvent=0x00007fff5fbfb680, fireMouseOverOut=true) + 3301 at EventHandler.cpp:2418
    frame #13: 0x00000001029333fc WebCore`WebCore::EventHandler::dispatchMouseEvent(this=0x000000010f8134d0, eventType=0x0000000114003be8, targetNode=0x000000010b70b120, =false, clickCount=0, mouseEvent=0x00007fff5fbfb680, setUnder=true) + 124 at EventHandler.cpp:2446
    frame #14: 0x0000000102934816 WebCore`WebCore::EventHandler::handleMouseMoveEvent(this=0x000000010f8134d0, mouseEvent=0x00007fff5fbfb680, hoveredNode=0x00007fff5fbfb590, onlyUpdateScrollbars=false) + 1910 at EventHandler.cpp:1859
    frame #15: 0x0000000102933ee6 WebCore`WebCore::EventHandler::mouseMoved(this=0x000000010f8134d0, event=0x00007fff5fbfb680) + 134 at EventHandler.cpp:1725
    frame #16: 0x0000000102946854 WebCore`WebCore::EventHandler::mouseMoved(this=0x000000010f8134d0, event=0x000000010b53dcb0) + 132 at EventHandlerMac.mm:603
    frame #17: 0x0000000101c5a97c WebKit`-[WebHTMLView(self=0x000000010b703460, _cmd=0x00007fff88b8243e, event=0x000000010b53dcb0) _updateMouseoverWithEvent:] + 1356 at WebHTMLView.mm:1790
    frame #18: 0x0000000101c67e84 WebKit`-[WebHTMLView mouseMovedNotification:](self=0x000000010b703460, _cmd=0x00007fff88b83293, notification=0x000000010b540b70) + 116 at WebHTMLView.mm:4105
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003812</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-24 15:36:07 -0700</bug_when>
    <thetext>Seems closely related to bug 93812.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003826</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-04-24 16:29:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/16719461&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003988</commentid>
    <comment_count>3</comment_count>
      <attachid>230145</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-25 00:20:53 -0700</bug_when>
    <thetext>Created attachment 230145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003993</commentid>
    <comment_count>4</comment_count>
      <attachid>230145</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-25 00:46:26 -0700</bug_when>
    <thetext>Comment on attachment 230145
Patch

r=me. I&apos;m so happy you did this!

You&apos;ll probably need to run &quot;run-bindings-tests --reset-results&quot; before landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003998</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-25 00:54:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; You&apos;ll probably need to run &quot;run-bindings-tests --reset-results&quot; before landing this.

I did. Surprisingly, none of the bindings tests cover JSCustomMarkFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003999</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-25 00:55:44 -0700</bug_when>
    <thetext>Committed r167794: &lt;http://trac.webkit.org/changeset/167794&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005981</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-05-01 22:20:45 -0700</bug_when>
    <thetext>*** Bug 93812 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062100</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-17 08:02:43 -0800</bug_when>
    <thetext>Mark says this bug still happens; apparently I was testing without JSC_slowPathAllocsBetweenGCs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062111</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-17 08:59:29 -0800</bug_when>
    <thetext>When I tried to do some logging by also setting JSC_logGC to 2, I started getting a different assertion, ASSERT(m_opaqueRoots.isEmpty()) failed in SlotVisitor::didStartMarking at the start of one collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062160</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-17 19:55:14 -0800</bug_when>
    <thetext>OK, I figured out what the second problem is.

The bindings for addEventListener and removeEventListener assume that the EventTarget object itself is the object which has a wrapper that keeps alive the listener’s wrapper. But for an SVGElementInstance, the instance itself simply attaches the listener to the target, therefore the SVGElementInstance object doesn’t keep the listener’s wrapper alive, its target does. We have to fix the addEventListener binding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062162</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-17 19:59:31 -0800</bug_when>
    <thetext>There’s event code in CodeGeneratorJS.pm that knows how to generate this code correctly. However, two years ago, &lt;http://trac.webkit.org/changeset/125251&gt; broke this by removing the code to generate the add/removeEventListener function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062163</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-17 20:02:14 -0800</bug_when>
    <thetext>I can see two ways to fix this.

The obvious way to do it would be to re-add the addEventListener/removeEventListener functions to SVGElementInstance somehow. But that would be dangerous since there is nothing that would prevent someone from calling the base EventTarget addEventListener/removeEventListener function and passing it an SVGElementInstance. I guess no fix like this can ever be entirely complete.

I suppose the better way to fix this would be to change all addEventListener function calls to call a virtual function, which in the case of SVGElementInstance would return the correspondingElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062198</commentid>
    <comment_count>13</comment_count>
      <attachid>244861</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-18 09:03:53 -0800</bug_when>
    <thetext>Created attachment 244861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062200</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-18 09:05:15 -0800</bug_when>
    <thetext>*** Bug 93812 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062218</commentid>
    <comment_count>15</comment_count>
      <attachid>244861</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-18 12:57:24 -0800</bug_when>
    <thetext>Comment on attachment 244861
Patch

Clearing flags on attachment: 244861

Committed r178633: &lt;http://trac.webkit.org/changeset/178633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062219</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-18 12:57:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062271</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-18 22:53:50 -0800</bug_when>
    <thetext>This broke bindings generation tests, &lt;https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/2072/steps/bindings-generation-tests/logs/stdio&gt;.

All the changes seems expected, so I&apos;ll re-generate results and land them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230145</attachid>
            <date>2014-04-25 00:20:53 -0700</date>
            <delta_ts>2015-01-18 09:03:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132148-20140425002031.patch</filename>
            <type>text/plain</type>
            <size>43362</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTgxMDFmZTM5NmQ0Njk2
YmFkMzk3Y2YwZTRlOWU3MzE0ODVkODdhNi4uMDdlNzY2YzkyZjhhMjJmYWM2YzE4ODg0ZmFjNzli
OWVlNjlkNWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE0LTA0LTI1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAi
IW1faXNvbGF0ZWRXb3JsZC0+aXNOb3JtYWwoKSB8fCBtX3dyYXBwZXIgfHwgIW1fanNGdW5jdGlv
biIgaW4gc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWV2ZW50LWxpc3RlbmVycy54aHRtbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMTQ4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBo
b3cgSlNDdXN0b21NYXJrRnVuY3Rpb24gZ2VuZXJhdGlvbiB3b3Jrcy4gSW5zdGVhZCBvZiBsZWF2
aW5nIG91dAorICAgICAgICB0aGUgZ2VuZXJhdGVkIHZpc2l0Q2hpbGRyZW4gZnVuY3Rpb24sIGp1
c3QgZ2VuZXJhdGUgYSBjYWxsIHRvIHZpc2l0QWRkaXRpb25hbENoaWxkcmVuLgorICAgICAgICBU
aGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgdG8gcmVwZWF0IGJvaWxlcnBsYXRlLgorCisgICAgICAg
IFRoZSBmaXggZm9yIHRoZSBhYm92ZSBidWcgd2FzIHRvIGNvcnJlY3QgbWlzdGFrZW4gbG9naWMg
d2hlcmUgSlNTVkdFbGVtZW50SW5zdGFuY2UKKyAgICAgICAgaGFkIGEgdmlzaXRDaGlsZHJlbiB0
aGF0IGRpZCBub3QgcHJvcGVybHkgbWFyayBldmVudCBsaXN0ZW5lcnMgYmVjYXVzZSBpdCBleHBs
aWNpdGx5CisgICAgICAgIGRpZCBub3QgY2FsbCB0aHJvdWdoIHRvIHRoZSBiYXNlIGNsYXNzIHZp
c2l0Q2hpbGRyZW4uIFRoZSBuZXcgYXJyYW5nZW1lbnQgbWFrZXMgdGhhdAorICAgICAgICBtaXN0
YWtlIGltcG9zc2libGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNBdHRyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IFVz
ZSB0aGlzIGluc3RlYWQgb2YgdmlzaXRDaGlsZHJlbi4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0F1ZGlvVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNrOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
QXVkaW9UcmFja0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNr
TGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NSdWxlOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0
eWxlRGVjbGFyYXRpb246OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleVBhaXJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlQYWlyOjp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlQ2hhbm5lbDo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQ
b3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
ZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNl
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVudEluc3RhbmNlOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU2hh
cmVkV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU2hhcmVkV29ya2VyOjp2
aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
U3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0eWxlU2hlZXQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2tDdWU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXh0VHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGV4dFRyYWNrTGlz
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUcmVlV2Fsa2Vy
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTVmlkZW9UcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2s6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJh
Y2tMaXN0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6IERp
dHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNYUGF0aFJl
c3VsdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hQYXRoUmVzdWx0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbik6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4pOiBSZXdyb3RlIHRvIHVzZSBtb2Rlcm4gZm9yIGxvb3BzLgorCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUhlYWRlcik6IEdlbmVyYXRlIGRlY2xhcmF0aW9uIG9mIHZpc2l0QWRkaXRpb25hbENoaWxkcmVu
LgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEdlbmVyYXRlIGNhbGwgdG8gdmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4uCisKIDIwMTQtMDQtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEZyYW1lTG9hZGVyOjpjaGVja0NvbXBsZXRlZCBjYW4gaGl0
IHRoZSAicmVmJ2luZyB3aGlsZSBkZXN0cm95ZWQiIGFzc2VydGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKaW5kZXggNDE4MGQ2MzYzYWUxNmMwMTRhZDM3
YzY4NGE5NmRlN2Q3ZjdiYjJlMi4uNDJmMTJmMGVkMmQxM2M0ZTc1ZTA2NGEzMzZiYjczYzBhZDUz
NWQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCkBA
IC0yOSwyOCArMjksMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0F0dHIu
aCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXZvaWQgSlNBdHRyOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTQXR0
cjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBKU0F0dHIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBdHRyKj4oY2VsbCk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVf
QVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFl
bGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3Qo
ZWxlbWVudCkpOworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gaW1wbCgpLm93bmVyRWxlbWVu
dCgpKQorICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChlbGVtZW50KSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCmluZGV4IDcyMDRjOTQwMjRkNDFlMjdmNWU0ODc2ZmNk
Nzg2ZTg1MGY2NWE1MjcuLmEzYWFiYTY0NDQ2ODZlODQ0NTZjZTViY2JlYzM4ZDM5MmQ1ZTI1MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9t
LmNwcApAQCAtMzUsNDMgKzM1LDM0IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBKU0F1ZGlvVHJhY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU0F1ZGlvVHJhY2sq
IGpzQXVkaW9UcmFjayA9IGpzQ2FzdDxKU0F1ZGlvVHJhY2sqPihjZWxsKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGpzQXVkaW9UcmFjaywgaW5mbygpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVChqc0F1ZGlvVHJhY2st
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihqc0F1ZGlvVHJhY2ssIHZpc2l0b3IpOwotCi0gICAgQXVkaW9U
cmFjayYgYXVkaW9UcmFjayA9IGpzQXVkaW9UcmFjay0+aW1wbCgpOwotICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KCZhdWRpb1RyYWNrKSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QoJmltcGwoKSkpOwogfQogCiB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiAgICAgY29uc3QgU3RyaW5nJiBuYXRpdmVWYWx1ZSh2YWx1
ZS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAg
aW1wbCgpLnNldEtpbmQobmF0aXZlVmFsdWUpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhl
Yyk7CiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICByZXR1cm47CiAjZW5kaWYKIH0KIAog
dm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKICAgICBjb25zdCBTdHJpbmcmIG5hdGl2ZVZhbHVlKHZhbHVlLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpbXBsKCkuc2V0TGFuZ3VhZ2Uo
bmF0aXZlVmFsdWUpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSAgICByZXR1cm47CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAppbmRleCAy
YTJhN2MyM2NlODc4NGJhOWY0ZjMwOTZlNmI4MWUwNzZjYjVjMDllLi44MzFlNDI1Yzg2NWQ0Yjg1
N2QzYWM0MGE4ZWU5N2FmYmFhZDI1YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCiAjaW5jbHVk
ZSAiSlNBdWRpb1RyYWNrTGlzdC5oIgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtMzUsMTcg
KzM2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTQXVkaW9UcmFja0xpc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3ZvaWQgSlNBdWRpb1RyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSlNBdWRpb1RyYWNrTGlzdCoganNB
dWRpb1RyYWNrTGlzdCA9IGpzQ2FzdDxKU0F1ZGlvVHJhY2tMaXN0Kj4oY2VsbCk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc0F1ZGlvVHJhY2tMaXN0LCBpbmZvKCkpOwotICAgIENP
TVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKGpzQXVk
aW9UcmFja0xpc3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc0F1ZGlvVHJhY2tMaXN0LCB2aXNpdG9y
KTsKLQotICAgIEF1ZGlvVHJhY2tMaXN0JiBhdWRpb1RyYWNrTGlzdCA9IGpzQXVkaW9UcmFja0xp
c3QtPmltcGwoKTsKLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdChhdWRpb1RyYWNrTGlz
dC5lbGVtZW50KCkpKTsKLSAgICBhdWRpb1RyYWNrTGlzdC52aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
dmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoaW1wbCgpLmVsZW1lbnQo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAppbmRleCBkMDM5YjdkMzJmOThjOTA2MTE1MTE5
MGJkNGFkZWNjY2IyYzE1OWRhLi45ZTgzNWMwZDAxYTMwMGY3YWJhOGJiZjUxMjMzOGM5MjA1ZTJh
Njc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5j
cHAKQEAgLTU1LDE0ICs1NSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBKU0NTU1J1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNDU1NSdWxlOjp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU0NTU1J1bGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDU1NSdWxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdz
ICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRT
ZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmdGhp
c09iamVjdC0+aW1wbCgpKSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJmltcGwo
KSkpOwogfQogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ1NTUnVsZSogcnVsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCmluZGV4IDdiYzY5
YmY0MDQwNGIxYjYyMmQ3YzI4Yjk1ZmQxMjE4NGViZDVkZDMuLjk0NTc3YzJiZmMxMTBmMjZjMWZj
ZDMyOTBlZDU4NTVlZDQyOTJlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcApAQCAtNDUsMTggKzQ1
LDEyIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSlNDU1NTdHlsZURl
Y2xhcmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ1NTU3R5bGVEZWNsYXJhdGlvbio+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxk
cmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJnRoaXNPYmplY3QtPmltcGwoKSkpOworICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZpbXBsKCkpKTsKIH0KIAogY2xhc3MgQ1NTUHJv
cGVydHlJbmZvIHsKQEAgLTY1LDggKzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFkUGl4ZWxP
clBvc1ByZWZpeDsKIH07CiAKLWVudW0gUHJvcGVydHlOYW1lUHJlZml4Ci17CitlbnVtIFByb3Bl
cnR5TmFtZVByZWZpeCB7CiAgICAgUHJvcGVydHlOYW1lUHJlZml4Tm9uZSwKICAgICBQcm9wZXJ0
eU5hbWVQcmVmaXhDU1MsCiAgICAgUHJvcGVydHlOYW1lUHJlZml4UGl4ZWwsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAppbmRleCBiMmE3ZmEzNmM2MGRiYTU2OGVjMjU3Y2Q1YzlmZjE1YmIyZGY4
Y2NkLi4zYmQyYWY0MjY1OGUzYjM0YzExNDExMDRiOTFlNzFlNjQ2NDE2OWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAKQEAgLTMwLDI0ICszMCwxOSBAQAogI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNp
bmNsdWRlICJKU05vZGUuaCIKKwogI2lmIEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Kj4oY2VsbCk7Ci0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENP
TVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRoaXNPYmplY3QtPmltcGwoKS5jYW52YXMoKSkpOwor
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGltcGwoKS5jYW52YXMoKSkpOwogfQogCiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5UGFpckN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVBhaXJDdXN0b20uY3BwCmluZGV4IDY4
MDZhMGYyYWZiYWIwNTU1MjQyZGUzOWJhYzRjN2EwOWYzOTE0MWYuLmJjZmUwMGNjZmFlNzA5NjI4
MDMwNTYxNzBkMmY0MDI1YjA4MDk4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvS2V5UGFpckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9LZXlQYWlyQ3VzdG9tLmNwcApAQCAtMjgsMjAgKzI4LDEyIEBACiAK
ICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQ3J5cHRvS2V5UGFpcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKU0NyeXB0b0tleVBhaXI6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgSlNDcnlwdG9LZXlQYWlyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ3J5cHRvS2V5UGFpcio+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENo
aWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Ci0KLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodGhpc09iamVjdC0+bV9pbXBsLT5wdWJsaWNL
ZXkoKSk7Ci0gICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QtPm1faW1wbC0+cHJp
dmF0ZUtleSgpKTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW1wbCgpLnB1YmxpY0tleSgp
KTsKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW1wbCgpLnByaXZhdGVLZXkoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCBjOTU3M2I4ZDg3MTU1ZDIxYjU1ZmQ4ZGYyOGJh
YTczMDNhZTA4MmJlLi5mNTVmYmVmNGEwNzYxZmJlNTQzODVhNDc2MzRiY2EyMjczN2Q4ODBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
CkBAIC05MSwxMyArOTEsMTEgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBKU0RP
TVN0cnVjdHVyZU1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3RydWN0dXJlcygpLmVu
ZCgpOwotICAgIGZvciAoSlNET01TdHJ1Y3R1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVj
dC0+c3RydWN0dXJlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJml0LT52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmUgOiB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmVzKCkudmFsdWVzKCkpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZzdHJ1
Y3R1cmUpOwogCi0gICAgSlNET01Db25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3IgZW5kMiA9IHRoaXNP
YmplY3QtPmNvbnN0cnVjdG9ycygpLmVuZCgpOwotICAgIGZvciAoSlNET01Db25zdHJ1Y3Rvck1h
cDo6aXRlcmF0b3IgaXQyID0gdGhpc09iamVjdC0+Y29uc3RydWN0b3JzKCkuYmVnaW4oKTsgaXQy
ICE9IGVuZDI7ICsraXQyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQyLT52YWx1ZSk7Cisg
ICAgZm9yIChhdXRvJiBjb25zdHJ1Y3RvciA6IHRoaXNPYmplY3QtPmNvbnN0cnVjdG9ycygpLnZh
bHVlcygpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmY29uc3RydWN0b3IpOwogfQogCiB2b2lk
IEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGN1cnJlbnRFdmVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcApp
bmRleCA5NGI3NWUxNDU0NThmNjhhNzUwOTFmNDdlYmQyYWFjNWY5NWJjMzVlLi42ZmVkYTZmOTMw
YjExNDZiMDRkOGExY2M4N2NmOGFmNDdiMjNmNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCkBAIC01OCwxNiArNTgsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNET01XaW5k
b3c6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgSlNET01XaW5kb3c6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewotICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAg
QVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKLQotICAgIHRoaXNPYmplY3QtPmltcGwoKS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRv
cik7Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXNPYmplY3QtPmltcGwoKS5mcmFtZSgpKQor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsKCkuZnJhbWUoKSkKICAgICAgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KGZyYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcAppbmRleCAzYjJiMjYxODkyMjI2NmQx
MTlhYTk5OTY5MmQyOWJkYTliZmNjYmQzLi5mNzE0ZjgzN2JlN2RlYzc1YzA0ZTM3NTMzNWJhNzQ4
OTI5MzdlNjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VDaGFubmVsQ3VzdG9tLmNwcApAQCAtMjksMjUgKzI5LDE0IEBACiAKICNpbmNsdWRlICJK
U01lc3NhZ2VDaGFubmVsLmgiCiAKLSNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgotI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTTWVzc2FnZUNoYW5uZWw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNNZXNzYWdlQ2hhbm5lbDo6dmlz
aXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBK
U01lc3NhZ2VDaGFubmVsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWVzc2FnZUNoYW5uZWwqPihj
ZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxk
cmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NF
UlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbigpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
Ci0gICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGhpc09iamVjdC0+bV9pbXBsLT5wb3J0MSgp
KQorICAgIGlmIChNZXNzYWdlUG9ydCogcG9ydCA9IGltcGwoKS5wb3J0MSgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiAKLSAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQg
PSB0aGlzT2JqZWN0LT5tX2ltcGwtPnBvcnQyKCkpCisgICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0
ID0gaW1wbCgpLnBvcnQyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChwb3J0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcAppbmRleCA0ZGVlYmVlMTBlYThiN2JkNGQ2ZTA2NGQ5ZTFkM2NmZDA4YzhmMDk0Li4x
MWMxYzRiODI5NDNmMDYzYTlkNDc1MzFkYTc0NzYyNGVkOGZlOTQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcApAQCAtNDMsMTkg
KzQzLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBKU01lc3NhZ2VQb3J0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit2b2lkIEpTTWVzc2FnZVBvcnQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEpTTWVzc2FnZVBvcnQqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNNZXNzYWdlUG9ydCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVG
bGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRo
b3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBl
bnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0
cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0Fj
dGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCi0gICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0gdGhp
c09iamVjdC0+bV9pbXBsLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQorICAgIGlmIChNZXNzYWdl
UG9ydCogcG9ydCA9IGltcGwoKS5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKQogICAgICAgICB2aXNp
dG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7Ci0KLSAgICB0aGlzT2JqZWN0LT5tX2ltcGwtPnZpc2l0
SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAogSlNDOjpKU1ZhbHVlIEpTTWVzc2FnZVBv
cnQ6OnBvc3RNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKaW5kZXggZDljNjY1ZGM5MWMyZDY2ODZkNzQwZDcy
MDA1YTAwNDcyZDM4NTkxNi4uZDM2MjRlMWYyMzczY2U5NzgwMjVjNDZlYmUyMWZjZWU0MWZhNmFj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0x
NzksMTggKzE3OSw5IEBAIEpTU2NvcGUqIEpTTm9kZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogbm9kZSkgY29uc3QKICAgICByZXR1cm4gbm9kZTsKIH0K
IAotdm9pZCBKU05vZGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3ZvaWQgSlNOb2RlOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSAgICBKU05vZGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOb2RlKj4o
Y2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LQotICAgIE5vZGUmIG5vZGUgPSB0aGlzT2JqZWN0LT5pbXBsKCk7Ci0gICAgbm9kZS52aXNpdEpT
RXZlbnRMaXN0ZW5lcnModmlzaXRvcik7Ci0KLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9v
dChub2RlKSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoaW1wbCgpKSk7CiB9CiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHBlcklubGluZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vZGUqIG5vZGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcApp
bmRleCAxMjNmZjIwNmIyN2QwOTQ0ZmM0ZDdiODQ4MDE1Yzc0NDdmMTY4MmVlLi4yOGMxNmMxMWVj
OTU0MTEzOTk5NjYyMzZlNTc2OTgwNzVhYjA4MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKQEAgLTI2LDMwICsyNiwxOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTm9kZUZpbHRlci5oIgogCi0jaW5jbHVk
ZSAiSlNET01XaW5kb3dCYXNlLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNO
b2RlRmlsdGVyQ29uZGl0aW9uLmgiCi0jaW5jbHVkZSAiTm9kZUZpbHRlci5oIgotI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNOb2RlRmlsdGVyOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTTm9kZUZpbHRlcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU05vZGVGaWx0ZXIq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNOb2RlRmlsdGVyKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QoJnRoaXNPYmplY3QtPmltcGwoKSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZp
bXBsKCkpOwogfQogCi1QYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihWTSYgdm0s
IEpTVmFsdWUgdmFsdWUpCitQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHRvTm9kZUZpbHRlcihKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pbmhlcml0cyhK
U05vZGVGaWx0ZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiAmanNDYXN0PEpTTm9kZUZpbHRl
cio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKTsKKyAgICAgICAgcmV0dXJuICZKU0M6OmpzQ2Fz
dDxKU05vZGVGaWx0ZXIqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCk7CiAKICAgICBSZWZQdHI8
Tm9kZUZpbHRlcj4gcmVzdWx0ID0gTm9kZUZpbHRlcjo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5z
ZXRDb25kaXRpb24oSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUodm0sIHJlc3VsdC5nZXQo
KSwgdmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0
ZXJhdG9yQ3VzdG9tLmNwcAppbmRleCA0OWNkZTAxY2M1YWRlZjZmMGE4NTU0MzQ1OGRhOGQ0YjU0
YTliN2M1Li45N2NhYTUwYmU1ZTg1NmFlNTBkNzRjNmY5MDNmYzhiYzE4NjE1MDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3Bw
CkBAIC0yMCwyNCArMjAsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU05v
ZGVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgot
I2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKLSNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKLQotdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTTm9kZUl0
ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIEpTTm9kZUl0ZXJhdG9yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihKU0M6OlNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIEpTTm9kZUl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTm9kZUl0ZXJhdG9yKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdz
ICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRT
ZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSB0aGlz
T2JqZWN0LT5tX2ltcGwtPmZpbHRlcigpKQorICAgIGlmIChOb2RlRmlsdGVyKiBmaWx0ZXIgPSBp
bXBsKCkuZmlsdGVyKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChmaWx0ZXIpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJ
bnN0YW5jZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1l
bnRJbnN0YW5jZUN1c3RvbS5jcHAKaW5kZXggN2UyZTUzNDA0YWQwZjVjZWUyODZkZWFhMjIwODA2
MDhkOGI0NTg1NS4uZTY2YjcxMDRmOTAxZjhjYjUyNTQ2M2U5M2Q2MTFmOTI1MzQzYmNiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdFbGVtZW50SW5zdGFuY2VD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudElu
c3RhbmNlQ3VzdG9tLmNwcApAQCAtMjcsMjEgKzI3LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNTVkdFbGVtZW50SW5zdGFuY2UuaCIKIAotI2luY2x1ZGUgIkpTRXZlbnRU
YXJnZXQuaCIKICNpbmNsdWRlICJKU05vZGVDdXN0b20uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNlOjp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxs
KiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBKU1NWR0VsZW1lbnRJbnN0
YW5jZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBKU1NWR0VsZW1lbnRJbnN0YW5jZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpT
U1ZHRWxlbWVudEluc3RhbmNlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdz
ICYgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLSAgICAvLyBTa2lwIEpTRXZlbnRU
YXJnZXQ6OnZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBldmVudCBsaXN0ZW5lciByZWdpc3RyYXRpb24g
aXMKLSAgICAvLyBmb3J3YXJkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudC4KLSAgICBK
U0V2ZW50VGFyZ2V0OjpCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KHRoaXNPYmplY3QtPmltcGwoKS5jb3JyZXNw
b25kaW5nRWxlbWVudCgpKSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoaW1wbCgp
LmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20u
Y3BwCmluZGV4IDJjMjc4NjQxNzZiYmFiYTcyNTMxNDUwNGJjM2E5MzhiMzJiNzYyNjkuLmEwYmQ4
NjZkZDc2ZDMwODI0ZTVlNjE0NGE3ZWRmZWNkNjA3NWY2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAKQEAgLTQ0LDE1ICs0
NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBKU1NoYXJlZFdvcmtlcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQordm9pZCBKU1NoYXJlZFdvcmtlcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSlNTaGFyZWRXb3JrZXIqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTaGFyZWRXb3JrZXIqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKE1lc3NhZ2VQb3J0KiBwb3J0ID0g
dGhpc09iamVjdC0+aW1wbCgpLnBvcnQoKSkKKyAgICBpZiAoTWVzc2FnZVBvcnQqIHBvcnQgPSBp
bXBsKCkucG9ydCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocG9ydCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3Bw
CmluZGV4IDIwYTI2N2ZiOTBjM2NjZmUxZmVhZjdhZjI4YWY5MTAxY2Y5ODUzNTMuLjBhNjlhMmU2
ZmQyM2MyOTgzZjc5OGY0ZDA1ZjI2MTcxNzFhZjYzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcApAQCAtMjYsNDAgKzI2LDI3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNTdHlsZVNoZWV0LmgiCiAKLSNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIkpTQ1NT
U3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotCi11c2luZyBuYW1lc3BhY2UgSlND
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNTdHlsZVNoZWV0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTU3R5bGVTaGVl
dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBKU1N0eWxlU2hlZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdHlsZVNoZWV0Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJU
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmdGhpc09iamVjdC0+aW1wbCgpKSk7CisgICAg
dmlzaXRvci5hZGRPcGFxdWVSb290KHJvb3QoJmltcGwoKSkpOwogfQogCi1KU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3R5bGVTaGVldCog
c3R5bGVTaGVldCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsKICAgICBp
ZiAoIXN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CiAKLSAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBzdHlsZVNoZWV0KTsKLSAgICBpZiAod3JhcHBlcikK
KyAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBzdHlsZVNoZWV0KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAK
ICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHdyYXBwZXIg
PSBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBDU1NTdHlsZVNoZWV0LCBzdHlsZVNo
ZWV0KTsKLSAgICBlbHNlCi0gICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xv
YmFsT2JqZWN0LCBTdHlsZVNoZWV0LCBzdHlsZVNoZWV0KTsKKyAgICAgICAgcmV0dXJuIENSRUFU
RV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3QsIENTU1N0eWxlU2hlZXQsIHN0eWxlU2hlZXQpOwog
Ci0gICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihnbG9i
YWxPYmplY3QsIFN0eWxlU2hlZXQsIHN0eWxlU2hlZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1
ZUN1c3RvbS5jcHAKaW5kZXggZjc1YWJmMDcyODlhY2IyOWZlZDQzNTc3ZWY3Y2Y1NzI4NGNlYjgz
MS4uNTdmODhiOTU1Y2Y1ODUxODhjMmE2YmVlNGRmNzc0ZjRmMjk1MWJlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdWVDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VlQ3VzdG9tLmNwcApAQCAt
MjcsOCArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCi0jaW5jbHVkZSAiSlNE
YXRhQ3VlLmgiCiAjaW5jbHVkZSAiSlNUZXh0VHJhY2tDdWUuaCIKKworI2luY2x1ZGUgIkpTRGF0
YUN1ZS5oIgogI2luY2x1ZGUgIkpTVHJhY2tDdXN0b20uaCIKICNpbmNsdWRlICJKU1ZUVEN1ZS5o
IgogI2luY2x1ZGUgIlRleHRUcmFjay5oIgpAQCAtODEsMjAgKzgyLDEwIEBAIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXh0VHJhY2tD
dWUqIGN1ZSkKICAgICB9CiB9CiAKLXZvaWQgSlNUZXh0VHJhY2tDdWU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNUZXh0VHJhY2tDdWU6
OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEpT
VGV4dFRyYWNrQ3VlKiBqc1RleHRUcmFja0N1ZSA9IGpzQ2FzdDxKU1RleHRUcmFja0N1ZSo+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoanNUZXh0VHJhY2tDdWUsIGluZm8o
KSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENo
aWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKLSAgICBB
U1NFUlQoanNUZXh0VHJhY2tDdWUtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc1RleHRUcmFja0N1ZSwg
dmlzaXRvcik7Ci0KLSAgICAvLyBNYXJrIHRoZSBjdWUncyB0cmFjayByb290IGlmIGl0IGhhcyBv
bmUuCi0gICAgVGV4dFRyYWNrQ3VlJiB0ZXh0VHJhY2tDdWUgPSBqc1RleHRUcmFja0N1ZS0+aW1w
bCgpOwotICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IHRleHRUcmFja0N1ZS50cmFjaygp
KQorICAgIGlmIChUZXh0VHJhY2sqIHRleHRUcmFjayA9IGltcGwoKS50cmFjaygpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2spKTsKLSAgICAKLSAgICB0ZXh0
VHJhY2tDdWUudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Rl
eHRUcmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1c3RvbS5jcHAKaW5kZXggNTgyMTk3MDY5MzIyM2U3Y2M5NGQwNTNlMGMwYWQxOGFjMTI1ZTVk
Mi4uYmI5NmMyMDFlMGQwNTNjMTRkZmYyOWIyMDNlOWMwM2YxYzY5Mzg2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcApAQCAtMjYsNyAr
MjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CiAjaW5jbHVkZSAiSlNUZXh0VHJhY2suaCIKKwogI2luY2x1ZGUgIkpTVGV4dFRyYWNrQ3VlTGlz
dC5oIgogI2luY2x1ZGUgIkpTVHJhY2tDdXN0b20uaCIKIApAQCAtMzQsMTggKzM2LDkgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVGV4dFRy
YWNrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBKU1RleHRUcmFjayoganNUZXh0VHJhY2sgPSBqc0Nhc3Q8SlNUZXh0VHJh
Y2sqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGpzVGV4dFRyYWNrLCBp
bmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0g
ICAgQVNTRVJUKGpzVGV4dFRyYWNrLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNUZXh0VHJhY2ssIHZp
c2l0b3IpOwotCi0gICAgVGV4dFRyYWNrJiB0ZXh0VHJhY2sgPSBqc1RleHRUcmFjay0+aW1wbCgp
OwotICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZ0ZXh0VHJhY2spKTsKLQotICAgIHRl
eHRUcmFjay52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CisgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KHJvb3QoJmltcGwoKSkpOwogfQogCiB2b2lkIEpTVGV4dFRyYWNrOjpzZXRLaW5k
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0xpc3RDdXN0b20uY3BwCmluZGV4IGVjYjU5MDUzNDVk
ZWZhZGIzMTI2MWQ5ZTY2YWMxNjA0MGI3MTJlZWEuLmUxYjhjNjMwOTkyNjFkMWYyYjlmNWU3YTRm
ZjVkYjY1MmE5MGE4NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VGV4dFRyYWNrTGlzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUZXh0VHJhY2tMaXN0Q3VzdG9tLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCiAjaW5jbHVkZSAiSlNUZXh0VHJh
Y2tMaXN0LmgiCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0zNSwxNyArMzYsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNUZXh0VHJh
Y2tMaXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit2b2lkIEpTVGV4dFRyYWNrTGlzdDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBKU1RleHRUcmFja0xpc3QqIGpzVGV4dFRyYWNrTGlz
dCA9IGpzQ2FzdDxKU1RleHRUcmFja0xpc3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGpzVGV4dFRyYWNrTGlzdCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChT
dHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVChqc1RleHRUcmFja0xpc3QtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihqc1RleHRUcmFja0xpc3QsIHZpc2l0b3IpOwotICAgIAotICAgIFRl
eHRUcmFja0xpc3QmIHRleHRUcmFja0xpc3QgPSBqc1RleHRUcmFja0xpc3QtPmltcGwoKTsKLSAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCh0ZXh0VHJhY2tMaXN0LmVsZW1lbnQoKSkpOwot
ICAgIHRleHRUcmFja0xpc3QudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGltcGwoKS5lbGVtZW50KCkpKTsKIH0KICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCmluZGV4IDlmMDE2NTlmOTE3MGI2ODkyOTdiZjg5ZTBhMDBl
ODRlYTgyNTQ5ZWUuLjA1YzUzMDRmMzc4NzU0NjNmMzFlMDRkMTYyNTRiYzVjZDNhNGUwZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNw
cApAQCAtMjAsMjQgKzIwLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNU
cmVlV2Fsa2VyLmgiCiAKLSNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCi0j
aW5jbHVkZSAiTm9kZUZpbHRlci5oIgotI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTVHJlZVdhbGtl
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQordm9p
ZCBKU1RyZWVXYWxrZXI6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKEpTQzo6U2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgSlNUcmVlV2Fsa2VyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVHJl
ZVdhbGtlcio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcp
OwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0KLSAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gdGhpc09iamVjdC0+bV9p
bXBsLT5maWx0ZXIoKSkKKyAgICBpZiAoTm9kZUZpbHRlciogZmlsdGVyID0gaW1wbCgpLmZpbHRl
cigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZmlsdGVyKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKaW5kZXgg
M2E0ZGFhNTIyMDZlYjU1ZDExNjhiZjlkZDQ5MDM4ZDIyMWRjZjhkNi4uZTdiY2JhMjE1ZTRmNGE4
NGVlODg0MWNjYjMyNzg5OGM2Yzg5ZTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCkBAIC0zNSwxNiArMzUsOSBAQCB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNWaWRlb1RyYWNr
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lk
IEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7Ci0gICAgSlNWaWRlb1RyYWNrKiBqc1ZpZGVvVHJhY2sgPSBqc0Nhc3Q8SlNWaWRlb1Ry
YWNrKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc1ZpZGVvVHJhY2ss
IGluZm8oKSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNW
aXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsK
LSAgICBBU1NFUlQoanNWaWRlb1RyYWNrLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlk
ZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNWaWRlb1RyYWNr
LCB2aXNpdG9yKTsKLQotICAgIFZpZGVvVHJhY2smIHZpZGVvVHJhY2sgPSBqc1ZpZGVvVHJhY2st
PmltcGwoKTsKLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qocm9vdCgmdmlkZW9UcmFjaykpOwor
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KCZpbXBsKCkpKTsKIH0KIAogdm9pZCBKU1Zp
ZGVvVHJhY2s6OnNldEtpbmQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNw
cAppbmRleCAyMDUxMDdiNDk0YjhjZGYwYjRkZjljZTU3ZDhiZmY2ZDMyMzllYThmLi42NmQ3YmVh
M2UwMGUwZGUzYWYwMTgxNWRhNmI5MjFkZWRkYmMxMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0Q3VzdG9tLmNwcApAQCAtMjYsMjYg
KzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKICNpbmNsdWRlICJKU1ZpZGVvVHJhY2tMaXN0LmgiCiAKLSNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1ZpZGVvVHJhY2tMaXN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTVmlkZW9UcmFja0xp
c3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAg
IEpTVmlkZW9UcmFja0xpc3QqIGpzVmlkZW9UcmFja0xpc3QgPSBqc0Nhc3Q8SlNWaWRlb1RyYWNr
TGlzdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoanNWaWRlb1RyYWNr
TGlzdCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0Zs
YWcpOwotICAgIEFTU0VSVChqc1ZpZGVvVHJhY2tMaXN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNW
aWRlb1RyYWNrTGlzdCwgdmlzaXRvcik7Ci0KLSAgICBWaWRlb1RyYWNrTGlzdCYgdmlkZW9UcmFj
a0xpc3QgPSBqc1ZpZGVvVHJhY2tMaXN0LT5pbXBsKCk7Ci0gICAgdmlzaXRvci5hZGRPcGFxdWVS
b290KHJvb3QodmlkZW9UcmFja0xpc3QuZWxlbWVudCgpKSk7Ci0gICAgdmlkZW9UcmFja0xpc3Qu
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KGltcGwoKS5lbGVtZW50KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCmluZGV4IDA4MmM1Y2ZmMmI2Mzg5OGMyM2JhY2U3MzgwMWVm
YWVlZTk1YzYzMTcuLmMyZmUxNmU1MzQ3NTk3M2Q2NDZkZmRkODdjZDc2OWUxOWJjMjRjYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKQEAgLTI0MiwxNCArMjQyLDkgQEAgc3RhdGljIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFdlYkdMRXh0ZW4KICAgICByZXR1cm4ganNOdWxsKCk7CiB9CiAKLXZvaWQgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1
cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5X
aXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZ0
aGlzT2JqZWN0LT5pbXBsKCkpOwordm9pZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KCZpbXBsKCkpOwogfQogCiBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcApp
bmRleCA2OTc3MTk2YzA2YWRhNzRmYzc4MTNhZTBkNzM2ZDYzNjlkY2RlYjJlLi44ZTYxMmE0MTE2
ZDk1MjY1YWIyYWFiMTgzMDg1NWZhMjc1NDkyN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcApAQCAtNTEs
MjAgKzUxLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRk
aXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEpTV29ya2VyR2xv
YmFsU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZSo+KGNlbGwp
OwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAg
ICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4s
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAg
ICBpZiAoV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uID0gdGhpc09iamVjdC0+aW1wbCgpLm9wdGlv
bmFsTG9jYXRpb24oKSkKKyAgICBpZiAoV29ya2VyTG9jYXRpb24qIGxvY2F0aW9uID0gaW1wbCgp
Lm9wdGlvbmFsTG9jYXRpb24oKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGxvY2F0
aW9uKTsKLSAgICBpZiAoV29ya2VyTmF2aWdhdG9yKiBuYXZpZ2F0b3IgPSB0aGlzT2JqZWN0LT5p
bXBsKCkub3B0aW9uYWxOYXZpZ2F0b3IoKSkKKyAgICBpZiAoV29ya2VyTmF2aWdhdG9yKiBuYXZp
Z2F0b3IgPSBpbXBsKCkub3B0aW9uYWxOYXZpZ2F0b3IoKSkKICAgICAgICAgdmlzaXRvci5hZGRP
cGFxdWVSb290KG5hdmlnYXRvcik7Ci0KLSAgICB0aGlzT2JqZWN0LT5pbXBsKCkudmlzaXRKU0V2
ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCiBib29sIEpTV29ya2VyR2xvYmFsU2NvcGU6Omdl
dE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCBhOGIyYzJiMGQ0
YTViZmE0YjFjMjEwNjYxOWM1Y2FmY2NhZTRlM2FkLi5jOWVkY2ZhOGI0ZDFjMjM3NDM3ODIwNjFm
NzI3ZjFjMjNkNWQyYzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNTYsMzAgKzU2LDIyIEBAIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU1hNTEh0dHBSZXF1
ZXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit2
b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewotICAgIEpTWE1MSHR0cFJlcXVlc3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNYTUxIdHRwUmVxdWVzdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAoWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9h
ZCA9IHRoaXNPYmplY3QtPm1faW1wbC0+b3B0aW9uYWxVcGxvYWQoKSkKKyAgICBpZiAoWE1MSHR0
cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IGltcGwoKS5vcHRpb25hbFVwbG9hZCgpKQogICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QodXBsb2FkKTsKIAotICAgIGlmIChEb2N1bWVudCogcmVz
cG9uc2VEb2N1bWVudCA9IHRoaXNPYmplY3QtPm1faW1wbC0+b3B0aW9uYWxSZXNwb25zZVhNTCgp
KQorICAgIGlmIChEb2N1bWVudCogcmVzcG9uc2VEb2N1bWVudCA9IGltcGwoKS5vcHRpb25hbFJl
c3BvbnNlWE1MKCkpCiAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyZXNwb25zZURvY3Vt
ZW50KTsKIAotICAgIGlmIChBcnJheUJ1ZmZlciogcmVzcG9uc2VBcnJheUJ1ZmZlciA9IHRoaXNP
YmplY3QtPm1faW1wbC0+b3B0aW9uYWxSZXNwb25zZUFycmF5QnVmZmVyKCkpCisgICAgaWYgKEFy
cmF5QnVmZmVyKiByZXNwb25zZUFycmF5QnVmZmVyID0gaW1wbCgpLm9wdGlvbmFsUmVzcG9uc2VB
cnJheUJ1ZmZlcigpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVzcG9uc2VBcnJh
eUJ1ZmZlcik7CiAKLSAgICBpZiAoQmxvYiogcmVzcG9uc2VCbG9iID0gdGhpc09iamVjdC0+bV9p
bXBsLT5vcHRpb25hbFJlc3BvbnNlQmxvYigpKQorICAgIGlmIChCbG9iKiByZXNwb25zZUJsb2Ig
PSBpbXBsKCkub3B0aW9uYWxSZXNwb25zZUJsb2IoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJlc3BvbnNlQmxvYik7CiAKLSAgICBpZiAodGhpc09iamVjdC0+bV9yZXNwb25zZSkK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVzcG9uc2UpOwotCi0gICAg
dGhpc09iamVjdC0+bV9pbXBsLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CisgICAg
aWYgKG1fcmVzcG9uc2UpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3Jlc3BvbnNlKTsKIH0K
IAogLy8gQ3VzdG9tIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1hQYXRoUmVzdWx0Q3VzdG9tLmNwcAppbmRleCAzNWJhODkyMzE2MDM2MmY0ZmYzODgyMmRj
OWEzYTVkNTVmNzNmN2ZlLi4yNDE2ZDY3OTA4MTM5MTNmMTNlYzBhNTE5YzVmMTA4NmMyNjM1ODU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoUmVzdWx0Q3Vz
dG9tLmNwcApAQCAtMjYsMzAgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNYUGF0aFJlc3VsdC5oIgogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNOb2RlQ3VzdG9tLmgiCi0jaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKICNpbmNsdWRlICJY
UGF0aFZhbHVlLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBKU1hQYXRoUmVzdWx0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit2b2lkIEpTWFBhdGhSZXN1bHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgSlNYUGF0aFJlc3VsdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1hQYXRoUmVzdWx0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGNvbnN0IFhQYXRoOjpW
YWx1ZSYgeHBhdGhWYWx1ZSA9IHRoaXNPYmplY3QtPmltcGwoKS52YWx1ZSgpOwotICAgIGlmICh4
cGF0aFZhbHVlLmlzTm9kZVNldCgpKSB7Ci0gICAgICAgIGNvbnN0IFhQYXRoOjpOb2RlU2V0JiBu
b2Rlc1RvTWFyayA9IHhwYXRoVmFsdWUudG9Ob2RlU2V0KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbm9kZXNUb01hcmsuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBub2Rlc1RvTWFya1tpXTsKLSAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dChyb290KG5vZGUpKTsKLSAgICAgICAgfQorICAgIGF1dG8mIHZhbHVlID0gaW1wbCgpLnZhbHVl
KCk7CisgICAgaWYgKHZhbHVlLmlzTm9kZVNldCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgbm9k
ZSA6IHZhbHVlLnRvTm9kZVNldCgpKQorICAgICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3Qobm9kZS5nZXQoKSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBmYjEyYTRkNWRjZDU3MThl
NzUwNWFlNThhNjgxNjUwNjE2MTY1MGRhLi5jMDcwYmJhMDE1NGMwODE3Njg5NzFkMzBkZTg5NTEy
OTgzZTdkOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQpAQCAtNzY2LDkgKzc2Niw5IEBAIHN1YiBJbnN0YW5jZU5lZWRzVmlz
aXRDaGlsZHJlbgogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKICAgICByZXR1cm4gJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9uIn0KLSAg
ICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifQotICAg
IHx8ICRpbnRlcmZhY2UtPm5hbWUgZXEgIkV2ZW50VGFyZ2V0IgotICAgIHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBvcnRFeHRyYU1lbW9yeUNvc3QifTsKKyAgICAgICAg
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In0KKyAgICAg
ICAgfHwgJGludGVyZmFjZS0+bmFtZSBlcSAiRXZlbnRUYXJnZXQiCisgICAgICAgIHx8ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBvcnRFeHRyYU1lbW9yeUNvc3QifTsKIH0K
IAogc3ViIEdlbmVyYXRlSGVhZGVyCkBAIC0xMDE3LDcgKzEwMTcsOSBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKIAogICAgICMgdmlzaXQgZnVuY3Rpb24KICAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJl
bikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpO1xuXG4iKTsKKyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHZvaWQgdmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oSlNDOjpTbG90VmlzaXRvciYpO1xuIikg
aWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9u
In07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiJ9ID0gMTsKICAgICB9CiAKQEAg
LTI3NzYsNyArMjc3OCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICB9CiAK
LSAgICBpZiAoJG5lZWRzVmlzaXRDaGlsZHJlbiAmJiAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICBpZiAoJG5lZWRzVmlzaXRD
aGlsZHJlbikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1l
fSo+KGNlbGwpO1xuIik7CkBAIC0yNzg3LDYgKzI3ODksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2
ZW50VGFyZ2V0In0gfHwgJGludGVyZmFjZS0+bmFtZSBlcSAiRXZlbnRUYXJnZXQiKSB7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT5pbXBsKCkudmlzaXRK
U0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpO1xuIik7CiAgICAgICAgIH0KKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4odmlz
aXRvcik7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21N
YXJrRnVuY3Rpb24ifTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJSZXBvcnRFeHRyYU1lbW9yeUNvc3QifSkgewogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKGNlbGwsIHRoaXNPYmpl
Y3QtPmltcGwoKS5tZW1vcnlDb3N0KCkpO1xuIik7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244861</attachid>
            <date>2015-01-18 09:03:53 -0800</date>
            <delta_ts>2015-01-18 12:57:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132148-20150118090400.patch</filename>
            <type>text/plain</type>
            <size>15579</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDliMGExNzRlMmExYjVj
ODM5NTZjN2UwNzU2MTAyZWY2NWNkZGJhNS4uM2RkYWY5OGIzZWM4NTg3ZTVkOTJlZTJkM2MwZjUw
YzEzMTUzMGYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDE1LTAxLTE4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMTI1MjUx
KTogd3JhcHBlciBsaWZldGltZXMgb2YgU1ZHRWxlbWVudEluc3RhbmNlIGFyZSBpbmNvcnJlY3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjE0OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN2
Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1ldmVudC1saXN0ZW5lcnMueGh0bWwKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKTogVXBkYXRlZCBmb3IgdGhlIG5ldyByZXR1
cm4gdHlwZQorICAgICAgICBvZiBKU0xpc3RlbmVyOjpjcmVhdGUuIEZvciB0aGUgZXZlbnQgdHlw
ZSwgdXNlIEpTU3RyaW5nOjp0b0F0b21pY1N0cmluZyBpbnN0ZWFkIG9mCisgICAgICAgIGNhbGxp
bmcgSlNTdHJpbmc6OnZhbHVlIGFuZCB0aGVuIGNvbnZlcnRpbmcgdG8gYW4gQXRvbWljU3RyaW5n
LgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOiBT
YW1lIGNoYW5nZXMgYXMgZm9yIGFkZEV2ZW50TGlzdGVuZXIuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9yd2FyZHNFdmVu
dExpc3RlbmVycyk6IEFkZGVkLiBIZWxwZXIgdG8gZGV0ZWN0IHRoZSBzcGVjaWFsIGNhc2UgbmVl
ZGVkCisgICAgICAgIGZvciBTVkdFbGVtZW50SW5zdGFuY2UuIEluIHRoZSBmdXR1cmUsIGZvciBi
ZXR0ZXIgZW5jYXBzdWxhdGlvbiwgd2UgY291bGQgdXNlIHZpcnR1YWwKKyAgICAgICAgZnVuY3Rp
b25zLCBidXQgZm9yIG5vdyBoYXJkIGNvZGluZyB0aGlzIHNpbmdsZSBjbGFzcyBzZWVtcyBmaW5l
LgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVyKTogQWRkZWQu
IEZvciB1c2UgaWYgZm9yd2FyZHNFdmVudExpc3RlbmVycworICAgICAgICByZXR1cm5zIHRydWUs
IHRvIGZpbmQgb3V0IHdoZXJlIGV2ZW50IGxpc3RlbmVycyB3aWxsIGJlIGZvcndhcmRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvckF0dHJpYnV0ZSk6IEFkZGVk
LiBSZXBsYWNlcyB0aGUgb2xkIGZ1bmN0aW9uCisgICAgICAgIGNyZWF0ZUpTQXR0cmlidXRlRXZl
bnRMaXN0ZW5lciwgZm9yIFNWR0VsZW1lbnRJbnN0YW5jZSBhdHRyaWJ1dGVzIG9ubHkuCisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBZGQpOiBBZGRlZC4gSGVscGVy
IGZ1bmN0aW9uIHRvIGF2b2lkIHJlcGVhdGVkCisgICAgICAgIGdlbmVyYXRlZCBjb2RlIGluIHRo
ZSBhZGRFbGVtZW50TGlzdGVuZXIgYmluZGluZ3Mgb3RoZXIgdGhhbiB0aGUgRE9NV2luZG93IG9u
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpjcmVhdGUpOiBDaGFuZ2VkIHRvIHJldHVybiBhIFJl
ZiBpbnN0ZWFkIG9mIGEgUGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUpTRXZl
bnRMaXN0ZW5lckZvckF0dHJpYnV0ZSk6IFJlbmFtZWQgZnJvbSBjcmVhdGVKU0F0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIsCisgICAgICAgIGNoYW5nZWQgdG8gcmV0dXJuIGEgUmVmUHRyIGluc3RlYWQg
b2YgYSBQYXNzUmVmUHRyIGFuZCB0byB0YWtlIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4KKyAgICAg
ICAgcG9pbnRlcnMgZm9yIG5vbi1udWxsIHRoaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUpTRXZlbnRMaXN0ZW5lckZvclJlbW92ZSk6IEFkZGVkLiBTbWFsbCB3cmFwcGVyIHRoYXQgY2Fs
bHMKKyAgICAgICAgY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yQWRkIHNpbmNlIHRoZXkgYXJlIGN1
cnJlbnRseSBpZGVudGljYWwuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lckNhbGwp
OiBSZW1vdmVkIHRoZSBzcGVjaWFsIGNhc2UgZm9yIEpTU1ZHRWxlbWVudEluc3RhbmNlCisgICAg
ICAgIGFuZCB1cGRhdGVkIHRvIGNhbGwgdGhlIG5ldyBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JB
dHRyaWJ1dGUuIFRoZSBzcGVjaWFsIGNhc2UgZm9yCisgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5j
ZSBpcyBub3cgaW4gSlNFdmVudExpc3RlbmVyLmgvY3BwLCB3aGljaCBpcyBuaWNlciBzaW5jZSB3
ZSBwcmVmZXIgdG8KKyAgICAgICAga2VlcCB0aGUgZ2VuZXJhdGVkIGNvZGUgc2ltcGxlciBpZiBw
b3NzaWJsZS4KKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwpOiBSZW1vdmVkIHRo
ZSBzcGVjaWFsIGNhc2UgZm9yIEpTU1ZHRWxlbWVudEluc3RhbmNlLiBUaGlzCisgICAgICAgIGhh
cyBiZWVuIGRlYWQgY29kZSBzaW5jZSB0aGUgZXhwbGljaXQgZGVmaW5pdGlvbiBvZiBhZGQvcmVt
b3ZlRXZlbnRMaXN0ZW5lciB3YXMgcmVtb3ZlZAorICAgICAgICBmcm9tIFNWR0VsZW1lbnRJbnN0
YW5jZS5pZGwsIGFuZCB3YXMgYWxzbyBhIHByb2JsZW0gaWYgc29tZW9uZSB3ZXJlIHRvIHVzZSB0
aGUKKyAgICAgICAgYWRkRXZlbnRMaXN0ZW5lciBmdW5jdGlvbiBmcm9tIEV2ZW50VGFyZ2V0IG9u
IGFuIFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3QuIFRoZSBmdW5jdGlvbgorICAgICAgICBuZWVk
cyB0byBiZSBnZW5lcmljIGF0IHJ1bnRpbWUuIFVzZSB0b0F0b21pY1N0cmluZyBhcyBpbiBKU0RP
TVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lciBhYm92ZS4KKyAgICAgICAgQ2FsbCB0aGUgdHdvIG5l
dyBmdW5jdGlvbnMsIGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvckFkZCBhbmQgY3JlYXRlSlNFdmVu
dExpc3RlbmVyRm9yUmVtb3ZlLgorICAgICAgICBUaG9zZSBuZXcgZnVuY3Rpb25zIHByb3Blcmx5
IGhhbmRsZSBTVkdFbGVtZW50SW5zdGFuY2UuCisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0
aW9uKTogRG9uJ3QgcGFzcyB0aGUgY2xhc3MgbmFtZSB0byBHZW5lcmF0ZUF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXJDYWxsCisgICAgICAgIG9yIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwgYW55IG1v
cmUuCisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6IFVzZSBKU1N0cmlu
Zzo6dG9BdG9taWNTdHJpbmcgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgICAgIEpTU3RyaW5nOjp2
YWx1ZSBhbmQgdGhlbiBjb252ZXJ0aW5nIHRvIEF0b21pY1N0cmluZy4KKwogMjAxNS0wMS0xNiAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBDb3Jy
ZWN0IGluZmluaXRlIGxvb3AgaW4gV2hlZWwgSGFuZGxlciBjb2RlIGluIEV2ZW50SGFuZGxlck1h
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CmluZGV4IDI1YzE1OTM2NGI0NTRiNGY2YjA1MWU1ZTkyN2E2N2YxMzVlNzYyZTIuLjAyNjA4ZmE2
ZTRlMmY1NzFlNGIzNzFlNjgxOWY4OTMyM2E4OTJhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTY1Miw3ICs2NTIsNyBAQCBK
U1ZhbHVlIEpTRE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCi0gICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLmFkZEV2ZW50TGlzdGVuZXIo
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBn
bG9iYWxPYmplY3QoKS0+d29ybGQoKSksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVj
KSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTY2Niw3ICs2NjYsNyBAQCBK
U1ZhbHVlIEpTRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgaW1wbCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkuZ2V0
KCksIGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWlj
U3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciks
IHRoaXMsIGZhbHNlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSkucHRyKCksIGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4
IGU5YzljNmViMTkwZTNkOThhMmY4YzNhZjJiNDY4YzJkNTA0OGZiYjguLmE0NDk5NGZlMWU5YzMw
NjNiODY3ZGJiNTk5NjZkOWY1YjlhOWUyMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpT
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNs
dWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGVJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJK
U1NWR0VsZW1lbnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5oPgpAQCAtMTYzLDQgKzE2NCwzMyBAQCBib29sIEpTRXZlbnRMaXN0ZW5lcjo6b3Bl
cmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKKy8vIFNWR0VsZW1lbnRJbnN0YW5jZSBmb3J3YXJkcyBsaXN0ZW5lcnMgdG8gaXRzIGNv
cnJlc3BvbmRpbmcgZWxlbWVudCwgc28gdGhlIGxpc3RlbmVycyBhcmUKKy8vIHByb3RlY3RlZCBi
eSB0aGUgd3JhcHBlciBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50LCBub3QgdGhlIGVsZW1l
bnQgaW5zdGFuY2UncyB3cmFwcGVyLgorCitib29sIGZvcndhcmRzRXZlbnRMaXN0ZW5lcnMoSlND
OjpKU09iamVjdCYgb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuY2xhc3NJbmZvKCkgPT0gSlNT
VkdFbGVtZW50SW5zdGFuY2U6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgQVNT
RVJUKCFvYmplY3QuaW5oZXJpdHMoSlNTVkdFbGVtZW50SW5zdGFuY2U6OmluZm8oKSkpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEpTQzo6SlNPYmplY3QmIGNvcnJlc3BvbmRpbmdF
bGVtZW50V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHdyYXBw
ZXIpCit7CisgICAgSlNTVkdFbGVtZW50SW5zdGFuY2UmIGNhc3RlZFdyYXBwZXIgPSAqanNDYXN0
PEpTU1ZHRWxlbWVudEluc3RhbmNlKj4oJndyYXBwZXIpOworICAgIHJldHVybiAqYXNPYmplY3Qo
dG9KUygmc3RhdGUsIGNhc3RlZFdyYXBwZXIuZ2xvYmFsT2JqZWN0KCksICpjYXN0ZWRXcmFwcGVy
LmltcGwoKS5jb3JyZXNwb25kaW5nRWxlbWVudCgpKSk7Cit9CisKK1JlZlB0cjxKU0V2ZW50TGlz
dGVuZXI+IGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSBsaXN0ZW5lciwgSlNTVkdFbGVtZW50SW5zdGFuY2UmIHdyYXBw
ZXIpCit7CisgICAgcmV0dXJuIGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvckF0dHJpYnV0ZShzdGF0
ZSwgbGlzdGVuZXIsIGNvcnJlc3BvbmRpbmdFbGVtZW50V3JhcHBlcihzdGF0ZSwgd3JhcHBlcikp
OworfQorCitSZWY8SlNFdmVudExpc3RlbmVyPiBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBZGQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiBsaXN0ZW5lciwgSlNDOjpKU09i
amVjdCYgd3JhcHBlcikKK3sKKyAgICBKU0M6OkpTT2JqZWN0JiBhY3R1YWxXcmFwcGVyID0gZm9y
d2FyZHNFdmVudExpc3RlbmVycyh3cmFwcGVyKSA/IGNvcnJlc3BvbmRpbmdFbGVtZW50V3JhcHBl
cihzdGF0ZSwgd3JhcHBlcikgOiB3cmFwcGVyOworICAgIEFTU0VSVCghZm9yd2FyZHNFdmVudExp
c3RlbmVycyhhY3R1YWxXcmFwcGVyKSk7CisgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKCZsaXN0ZW5lciwgJmFjdHVhbFdyYXBwZXIsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRl
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmgKaW5kZXggYWM0N2ZjNjAxNzliYTg0YmM5NTRhZjY1YWJj
NjQ2ZTMwNWZhYmJkMy4uYjkzMmZjZTM5NmVkOWZkMDBiYmVhMmQ0MWZlYjk4NDM5NTcyZjA3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKQEAgLTMw
LDEyICszMCwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNET01HbG9i
YWxPYmplY3Q7CisgICAgY2xhc3MgSlNTVkdFbGVtZW50SW5zdGFuY2U7CiAKICAgICBjbGFzcyBK
U0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IGNyZWF0ZShKU0M6OkpTT2Jq
ZWN0KiBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCogd3JhcHBlciwgYm9vbCBpc0F0dHJpYnV0ZSwg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKKyAgICAgICAgc3RhdGljIFJlZjxKU0V2ZW50TGlzdGVu
ZXI+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCogd3JhcHBl
ciwgYm9vbCBpc0F0dHJpYnV0ZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIs
IHdyYXBwZXIsIGlzQXR0cmlidXRlLCB3b3JsZCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSlNFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB3cmFwcGVyLCBpc0F0dHJpYnV0ZSwg
d29ybGQpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0V2ZW50TGlzdGVu
ZXIqIGNhc3QoY29uc3QgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCkBAIC03NSw2ICs3NiwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1f
aXNvbGF0ZWRXb3JsZDsKICAgICB9OwogCisgICAgLy8gRm9yICJvblhYWCIgZXZlbnQgYXR0cmli
dXRlcy4KKyAgICBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBjcmVhdGVKU0V2ZW50TGlzdGVuZXJG
b3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgbGlzdGVuZXIsIEpTQzo6
SlNPYmplY3QmIHdyYXBwZXIpOworICAgIFJlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IGNyZWF0ZUpT
RXZlbnRMaXN0ZW5lckZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSBs
aXN0ZW5lciwgSlNTVkdFbGVtZW50SW5zdGFuY2UmIHdyYXBwZXIpOworCisgICAgUmVmPEpTRXZl
bnRMaXN0ZW5lcj4gY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yQWRkKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU09iamVjdCYgbGlzdGVuZXIsIEpTQzo6SlNPYmplY3QmIHdyYXBwZXIpOworICAgIFJl
ZjxKU0V2ZW50TGlzdGVuZXI+IGNyZWF0ZUpTRXZlbnRMaXN0ZW5lckZvclJlbW92ZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIGxpc3RlbmVyLCBKU0M6OkpTT2JqZWN0JiB3cmFwcGVy
KTsKKworICAgIGJvb2wgZm9yd2FyZHNFdmVudExpc3RlbmVycyhKU0M6OkpTT2JqZWN0JiB3cmFw
cGVyKTsKKwogICAgIGlubGluZSBKU0M6OkpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmpzRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgY29u
c3QKICAgICB7CiAgICAgICAgIC8vIGluaXRpYWxpemVKU0Z1bmN0aW9uIGNhbiB0cmlnZ2VyIGNv
ZGUgdGhhdCBkZWxldGVzIHRoaXMgZXZlbnQgbGlzdGVuZXIKQEAgLTEwNiwxNSArMTE2LDE4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIG1fanNGdW5jdGlvbi5nZXQoKTsK
ICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgSlMgRXZlbnRMaXN0ZW5lciBmb3IgYW4gIm9uWFhY
IiBldmVudCBhdHRyaWJ1dGUuCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVy
PiBjcmVhdGVKU0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCogd3JhcHBlcikKKyAgICBpbmxpbmUg
UmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlSlNFdmVudExpc3RlbmVyRm9yQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGxpc3RlbmVyLCBKU0M6OkpTT2Jq
ZWN0JiB3cmFwcGVyKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFmb3J3YXJkc0V2ZW50TGlzdGVu
ZXJzKHdyYXBwZXIpKTsKICAgICAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgd3JhcHBlciwgdHJ1ZSwgY3VycmVudFdvcmxkKGV4ZWMpKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCAmd3JhcHBlciwgdHJ1ZSwgY3VycmVudFdv
cmxkKCZzdGF0ZSkpOwogICAgIH0KIAorICAgIGlubGluZSBSZWY8SlNFdmVudExpc3RlbmVyPiBj
cmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JSZW1vdmUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTT2JqZWN0JiBsaXN0ZW5lciwgSlNDOjpKU09iamVjdCYgd3JhcHBlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBZGQoc3RhdGUsIGxpc3RlbmVyLCB3
cmFwcGVyKTsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNzMx
MWQ2Y2I3N2VkZjk5M2U0NzQxMzgwNmY5M2VhNzRiODhiZDUwLi40Mjk3NGQ0NTk4MTIzZWZjYWRm
NzIzY2UzOTViY2M2NjFjMGUwOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTQyLDU2ICsxNDIsMzEgQEAgc3ViIEdl
bmVyYXRlSW50ZXJmYWNlCiAKIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJDYWxs
CiB7Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rp
b25OYW1lID0gc2hpZnQ7CiAgICAgbXkgJHdpbmRvd0V2ZW50TGlzdGVuZXIgPSBzaGlmdDsKIAog
ICAgIG15ICR3cmFwcGVyT2JqZWN0ID0gJHdpbmRvd0V2ZW50TGlzdGVuZXIgPyAiZ2xvYmFsT2Jq
ZWN0IiA6ICJjYXN0ZWRUaGlzIjsKICAgICBteSBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCA9
ICgpOwogCi0gICAgaWYgKCRjbGFzc05hbWUgZXEgIkpTU1ZHRWxlbWVudEluc3RhbmNlIikgewot
ICAgICAgICAjIFNWR0VsZW1lbnRJbnN0YW5jZXMgaGF2ZSB0byBjcmVhdGUgSlNFdmVudExpc3Rl
bmVycyB3aXRoIHRoZSB3cmFwcGVyIGVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudAot
ICAgICAgICAkd3JhcHBlck9iamVjdCA9ICJhc09iamVjdChjb3JyZXNwb25kaW5nRWxlbWVudFdy
YXBwZXIpIjsKLQotICAgICAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCA8PEVO
RCk7Ci0gICAgSlNWYWx1ZSBjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBwZXIgPSB0b0pTKGV4ZWMs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvcnJlc3BvbmRpbmdFbGVtZW50KCkp
OwotICAgIGlmIChjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBwZXIuaXNPYmplY3QoKSkKLUVORAot
Ci0gICAgICAgICMgQWRkIGxlYWRpbmcgd2hpdGVzcGFjZSB0byBmb3JtYXQgdGhlIGltcGwuc2V0
Li4uIGxpbmUgY29ycmVjdGx5Ci0gICAgICAgIHB1c2goQEdlbmVyYXRlRXZlbnRMaXN0ZW5lcklt
cGwsICIgICAgIik7Ci0gICAgfQotCi0gICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1w
bCwgIiAgICBpbXBsLnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgJHdyYXBwZXJPYmplY3QpKTtcbiIpOworICAgIHB1
c2goQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGwsICIgICAgaW1wbC5zZXQkaW1wbFNldHRlckZ1
bmN0aW9uTmFtZShjcmVhdGVKU0V2ZW50TGlzdGVuZXJGb3JBdHRyaWJ1dGUoKmV4ZWMsIHZhbHVl
LCAqJHdyYXBwZXJPYmplY3QpKTtcbiIpOwogICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3Rl
bmVySW1wbDsKIH0KIAogc3ViIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwKIHsKLSAgICBteSAk
Y2xhc3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OwotICAgIG15
ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiIiA6ICIu
Z2V0KCkiOworICAgIG15ICRzdWZmaXggPSB1Y2ZpcnN0ICRmdW5jdGlvbk5hbWU7CisgICAgbXkg
JHBhc3NSZWZQdHJIYW5kbGluZyA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICIiIDogIi5w
dHIoKSI7CiAKICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2ZW50TGlzdGVuZXIuaCJ9ID0gMTsKIAog
ICAgIG15IEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsID0gKCk7Ci0gICAgbXkgJHdyYXBwZXJP
YmplY3QgPSAiY2FzdGVkVGhpcyI7Ci0gICAgaWYgKCRjbGFzc05hbWUgZXEgIkpTU1ZHRWxlbWVu
dEluc3RhbmNlIikgewotICAgICAgICAjIFNWR0VsZW1lbnRJbnN0YW5jZXMgaGF2ZSB0byBjcmVh
dGUgSlNFdmVudExpc3RlbmVycyB3aXRoIHRoZSB3cmFwcGVyIGVxdWFsIHRvIHRoZSBjb3JyZXNw
b25kaW5nRWxlbWVudAotICAgICAgICAkd3JhcHBlck9iamVjdCA9ICJhc09iamVjdChjb3JyZXNw
b25kaW5nRWxlbWVudFdyYXBwZXIpIjsKLQotICAgICAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlz
dGVuZXJJbXBsLCA8PEVORCk7Ci0gICAgSlNWYWx1ZSBjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBw
ZXIgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvcnJlc3Bv
bmRpbmdFbGVtZW50KCkpOwotICAgIGlmICghY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVyLmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci1FTkQKLSAgICB9CiAKICAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCA8PEVO
RCk7CiAgICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGlmICgh
bGlzdGVuZXIuaXNPYmplY3QoKSkKKyAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyLmlzT2JqZWN0
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IGltcGwuJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcihleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0
KGxpc3RlbmVyKSwgJHdyYXBwZXJPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpJHBh
c3NSZWZQdHJIYW5kbGluZywgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICBpbXBsLiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIoZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpLCBjcmVhdGVKU0V2ZW50TGlzdGVuZXJG
b3Ikc3VmZml4KCpleGVjLCAqYXNPYmplY3QobGlzdGVuZXIpLCAqY2FzdGVkVGhpcykkcGFzc1Jl
ZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiBFTkQKICAgICByZXR1cm4gQEdl
bmVyYXRlRXZlbnRMaXN0ZW5lckltcGw7CkBAIC0yNTk3LDcgKzI1NzIsNyBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
SlNFcnJvckhhbmRsZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGltcGwuc2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoY3JlYXRlSlNF
cnJvckhhbmRsZXIoZXhlYywgdmFsdWUsIGNhc3RlZFRoaXMpKTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIEdlbmVyYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lckNhbGwoJGNsYXNzTmFtZSwgJGltcGxT
ZXR0ZXJGdW5jdGlvbk5hbWUsICR3aW5kb3dFdmVudExpc3RlbmVyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyQ2FsbCgkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSwgJHdpbmRvd0V2ZW50TGlzdGVuZXIpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAg
ICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwpA
QCAtMjgzNyw5ICsyODEyLDkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAg
ICAgICAgICAgICAgICAjIEZvciBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGNvbnRlbnQsIHRo
ZSBFdmVudExpc3RlbmVyIGNhbGxzIGFyZSBnZW5lcmF0ZWQgd2l0aG91dCBHZW5lcmF0ZUFyZ3Vt
ZW50c0NvdW50Q2hlY2suCiAgICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSBlcSAiYWRkRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsKCRjbGFzc05h
bWUsICJhZGQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
R2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCgiYWRkIikpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2lmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0ZW5l
ciIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0
ZUV2ZW50TGlzdGVuZXJDYWxsKCRjbGFzc05hbWUsICJyZW1vdmUiKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbCgi
cmVtb3ZlIikpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrKFxAaW1wbENvbnRlbnQsICRmdW5j
dGlvbiwgJGludGVyZmFjZSk7CiAKQEAgLTQ1MjEsNyArNDQ5Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NO
YW1lfShFeGVjCiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25zdHJ1Y3RvciBh
c3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOwogCi0gICAgQXRv
bWljU3RyaW5nIGV2ZW50VHlwZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnRvQXRvbWljU3RyaW5nKGV4ZWMpOwogICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>