<?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>123084</bug_id>
          
          <creation_ts>2013-10-20 08:16:13 -0700</creation_ts>
          <short_desc>Avoid JSC debugger overhead unless needed</short_desc>
          <delta_ts>2013-12-12 13:21:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sebastian</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>941696</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-20 08:16:13 -0700</bug_when>
    <thetext>As a first step towards reclaiming baseline JIT level performance, we can disable debug hook callbacks if there are no breakpoints set.  If there are any breakpoints set, then performance will be where it was.  If all breakpoints are not set, then performance will improve by about 3x over shipping Safari.  Removing previously set breakpoints will also allow the performance to improve again.

In addition, we can also avoid exception event callbacks if break on all and uncaught exceptions is not enabled.  This doesn&apos;t significantly help with performance because exceptions are rare.

Will also address problems with ScriptDebugeServer::m_currentCallFrame getting stale.  This is needed in order for the above to work correctly.

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941697</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-20 08:17:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/15273499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941700</commentid>
    <comment_count>2</comment_count>
      <attachid>214702</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-20 08:26:14 -0700</bug_when>
    <thetext>Created attachment 214702
the patch.

This patch builds and works for the intended purpose.  However, I still need to run regression tests on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941704</commentid>
    <comment_count>3</comment_count>
      <attachid>214702</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-20 08:46:53 -0700</bug_when>
    <thetext>Comment on attachment 214702
the patch.

One more change needed.  Revised patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941710</commentid>
    <comment_count>4</comment_count>
      <attachid>214702</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-20 10:33:03 -0700</bug_when>
    <thetext>Comment on attachment 214702
the patch.

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

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:95
&gt; +    : m_isStepping(false)

Let&apos;s call this m_needsOpDebugCallbacks.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:96
&gt; +    , m_needStepping(false)

Let&apos;s call this m_shouldPause.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:98
&gt; +    , m_needExceptionEvents(false)

Let&apos;s call this m_needsExceptionCallbacks.

&gt; Source/JavaScriptCore/debugger/Debugger.h:82
&gt; +    friend class JIT;
&gt; +    friend class LLIntOffsetsExtractor;

You shouldn&apos;t need to make JIT a friend. Instead, you should provide a function named &quot;needsOpDebugCallbacksOffset()&quot;, which returns the offset of that data member.

&gt; Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1057
&gt; +    loadPtr(&amp;debugger-&gt;m_isStepping, regT0);

Can we just use a bool with branchTest8?

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:803
&gt; +    loadp JSGlobalObject::m_debugger[t0], t0
&gt; +    btiz t0, .opDebugDone

You shouldn&apos;t need to null-check the debugger. The JIT doesn&apos;t do so, so doing so here will only mask bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941722</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-20 16:53:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:803
&gt; &gt; +    loadp JSGlobalObject::m_debugger[t0], t0
&gt; &gt; +    btiz t0, .opDebugDone
&gt; 
&gt; You shouldn&apos;t need to null-check the debugger. The JIT doesn&apos;t do so, so doing so here will only mask bugs.

Some layout tests are showing that I do need to null-check the debugger.  This is needed when the debugger has been detached but the VM hasn&apos;t recompiled all the functions yet.

In my testing I see the following order of functions called:
1. WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon(this=0x0000000108131380) + 19 at ScriptDebugServer.cpp:628
2. JSC::Debugger::detach(this=0x0000000108131380, globalObject=0x000000010e31f970) + 24 at Debugger.cpp:118

But before we get to JSC::Debugger::recompileAllJSFunctions(JSC::VM*) + 23 at Debugger.cpp:138, I see:

3. * thread #1: tid = 0x17e96f, 0x00000001005a9a6d JavaScriptCore`llint_op_debug + 15, queue = &apos;com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x30)
    frame #0: 0x00000001005a9a6d JavaScriptCore`llint_op_debug + 15
JavaScriptCore`llint_op_debug + 15:
-&gt; 0x1005a9a6d:  movzbl 48(%rax), %eax
   0x1005a9a71:  testb  %al, %al
   0x1005a9a73:  je     0x1005a9a98               ; llint_op_debug + 58
   0x1005a9a79:  leaq   (%r10,%rsi,8), %rsi

where %rax is 0 but is supposed to contain the Debugger*.

So, instead of removing this check from the LLINT, I&apos;ll add it to the JIT generated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941913</commentid>
    <comment_count>6</comment_count>
      <attachid>214753</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-21 11:17:42 -0700</bug_when>
    <thetext>Created attachment 214753
patch 2: addressed Geoff&apos;s feedback, enable exception callbacks always for the Mac WebScriptDebugger, and fixed a bunch of layout test failures.  

This patch runs the layout tests with no known regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941916</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-21 11:19:58 -0700</bug_when>
    <thetext>Attachment 214753 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/debugger/Debugger.cpp&apos;, u&apos;Source/JavaScriptCore/debugger/Debugger.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntOffsetsExtractor.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter.asm&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/bindings/js/ScriptDebugServer.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebView/WebScriptDebugger.mm&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1057:  Declaration has space between type name and * in char *debuggerAddress  [whitespace/declaration] [3]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:1060:  Declaration has space between type name and * in char *flagAddress  [whitespace/declaration] [3]
Source/JavaScriptCore/jit/JITOpcodes.cpp:733:  Declaration has space between type name and * in char *debuggerAddress  [whitespace/declaration] [3]
Source/JavaScriptCore/jit/JITOpcodes.cpp:735:  Declaration has space between type name and * in char *flagAddress  [whitespace/declaration] [3]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941923</commentid>
    <comment_count>8</comment_count>
      <attachid>214756</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-21 11:26:55 -0700</bug_when>
    <thetext>Created attachment 214756
patch 3: fixed style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941939</commentid>
    <comment_count>9</comment_count>
      <attachid>214756</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-21 11:43:05 -0700</bug_when>
    <thetext>Comment on attachment 214756
patch 3: fixed style issues.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        - Fixed a bug with ScriptDebugServer::m_currentCallFrame getting stale.

Your ChangeLog needs to explain what this bug was, how you fixed it, and what it&apos;s tested by.

&gt; Source/WebCore/bindings/js/ScriptDebugServer.cpp:261
&gt; +    setNeedsExceptionCallbacks(pause != DontPauseOnExceptions);

The default Web Inspector condition is to require callbacks for uncaught exceptions, but not for caught exceptions. It&apos;s not very interesting to have a debugger feature for when no exception callbacks are required at all, since that condition is false by default. It would be more interesting to have a debugger feature for when only uncaught exception callbacks are required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942034</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-21 15:00:12 -0700</bug_when>
    <thetext>Thanks for the review.  The ChangeLog comment has been updated to describe why m_currentCallFrame can get stale and how it is corrected.

Landed in r157746: &lt;http://trac.webkit.org/r157746&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959213</commentid>
    <comment_count>11</comment_count>
    <who name="Sebastian Markbåge">sebastian</who>
    <bug_when>2013-12-12 09:28:29 -0800</bug_when>
    <thetext>Does this handle the case where a debugger statement is hit but there are no breakpoints attached (and it&apos;s not set to pause on the next statement)? I don&apos;t see a case for that.

I&apos;m also having trouble with the llint version of this check. It skips the debug hook when it shouldn&apos;t. Not sure why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959215</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-12-12 09:45:19 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Does this handle the case where a debugger statement is hit but there are no breakpoints attached (and it&apos;s not set to pause on the next statement)? I don&apos;t see a case for that.
&gt; 
&gt; I&apos;m also having trouble with the llint version of this check. It skips the debug hook when it shouldn&apos;t. Not sure why.

Hmmm, I had forgotten about the debugger statement.  I’ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959318</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-12 13:21:56 -0800</bug_when>
    <thetext>&gt; Does this handle the case where a debugger statement is hit but there are no breakpoints attached (and it&apos;s not set to pause on the next statement)?

I think the behavior we want here is to treat the debugger statement as if it were a breakpoint.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214702</attachid>
            <date>2013-10-20 08:26:14 -0700</date>
            <delta_ts>2013-10-21 11:17:42 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-123084.patch</filename>
            <type>text/plain</type>
            <size>13703</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEzLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
dm9pZCBKU0MgZGVidWdnZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIElmIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQsIHdlIG5vdyBhdm9pZCBjYWxsaW5nIHRoZSBkZWJ1ZyBob29rIGNhbGxiYWNrcy4KKyAg
ICAgICAgLSBJZiBubyBicmVhayBvbiBleGNlcHRpb24gaXMgc2V0LCB3ZSBhbHNvIGF2b2lkIGV4
Y2VwdGlvbiBldmVudCBkZWJ1ZyBjYWxsYmFja3MuCisgICAgICAgIC0gRml4ZWQgYSBidWcgd2l0
aCBTY3JpcHREZWJ1Z1NlcnZlcjo6bV9jdXJyZW50Q2FsbEZyYW1lIGdldHRpbmcgc3RhbGUuCisK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXROZWVkRXhjZXB0aW9uRXZl
bnRzKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnNldE5lZWRTdGVwcGluZyk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnVwZGF0ZVN0ZXBwaW5nTW9kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVi
dWdnZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjp1bndpbmQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
ZGVidWcpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9MTEludE9m
ZnNldHNFeHRyYWN0b3IuY3BwOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorCiAyMDEzLTEwLTIwICBKdWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VAY2lzY28uY29t
PgogCiAgICAgICAgIFtzaDRdIEZpeCBidWlsZCAoYnJva2VuIHNpbmNlIHIxNTc2OTApLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lv
biAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwxNCBAQCBpbmxpbmUgdm9pZCBSZWNvbXBpbGVy
OjpvcGVyYXRvcigpKEpTQ2VsCiAKIG5hbWVzcGFjZSBKU0MgewogCitEZWJ1Z2dlcjo6RGVidWdn
ZXIoKQorICAgIDogbV9pc1N0ZXBwaW5nKGZhbHNlKQorICAgICwgbV9uZWVkU3RlcHBpbmcoZmFs
c2UpCisgICAgLCBtX251bWJlck9mQnJlYWtwb2ludHMoMCkKKyAgICAsIG1fbmVlZEV4Y2VwdGlv
bkV2ZW50cyhmYWxzZSkKK3sKK30KKwogRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB7CiAgICAgSGFz
aFNldDxKU0dsb2JhbE9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBtX2dsb2JhbE9iamVjdHMuZW5k
KCk7CkBAIC0xMTIsNiArMTIwLDE3IEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9i
amVjdCogZ2wKICAgICBnbG9iYWxPYmplY3QtPnNldERlYnVnZ2VyKDApOwogfQogCit2b2lkIERl
YnVnZ2VyOjpzZXROZWVkRXhjZXB0aW9uRXZlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgbV9uZWVk
RXhjZXB0aW9uRXZlbnRzID0gdmFsdWU7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldE5lZWRTdGVw
cGluZyhib29sIHZhbHVlKQoreworICAgIG1fbmVlZFN0ZXBwaW5nID0gdmFsdWU7CisgICAgdXBk
YXRlU3RlcHBpbmdNb2RlKCk7Cit9CisKIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVu
Y3Rpb25zKFZNKiB2bSkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mg
bm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKQEAgLTEyNyw0ICsxNDYsMTYg
QEAgdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVgogICAgIHZtLT5oZWFw
Lm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlvblNjb3BlLCByZWNvbXBpbGVy
KTsKIH0KIAordm9pZCBEZWJ1Z2dlcjo6dXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhpbnQgbnVt
YmVyT2ZCcmVha3BvaW50cykKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZCcmVha3BvaW50cyA+PSAw
KTsKKyAgICBtX251bWJlck9mQnJlYWtwb2ludHMgPSBudW1iZXJPZkJyZWFrcG9pbnRzOworICAg
IHVwZGF0ZVN0ZXBwaW5nTW9kZSgpOworfQorCit2b2lkIERlYnVnZ2VyOjp1cGRhdGVTdGVwcGlu
Z01vZGUoKQoreworICAgIG1faXNTdGVwcGluZyA9IG1fbmVlZFN0ZXBwaW5nIHx8IG1fbnVtYmVy
T2ZCcmVha3BvaW50czsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTU3Njk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDIxIEBAIHR5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKIAogY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgRGVidWdnZXIgewogcHVibGljOgorICAgIERlYnVnZ2VyKCk7CiAgICAg
dmlydHVhbCB+RGVidWdnZXIoKTsKIAorICAgIGJvb2wgaXNTdGVwcGluZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNTdGVwcGluZzsgfQorCisgICAgYm9vbCBuZWVkU3RlcHBpbmcoKSBjb25zdCB7IHJl
dHVybiBtX25lZWRTdGVwcGluZzsgfQorICAgIHZvaWQgc2V0TmVlZFN0ZXBwaW5nKGJvb2wpOwor
CisgICAgYm9vbCBuZWVkRXhjZXB0aW9uRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkRXhj
ZXB0aW9uRXZlbnRzOyB9CisgICAgdm9pZCBzZXROZWVkRXhjZXB0aW9uRXZlbnRzKGJvb2wpOwor
CisgICAgdm9pZCBpbmNOdW1iZXJPZkJyZWFrcG9pbnRzKCkgeyB1cGRhdGVOdW1iZXJPZkJyZWFr
cG9pbnRzKG1fbnVtYmVyT2ZCcmVha3BvaW50cyArIDEpOyB9CisgICAgdm9pZCBkZWNOdW1iZXJP
ZkJyZWFrcG9pbnRzKCkgIHsgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhtX251bWJlck9mQnJl
YWtwb2ludHMgLSAxKTsgfQorICAgIHZvaWQgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhpbnQp
OworCiAgICAgdm9pZCBhdHRhY2goSlNHbG9iYWxPYmplY3QqKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAKQEAgLTU2LDcgKzY5LDE3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKik7CiAKIHByaXZhdGU6CisgICAgdm9p
ZCB1cGRhdGVTdGVwcGluZ01vZGUoKTsKKwogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPiBt
X2dsb2JhbE9iamVjdHM7CisKKyAgICBpbnRwdHJfdCBtX2lzU3RlcHBpbmc7CisgICAgYm9vbCBt
X25lZWRTdGVwcGluZzsKKyAgICBpbnQgbV9udW1iZXJPZkJyZWFrcG9pbnRzOworICAgIGJvb2wg
bV9uZWVkRXhjZXB0aW9uRXZlbnRzOworCisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MCw3ICs2NTAsOCBA
QCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp1CiAgICAgQVNTRVJUKGNh
bGxGcmFtZS0+dm0oKS5leGNlcHRpb25TdGFjaygpLnNpemUoKSk7CiAgICAgQVNTRVJUKCFleGNl
cHRpb25WYWx1ZS5pc09iamVjdCgpIHx8IGFzT2JqZWN0KGV4Y2VwdGlvblZhbHVlKS0+aGFzUHJv
cGVydHkoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnZtKCkucHJvcGVydHlOYW1lcy0+c3RhY2spKTsK
IAotICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+ZGVidWdnZXIoKSkgeworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOworICAgIGlmIChkZWJ1Z2dlciAm
JiBkZWJ1Z2dlci0+bmVlZEV4Y2VwdGlvbkV2ZW50cygpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9y
ZGVyIHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3
YXJkcywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlz
IGVycm9yLgogICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZt
KCkpOwpAQCAtMTI1MSw3ICsxMjUyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCkKIHsKICAgICBEZWJ1Z2dlciog
ZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsK
LSAgICBpZiAoIWRlYnVnZ2VyKQorICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2VyLT5pc1N0
ZXBwaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAoZGVidWdIb29rSUQpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpJ
VC5oIgogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgpAQCAtMTA1MSw3ICsxMDUyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVn
KEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
ICAgICBicmVha3BvaW50KCk7CiAjZWxzZQorICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNvZGVC
bG9jaygpLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKKyAgICBBU1NFUlQoZGVidWdnZXIp
OworICAgIGxvYWRQdHIoJmRlYnVnZ2VyLT5tX2lzU3RlcHBpbmcsIHJlZ1QwKTsKKyAgICBKdW1w
IHNraXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
KyAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNTc2OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtNzI3
LDcgKzcyOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VyCiAg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgYnJlYWtwb2ludCgpOwog
I2Vsc2UKKyAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
KCktPmRlYnVnZ2VyKCk7CisgICAgQVNTRVJUKGRlYnVnZ2VyKTsKKyAgICBsb2FkUHRyKCZkZWJ1
Z2dlci0+bV9pc1N0ZXBwaW5nLCByZWdUMCk7CisgICAgSnVtcCBza2lwRGVidWdIb29rID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1
ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc2tpcERlYnVnSG9vay5s
aW5rKHRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShyZXZpc2lvbiAxNTc2OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXJyYXlQcm9m
aWxlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTc5Nyw3ICs3OTcsMTUgQEAgX2xsaW50X29wX3Byb2ZpbGVfZGlkX2NhbGw6CiAKIF9sbGludF9v
cF9kZWJ1ZzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHQwCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCisgICAgbG9h
ZHAgSlNHbG9iYWxPYmplY3Q6Om1fZGVidWdnZXJbdDBdLCB0MAorICAgIGJ0aXogdDAsIC5vcERl
YnVnRG9uZQorICAgIGxvYWRwIERlYnVnZ2VyOjptX2lzU3RlcHBpbmdbdDBdLCB0MAorICAgIGJ0
aXogdDAsIC5vcERlYnVnRG9uZQorCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhf
ZGVidWcpCisub3BEZWJ1Z0RvbmU6ICAgICAgICAgICAgICAgICAgICAKICAgICBkaXNwYXRjaCgy
KQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzcwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTEwLTIwICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBKU0MgZGVidWdn
ZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAtIElm
IG5vIGJyZWFrcG9pbnRzIGFyZSBzZXQsIHdlIG5vdyBhdm9pZCBjYWxsaW5nIHRoZSBkZWJ1ZyBo
b29rIGNhbGxiYWNrcy4KKyAgICAgICAgLSBJZiBubyBicmVhayBvbiBleGNlcHRpb24gaXMgc2V0
LCB3ZSBhbHNvIGF2b2lkIGV4Y2VwdGlvbiBldmVudCBkZWJ1ZyBjYWxsYmFja3MuCisgICAgICAg
IC0gRml4ZWQgYSBidWcgd2l0aCBTY3JpcHREZWJ1Z1NlcnZlcjo6bV9jdXJyZW50Q2FsbEZyYW1l
IGdldHRpbmcgc3RhbGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1
c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OmJyZWFrUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c3Rl
cEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkQ29udGludWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6
OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hC
cmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNldCk6CisK
IDIwMTMtMTAtMjAgIFRoaWFnbyBkZSBCYXJyb3MgTGFjZXJkYSAgPHRoaWFnby5sYWNlcmRhQG9w
ZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmVtb3ZpbmcgInVudXNlZCBwYXJhbWV0ZXIiIGNvbXBp
bGluZyB3YXJuaW5ncyBmcm9tIFdlYktpdDIgYW5kIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDE1
NzY5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBAIFN0cmluZyBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2V0QnJlYWtwb2ludCgKICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAgICAg
YnJlYWtzVmVjdG9yLmFwcGVuZChzY3JpcHRCcmVha3BvaW50KTsKKyAgICBpbmNOdW1iZXJPZkJy
ZWFrcG9pbnRzKCk7CiAKICAgICAqYWN0dWFsTGluZU51bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQu
bGluZU51bWJlcjsKICAgICAqYWN0dWFsQ29sdW1uTnVtYmVyID0gc2NyaXB0QnJlYWtwb2ludC5j
b2x1bW5OdW1iZXI7CkBAIC0xNTAsNiArMTUxLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlQnJlYWtwb2ludAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3NDb3Vu
dDsgaSsrKSB7CiAgICAgICAgIGlmIChicmVha3NWZWN0b3IuYXQoaSkuY29sdW1uTnVtYmVyID09
IHN0YXRpY19jYXN0PGludD4oY29sdW1uTnVtYmVyKSkgewogICAgICAgICAgICAgYnJlYWtzVmVj
dG9yLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGRlY051bWJlck9mQnJlYWtwb2ludHMoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQ1LDYgKzI0Nyw3IEBAIGJv
b2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2kKIHZvaWQgU2NyaXB0RGVidWdT
ZXJ2ZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogewogICAgIG1fc291cmNlSWRUb0JyZWFrcG9pbnRz
LmNsZWFyKCk7CisgICAgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cygwKTsKIH0KIAogdm9pZCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQp
CkBAIC0yNTUsMTEgKzI1OCwxNCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3Bv
aW50c0FjCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KFBhdXNlT25FeGNlcHRpb25zU3RhdGUgcGF1c2UpCiB7CiAgICAgbV9wYXVzZU9uRXhjZXB0aW9u
c1N0YXRlID0gcGF1c2U7CisgICAgc2V0TmVlZEV4Y2VwdGlvbkV2ZW50cyhwYXVzZSAhPSBEb250
UGF1c2VPbkV4Y2VwdGlvbnMpOwogfQogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpzZXRQYXVz
ZU9uTmV4dFN0YXRlbWVudChib29sIHBhdXNlKQogewogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSBwYXVzZTsKKyAgICBpZiAocGF1c2UpCisgICAgICAgIHNldE5lZWRTdGVwcGluZyh0cnVl
KTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKQEAgLTI2OCw2
ICsyNzQsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpicmVha1Byb2dyYW0oKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBzZXRO
ZWVkU3RlcHBpbmcodHJ1ZSk7CiAgICAgcGF1c2VJZk5lZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUp
OwogfQogCkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcElu
dG9TdGF0ZW1lbgogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50
ID0gdHJ1ZTsKKyAgICBzZXROZWVkU3RlcHBpbmcodHJ1ZSk7CiAgICAgbV9kb25lUHJvY2Vzc2lu
Z0RlYnVnZ2VyRXZlbnRzID0gdHJ1ZTsKIH0KIApAQCAtMzUzLDYgKzM2MSwxMSBAQCB2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlCiB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpkaXNwYXRjaERpZENvbnRpbnVlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyKQogewog
ICAgIGxpc3RlbmVyLT5kaWRDb250aW51ZSgpOworICAgIGlmICghbV9wYXVzZU9uTmV4dFN0YXRl
bWVudCAmJiAhbV9wYXVzZU9uQ2FsbEZyYW1lKSB7CisgICAgICAgIHNldE5lZWRTdGVwcGluZyhm
YWxzZSk7CisgICAgICAgIGlmICghaXNTdGVwcGluZygpKQorICAgICAgICAgICAgbV9jdXJyZW50
Q2FsbEZyYW1lID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3Bh
dGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291cmNlUHJv
dmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBib29sIGlzQ29udGVudFNjcmlwdCkKQEAgLTU2NCwxMCAr
NTc3LDE0IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihDYWxsRnIKICAgICBp
ZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3BhdXNlT25FeGNlcHRp
b25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlvbnNT
dGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAgICBp
ZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8ICht
X3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAmJiAh
aGFzSGFuZGxlcikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7Cisg
ICAgICAgIHNldE5lZWRTdGVwcGluZyh0cnVlKTsKKyAgICB9CiAKICAgICB1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CisgICAgaWYgKCFpc1N0ZXBwaW5nKCkpCisg
ICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9IDA7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYwMiw2ICs2
MTksNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOworICAgIHNldE5l
ZWRTdGVwcGluZyh0cnVlKTsKICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNh
bGxGcmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODIzLDYgKzgyMyw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJC
cmVha0QKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNldCgpCiB7CisgICAgc2Ny
aXB0RGVidWdTZXJ2ZXIoKS5jbGVhckJyZWFrcG9pbnRzKCk7CiAgICAgbV9zY3JpcHRzLmNsZWFy
KCk7CiAgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5jbGVhcigp
OwogICAgIGlmIChtX2Zyb250ZW5kKQo=
</data>
<flag name="review"
          id="237276"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214753</attachid>
            <date>2013-10-21 11:17:42 -0700</date>
            <delta_ts>2013-10-21 11:26:55 -0700</delta_ts>
            <desc>patch 2: addressed Geoff&apos;s feedback, enable exception callbacks always for the Mac WebScriptDebugger, and fixed a bunch of layout test failures.  </desc>
            <filename>bug-123084.patch</filename>
            <type>text/plain</type>
            <size>17038</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEzLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
dm9pZCBKU0MgZGVidWdnZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIElmIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQsIHdlIG5vdyBhdm9pZCBjYWxsaW5nIHRoZSBkZWJ1ZyBob29rIGNhbGxiYWNrcy4KKyAg
ICAgICAgLSBJZiBubyBicmVhayBvbiBleGNlcHRpb24gaXMgc2V0LCB3ZSBhbHNvIGF2b2lkIGV4
Y2VwdGlvbiBldmVudCBkZWJ1ZyBjYWxsYmFja3MuCisgICAgICAgIC0gRml4ZWQgYSBidWcgd2l0
aCBTY3JpcHREZWJ1Z1NlcnZlcjo6bV9jdXJyZW50Q2FsbEZyYW1lIGdldHRpbmcgc3RhbGUuCisK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXROZWVkc0V4Y2VwdGlvbkNh
bGxiYWNrcyk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXRTaG91bGRQYXVzZSk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKToKKyAgICAgICAg
KiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAq
IGxsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc206CisKIDIwMTMtMTAtMjAgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJp
YW5jZUBjaXNjby5jb20+CiAKICAgICAgICAgW3NoNF0gRml4IGJ1aWxkIChicm9rZW4gc2luY2Ug
cjE1NzY5MCkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDE0IEBAIGlubGluZSB2
b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0Rl
YnVnZ2VyOjpEZWJ1Z2dlcigpCisgICAgOiBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKGZhbHNl
KQorICAgICwgbV9uZWVkc09wRGVidWdDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX3Nob3VsZFBh
dXNlKGZhbHNlKQorICAgICwgbV9udW1iZXJPZkJyZWFrcG9pbnRzKDApCit7Cit9CisKIERlYnVn
Z2VyOjp+RGVidWdnZXIoKQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0
b3IgZW5kID0gbV9nbG9iYWxPYmplY3RzLmVuZCgpOwpAQCAtMTEyLDYgKzEyMCwxNyBAQCB2b2lk
IERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgZ2xvYmFsT2JqZWN0LT5z
ZXREZWJ1Z2dlcigwKTsKIH0KIAordm9pZCBEZWJ1Z2dlcjo6c2V0TmVlZHNFeGNlcHRpb25DYWxs
YmFja3MoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzID0gdmFs
dWU7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBhdXNlKGJvb2wgdmFsdWUpCit7Cisg
ICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOworICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJh
Y2tzKCk7Cit9CisKIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKiB2
bSkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8g
cmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKQEAgLTEyNyw0ICsxNDYsMTYgQEAgdm9pZCBEZWJ1
Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVgogICAgIHZtLT5oZWFwLm9iamVjdFNwYWNl
KCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlvblNjb3BlLCByZWNvbXBpbGVyKTsKIH0KIAordm9p
ZCBEZWJ1Z2dlcjo6dXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhpbnQgbnVtYmVyT2ZCcmVha3Bv
aW50cykKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZCcmVha3BvaW50cyA+PSAwKTsKKyAgICBtX251
bWJlck9mQnJlYWtwb2ludHMgPSBudW1iZXJPZkJyZWFrcG9pbnRzOworICAgIHVwZGF0ZU5lZWRG
b3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JP
cERlYnVnQ2FsbGJhY2tzKCkKK3sKKyAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyA9IG1fc2hv
dWxkUGF1c2UgfHwgbV9udW1iZXJPZkJyZWFrcG9pbnRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMjIgQEAgdHlwZWRlZiBFeGVjU3RhdGUgQ2Fs
bEZyYW1lOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7CiBwdWJsaWM6Cisg
ICAgRGVidWdnZXIoKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigpOwogCisgICAgYm9vbCBuZWVk
c09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
cyk7IH0KKworICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBh
dXNlOyB9CisgICAgdm9pZCBzZXRTaG91bGRQYXVzZShib29sKTsKKworICAgIGJvb2wgbmVlZHNF
eGNlcHRpb25DYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRXhjZXB0aW9uQ2FsbGJh
Y2tzOyB9CisgICAgdm9pZCBzZXROZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcyhib29sKTsKKworICAg
IHZvaWQgaW5jTnVtYmVyT2ZCcmVha3BvaW50cygpIHsgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50
cyhtX251bWJlck9mQnJlYWtwb2ludHMgKyAxKTsgfQorICAgIHZvaWQgZGVjTnVtYmVyT2ZCcmVh
a3BvaW50cygpICB7IHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMobV9udW1iZXJPZkJyZWFrcG9p
bnRzIC0gMSk7IH0KKyAgICB2b2lkIHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoaW50KTsKKwog
ICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aChKU0dsb2JhbE9iamVjdCopOwogCkBAIC01Niw3ICs3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSopOwogCiBwcml2YXRlOgorICAgIHZvaWQgdXBk
YXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKwogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmpl
Y3QqPiBtX2dsb2JhbE9iamVjdHM7CisKKyAgICBib29sIG1fbmVlZHNFeGNlcHRpb25DYWxsYmFj
a3M7CisgICAgYm9vbCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrczsKKyAgICBib29sIG1fc2hvdWxk
UGF1c2U7CisgICAgaW50IG1fbnVtYmVyT2ZCcmVha3BvaW50czsKKworICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTU3Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUwLDcgKzY1MCw4IEBAIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZh
bHVlLmlzT2JqZWN0KCkgfHwgYXNPYmplY3QoZXhjZXB0aW9uVmFsdWUpLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5zdGFjaykpOwogCi0gICAg
aWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlcigpKSB7CisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVn
Z2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVy
IHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3YXJk
cywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVy
cm9yLgogICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkp
OwpAQCAtMTI1MSw3ICsxMjUyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFs
RXhlY3V0YQogTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCkKIHsKICAgICBEZWJ1Z2dlciogZGVi
dWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKLSAg
ICBpZiAoIWRlYnVnZ2VyKQorICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2VyLT5uZWVkc09w
RGVidWdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hv
b2tJRCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gMTU3Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEZWJ1
Z2dlci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCkBAIC0xMDUxLDcgKzEwNTIsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogICAgIGJyZWFrcG9pbnQoKTsKICNlbHNlCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBEZWJ1Z2dlciog
ZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hhciAqZGVidWdnZXJB
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFs
T2JqZWN0OjpkZWJ1Z2dlck9mZnNldCgpOworICAgIGxvYWRQdHIoZGVidWdnZXJBZGRyZXNzLCBy
ZWdUMCk7CisgICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7
CisgICAgY2hhciAqZmxhZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dl
cikgKyBEZWJ1Z2dlcjo6bmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCk7CisgICAgSnVtcCBz
a2lwRGVidWdIb29rID0gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRy
ZXNzKSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc2tpcERlYnVnSG9vay5saW5rKHRoaXMpOworICAgIG5v
RGVidWdnZXIubGluayh0aGlzKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC03MjcsNyArNzI4LDE1
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURf
UEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKICAgICBicmVha3BvaW50KCk7CiAjZWxzZQorICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpOwor
ICAgIGNoYXIgKmRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdsb2Jh
bE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKKyAgICBKdW1wIG5v
RGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFic29sdXRlQWRkcmVzcyhkZWJ1Z2dlckFk
ZHJlc3MpKTsKKyAgICBjaGFyICpmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsKKyAg
ICBKdW1wIHNraXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Mo
ZmxhZ0FkZHJlc3MpKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7
CisgICAgbm9EZWJ1Z2dlci5saW5rKHRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
CShyZXZpc2lvbiAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRP
ZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNTc2OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsMTUgQEAgX2xsaW50X29wX3Byb2ZpbGVfZGlk
X2NhbGw6CiAKIF9sbGludF9vcF9kZWJ1ZzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCisgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fZGVidWdnZXJbdDBdLCB0MAor
ICAgIGJ0aXogdDAsIC5vcERlYnVnRG9uZQorICAgIGxvYWRiIERlYnVnZ2VyOjptX25lZWRzT3BE
ZWJ1Z0NhbGxiYWNrc1t0MF0sIHQwCisgICAgYnRieiB0MCwgLm9wRGVidWdEb25lCisKICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9kZWJ1ZykKKy5vcERlYnVnRG9uZTogICAgICAg
ICAgICAgICAgICAgIAogICAgIGRpc3BhdGNoKDIpCiAKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTc2OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NjcsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgRGVidWdnZXIqIGRlYnVn
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogICAgIHZvaWQgc2V0RGVidWdnZXIo
RGVidWdnZXIqIGRlYnVnZ2VyKSB7IG1fZGVidWdnZXIgPSBkZWJ1Z2dlcjsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgZGVidWdnZXJPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fZGVidWdnZXIpOyB9CiAKICAgICBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzcwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMw
IEBACisyMDEzLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBdm9pZCBKU0MgZGVidWdnZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAtIElmIG5vIGJyZWFrcG9pbnRzIGFyZSBzZXQsIHdlIG5vdyBhdm9pZCBj
YWxsaW5nIHRoZSBkZWJ1ZyBob29rIGNhbGxiYWNrcy4KKyAgICAgICAgLSBJZiBubyBicmVhayBv
biBleGNlcHRpb24gaXMgc2V0LCB3ZSBhbHNvIGF2b2lkIGV4Y2VwdGlvbiBldmVudCBkZWJ1ZyBj
YWxsYmFja3MuCisgICAgICAgIC0gRml4ZWQgYSBidWcgd2l0aCBTY3JpcHREZWJ1Z1NlcnZlcjo6
bV9jdXJyZW50Q2FsbEZyYW1lIGdldHRpbmcgc3RhbGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNldCk6CisKIDIwMTMtMTAtMjAgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIHVubmVjZXNzYXJ5IHZlY3RvciBjb3B5IGluIEFu
aW1hdGlvbkNvbnRyb2xsZXIgZXZlbnQgZGlzcGF0Y2guCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTc2OTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEJyZWFrcG9pbnQoCiAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogICAgIGJyZWFr
c1ZlY3Rvci5hcHBlbmQoc2NyaXB0QnJlYWtwb2ludCk7CisgICAgaW5jTnVtYmVyT2ZCcmVha3Bv
aW50cygpOwogCiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVO
dW1iZXI7CiAgICAgKmFjdHVhbENvbHVtbk51bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1u
TnVtYmVyOwpAQCAtMTUwLDYgKzE1MSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkr
KykgewogICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBzdGF0
aWNfY2FzdDxpbnQ+KGNvbHVtbk51bWJlcikpIHsKICAgICAgICAgICAgIGJyZWFrc1ZlY3Rvci5y
ZW1vdmUoaSk7CisgICAgICAgICAgICBkZWNOdW1iZXJPZkJyZWFrcG9pbnRzKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTI0NSw2ICsyNDcsNyBAQCBib29sIFNj
cmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pCiB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpjbGVhckJyZWFrcG9pbnRzKCkKIHsKICAgICBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5jbGVh
cigpOworICAgIHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoMCk7CiB9CiAKIHZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQpAQCAt
MjU1LDExICsyNTgsMTQgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNB
Ywogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQogewogICAgIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSA9IHBhdXNlOworICAgIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKHBhdXNlICE9IERvbnRQ
YXVzZU9uRXhjZXB0aW9ucyk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNl
T25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpCiB7CiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IHBhdXNlOworICAgIGlmIChwYXVzZSkKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7
CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCkBAIC0yNjgsNiAr
Mjc0LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgc2V0U2hv
dWxkUGF1c2UodHJ1ZSk7CiAgICAgcGF1c2VJZk5lZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUpOwog
fQogCkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9T
dGF0ZW1lbgogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKKyAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKICAgICBtX2RvbmVQcm9jZXNzaW5nRGVi
dWdnZXJFdmVudHMgPSB0cnVlOwogfQogCkBAIC0zNTMsNiArMzYxLDExIEBAIHZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkQ29udGludWUoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAg
bGlzdGVuZXItPmRpZENvbnRpbnVlKCk7CisgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50
ICYmICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2Up
OworICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgICAgICAgICAgbV9j
dXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291
cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBib29sIGlzQ29udGVudFNjcmlwdCkKQEAgLTQ3
Niw2ICs0ODksOCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBCiB7
CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgcGF1c2VJZk5lZWRlZChjYWxs
RnJhbWUpOworICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCisgICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZO
ZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01MjksMTAgKzU0NCw4IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoQ2EKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2FsbEV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmICghbV9wYXVzZWQp
IHsKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgICAgIHBhdXNlSWZO
ZWVkZWQoY2FsbEZyYW1lKTsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgdXBk
YXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQogCiB2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjphdFN0YXRlbWVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU2NCwx
OCArNTc3LDE4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihDYWxsRnIKICAg
ICBpZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3BhdXNlT25FeGNl
cHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzSGFuZGxlcikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7
CisgICAgICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAgIH0KIAogICAgIHVwZGF0ZUNhbGxG
cmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlm
ICghbV9wYXVzZWQpIHsKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
ICAgIHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZCkK
KyAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTYwMiw2ICs2MTUsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRS
ZWFjaEJyZWFrcG9pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSB0cnVlOworICAgIHNldFNob3VsZFBhdXNlKHRydWUpOwogICAgIHVwZGF0ZUNhbGxGcmFt
ZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24g
MTU3Njk3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjMsNiArODIzLDcgQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjbGVhckJyZWFrRAogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlc2V0KCkKIHsKKyAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNsZWFyQnJlYWtwb2ludHMoKTsK
ICAgICBtX3NjcmlwdHMuY2xlYXIoKTsKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzLmNsZWFyKCk7CiAgICAgaWYgKG1fZnJvbnRlbmQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTc3MDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMC0yMCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgSlNDIGRlYnVnZ2VyIG92ZXJoZWFk
IHVubGVzcyBuZWVkZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjMwODQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAgICAoV2ViU2Ny
aXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKToKKwogMjAxMy0xMC0xOSAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHJvbGwgb3V0IG9m
IHIxNTc2OTU7IGJyb2tlIE1hYyBidWlsZHMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTc2LDYgKzc2LDcgQEAgV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKEpT
RwogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7CisgICAgc2V0TmVlZHNFeGNlcHRpb25DYWxs
YmFja3ModHJ1ZSk7CiB9CiAKIC8vIGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214756</attachid>
            <date>2013-10-21 11:26:55 -0700</date>
            <delta_ts>2013-10-21 11:43:05 -0700</delta_ts>
            <desc>patch 3: fixed style issues.</desc>
            <filename>bug-123084.patch</filename>
            <type>text/plain</type>
            <size>17038</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3NzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEzLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
dm9pZCBKU0MgZGVidWdnZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIElmIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQsIHdlIG5vdyBhdm9pZCBjYWxsaW5nIHRoZSBkZWJ1ZyBob29rIGNhbGxiYWNrcy4KKyAg
ICAgICAgLSBJZiBubyBicmVhayBvbiBleGNlcHRpb24gaXMgc2V0LCB3ZSBhbHNvIGF2b2lkIGV4
Y2VwdGlvbiBldmVudCBkZWJ1ZyBjYWxsYmFja3MuCisgICAgICAgIC0gRml4ZWQgYSBidWcgd2l0
aCBTY3JpcHREZWJ1Z1NlcnZlcjo6bV9jdXJyZW50Q2FsbEZyYW1lIGdldHRpbmcgc3RhbGUuCisK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXROZWVkc0V4Y2VwdGlvbkNh
bGxiYWNrcyk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXRTaG91bGRQYXVzZSk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVOdW1iZXJPZkJyZWFrcG9pbnRzKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKToKKyAgICAgICAg
KiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAq
IGxsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc206CisKIDIwMTMtMTAtMjAgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJp
YW5jZUBjaXNjby5jb20+CiAKICAgICAgICAgW3NoNF0gRml4IGJ1aWxkIChicm9rZW4gc2luY2Ug
cjE1NzY5MCkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dl
ci5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dl
ci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDE0IEBAIGlubGluZSB2
b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0Rl
YnVnZ2VyOjpEZWJ1Z2dlcigpCisgICAgOiBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKGZhbHNl
KQorICAgICwgbV9uZWVkc09wRGVidWdDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX3Nob3VsZFBh
dXNlKGZhbHNlKQorICAgICwgbV9udW1iZXJPZkJyZWFrcG9pbnRzKDApCit7Cit9CisKIERlYnVn
Z2VyOjp+RGVidWdnZXIoKQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0
b3IgZW5kID0gbV9nbG9iYWxPYmplY3RzLmVuZCgpOwpAQCAtMTEyLDYgKzEyMCwxNyBAQCB2b2lk
IERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAgICAgZ2xvYmFsT2JqZWN0LT5z
ZXREZWJ1Z2dlcigwKTsKIH0KIAordm9pZCBEZWJ1Z2dlcjo6c2V0TmVlZHNFeGNlcHRpb25DYWxs
YmFja3MoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX25lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzID0gdmFs
dWU7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBhdXNlKGJvb2wgdmFsdWUpCit7Cisg
ICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOworICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJh
Y2tzKCk7Cit9CisKIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKiB2
bSkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8g
cmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKQEAgLTEyNyw0ICsxNDYsMTYgQEAgdm9pZCBEZWJ1
Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVgogICAgIHZtLT5oZWFwLm9iamVjdFNwYWNl
KCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlvblNjb3BlLCByZWNvbXBpbGVyKTsKIH0KIAordm9p
ZCBEZWJ1Z2dlcjo6dXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50cyhpbnQgbnVtYmVyT2ZCcmVha3Bv
aW50cykKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZCcmVha3BvaW50cyA+PSAwKTsKKyAgICBtX251
bWJlck9mQnJlYWtwb2ludHMgPSBudW1iZXJPZkJyZWFrcG9pbnRzOworICAgIHVwZGF0ZU5lZWRG
b3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JP
cERlYnVnQ2FsbGJhY2tzKCkKK3sKKyAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyA9IG1fc2hv
dWxkUGF1c2UgfHwgbV9udW1iZXJPZkJyZWFrcG9pbnRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZp
c2lvbiAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMjIgQEAgdHlwZWRlZiBFeGVjU3RhdGUgQ2Fs
bEZyYW1lOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlciB7CiBwdWJsaWM6Cisg
ICAgRGVidWdnZXIoKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigpOwogCisgICAgYm9vbCBuZWVk
c09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
cyk7IH0KKworICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBh
dXNlOyB9CisgICAgdm9pZCBzZXRTaG91bGRQYXVzZShib29sKTsKKworICAgIGJvb2wgbmVlZHNF
eGNlcHRpb25DYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzRXhjZXB0aW9uQ2FsbGJh
Y2tzOyB9CisgICAgdm9pZCBzZXROZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcyhib29sKTsKKworICAg
IHZvaWQgaW5jTnVtYmVyT2ZCcmVha3BvaW50cygpIHsgdXBkYXRlTnVtYmVyT2ZCcmVha3BvaW50
cyhtX251bWJlck9mQnJlYWtwb2ludHMgKyAxKTsgfQorICAgIHZvaWQgZGVjTnVtYmVyT2ZCcmVh
a3BvaW50cygpICB7IHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMobV9udW1iZXJPZkJyZWFrcG9p
bnRzIC0gMSk7IH0KKyAgICB2b2lkIHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoaW50KTsKKwog
ICAgIHZvaWQgYXR0YWNoKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aChKU0dsb2JhbE9iamVjdCopOwogCkBAIC01Niw3ICs3MCwxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSopOwogCiBwcml2YXRlOgorICAgIHZvaWQgdXBk
YXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKwogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmpl
Y3QqPiBtX2dsb2JhbE9iamVjdHM7CisKKyAgICBib29sIG1fbmVlZHNFeGNlcHRpb25DYWxsYmFj
a3M7CisgICAgYm9vbCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrczsKKyAgICBib29sIG1fc2hvdWxk
UGF1c2U7CisgICAgaW50IG1fbnVtYmVyT2ZCcmVha3BvaW50czsKKworICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTU3Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUwLDcgKzY1MCw4IEBAIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICBBU1NFUlQoY2FsbEZyYW1l
LT52bSgpLmV4Y2VwdGlvblN0YWNrKCkuc2l6ZSgpKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvblZh
bHVlLmlzT2JqZWN0KCkgfHwgYXNPYmplY3QoZXhjZXB0aW9uVmFsdWUpLT5oYXNQcm9wZXJ0eShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5zdGFjaykpOwogCi0gICAg
aWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlcigpKSB7CisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyICYmIGRlYnVn
Z2VyLT5uZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVy
IHRvIHNlZSBpZiBhIG5ldyBleGNlcHRpb24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3YXJk
cywgdGhlIHZhbHVlcyBhcmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVy
cm9yLgogICAgICAgICBDbGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkp
OwpAQCAtMTI1MSw3ICsxMjUyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFs
RXhlY3V0YQogTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCkKIHsKICAgICBEZWJ1Z2dlciogZGVi
dWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKLSAg
ICBpZiAoIWRlYnVnZ2VyKQorICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2VyLT5uZWVkc09w
RGVidWdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hv
b2tJRCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gMTU3Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEZWJ1
Z2dlci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCkBAIC0xMDUxLDcgKzEwNTIsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogICAgIGJyZWFrcG9pbnQoKTsKICNlbHNlCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBEZWJ1Z2dlciog
ZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hhciogZGVidWdnZXJB
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFs
T2JqZWN0OjpkZWJ1Z2dlck9mZnNldCgpOworICAgIGxvYWRQdHIoZGVidWdnZXJBZGRyZXNzLCBy
ZWdUMCk7CisgICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7
CisgICAgY2hhciogZmxhZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dl
cikgKyBEZWJ1Z2dlcjo6bmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCk7CisgICAgSnVtcCBz
a2lwRGVidWdIb29rID0gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRy
ZXNzKSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc2tpcERlYnVnSG9vay5saW5rKHRoaXMpOworICAgIG5v
RGVidWdnZXIubGluayh0aGlzKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC03MjcsNyArNzI4LDE1
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBVTlVTRURf
UEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKICAgICBicmVha3BvaW50KCk7CiAjZWxzZQorICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpOwor
ICAgIGNoYXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdsb2Jh
bE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKKyAgICBKdW1wIG5v
RGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFic29sdXRlQWRkcmVzcyhkZWJ1Z2dlckFk
ZHJlc3MpKTsKKyAgICBjaGFyKiBmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsKKyAg
ICBKdW1wIHNraXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Mo
ZmxhZ0FkZHJlc3MpKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7
CisgICAgbm9EZWJ1Z2dlci5saW5rKHRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
CShyZXZpc2lvbiAxNTc2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRP
ZmZzZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNTc2OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsMTUgQEAgX2xsaW50X29wX3Byb2ZpbGVfZGlk
X2NhbGw6CiAKIF9sbGludF9vcF9kZWJ1ZzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCisgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fZGVidWdnZXJbdDBdLCB0MAor
ICAgIGJ0aXogdDAsIC5vcERlYnVnRG9uZQorICAgIGxvYWRiIERlYnVnZ2VyOjptX25lZWRzT3BE
ZWJ1Z0NhbGxiYWNrc1t0MF0sIHQwCisgICAgYnRieiB0MCwgLm9wRGVidWdEb25lCisKICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9kZWJ1ZykKKy5vcERlYnVnRG9uZTogICAgICAg
ICAgICAgICAgICAgIAogICAgIGRpc3BhdGNoKDIpCiAKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTc2OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NjcsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgRGVidWdnZXIqIGRlYnVn
Z2VyKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlcjsgfQogICAgIHZvaWQgc2V0RGVidWdnZXIo
RGVidWdnZXIqIGRlYnVnZ2VyKSB7IG1fZGVidWdnZXIgPSBkZWJ1Z2dlcjsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgZGVidWdnZXJPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fZGVidWdnZXIpOyB9CiAKICAgICBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzcwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMw
IEBACisyMDEzLTEwLTIwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBdm9pZCBKU0MgZGVidWdnZXIgb3ZlcmhlYWQgdW5sZXNzIG5lZWRlZC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzA4NC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAtIElmIG5vIGJyZWFrcG9pbnRzIGFyZSBzZXQsIHdlIG5vdyBhdm9pZCBj
YWxsaW5nIHRoZSBkZWJ1ZyBob29rIGNhbGxiYWNrcy4KKyAgICAgICAgLSBJZiBubyBicmVhayBv
biBleGNlcHRpb24gaXMgc2V0LCB3ZSBhbHNvIGF2b2lkIGV4Y2VwdGlvbiBldmVudCBkZWJ1ZyBj
YWxsYmFja3MuCisgICAgICAgIC0gRml4ZWQgYSBidWcgd2l0aCBTY3JpcHREZWJ1Z1NlcnZlcjo6
bV9jdXJyZW50Q2FsbEZyYW1lIGdldHRpbmcgc3RhbGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2xlYXJCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZl
cjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c3RlcEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkQ29udGludWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNldCk6CisKIDIwMTMtMTAtMjAgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIHVubmVjZXNzYXJ5IHZlY3RvciBjb3B5IGluIEFu
aW1hdGlvbkNvbnRyb2xsZXIgZXZlbnQgZGlzcGF0Y2guCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNTc2OTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEJyZWFrcG9pbnQoCiAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogICAgIGJyZWFr
c1ZlY3Rvci5hcHBlbmQoc2NyaXB0QnJlYWtwb2ludCk7CisgICAgaW5jTnVtYmVyT2ZCcmVha3Bv
aW50cygpOwogCiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSBzY3JpcHRCcmVha3BvaW50LmxpbmVO
dW1iZXI7CiAgICAgKmFjdHVhbENvbHVtbk51bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQuY29sdW1u
TnVtYmVyOwpAQCAtMTUwLDYgKzE1MSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtzQ291bnQ7IGkr
KykgewogICAgICAgICBpZiAoYnJlYWtzVmVjdG9yLmF0KGkpLmNvbHVtbk51bWJlciA9PSBzdGF0
aWNfY2FzdDxpbnQ+KGNvbHVtbk51bWJlcikpIHsKICAgICAgICAgICAgIGJyZWFrc1ZlY3Rvci5y
ZW1vdmUoaSk7CisgICAgICAgICAgICBkZWNOdW1iZXJPZkJyZWFrcG9pbnRzKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTI0NSw2ICsyNDcsNyBAQCBib29sIFNj
cmlwdERlYnVnU2VydmVyOjpldmFsdWF0ZUJyZWFrcG9pCiB2b2lkIFNjcmlwdERlYnVnU2VydmVy
OjpjbGVhckJyZWFrcG9pbnRzKCkKIHsKICAgICBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5jbGVh
cigpOworICAgIHVwZGF0ZU51bWJlck9mQnJlYWtwb2ludHMoMCk7CiB9CiAKIHZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQpAQCAt
MjU1LDExICsyNTgsMTQgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludHNB
Ywogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlIHBhdXNlKQogewogICAgIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSA9IHBhdXNlOworICAgIHNldE5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKHBhdXNlICE9IERvbnRQ
YXVzZU9uRXhjZXB0aW9ucyk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNl
T25OZXh0U3RhdGVtZW50KGJvb2wgcGF1c2UpCiB7CiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IHBhdXNlOworICAgIGlmIChwYXVzZSkKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7
CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmJyZWFrUHJvZ3JhbSgpCkBAIC0yNjgsNiAr
Mjc0LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6YnJlYWtQcm9ncmFtKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CisgICAgc2V0U2hv
dWxkUGF1c2UodHJ1ZSk7CiAgICAgcGF1c2VJZk5lZWRlZChtX2N1cnJlbnRDYWxsRnJhbWUpOwog
fQogCkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9T
dGF0ZW1lbgogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKKyAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKICAgICBtX2RvbmVQcm9jZXNzaW5nRGVi
dWdnZXJFdmVudHMgPSB0cnVlOwogfQogCkBAIC0zNTMsNiArMzYxLDExIEBAIHZvaWQgU2NyaXB0
RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkQ29udGludWUoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAg
bGlzdGVuZXItPmRpZENvbnRpbnVlKCk7CisgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50
ICYmICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKKyAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2Up
OworICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgICAgICAgICAgbV9j
dXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3RlbmVycywgU291
cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBib29sIGlzQ29udGVudFNjcmlwdCkKQEAgLTQ3
Niw2ICs0ODksOCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBCiB7
CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiAgICAgcGF1c2VJZk5lZWRlZChjYWxs
RnJhbWUpOworICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCisgICAgICAgIG1fY3Vy
cmVudENhbGxGcmFtZSA9IDA7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZO
ZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01MjksMTAgKzU0NCw4IEBAIHZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OnBhdXNlSWZOZWVkZWQoQ2EKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6Y2FsbEV2ZW50KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlmICghbV9wYXVzZWQp
IHsKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgICAgIHBhdXNlSWZO
ZWVkZWQoY2FsbEZyYW1lKTsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZCkKKyAgICAgICAgdXBk
YXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQogCiB2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjphdFN0YXRlbWVudChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU2NCwx
OCArNTc3LDE4IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihDYWxsRnIKICAg
ICBpZiAobV9wYXVzZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3BhdXNlT25FeGNl
cHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VPbkV4Y2VwdGlv
bnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5kbGVyKSkKKyAg
ICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNlcHRpb25zIHx8
IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyAm
JiAhaGFzSGFuZGxlcikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7
CisgICAgICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAgIH0KIAogICAgIHVwZGF0ZUNhbGxG
cmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1Nl
cnZlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIGlm
ICghbV9wYXVzZWQpIHsKLSAgICAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAg
ICAgIHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZCkK
KyAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTYwMiw2ICs2MTUsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaWRS
ZWFjaEJyZWFrcG9pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1l
bnQgPSB0cnVlOworICAgIHNldFNob3VsZFBhdXNlKHRydWUpOwogICAgIHVwZGF0ZUNhbGxGcmFt
ZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAkocmV2aXNpb24g
MTU3Njk3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjMsNiArODIzLDcgQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjbGVhckJyZWFrRAogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlc2V0KCkKIHsKKyAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLmNsZWFyQnJlYWtwb2ludHMoKTsK
ICAgICBtX3NjcmlwdHMuY2xlYXIoKTsKICAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzLmNsZWFyKCk7CiAgICAgaWYgKG1fZnJvbnRlbmQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTc3MDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMC0yMCAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgSlNDIGRlYnVnZ2VyIG92ZXJoZWFk
IHVubGVzcyBuZWVkZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjMwODQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tOgorICAgICAgICAoV2ViU2Ny
aXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKToKKwogMjAxMy0xMC0xOSAgSmVyIE5vYmxl
ICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHJvbGwgb3V0IG9m
IHIxNTc2OTU7IGJyb2tlIE1hYyBidWlsZHMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHJldmlzaW9uIDE1NzY5NykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTc2LDYgKzc2LDcgQEAgV2ViU2NyaXB0RGVidWdnZXI6OldlYlNjcmlwdERlYnVnZ2VyKEpT
RwogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgYXR0YWNoKGdsb2JhbE9iamVjdCk7CisgICAgc2V0TmVlZHNFeGNlcHRpb25DYWxs
YmFja3ModHJ1ZSk7CiB9CiAKIC8vIGNhbGxiYWNrcyAtIHJlbGF5IHRvIGRlbGVnYXRlCg==
</data>
<flag name="review"
          id="237342"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>