<?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>127532</bug_id>
          
          <creation_ts>2014-01-23 18:12:15 -0800</creation_ts>
          <short_desc>Removing the need for Debugger* and m_shouldPause op_debug check</short_desc>
          <delta_ts>2014-01-24 11:03:36 -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></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>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>971433</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 18:12:15 -0800</bug_when>
    <thetext>Remove the speculation checks for debugger and &quot;shouldPause&quot;, and change the debugger to add a breakpoint to every code block when it starts stepping, and remove them all when it stops stepping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971529</commentid>
    <comment_count>1</comment_count>
      <attachid>222082</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 23:30:16 -0800</bug_when>
    <thetext>Created attachment 222082
work in progress

The plan is to replace the m_shouldPause by marking every relevant  CodeBlock to indicate that op_debug callbacks are needed.  However, the Octane perf results with this change so far shows a significant regression:

baseline w/ WebInspector + breakpoint:   2600
patched w/ WebInspector + breakpoint:   1540

I need to look thru this patch again for potential bugs, and also do some profiling to see why it is regressing the Octane score.  Uploading this patch to archive the work so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971530</commentid>
    <comment_count>2</comment_count>
      <attachid>222082</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-23 23:40:07 -0800</bug_when>
    <thetext>Comment on attachment 222082
work in progress

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1031
&gt; +            unsigned m_steppingMode : 1;

Found 1 mistake.  I forgot to initialize m_steppingMode in the constructor.  Once that was fixed, the Octane score came up to 2840.  That&apos;s a progression.  I&apos;ll see if there are any other bugs before I redo the benchmarks and get the final comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971541</commentid>
    <comment_count>3</comment_count>
      <attachid>222084</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-24 00:42:17 -0800</bug_when>
    <thetext>Created attachment 222084
patch 2: fixed initialization bug.

This patch fixes the initialization of CodeBlock::m_steppingMode.  The Octane scores are now:

baseline w/ WebInspector + breakpoint:   2640
patched w/ WebInspector + breakpoint:    2830    1.07x progression

This patched has passed the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971629</commentid>
    <comment_count>4</comment_count>
      <attachid>222084</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-24 09:43:42 -0800</bug_when>
    <thetext>Comment on attachment 222084
patch 2: fixed initialization bug.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        with a procedure to toffle a SteppingMode flag on all CodeBlocks under

&quot;toggle&quot;

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1032
&gt; +            signed m_numBreakpoints : 31;

Why is this signed?

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:193
&gt; +    clearDebuggerRequestsInGlobal(globalObject);

No need for &quot;InGlobal&quot; in the name. The global object parameter is a part of the function signature.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:223
&gt; +void Debugger::toggleSteppingMode(SteppingMode mode)

This should be &quot;setSteppingMode&quot;. Same for other uses of &quot;toggle&quot; in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971632</commentid>
    <comment_count>5</comment_count>
      <attachid>222084</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-24 09:47:29 -0800</bug_when>
    <thetext>Comment on attachment 222084
patch 2: fixed initialization bug.

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

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:236
&gt;  void Debugger::registerCodeBlock(CodeBlock* codeBlock)

Don&apos;t you need to update this function to apply stepping mode to a newly-created CodeBlock?

What happens when I step into a function that has never been compiled before? When it&apos;s compiled, how does its CodeBlock get the right value for m_steppingMode?

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:503
&gt; +class Debugger::ClearCodeBlockDebuggerRequestsInGlobalFunctor {

This can just be &quot;ClearDebuggerRequestsFunctor&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971634</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-24 09:52:12 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #4)
&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        with a procedure to toffle a SteppingMode flag on all CodeBlocks under
&gt; 
&gt; &quot;toggle&quot;

Will fix.
 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1032
&gt; &gt; +            signed m_numBreakpoints : 31;
&gt; 
&gt; Why is this signed?

Because the count should never get that big anyway, and we allow for negatives so that we can assert that we never try to “remove” more breakpoints than we “add”.  On second thought, never mind.  I’ll assert that the count is not 0 before I “remove” a breakpoint.  I’ll change this to unsigned.
 
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:193
&gt; &gt; +    clearDebuggerRequestsInGlobal(globalObject);
&gt; 
&gt; No need for &quot;InGlobal&quot; in the name. The global object parameter is a part of the function signature.

Will fix.


&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:223
&gt; &gt; +void Debugger::toggleSteppingMode(SteppingMode mode)
&gt; 
&gt; This should be &quot;setSteppingMode&quot;. Same for other uses of &quot;toggle&quot; in this patch.

Will fix.


(In reply to comment #5)
&gt; (From update of attachment 222084 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222084&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:236
&gt; &gt;  void Debugger::registerCodeBlock(CodeBlock* codeBlock)
&gt; 
&gt; Don&apos;t you need to update this function to apply stepping mode to a newly-created CodeBlock?
&gt; 
&gt; What happens when I step into a function that has never been compiled before? When it&apos;s compiled, how does its CodeBlock get the right value for m_steppingMode?

Will fix.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:503
&gt; &gt; +class Debugger::ClearCodeBlockDebuggerRequestsInGlobalFunctor {
&gt; 
&gt; This can just be &quot;ClearDebuggerRequestsFunctor&quot;.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971653</commentid>
    <comment_count>7</comment_count>
      <attachid>222118</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-24 10:49:52 -0800</bug_when>
    <thetext>Created attachment 222118
patch for landing: all fixes have been applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971656</commentid>
    <comment_count>8</comment_count>
      <attachid>222118</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-24 10:52:37 -0800</bug_when>
    <thetext>Comment on attachment 222118
patch for landing: all fixes have been applied.

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

r=me

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:245
&gt;  void Debugger::unregisterCodeBlock(CodeBlock* codeBlock)
&gt;  {
&gt; -    codeBlock-&gt;clearAllBreakpoints();
&gt; +    codeBlock-&gt;clearDebuggerRequests();

I think in a previous patch review I suggested removing this function and its callers altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971657</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-24 10:56:20 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:245
&gt; &gt;  void Debugger::unregisterCodeBlock(CodeBlock* codeBlock)
&gt; &gt;  {
&gt; &gt; -    codeBlock-&gt;clearAllBreakpoints();
&gt; &gt; +    codeBlock-&gt;clearDebuggerRequests();
&gt; 
&gt; I think in a previous patch review I suggested removing this function and its callers altogether.

I removed the callers, but had left this function in.   Since there are no callers, I’ll go ahead and remove it as well before landing the current patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971659</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-24 11:03:36 -0800</bug_when>
    <thetext>Landed in r162711: &lt;http://trac.webkit.org/r162711&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222082</attachid>
            <date>2014-01-23 23:30:16 -0800</date>
            <delta_ts>2014-01-24 00:42:17 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-127532.patch</filename>
            <type>text/plain</type>
            <size>24726</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDE0LTAxLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmluZyB0aGUgbmVlZCBmb3IgRGVidWdnZXIqIGFuZCBtX3Nob3VsZFBhdXNlIG9wX2RlYnVn
IGNoZWNrLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTI3NTMyPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFj
ZXMgdGhlIGNoZWNraW5nIG9mIHRoZSBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZSBmbGFnCisgICAg
ICAgIHdpdGggYSBwcm9jZWR1cmUgdG8gdG9mZmxlIGEgU3RlcHBpbmdNb2RlIGZsYWcgb24gYWxs
IENvZGVCbG9ja3MgdW5kZXIKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGRlYnVnZ2Vy
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIG9wX2RlYnVnIGNoZWNraW5nCisgICAgICAgIGxvZ2ljIGlu
IGFsbCB0aGUgZXhlY3V0aW9uIGVuZ2luZXMuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNEZWJ1Z2dlclJlcXVlc3RzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dG9nZ2xlU3RlcHBpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjbGVhckRlYnVnZ2VyUmVxdWVzdHMpOgorICAgICAgICAtIENvZGVCbG9jazo6bV9k
ZWJ1Z2dlclJlcXVlc3RzIGlzIGEgdW5pb24gb2YgbV9udW1CcmVha3BvaW50cyBhbmQgdGhlCisg
ICAgICAgICAgbmV3IG1fc3RlcHBpbmdNb2RlLiBUaGUgZGVidWdnZXIgY2FuIGFkZC9yZW1vdmUg
YnJlYWtwb2ludHMgdG8gdGhlCisgICAgICAgICAgQ29kZUJsb2NrIGFzIHdlbGwgYXMgdG9nZ2xl
IHRoZSBzdGVwcGluZyBtb2RlLiBCeSBoYXZpbmcKKyAgICAgICAgICBtX2RlYnVnZ2VyUmVxdWVz
dHMgYXMgYSB1bmlvbiBvZiB0aGUgMiBiaXQgZmllbGRzLCB0aGUgb3BfZGVidWcgY29kZQorICAg
ICAgICAgIGNhbiBub3cgY2hlY2sgaWYgYW55IG9mIHRoZSAyIHJlcXVlc3RzIG1hZGUgb24gdGhl
IENvZGVCbG9jayBpcyBzdGlsbAorICAgICAgICAgIGluIGVmZmVjdCBqdXN0IGJ5IHRlc3Rpbmcg
YSBzaW5nbGUgaW50LgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlcjo6RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0
YWNoKToKKyAgICAgICAgLSBUaGlzIHdhcyBidWcgZnJvbSBiZWZvcmUgd2hlcmUgSSBmb3Jnb3Qg
dG8gY2xlYXIgdGhlIENvZGVCbG9jaworICAgICAgICAgIGJyZWFrcG9pbnRzIGJlZm9yZSBkZXRh
Y2hpbmcuIFdlIG5vdyB0YWtlIGNhcmUgb2YgaXQgYnkgY2xlYXJpbmcgYWxsCisgICAgICAgICAg
ZGVidWdnZXIgcmVxdWVzdHMgbWFkZSB0byB0aGUgQ29kZUJsb2NrLgorCisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpUb2dnbGVTdGVwcGluZ01vZGVGdW5jdG9yOjpUb2dnbGVTdGVwcGluZ01vZGVG
dW5jdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OlRvZ2dsZVN0ZXBwaW5nTW9kZUZ1bmN0
b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dG9nZ2xlU3RlcHBpbmdN
b2RlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVucmVnaXN0ZXJDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlcjo6Q2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVuY3Rv
cjo6Q2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVuY3Rvcik6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yOjpvcGVyYXRv
cigpKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorCisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNJbkdsb2Jh
bEZ1bmN0b3I6OkNsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVuY3Rvcik6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNJ
bkdsb2JhbEZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y2xl
YXJEZWJ1Z2dlclJlcXVlc3RzSW5HbG9iYWwpOgorICAgICAgICAtIFdlIG5lZWQgYSBkaXN0aW5j
dCBjbGVhckRlYnVnZ2VyUmVxdWVzdHNJbkdsb2JhbCgpIGZyb20gY2xlYXJCcmVha3BvaW50cygp
CisgICAgICAgICAgYmVjYXVzZToKKyAgICAgICAgICAxLiBXaGVuIHdlIGRldGFjaCBhIGdsb2Jh
bE9iamVjdCwgd2Ugb25seSB3YW50IHRvIGNsZWFyIHRoZSBkZWJ1Z2dlcgorICAgICAgICAgICAg
IHJlcXVlc3RzIGluIENvZGVCbG9ja3MgZnJvbSB0aGF0IGdsb2JhbC4KKyAgICAgICAgICAyLiBD
bGVhcmluZyB0aGUgZGVidWdnZXIgcmVxdWVzdHMgaW4gdGhlIENvZGVCbG9ja3MgaXMgbm90IHRo
ZSBzYW1lCisgICAgICAgICAgICAgYXMgY2xlYXJpbmcgdGhlIGJyZWFrcG9pbnRzLiBUaGUgYnJl
YWtwb2ludHMgYXJlIHN0aWxsIGluIGVmZmVjdAorICAgICAgICAgICAgIGZvciB0aGUgbmV4dCB0
aW1lIGEgZ2xvYmFsT2JqZWN0IGlzIGF0dGFjaGVkLCBvciBmb3Igb3RoZXIKKyAgICAgICAgICAg
ICBnbG9iYWxPYmplY3RzIHRoYXQgYXJlIHN0aWxsIGF0dGFjaGVkLgorCisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpicmVha1Byb2dyYW0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c3RlcEludG9TdGF0
ZW1lbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJ
Zk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXI6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3
aWxsRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVh
a3BvaW50KToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAtIFdlJ3Jl
IGFsd2F5cyBnb2luZyB0byBzdXBwb3J0IHRoZSBkZWJ1Z2dlci4gU28sIHRoZXJlJ3Mgbm8gbG9u
Z2VyCisgICAgICAgICAgYSBuZWVkIHRvIGNoZWNrIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KS4gUmVtb3ZlZCB0aGUgdW5uZWVkZWQgY29kZS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZGVidWcpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OnNldERlYnVnZ2VyKToKKwogMjAxNC0wMS0yMyAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIERGRyBmb3IgdGhlIERlYnVn
Z2VyIGFuZCBQcm9maWxlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODcxLDkgKzg3MSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGlu
ZSwgdW5zaWduZWQgY29sdW1uKTsKIAotICAgIGludCBudW1CcmVha3BvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQnJlYWtwb2ludHM7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG51bUJyZWFr
cG9pbnRzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1C
cmVha3BvaW50cyk7IH0KLSAgICB2b2lkKiBudW1CcmVha3BvaW50c0FkZHJlc3MoKSB7IHJldHVy
biAmbV9udW1CcmVha3BvaW50czsgfQorICAgIGludCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29u
c3QgeyByZXR1cm4gISFtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICB2b2lkKiBkZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KIAogICAgIHZv
aWQgYWRkQnJlYWtwb2ludChpbnQgbnVtQnJlYWtwb2ludHMpIHsgbV9udW1CcmVha3BvaW50cyAr
PSBudW1CcmVha3BvaW50czsgfQogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbnQgbnVtQnJl
YWtwb2ludHMpCkBAIC04ODEsNyArODgwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9udW1CcmVh
a3BvaW50cyAtPSBudW1CcmVha3BvaW50czsKICAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2lu
dHMgPj0gMCk7CiAgICAgfQotICAgIHZvaWQgY2xlYXJBbGxCcmVha3BvaW50cygpIHsgbV9udW1C
cmVha3BvaW50cyA9IDA7IH0KKworICAgIGVudW0gU3RlcHBpbmdNb2RlIHsKKyAgICAgICAgU3Rl
cHBpbmdNb2RlRGlzYWJsZWQsCisgICAgICAgIFN0ZXBwaW5nTW9kZUVuYWJsZWQKKyAgICB9Owor
ICAgIHZvaWQgdG9nZ2xlU3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZSBtb2RlKSB7IG1fc3RlcHBp
bmdNb2RlID0gbW9kZTsgfQorCisgICAgdm9pZCBjbGVhckRlYnVnZ2VyUmVxdWVzdHMoKSB7IG1f
ZGVidWdnZXJSZXF1ZXN0cyA9IDA7IH0KIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFp
bmluZyBtZW1iZXJzIHByaXZhdGUuCiAKQEAgLTEwMTksNyArMTAyNSwxMyBAQCBwcml2YXRlOgog
I2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJsb2NrPiBtX3VubGlua2VkQ29k
ZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwotICAgIGludCBtX251bUJyZWFrcG9pbnRzOwor
ICAgIHVuaW9uIHsKKyAgICAgICAgdW5zaWduZWQgbV9kZWJ1Z2dlclJlcXVlc3RzOworICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbV9zdGVwcGluZ01vZGUgOiAxOworICAg
ICAgICAgICAgc2lnbmVkIG1fbnVtQnJlYWtwb2ludHMgOiAzMTsKKyAgICAgICAgfTsKKyAgICB9
OwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsK
ICAgICBWTSogbV92bTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTMgKzE0OCwxMyBA
QCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkCiAgICAgLCBtX2JyZWFr
cG9pbnRzQWN0aXZhdGVkKHRydWUpCiAgICAgLCBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxs
YmFjayhmYWxzZSkKICAgICAsIG1faXNJbldvcmtlclRocmVhZChpc0luV29ya2VyVGhyZWFkKQor
ICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCiAgICAgLCBtX3JlYXNv
bkZvclBhdXNlKE5vdFBhdXNlZCkKICAgICAsIG1fcGF1c2VPbkNhbGxGcmFtZSgwKQogICAgICwg
bV9jdXJyZW50Q2FsbEZyYW1lKDApCiAgICAgLCBtX2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgp
CiAgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlEKG5vU291cmNlSUQpCiAgICAgLCBtX3RvcEJy
ZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKLSAgICAsIG1fc2hvdWxkUGF1c2UoZmFsc2UpCiB7
CiB9CiAKQEAgLTE4OSwxNCArMTg5LDQ4IEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2Jh
bE9iamVjdCogZ2wKIAogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdHMuY29udGFpbnMoZ2xvYmFs
T2JqZWN0KSk7CiAgICAgbV9nbG9iYWxPYmplY3RzLnJlbW92ZShnbG9iYWxPYmplY3QpOworCisg
ICAgY2xlYXJEZWJ1Z2dlclJlcXVlc3RzSW5HbG9iYWwoZ2xvYmFsT2JqZWN0KTsKICAgICBnbG9i
YWxPYmplY3QtPnNldERlYnVnZ2VyKDApOwogICAgIGlmICghbV9nbG9iYWxPYmplY3RzLnNpemUo
KSkKICAgICAgICAgbV92bSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgRGVidWdnZXI6OnNldFNob3Vs
ZFBhdXNlKGJvb2wgdmFsdWUpCitjbGFzcyBEZWJ1Z2dlcjo6VG9nZ2xlU3RlcHBpbmdNb2RlRnVu
Y3RvciB7CitwdWJsaWM6CisgICAgVG9nZ2xlU3RlcHBpbmdNb2RlRnVuY3RvcihEZWJ1Z2dlciog
ZGVidWdnZXIsIFN0ZXBwaW5nTW9kZSBtb2RlKQorICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdn
ZXIpCisgICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmIChtX2RlYnVn
Z2VyID09IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX21vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZCkKKyAgICAgICAgICAgICAgICBj
b2RlQmxvY2stPnRvZ2dsZVN0ZXBwaW5nTW9kZShDb2RlQmxvY2s6OlN0ZXBwaW5nTW9kZUVuYWJs
ZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+dG9nZ2xl
U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlRGlzYWJsZWQpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIq
IG1fZGVidWdnZXI7CisgICAgU3RlcHBpbmdNb2RlIG1fbW9kZTsKK307CisKK3ZvaWQgRGVidWdn
ZXI6OnRvZ2dsZVN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUgbW9kZSkKIHsKLSAgICBtX3Nob3Vs
ZFBhdXNlID0gdmFsdWU7CisgICAgaWYgKG1vZGUgPT0gbV9zdGVwcGluZ01vZGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CisKKyAgICBpZiAoIW1fdm0pCisg
ICAgICAgIHJldHVybjsKKyAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUobV92
bS0+aGVhcCk7CisgICAgVG9nZ2xlU3RlcHBpbmdNb2RlRnVuY3RvciBmdW5jdG9yKHRoaXMsIG1v
ZGUpOworICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9p
ZCBEZWJ1Z2dlcjo6cmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0y
MDYsNyArMjQwLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6cmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsbwog
CiB2b2lkIERlYnVnZ2VyOjp1bnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIGNvZGVCbG9jay0+Y2xlYXJBbGxCcmVha3BvaW50cygpOworICAgIGNvZGVCbG9j
ay0+Y2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCk7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnRvZ2dsZUJy
ZWFrcG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIEJy
ZWFrcG9pbnRTdGF0ZSBlbmFibGVkT3JOb3QpCkBAIC00MzUsMTcgKzQ2OSwxNyBAQCBib29sIERl
YnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgcmV0dXJuIHJlc3VsdC50b0Jv
b2xlYW4obV9jdXJyZW50Q2FsbEZyYW1lKTsKIH0KIAotY2xhc3MgRGVidWdnZXI6OkNsZWFyQnJl
YWtwb2ludHNGdW5jdG9yIHsKK2NsYXNzIERlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2Vy
UmVxdWVzdHNGdW5jdG9yIHsKIHB1YmxpYzoKLSAgICBDbGVhckJyZWFrcG9pbnRzRnVuY3RvcihE
ZWJ1Z2dlciogZGVidWdnZXIpCisgICAgQ2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVu
Y3RvcihEZWJ1Z2dlciogZGVidWdnZXIpCiAgICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikK
ICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcigpKENvZGVCbG9jayogY29kZUJsb2Nr
KQogICAgIHsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+bnVtQnJlYWtwb2ludHMoKSAmJiBtX2Rl
YnVnZ2VyID09IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCi0gICAgICAg
ICAgICBjb2RlQmxvY2stPmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+aGFzRGVidWdnZXJSZXF1ZXN0cygpICYmIG1fZGVidWdnZXIgPT0gY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y2xlYXJE
ZWJ1Z2dlclJlcXVlc3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ2
Miw3ICs0OTYsMzMgQEAgdm9pZCBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCiAgICAgaWYg
KCFtX3ZtKQogICAgICAgICByZXR1cm47CiAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlv
blNjb3BlKG1fdm0tPmhlYXApOwotICAgIENsZWFyQnJlYWtwb2ludHNGdW5jdG9yIGZ1bmN0b3Io
dGhpcyk7CisgICAgQ2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVuY3RvciBmdW5jdG9y
KHRoaXMpOworICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKK30KKwor
Y2xhc3MgRGVidWdnZXI6OkNsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVu
Y3RvciB7CitwdWJsaWM6CisgICAgQ2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzSW5HbG9i
YWxGdW5jdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogbV9nbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
KCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5o
YXNEZWJ1Z2dlclJlcXVlc3RzKCkgJiYgbV9nbG9iYWxPYmplY3QgPT0gY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y2xlYXJEZWJ1Z2dlclJlcXVlc3Rz
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNHbG9i
YWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworfTsKKwordm9pZCBEZWJ1Z2dlcjo6Y2xlYXJEZWJ1
Z2dlclJlcXVlc3RzSW5HbG9iYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICBBU1NFUlQobV92bSk7CisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1f
dm0tPmhlYXApOworICAgIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVu
Y3RvciBmdW5jdG9yKGdsb2JhbE9iamVjdCk7CiAgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJs
b2NrKGZ1bmN0b3IpOwogfQogCkBAIC00ODAsNyArNTQwLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6c2V0
UGF1c2VPbk5leHRTdGF0ZW1lbnQoYgogewogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSBw
YXVzZTsKICAgICBpZiAocGF1c2UpCi0gICAgICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAg
ICAgICB0b2dnbGVTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiB9CiAKIHZvaWQg
RGVidWdnZXI6OmJyZWFrUHJvZ3JhbSgpCkBAIC00ODksNyArNTQ5LDcgQEAgdm9pZCBEZWJ1Z2dl
cjo6YnJlYWtQcm9ncmFtKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXVzZU9uTmV4dFN0
YXRlbWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgdG9nZ2xlU3Rl
cHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG1fY3VycmVudENhbGxGcmFtZSA9
IG1fdm0tPnRvcENhbGxGcmFtZTsKICAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAg
ICBwYXVzZUlmTmVlZGVkKG1fY3VycmVudENhbGxGcmFtZSk7CkBAIC01MTAsNyArNTcwLDcgQEAg
dm9pZCBEZWJ1Z2dlcjo6c3RlcEludG9TdGF0ZW1lbnQoKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBzZXRTaG91bGRQYXVzZSh0cnVl
KTsKKyAgICB0b2dnbGVTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAgICAgbm90
aWZ5RG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50cygpOwogfQogCkBAIC01NDYsNyArNjA2LDcg
QEAgdm9pZCBEZWJ1Z2dlcjo6dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZgogewogICAgIHVwZGF0
ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwogICAgIHBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLSAg
ICBpZiAoIXNob3VsZFBhdXNlKCkpCisgICAgaWYgKCFpc1N0ZXBwaW5nKCkpCiAgICAgICAgIG1f
Y3VycmVudENhbGxGcmFtZSA9IDA7CiB9CiAKQEAgLTU5MCw3ICs2NTAsNyBAQCB2b2lkIERlYnVn
Z2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAgICAgaGFuZGxlUGF1c2UobV9yZWFzb25G
b3JQYXVzZSwgdm1FbnRyeUdsb2JhbE9iamVjdCk7CiAKICAgICBpZiAoIW1fcGF1c2VPbk5leHRT
dGF0ZW1lbnQgJiYgIW1fcGF1c2VPbkNhbGxGcmFtZSkgewotICAgICAgICBzZXRTaG91bGRQYXVz
ZShmYWxzZSk7CisgICAgICAgIHRvZ2dsZVN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxl
ZCk7CiAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG51bGxwdHI7CiAgICAgfQogfQpAQCAt
NjAzLDcgKzY2Myw3IEBAIHZvaWQgRGVidWdnZXI6OmV4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGwK
ICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkRm9yRXhjZXB0
aW9uKTsKICAgICBpZiAobV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25BbGxFeGNl
cHRpb25zIHx8IChtX3BhdXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPblVuY2F1Z2h0RXhj
ZXB0aW9ucyAmJiAhaGFzSGFuZGxlcikpIHsKICAgICAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVu
dCA9IHRydWU7Ci0gICAgICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAgICAgICB0b2dnbGVT
dGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAgICAgfQogCiAgICAgbV9oYXNIYW5k
bGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgPSB0cnVlOwpAQCAtNjYxLDcgKzcyMSw3IEBAIHZvaWQg
RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnIKICAgICAvLyB0aGUgZGVidWdnZXIg
aW1wbGVtZW50YXRpb24gdG8gbm90IHJlcXVpcmUgY2FsbGJhY2tzLgogICAgIGlmICghbV9pc0lu
V29ya2VyVGhyZWFkKQogICAgICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNh
bGxGcmFtZSk7Ci0gICAgZWxzZSBpZiAoc2hvdWxkUGF1c2UoKSkKKyAgICBlbHNlIGlmIChpc1N0
ZXBwaW5nKCkpCiAgICAgICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwogfQogCkBAIC02
OTEsNyArNzUxLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6ZGlkUmVhY2hCcmVha3BvaW50KENhbGxGcgog
CiAgICAgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNlZEZvckJyZWFr
cG9pbnQpOwogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIHNldFNob3Vs
ZFBhdXNlKHRydWUpOworICAgIHRvZ2dsZVN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVk
KTsKICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lv
biAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTcgKzQxLDExIEBAIGNsYXNzIFZNOwogCiB0eXBlZGVmIEV4
ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLQog
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgRGVidWdnZXIgewogcHVibGljOgogICAgIERlYnVnZ2Vy
KGJvb2wgaXNJbldvcmtlclRocmVhZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigp
OwogCi0gICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUGF1c2U7
IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IHNob3VsZFBhdXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX3Nob3VsZFBhdXNlKTsgfQotICAgIHZvaWQqIHNob3Vs
ZFBhdXNlQWRkcmVzcygpIHsgcmV0dXJuICZtX3Nob3VsZFBhdXNlOyB9Ci0KICAgICBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lKiBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdDsKICAgICBi
b29sIGhhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjaygpIGNvbnN0CiAgICAgewpAQCAtMTM0
LDggKzEyOCwxMCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgQnJl
YWtwb2ludHNJbkxpbmUsIFdURjo6SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPGludD4+IExpbmVUb0JyZWFrcG9pbnRzTWFwOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxTb3VyY2VJRCwgTGluZVRvQnJlYWtwb2ludHNNYXAsIFdURjo6SW50SGFzaDxTb3VyY2VJ
RD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8U291cmNlSUQ+PiBTb3VyY2VJ
RFRvQnJlYWtwb2ludHNNYXA7CiAKKyAgICBjbGFzcyBDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVx
dWVzdHNGdW5jdG9yOworICAgIGNsYXNzIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0lu
R2xvYmFsRnVuY3RvcjsKICAgICBjbGFzcyBUb2dnbGVCcmVha3BvaW50RnVuY3RvcjsKLSAgICBj
bGFzcyBDbGVhckJyZWFrcG9pbnRzRnVuY3RvcjsKKyAgICBjbGFzcyBUb2dnbGVTdGVwcGluZ01v
ZGVGdW5jdG9yOwogCiAgICAgY2xhc3MgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiB7CiAgICAgcHVi
bGljOgpAQCAtMTU1LDcgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0JyZWFrcG9p
bnQoU291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhpdEJyZWFrcG9p
bnQpOwogCi0gICAgdm9pZCBzZXRTaG91bGRQYXVzZShib29sKTsKICAgICB2b2lkIHVwZGF0ZU5l
ZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiAKICAgICAvLyBUaGVzZSB1cGRhdGUgZnVuY3Rpb25z
IGFyZSBvbmx5IG5lZWRlZCBiZWNhdXNlIG91ciBjdXJyZW50IGJyZWFrcG9pbnRzIGFyZQpAQCAt
MTY3LDYgKzE2MiwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1
c2VJZk5lZWRlZChKU0M6OkNhbGxGcmFtZSopOwogICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6
OkNhbGxGcmFtZSopOwogCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAgICAgICBTdGVwcGlu
Z01vZGVEaXNhYmxlZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAorICAgIH07CisgICAg
dm9pZCB0b2dnbGVTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKKyAgICBib29sIGlzU3RlcHBp
bmcoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBwaW5nTW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVk
OyB9CisKICAgICBlbnVtIEJyZWFrcG9pbnRTdGF0ZSB7CiAgICAgICAgIEJyZWFrcG9pbnREaXNh
YmxlZCwKICAgICAgICAgQnJlYWtwb2ludEVuYWJsZWQKQEAgLTE3NSw2ICsxNzcsOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgYXBwbHlCcmVha3BvaW50cyhDb2RlQmxvY2sqKTsKICAgICB2b2lkIHRv
Z2dsZUJyZWFrcG9pbnQoQnJlYWtwb2ludCYsIEJyZWFrcG9pbnRTdGF0ZSk7CiAKKyAgICB2b2lk
IGNsZWFyRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsKEpTR2xvYmFsT2JqZWN0Kik7CisKICAgICBW
TSogbV92bTsKICAgICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3RzOwog
CkBAIC0xODQsNiArMTg4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYnJlYWtwb2ludHNBY3Rp
dmF0ZWQgOiAxOwogICAgIGJvb2wgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2sgOiAx
OwogICAgIGJvb2wgbV9pc0luV29ya2VyVGhyZWFkIDogMTsKKyAgICBTdGVwcGluZ01vZGUgbV9z
dGVwcGluZ01vZGUgOiAxOwogCiAgICAgUmVhc29uRm9yUGF1c2UgbV9yZWFzb25Gb3JQYXVzZTsK
ICAgICBKU1ZhbHVlIG1fY3VycmVudEV4Y2VwdGlvbjsKQEAgLTE5Niw4ICsyMDEsNiBAQCBwcml2
YXRlOgogICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCBtX2JyZWFrcG9pbnRJRFRvQnJl
YWtwb2ludDsKICAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXAgbV9zb3VyY2VJRFRvQnJlYWtw
b2ludHM7CiAKLSAgICBib29sIG1fc2hvdWxkUGF1c2U7Ci0KICAgICBSZWZQdHI8SlNDOjpEZWJ1
Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVidWdnZXJDYWxsRnJhbWU7CiAKICAgICBmcmllbmQg
Y2xhc3MgRGVidWdnZXJDYWxsRnJhbWVTY29wZTsKQEAgLTIwNSwzMiArMjA4LDYgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogfTsKIAotI2Vsc2Ug
Ly8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KLWNsYXNzIERlYnVnZ2VyIHsKLXB1Ymxp
YzoKLSAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpCi0gICAgICAgIDogbV9zaG91bGRQYXVzZShm
YWxzZSkKLSAgICB7Ci0gICAgfQotICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotICAgIGJvb2wgbmVlZHNFeGNlcHRpb25DYWxsYmFja3MoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZvaWQgZGV0YWNoKEpTR2xvYmFsT2JqZWN0KikgeyB9Ci0gICAg
dm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBpbnQsIGNvbnN0
IFdURjo6U3RyaW5nJikgeyB9Ci0gICAgdm9pZCBleGNlcHRpb24oQ2FsbEZyYW1lKiwgSlNWYWx1
ZSwgYm9vbCkgeyB9Ci0gICAgdm9pZCBhdFN0YXRlbWVudChDYWxsRnJhbWUqKSB7IH0KLSAgICB2
b2lkIGNhbGxFdmVudChDYWxsRnJhbWUqKSB7IH0KLSAgICB2b2lkIHJldHVybkV2ZW50KENhbGxG
cmFtZSopIHsgfQotICAgIHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSopIHsgfQot
ICAgIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgeyB9Ci0gICAgdm9pZCBkaWRS
ZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3No
b3VsZFBhdXNlOwotfTsKLQotI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlYnVnZ2VyX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzMywyNSArNDIzMywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBCcmVha3BvaW50OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlckFkZHJlc3MoKSwgdGVtcC5ncHIoKSk7
CisgICAgICAgIEdQUlJlZyBkZWJ1Z2dlclJlcXVlc3RzR1BSID0gdGVtcC5ncHIoKTsKKyAgICAg
ICAgbV9qaXQubG9hZDMyKG1faml0LmNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVz
cygpLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAg
ICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCB0ZW1wLmdwcigpKSk7Ci0KLSAg
ICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSk7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAw
LAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcyhnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCktPnNob3VsZFBhdXNlQWRkcmVzcygpKSkpOwot
Ci0gICAgICAgIEdQUlJlZyBudW1CcmVha3BvaW50c0dQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAg
IG1faml0LmxvYWQzMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtQnJlYWtwb2ludHNBZGRyZXNzKCks
IG51bUJyZWFrcG9pbnRzR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAg
ICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIG51bUJyZWFrcG9pbnRzR1BSKSk7Cisg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGRlYnVn
Z2VyUmVxdWVzdHNHUFIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxMCwyNiArNDUxMCwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBCcmVha3BvaW50OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIERlYnVnZ2Vy
RXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRy
KAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpaZXJvLAotICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlckFkZHJlc3Mo
KSkpKTsKLQotICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5oYXNEZWJ1Z2dlcigpKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgIERlYnVnZ2VyRXZlbnQsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
QWJzb2x1dGVBZGRyZXNzKGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKS0+c2hvdWxkUGF1c2VBZGRy
ZXNzKCkpKSk7Ci0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyBudW1CcmVha3BvaW50c0dQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihtX2ppdC5jb2RlQmxvY2soKS0+bnVtQnJlYWtwb2ludHNBZGRyZXNzKCksIG51bUJyZWFrcG9p
bnRzR1BSKTsKKyAgICAgICAgR1BSUmVnIGRlYnVnZ2VyUmVxdWVzdHNHUFIgPSB0ZW1wLmdwcigp
OworICAgICAgICBtX2ppdC5sb2FkMzIobV9qaXQuY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIGRlYnVnZ2VyUmVxdWVzdHNHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgbnVtQnJlYWtw
b2ludHNHUFIpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
Tm9uWmVybywgZGVidWdnZXJSZXF1ZXN0c0dQUikpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA3LDcg
KzEyMDcsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsCiAgICAg
RGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRl
YnVnZ2VyKCk7CiAgICAgaWYgKCFkZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VChkZWJ1Z2dlci0+c2hvdWxkUGF1c2UoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5udW1C
cmVha3BvaW50cygpIHx8IGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5oYXNEZWJ1Z2dlclJlcXVlc3RzKCkgfHwgY2FsbEZyYW1l
LT5oYWRFeGNlcHRpb24oKSk7CiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAg
IGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5
MiwzMSArOTkyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93X3N0YXRpY19lcnJvcihJbnMK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSNpZiBFTkFCTEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQotICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGJyZWFrcG9pbnQoKTsKLSNlbGlmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBj
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgY2hhciogZGVidWdnZXJBZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0Ojpk
ZWJ1Z2dlck9mZnNldCgpOwotICAgIGxvYWRQdHIoZGVidWdnZXJBZGRyZXNzLCByZWdUMCk7Ci0g
ICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0KLSAgICBE
ZWJ1Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7Ci0gICAgY2hhciog
c2hvdWxkUGF1c2VBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsg
RGVidWdnZXI6OnNob3VsZFBhdXNlT2Zmc2V0KCk7Ci0gICAgSnVtcCBjYWxsYmFja05lZWRlZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJlc3Mp
KTsKLQotICAgIGNoYXIqIG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNvZGVCbG9jaygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQoKTsK
LSAgICBsb2FkMzIobnVtQnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7Ci0gICAgSnVtcCBub0Jy
ZWFrcG9pbnRTZXQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotCi0gICAgY2FsbGJhY2tO
ZWVkZWQubGluayh0aGlzKTsKKyAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywg
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0KLSAgICBub0JyZWFrcG9pbnRTZXQu
bGluayh0aGlzKTsKLSAgICBub0RlYnVnZ2VyLmxpbmsodGhpcyk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotI2VuZGlmCisgICAgbm9EZWJ1Z2dlclJlcXVl
c3RzLmxpbmsodGhpcyk7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTAsMzAgKzcxMCwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zCiAKIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0jaWYgRU5BQkxF
KERFQlVHX1dJVEhfQlJFQUtQT0lOVCkKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0
aW9uKTsKLSAgICBicmVha3BvaW50KCk7Ci0jZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdCgpOwotICAgIGNoYXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsK
LSAgICBKdW1wIG5vRGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFic29sdXRlQWRkcmVz
cyhkZWJ1Z2dlckFkZHJlc3MpKTsKLQotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9i
amVjdC0+ZGVidWdnZXIoKTsKLSAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQo
KTsKLSAgICBKdW1wIGNhbGxiYWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1
dGVBZGRyZXNzKHNob3VsZFBhdXNlQWRkcmVzcykpOwotCi0gICAgY2hhciogbnVtQnJlYWtwb2lu
dHNBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJs
b2NrOjpudW1CcmVha3BvaW50c09mZnNldCgpOwotICAgIGxvYWQzMihudW1CcmVha3BvaW50c0Fk
ZHJlc3MsIHJlZ1QwKTsKLSAgICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCk7Ci0KLSAgICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOworICAgIGxvYWQz
Mihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIEp1
bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKLQotICAgIG5vQnJlYWtwb2ludFNldC5saW5rKHRoaXMpOwotICAgIG5vRGVidWdnZXIu
bGluayh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7
Ci0jZW5kaWYKKyAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsMTggKzgzNSw5
IEBAIF9sbGludF9vcF9wcm9maWxlX2RpZF9jYWxsOgogCiBfbGxpbnRfb3BfZGVidWc6CiAgICAg
dHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQotICAgIGxvYWRw
IENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDFdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2Jq
ZWN0OjptX2RlYnVnZ2VyW3QwXSwgdDAKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKKyAg
ICBsb2FkaSBDb2RlQmxvY2s6Om1fZGVidWdnZXJSZXF1ZXN0c1t0MF0sIHQwCiAgICAgYnRpeiB0
MCwgLm9wRGVidWdEb25lCi0KLSAgICBsb2FkYiBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZVt0MF0s
IHQwCi0gICAgYnRibnogdDAsIC5vcERlYnVnRG9DYWxsYmFjawotCi0gICAgbG9hZGkgQ29kZUJs
b2NrOjptX251bUJyZWFrcG9pbnRzW3QxXSwgdDAKLSAgICBidGl6IHQwLCAub3BEZWJ1Z0RvbmUK
LQotLm9wRGVidWdEb0NhbGxiYWNrOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X2RlYnVnKQogLm9wRGVidWdEb25lOiAgICAgICAgICAgICAgICAgICAgCiAgICAgZGlzcGF0Y2go
MykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw2IEBAIHB1Ymxp
YzoKIAogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7
IH0KICAgICB2b2lkIHNldERlYnVnZ2VyKERlYnVnZ2VyKiBkZWJ1Z2dlcikgeyBtX2RlYnVnZ2Vy
ID0gZGVidWdnZXI7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IGRlYnVnZ2VyT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2RlYnVnZ2VyKTsgfQotICAg
IHZvaWQqIGRlYnVnZ2VyQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyOyB9CiAKICAgICBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222084</attachid>
            <date>2014-01-24 00:42:17 -0800</date>
            <delta_ts>2014-01-24 10:49:52 -0800</delta_ts>
            <desc>patch 2: fixed initialization bug.</desc>
            <filename>bug-127532.patch</filename>
            <type>text/plain</type>
            <size>25846</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDE0LTAxLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmluZyB0aGUgbmVlZCBmb3IgRGVidWdnZXIqIGFuZCBtX3Nob3VsZFBhdXNlIG9wX2RlYnVn
IGNoZWNrLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTI3NTMyPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFj
ZXMgdGhlIGNoZWNraW5nIG9mIHRoZSBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZSBmbGFnCisgICAg
ICAgIHdpdGggYSBwcm9jZWR1cmUgdG8gdG9mZmxlIGEgU3RlcHBpbmdNb2RlIGZsYWcgb24gYWxs
IENvZGVCbG9ja3MgdW5kZXIKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGRlYnVnZ2Vy
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIG9wX2RlYnVnIGNoZWNraW5nCisgICAgICAgIGxvZ2ljIGlu
IGFsbCB0aGUgZXhlY3V0aW9uIGVuZ2luZXMuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omhhc0RlYnVnZ2VyUmVxdWVzdHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0b2dn
bGVTdGVwcGluZ01vZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRGVidWdnZXJS
ZXF1ZXN0cyk6CisgICAgICAgIC0gQ29kZUJsb2NrOjptX2RlYnVnZ2VyUmVxdWVzdHMgaXMgYSB1
bmlvbiBvZiBtX251bUJyZWFrcG9pbnRzIGFuZCB0aGUKKyAgICAgICAgICBuZXcgbV9zdGVwcGlu
Z01vZGUuIFRoZSBkZWJ1Z2dlciBjYW4gYWRkL3JlbW92ZSBicmVha3BvaW50cyB0byB0aGUKKyAg
ICAgICAgICBDb2RlQmxvY2sgYXMgd2VsbCBhcyB0b2dnbGUgdGhlIHN0ZXBwaW5nIG1vZGUuIEJ5
IGhhdmluZworICAgICAgICAgIG1fZGVidWdnZXJSZXF1ZXN0cyBhcyBhIHVuaW9uIG9mIHRoZSAy
IGJpdCBmaWVsZHMsIHRoZSBvcF9kZWJ1ZyBjb2RlCisgICAgICAgICAgY2FuIG5vdyBjaGVjayBp
ZiBhbnkgb2YgdGhlIDIgcmVxdWVzdHMgbWFkZSBvbiB0aGUgQ29kZUJsb2NrIGlzIHN0aWxsCisg
ICAgICAgICAgaW4gZWZmZWN0IGp1c3QgYnkgdGVzdGluZyBhIHNpbmdsZSBpbnQuCisKKyAgICAg
ICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1
Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkZXRhY2gpOgorICAgICAgICAtIFRoaXMg
d2FzIGJ1ZyBmcm9tIGJlZm9yZSB3aGVyZSBJIGZvcmdvdCB0byBjbGVhciB0aGUgQ29kZUJsb2Nr
CisgICAgICAgICAgYnJlYWtwb2ludHMgYmVmb3JlIGRldGFjaGluZy4gV2Ugbm93IHRha2UgY2Fy
ZSBvZiBpdCBieSBjbGVhcmluZyBhbGwKKyAgICAgICAgICBkZWJ1Z2dlciByZXF1ZXN0cyBtYWRl
IHRvIHRoZSBDb2RlQmxvY2suCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OlRvZ2dsZVN0ZXBw
aW5nTW9kZUZ1bmN0b3I6OlRvZ2dsZVN0ZXBwaW5nTW9kZUZ1bmN0b3IpOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlcjo6VG9nZ2xlU3RlcHBpbmdNb2RlRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyOjp0b2dnbGVTdGVwcGluZ01vZGUpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpD
bGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yOjpDbGVhckNvZGVCbG9ja0RlYnVn
Z2VyUmVxdWVzdHNGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkNsZWFyQ29kZUJs
b2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkNs
ZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVuY3Rvcjo6Q2xlYXJDb2RlQmxv
Y2tEZWJ1Z2dlclJlcXVlc3RzSW5HbG9iYWxGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OkNsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpjbGVhckRlYnVnZ2VyUmVxdWVzdHNJbkds
b2JhbCk6CisgICAgICAgIC0gV2UgbmVlZCBhIGRpc3RpbmN0IGNsZWFyRGVidWdnZXJSZXF1ZXN0
c0luR2xvYmFsKCkgZnJvbSBjbGVhckJyZWFrcG9pbnRzKCkKKyAgICAgICAgICBiZWNhdXNlOgor
ICAgICAgICAgIDEuIFdoZW4gd2UgZGV0YWNoIGEgZ2xvYmFsT2JqZWN0LCB3ZSBvbmx5IHdhbnQg
dG8gY2xlYXIgdGhlIGRlYnVnZ2VyCisgICAgICAgICAgICAgcmVxdWVzdHMgaW4gQ29kZUJsb2Nr
cyBmcm9tIHRoYXQgZ2xvYmFsLgorICAgICAgICAgIDIuIENsZWFyaW5nIHRoZSBkZWJ1Z2dlciBy
ZXF1ZXN0cyBpbiB0aGUgQ29kZUJsb2NrcyBpcyBub3QgdGhlIHNhbWUKKyAgICAgICAgICAgICBh
cyBjbGVhcmluZyB0aGUgYnJlYWtwb2ludHMuIFRoZSBicmVha3BvaW50cyBhcmUgc3RpbGwgaW4g
ZWZmZWN0CisgICAgICAgICAgICAgZm9yIHRoZSBuZXh0IHRpbWUgYSBnbG9iYWxPYmplY3QgaXMg
YXR0YWNoZWQsIG9yIGZvciBvdGhlcgorICAgICAgICAgICAgIGdsb2JhbE9iamVjdHMgdGhhdCBh
cmUgc3RpbGwgYXR0YWNoZWQuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnNldFBhdXNlT25O
ZXh0U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmJyZWFrUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzdGVwSW50b1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZXhj
ZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgIC0gV2UncmUgYWx3YXlzIGdvaW5nIHRvIHN1cHBv
cnQgdGhlIGRlYnVnZ2VyLiBTbywgdGhlcmUncyBubyBsb25nZXIKKyAgICAgICAgICBhIG5lZWQg
dG8gY2hlY2sgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpLiBSZW1vdmVkIHRoZSB1bm5lZWRl
ZCBjb2RlLgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0
RGVidWdnZXIpOgorCiAyMDE0LTAxLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBFbmFibGUgREZHIGZvciB0aGUgRGVidWdnZXIgYW5kIFByb2ZpbGVyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE2MjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY5LDYgKzE0NjksNyBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0
cnVlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlu
a2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVy
Lm1fdW5saW5rZWRDb2RlLmdldCgpKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2Rl
RGlzYWJsZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCiAgICAgLCBtX293bmVyRXhlY3V0
YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1f
b3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5tX3ZtKQpAQCAtMTUyNCw2
ICsxNTI1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAg
ICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBp
bGF0aW9uKGZhbHNlKQogICAgICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCks
IG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2spCisgICAgLCBtX3N0ZXBwaW5nTW9k
ZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKICAgICAs
IG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUs
IG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg3MSw5ICs4NzEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7
CiAKLSAgICBpbnQgbnVtQnJlYWtwb2ludHMoKSBjb25zdCB7IHJldHVybiBtX251bUJyZWFrcG9p
bnRzOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBudW1CcmVha3BvaW50c09mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQnJlYWtwb2ludHMpOyB9Ci0gICAg
dm9pZCogbnVtQnJlYWtwb2ludHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fbnVtQnJlYWtwb2ludHM7
IH0KKyAgICBpbnQgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuICEhbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJl
dHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50
IG51bUJyZWFrcG9pbnRzKSB7IG1fbnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0K
ICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQpAQCAtODgxLDcg
Kzg4MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fbnVtQnJlYWtwb2ludHMgLT0gbnVtQnJlYWtw
b2ludHM7CiAgICAgICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzID49IDApOwogICAgIH0KLSAg
ICB2b2lkIGNsZWFyQWxsQnJlYWtwb2ludHMoKSB7IG1fbnVtQnJlYWtwb2ludHMgPSAwOyB9CisK
KyAgICBlbnVtIFN0ZXBwaW5nTW9kZSB7CisgICAgICAgIFN0ZXBwaW5nTW9kZURpc2FibGVkLAor
ICAgICAgICBTdGVwcGluZ01vZGVFbmFibGVkCisgICAgfTsKKyAgICB2b2lkIHRvZ2dsZVN0ZXBw
aW5nTW9kZShTdGVwcGluZ01vZGUgbW9kZSkgeyBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7IH0KKwor
ICAgIHZvaWQgY2xlYXJEZWJ1Z2dlclJlcXVlc3RzKCkgeyBtX2RlYnVnZ2VyUmVxdWVzdHMgPSAw
OyB9CiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRl
LgogCkBAIC0xMDE5LDcgKzEwMjUsMTMgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIFdyaXRlQmFy
cmllcjxVbmxpbmtlZENvZGVCbG9jaz4gbV91bmxpbmtlZENvZGU7CiAgICAgaW50IG1fbnVtUGFy
YW1ldGVyczsKLSAgICBpbnQgbV9udW1CcmVha3BvaW50czsKKyAgICB1bmlvbiB7CisgICAgICAg
IHVuc2lnbmVkIG1fZGVidWdnZXJSZXF1ZXN0czsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1fc3RlcHBpbmdNb2RlIDogMTsKKyAgICAgICAgICAgIHNpZ25lZCBtX251
bUJyZWFrcG9pbnRzIDogMzE7CisgICAgICAgIH07CisgICAgfTsKICAgICBXcml0ZUJhcnJpZXI8
U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1dGFibGU7CiAgICAgVk0qIG1fdm07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNp
b24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDEzICsxNDgsMTMgQEAgRGVidWdnZXI6OkRlYnVnZ2Vy
KGJvb2wgaXNJbldvcmtlclRocmVhZAogICAgICwgbV9icmVha3BvaW50c0FjdGl2YXRlZCh0cnVl
KQogICAgICwgbV9oYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2soZmFsc2UpCiAgICAgLCBt
X2lzSW5Xb3JrZXJUaHJlYWQoaXNJbldvcmtlclRocmVhZCkKKyAgICAsIG1fc3RlcHBpbmdNb2Rl
KFN0ZXBwaW5nTW9kZURpc2FibGVkKQogICAgICwgbV9yZWFzb25Gb3JQYXVzZShOb3RQYXVzZWQp
CiAgICAgLCBtX3BhdXNlT25DYWxsRnJhbWUoMCkKICAgICAsIG1fY3VycmVudENhbGxGcmFtZSgw
KQogICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKFVJTlRfTUFYKQogICAgICwgbV9sYXN0RXhlY3V0
ZWRTb3VyY2VJRChub1NvdXJjZUlEKQogICAgICwgbV90b3BCcmVha3BvaW50SUQobm9CcmVha3Bv
aW50SUQpCi0gICAgLCBtX3Nob3VsZFBhdXNlKGZhbHNlKQogewogfQogCkBAIC0xODksMTQgKzE4
OSw0OCBAQCB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3QqIGdsCiAKICAgICBB
U1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGdsb2JhbE9iamVjdCkpOwogICAgIG1fZ2xv
YmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0KTsKKworICAgIGNsZWFyRGVidWdnZXJSZXF1
ZXN0c0luR2xvYmFsKGdsb2JhbE9iamVjdCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dl
cigwKTsKICAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0cy5zaXplKCkpCiAgICAgICAgIG1fdm0gPSBu
dWxscHRyOwogfQogCi12b2lkIERlYnVnZ2VyOjpzZXRTaG91bGRQYXVzZShib29sIHZhbHVlKQor
Y2xhc3MgRGVidWdnZXI6OlRvZ2dsZVN0ZXBwaW5nTW9kZUZ1bmN0b3IgeworcHVibGljOgorICAg
IFRvZ2dsZVN0ZXBwaW5nTW9kZUZ1bmN0b3IoRGVidWdnZXIqIGRlYnVnZ2VyLCBTdGVwcGluZ01v
ZGUgbW9kZSkKKyAgICAgICAgOiBtX2RlYnVnZ2VyKGRlYnVnZ2VyKQorICAgICAgICAsIG1fbW9k
ZShtb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAobV9kZWJ1Z2dlciA9PSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7CisgICAgICAgICAgICBpZiAobV9tb2RlID09IFN0
ZXBwaW5nTW9kZUVuYWJsZWQpCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT50b2dnbGVTdGVw
cGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGVFbmFibGVkKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPnRvZ2dsZVN0ZXBwaW5nTW9kZShDb2RlQmxv
Y2s6OlN0ZXBwaW5nTW9kZURpc2FibGVkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCitwcml2YXRlOgorICAgIERlYnVnZ2VyKiBtX2RlYnVnZ2VyOworICAgIFN0
ZXBwaW5nTW9kZSBtX21vZGU7Cit9OworCit2b2lkIERlYnVnZ2VyOjp0b2dnbGVTdGVwcGluZ01v
ZGUoU3RlcHBpbmdNb2RlIG1vZGUpCiB7Ci0gICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOworICAg
IGlmIChtb2RlID09IG1fc3RlcHBpbmdNb2RlKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGVw
cGluZ01vZGUgPSBtb2RlOworCisgICAgaWYgKCFtX3ZtKQorICAgICAgICByZXR1cm47CisgICAg
SGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1fdm0tPmhlYXApOworICAgIFRvZ2ds
ZVN0ZXBwaW5nTW9kZUZ1bmN0b3IgZnVuY3Rvcih0aGlzLCBtb2RlKTsKKyAgICBtX3ZtLT5oZWFw
LmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnJlZ2lzdGVy
Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtMjA2LDcgKzI0MCw3IEBAIHZvaWQg
RGVidWdnZXI6OnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG8KIAogdm9pZCBEZWJ1Z2dlcjo6dW5y
ZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBjb2RlQmxvY2st
PmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKKyAgICBjb2RlQmxvY2stPmNsZWFyRGVidWdnZXJSZXF1
ZXN0cygpOwogfQogCiB2b2lkIERlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KENvZGVCbG9jayog
Y29kZUJsb2NrLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBCcmVha3BvaW50U3RhdGUgZW5hYmxl
ZE9yTm90KQpAQCAtNDM1LDE3ICs0NjksMTcgQEAgYm9vbCBEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dChTb3VyY2VJRCBzbwogICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFuKG1fY3VycmVudENhbGxG
cmFtZSk7CiB9CiAKLWNsYXNzIERlYnVnZ2VyOjpDbGVhckJyZWFrcG9pbnRzRnVuY3RvciB7Citj
bGFzcyBEZWJ1Z2dlcjo6Q2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVuY3RvciB7CiBw
dWJsaWM6Ci0gICAgQ2xlYXJCcmVha3BvaW50c0Z1bmN0b3IoRGVidWdnZXIqIGRlYnVnZ2VyKQor
ICAgIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3IoRGVidWdnZXIqIGRlYnVn
Z2VyKQogICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIpCiAgICAgewogICAgIH0KIAogICAg
IGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7Ci0gICAgICAgIGlm
IChjb2RlQmxvY2stPm51bUJyZWFrcG9pbnRzKCkgJiYgbV9kZWJ1Z2dlciA9PSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVh
ckFsbEJyZWFrcG9pbnRzKCk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmhhc0RlYnVnZ2VyUmVx
dWVzdHMoKSAmJiBtX2RlYnVnZ2VyID09IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmNsZWFyRGVidWdnZXJSZXF1ZXN0cygpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00NjIsNyArNDk2LDMzIEBAIHZvaWQg
RGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogICAgIGlmICghbV92bSkKICAgICAgICAgcmV0
dXJuOwogICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZShtX3ZtLT5oZWFwKTsK
LSAgICBDbGVhckJyZWFrcG9pbnRzRnVuY3RvciBmdW5jdG9yKHRoaXMpOworICAgIENsZWFyQ29k
ZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3IgZnVuY3Rvcih0aGlzKTsKKyAgICBtX3ZtLT5o
ZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7Cit9CisKK2NsYXNzIERlYnVnZ2VyOjpDbGVh
ckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNJbkdsb2JhbEZ1bmN0b3IgeworcHVibGljOgorICAg
IENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFsRnVuY3RvcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKENvZGVCbG9jayogY29kZUJs
b2NrKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzRGVidWdnZXJSZXF1ZXN0cygp
ICYmIG1fZ2xvYmFsT2JqZWN0ID09IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgICAg
ICAgICBjb2RlQmxvY2stPmNsZWFyRGVidWdnZXJSZXF1ZXN0cygpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9i
amVjdDsKK307CisKK3ZvaWQgRGVidWdnZXI6OmNsZWFyRGVidWdnZXJSZXF1ZXN0c0luR2xvYmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQVNTRVJUKG1fdm0pOworICAg
IEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZShtX3ZtLT5oZWFwKTsKKyAgICBDbGVh
ckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNJbkdsb2JhbEZ1bmN0b3IgZnVuY3RvcihnbG9iYWxP
YmplY3QpOwogICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIApA
QCAtNDgwLDcgKzU0MCw3IEBAIHZvaWQgRGVidWdnZXI6OnNldFBhdXNlT25OZXh0U3RhdGVtZW50
KGIKIHsKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gcGF1c2U7CiAgICAgaWYgKHBhdXNl
KQotICAgICAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICAgICAgdG9nZ2xlU3RlcHBpbmdN
b2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogfQogCiB2b2lkIERlYnVnZ2VyOjpicmVha1Byb2dy
YW0oKQpAQCAtNDg5LDcgKzU0OSw3IEBAIHZvaWQgRGVidWdnZXI6OmJyZWFrUHJvZ3JhbSgpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAg
IHNldFNob3VsZFBhdXNlKHRydWUpOworICAgIHRvZ2dsZVN0ZXBwaW5nTW9kZShTdGVwcGluZ01v
ZGVFbmFibGVkKTsKICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBtX3ZtLT50b3BDYWxsRnJhbWU7
CiAgICAgQVNTRVJUKG1fY3VycmVudENhbGxGcmFtZSk7CiAgICAgcGF1c2VJZk5lZWRlZChtX2N1
cnJlbnRDYWxsRnJhbWUpOwpAQCAtNTEwLDcgKzU3MCw3IEBAIHZvaWQgRGVidWdnZXI6OnN0ZXBJ
bnRvU3RhdGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRl
bWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgdG9nZ2xlU3RlcHBp
bmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIG5vdGlmeURvbmVQcm9jZXNzaW5nRGVi
dWdnZXJFdmVudHMoKTsKIH0KIApAQCAtNTQ2LDcgKzYwNiw3IEBAIHZvaWQgRGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYKIHsKICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1l
KTsKICAgICBwYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0gICAgaWYgKCFzaG91bGRQYXVzZSgp
KQorICAgIGlmICghaXNTdGVwcGluZygpKQogICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAw
OwogfQogCkBAIC01OTAsNyArNjUwLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChD
YWxsRnJhbWUqIAogICAgIGhhbmRsZVBhdXNlKG1fcmVhc29uRm9yUGF1c2UsIHZtRW50cnlHbG9i
YWxPYmplY3QpOwogCiAgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50ICYmICFtX3BhdXNl
T25DYWxsRnJhbWUpIHsKLSAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2UpOworICAgICAgICB0
b2dnbGVTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpOwogICAgICAgICBtX2N1cnJl
bnRDYWxsRnJhbWUgPSBudWxscHRyOwogICAgIH0KIH0KQEAgLTYwMyw3ICs2NjMsNyBAQCB2b2lk
IERlYnVnZ2VyOjpleGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsCiAgICAgUGF1c2VSZWFzb25EZWNs
YXJhdGlvbiByZWFzb24oKnRoaXMsIFBhdXNlZEZvckV4Y2VwdGlvbik7CiAgICAgaWYgKG1fcGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uQWxsRXhjZXB0aW9ucyB8fCAobV9wYXVzZU9u
RXhjZXB0aW9uc1N0YXRlID09IFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnMgJiYgIWhhc0hhbmRs
ZXIpKSB7CiAgICAgICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgICAgICBz
ZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICAgICAgdG9nZ2xlU3RlcHBpbmdNb2RlKFN0ZXBwaW5n
TW9kZUVuYWJsZWQpOwogICAgIH0KIAogICAgIG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxi
YWNrID0gdHJ1ZTsKQEAgLTY2MSw3ICs3MjEsNyBAQCB2b2lkIERlYnVnZ2VyOjp3aWxsRXhlY3V0
ZVByb2dyYW0oQ2FsbEZyCiAgICAgLy8gdGhlIGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uIHRvIG5v
dCByZXF1aXJlIGNhbGxiYWNrcy4KICAgICBpZiAoIW1faXNJbldvcmtlclRocmVhZCkKICAgICAg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGVsc2Ug
aWYgKHNob3VsZFBhdXNlKCkpCisgICAgZWxzZSBpZiAoaXNTdGVwcGluZygpKQogICAgICAgICB1
cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKIH0KIApAQCAtNjkxLDcgKzc1MSw3IEBAIHZvaWQg
RGVidWdnZXI6OmRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnIKIAogICAgIFBhdXNlUmVhc29uRGVj
bGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRGb3JCcmVha3BvaW50KTsKICAgICBtX3BhdXNl
T25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICB0
b2dnbGVTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAgICAgdXBkYXRlQ2FsbEZy
YW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDE3ICs0MSwxMSBAQCBjbGFzcyBWTTsKIAogdHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOwog
Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0KIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIERlYnVnZ2VyIHsKIHB1YmxpYzoKICAgICBEZWJ1Z2dlcihib29sIGlzSW5Xb3JrZXJUaHJl
YWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+RGVidWdnZXIoKTsKIAotICAgIGJvb2wgc2hvdWxk
UGF1c2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhdXNlOyB9Ci0gICAgc3RhdGljIHB0cmRp
ZmZfdCBzaG91bGRQYXVzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEZWJ1Z2dl
ciwgbV9zaG91bGRQYXVzZSk7IH0KLSAgICB2b2lkKiBzaG91bGRQYXVzZUFkZHJlc3MoKSB7IHJl
dHVybiAmbV9zaG91bGRQYXVzZTsgfQotCiAgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSogY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNIYW5kbGVyRm9yRXhj
ZXB0aW9uQ2FsbGJhY2soKSBjb25zdAogICAgIHsKQEAgLTEzNCw4ICsxMjgsMTAgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEJyZWFrcG9pbnRzSW5MaW5lLCBXVEY6
OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBM
aW5lVG9CcmVha3BvaW50c01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlSUQsIExpbmVU
b0JyZWFrcG9pbnRzTWFwLCBXVEY6OkludEhhc2g8U291cmNlSUQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFNvdXJjZUlEPj4gU291cmNlSURUb0JyZWFrcG9pbnRzTWFwOwog
CisgICAgY2xhc3MgQ2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVlc3RzRnVuY3RvcjsKKyAgICBj
bGFzcyBDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNJbkdsb2JhbEZ1bmN0b3I7CiAgICAg
Y2xhc3MgVG9nZ2xlQnJlYWtwb2ludEZ1bmN0b3I7Ci0gICAgY2xhc3MgQ2xlYXJCcmVha3BvaW50
c0Z1bmN0b3I7CisgICAgY2xhc3MgVG9nZ2xlU3RlcHBpbmdNb2RlRnVuY3RvcjsKIAogICAgIGNs
YXNzIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gewogICAgIHB1YmxpYzoKQEAgLTE1NSw3ICsxNTEs
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNCcmVha3BvaW50KFNvdXJjZUlELCBjb25zdCBU
ZXh0UG9zaXRpb24mLCBCcmVha3BvaW50KiBoaXRCcmVha3BvaW50KTsKIAotICAgIHZvaWQgc2V0
U2hvdWxkUGF1c2UoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNr
cygpOwogCiAgICAgLy8gVGhlc2UgdXBkYXRlIGZ1bmN0aW9ucyBhcmUgb25seSBuZWVkZWQgYmVj
YXVzZSBvdXIgY3VycmVudCBicmVha3BvaW50cyBhcmUKQEAgLTE2Nyw2ICsxNjIsMTMgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoSlNDOjpDYWxs
RnJhbWUqKTsKICAgICB2b2lkIHBhdXNlSWZOZWVkZWQoSlNDOjpDYWxsRnJhbWUqKTsKIAorICAg
IGVudW0gU3RlcHBpbmdNb2RlIHsKKyAgICAgICAgU3RlcHBpbmdNb2RlRGlzYWJsZWQsCisgICAg
ICAgIFN0ZXBwaW5nTW9kZUVuYWJsZWQKKyAgICB9OworICAgIHZvaWQgdG9nZ2xlU3RlcHBpbmdN
b2RlKFN0ZXBwaW5nTW9kZSk7CisgICAgYm9vbCBpc1N0ZXBwaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9zdGVwcGluZ01vZGUgPT0gU3RlcHBpbmdNb2RlRW5hYmxlZDsgfQorCiAgICAgZW51bSBCcmVh
a3BvaW50U3RhdGUgewogICAgICAgICBCcmVha3BvaW50RGlzYWJsZWQsCiAgICAgICAgIEJyZWFr
cG9pbnRFbmFibGVkCkBAIC0xNzUsNiArMTc3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5
QnJlYWtwb2ludHMoQ29kZUJsb2NrKik7CiAgICAgdm9pZCB0b2dnbGVCcmVha3BvaW50KEJyZWFr
cG9pbnQmLCBCcmVha3BvaW50U3RhdGUpOwogCisgICAgdm9pZCBjbGVhckRlYnVnZ2VyUmVxdWVz
dHNJbkdsb2JhbChKU0dsb2JhbE9iamVjdCopOworCiAgICAgVk0qIG1fdm07CiAgICAgSGFzaFNl
dDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIApAQCAtMTg0LDYgKzE4OCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2JyZWFrcG9pbnRzQWN0aXZhdGVkIDogMTsKICAgICBib29s
IG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNrIDogMTsKICAgICBib29sIG1faXNJbldv
cmtlclRocmVhZCA6IDE7CisgICAgU3RlcHBpbmdNb2RlIG1fc3RlcHBpbmdNb2RlIDogMTsKIAog
ICAgIFJlYXNvbkZvclBhdXNlIG1fcmVhc29uRm9yUGF1c2U7CiAgICAgSlNWYWx1ZSBtX2N1cnJl
bnRFeGNlcHRpb247CkBAIC0xOTYsOCArMjAxLDYgQEAgcHJpdmF0ZToKICAgICBCcmVha3BvaW50
SURUb0JyZWFrcG9pbnRNYXAgbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQ7CiAgICAgU291cmNl
SURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0JyZWFrcG9pbnRzOwogCi0gICAgYm9vbCBt
X3Nob3VsZFBhdXNlOwotCiAgICAgUmVmUHRyPEpTQzo6RGVidWdnZXJDYWxsRnJhbWU+IG1fY3Vy
cmVudERlYnVnZ2VyQ2FsbEZyYW1lOwogCiAgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZy
YW1lU2NvcGU7CkBAIC0yMDUsMzIgKzIwOCw2IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIH07CiAKLSNlbHNlIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQotCi1jbGFzcyBEZWJ1Z2dlciB7Ci1wdWJsaWM6Ci0gICAgRGVidWdnZXIoYm9v
bCA9IGZhbHNlKQotICAgICAgICA6IG1fc2hvdWxkUGF1c2UoZmFsc2UpCi0gICAgewotICAgIH0K
LSAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29s
IG5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopIHsgfQotICAgIHZvaWQgc291cmNlUGFyc2VkKEV4
ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50LCBjb25zdCBXVEY6OlN0cmluZyYpIHsgfQot
ICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFsdWUsIGJvb2wpIHsgfQotICAgIHZv
aWQgYXRTdGF0ZW1lbnQoQ2FsbEZyYW1lKikgeyB9Ci0gICAgdm9pZCBjYWxsRXZlbnQoQ2FsbEZy
YW1lKikgeyB9Ci0gICAgdm9pZCByZXR1cm5FdmVudChDYWxsRnJhbWUqKSB7IH0KLSAgICB2b2lk
IHdpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1dGVQ
cm9ncmFtKENhbGxGcmFtZSopIHsgfQotICAgIHZvaWQgZGlkUmVhY2hCcmVha3BvaW50KENhbGxG
cmFtZSopIHsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9zaG91bGRQYXVzZTsKLX07Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBEZWJ1Z2dlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2MjY2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMzMsMjUgKzQyMzMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQnJlYWtw
b2ludDogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKGdsb2JhbE9i
amVjdC0+ZGVidWdnZXJBZGRyZXNzKCksIHRlbXAuZ3ByKCkpOworICAgICAgICBHUFJSZWcgZGVi
dWdnZXJSZXF1ZXN0c0dQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQzMihtX2pp
dC5jb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgZGVidWdnZXJSZXF1ZXN0
c0dQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBEZWJ1Z2dlckV2
ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6WmVybywgdGVtcC5ncHIoKSkpOwotCi0gICAgICAgIEFTU0VSVChnbG9iYWxP
YmplY3QtPmhhc0RlYnVnZ2VyKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAg
ICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoZ2xvYmFsT2JqZWN0LT5k
ZWJ1Z2dlcigpLT5zaG91bGRQYXVzZUFkZHJlc3MoKSkpKTsKLQotICAgICAgICBHUFJSZWcgbnVt
QnJlYWtwb2ludHNHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIobV9qaXQu
Y29kZUJsb2NrKCktPm51bUJyZWFrcG9pbnRzQWRkcmVzcygpLCBudW1CcmVha3BvaW50c0dQUik7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBK
U1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpOb25aZXJvLCBudW1CcmVha3BvaW50c0dQUikpOworICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MjY2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1MTAsMjYgKzQ1MTAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQnJlYWtwb2lu
dDogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygp
LCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6WmVybywKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVB
ZGRyZXNzKGdsb2JhbE9iamVjdC0+ZGVidWdnZXJBZGRyZXNzKCkpKSk7Ci0KLSAgICAgICAgQVNT
RVJUKGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5v
blplcm8sCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhnbG9i
YWxPYmplY3QtPmRlYnVnZ2VyKCktPnNob3VsZFBhdXNlQWRkcmVzcygpKSkpOwotCiAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgbnVtQnJlYWtwb2ludHNH
UFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIobV9qaXQuY29kZUJsb2NrKCkt
Pm51bUJyZWFrcG9pbnRzQWRkcmVzcygpLCBudW1CcmVha3BvaW50c0dQUik7CisgICAgICAgIEdQ
UlJlZyBkZWJ1Z2dlclJlcXVlc3RzR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKG1faml0LmNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCBkZWJ1Z2dl
clJlcXVlc3RzR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIERl
YnVnZ2VyRXZlbnQsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIG51bUJyZWFrcG9pbnRzR1BSKSk7CisgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGRlYnVnZ2VyUmVx
dWVzdHNHUFIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNyw3ICsxMjA3LDcgQEAgTkVWRVJfSU5M
SU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9
IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwogICAgIGlmICgh
ZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoZGVidWdnZXItPnNob3VsZFBh
dXNlKCkgfHwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bnVtQnJlYWtwb2ludHMoKSB8fCBjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aGFzRGVidWdnZXJSZXF1ZXN0cygpIHx8IGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwog
CiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewogICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZy
YW1lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTIsMzEgKzk5MiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvd19zdGF0aWNfZXJyb3IoSW5zCiAKIHZvaWQgSklUOjplbWl0X29w
X2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0jaWYgRU5BQkxFKERF
QlVHX1dJVEhfQlJFQUtQT0lOVCkKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9u
KTsKLSAgICBicmVha3BvaW50KCk7Ci0jZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdCgpOwotICAgIGNoYXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKLSAg
ICBsb2FkUHRyKGRlYnVnZ2VyQWRkcmVzcywgcmVnVDApOwotICAgIEp1bXAgbm9EZWJ1Z2dlciA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApOwotCi0gICAgRGVidWdnZXIqIGRlYnVnZ2VyID0g
Z2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpOwotICAgIGNoYXIqIHNob3VsZFBhdXNlQWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpzaG91bGRQYXVz
ZU9mZnNldCgpOwotICAgIEp1bXAgY2FsbGJhY2tOZWVkZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBYnNvbHV0ZUFkZHJlc3Moc2hvdWxkUGF1c2VBZGRyZXNzKSk7Ci0KLSAgICBjaGFyKiBudW1C
cmVha3BvaW50c0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlQmxvY2soKSkg
KyBDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzT2Zmc2V0KCk7Ci0gICAgbG9hZDMyKG51bUJyZWFr
cG9pbnRzQWRkcmVzcywgcmVnVDApOwotICAgIEp1bXAgbm9CcmVha3BvaW50U2V0ID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QwKTsKLQotICAgIGNhbGxiYWNrTmVlZGVkLmxpbmsodGhpcyk7Cisg
ICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7
CisgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDAp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwotCi0gICAgbm9CcmVha3BvaW50U2V0LmxpbmsodGhpcyk7Ci0gICAgbm9E
ZWJ1Z2dlci5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3Ry
dWN0aW9uKTsKLSNlbmRpZgorICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQog
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEwLDMwICs3MTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3dfc3RhdGljX2Vycm9yKElucwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9J
TlQpCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgYnJlYWtwb2lu
dCgpOwotI2VsaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBjaGFy
KiBkZWJ1Z2dlckFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3Qp
ICsgSlNHbG9iYWxPYmplY3Q6OmRlYnVnZ2VyT2Zmc2V0KCk7Ci0gICAgSnVtcCBub0RlYnVnZ2Vy
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZGVidWdnZXJBZGRyZXNzKSk7
Ci0KLSAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7Ci0g
ICAgY2hhciogc2hvdWxkUGF1c2VBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVi
dWdnZXIpICsgRGVidWdnZXI6OnNob3VsZFBhdXNlT2Zmc2V0KCk7Ci0gICAgSnVtcCBjYWxsYmFj
a05lZWRlZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVz
ZUFkZHJlc3MpKTsKLQotICAgIGNoYXIqIG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNvZGVCbG9jaygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNP
ZmZzZXQoKTsKLSAgICBsb2FkMzIobnVtQnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7Ci0gICAg
SnVtcCBub0JyZWFrcG9pbnRTZXQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotCi0gICAg
Y2FsbGJhY2tOZWVkZWQubGluayh0aGlzKTsKKyAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVn
Z2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0KLSAgICBub0JyZWFr
cG9pbnRTZXQubGluayh0aGlzKTsKLSAgICBub0RlYnVnZ2VyLmxpbmsodGhpcyk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwotI2VuZGlmCisgICAgbm9EZWJ1
Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2
MjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtODM1LDE4ICs4MzUsOSBAQCBfbGxpbnRfb3BfcHJvZmls
ZV9kaWRfY2FsbDoKIAogX2xsaW50X29wX2RlYnVnOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
T2JqZWN0W3QxXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9kZWJ1Z2dlclt0MF0s
IHQwCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCisgICAgbG9hZGkgQ29kZUJsb2NrOjpt
X2RlYnVnZ2VyUmVxdWVzdHNbdDBdLCB0MAogICAgIGJ0aXogdDAsIC5vcERlYnVnRG9uZQotCi0g
ICAgbG9hZGIgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2VbdDBdLCB0MAotICAgIGJ0Ym56IHQwLCAu
b3BEZWJ1Z0RvQ2FsbGJhY2sKLQotICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1CcmVha3BvaW50
c1t0MV0sIHQwCi0gICAgYnRpeiB0MCwgLm9wRGVidWdEb25lCi0KLS5vcERlYnVnRG9DYWxsYmFj
azoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9kZWJ1ZykKIC5vcERlYnVnRG9u
ZTogICAgICAgICAgICAgICAgICAgIAogICAgIGRpc3BhdGNoKDMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE2MjY2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3Miw4ICs0NzIsNiBAQCBwdWJsaWM6CiAKICAgICBEZWJ1Z2dlciog
ZGVidWdnZXIoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAgICAgdm9pZCBzZXREZWJ1
Z2dlcihEZWJ1Z2dlciogZGVidWdnZXIpIHsgbV9kZWJ1Z2dlciA9IGRlYnVnZ2VyOyB9Ci0gICAg
c3RhdGljIHB0cmRpZmZfdCBkZWJ1Z2dlck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV9kZWJ1Z2dlcik7IH0KLSAgICB2b2lkKiBkZWJ1Z2dlckFkZHJl
c3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQogCiAgICAgY29uc3QgR2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxPYmplY3RNZXRob2RUYWJsZTsgfQogCg==
</data>
<flag name="review"
          id="246059"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222118</attachid>
            <date>2014-01-24 10:49:52 -0800</date>
            <delta_ts>2014-01-24 10:52:37 -0800</delta_ts>
            <desc>patch for landing: all fixes have been applied.</desc>
            <filename>bug-127532.patch</filename>
            <type>text/plain</type>
            <size>26133</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDE0LTAxLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmluZyB0aGUgbmVlZCBmb3IgRGVidWdnZXIqIGFuZCBtX3Nob3VsZFBhdXNlIG9wX2RlYnVn
IGNoZWNrLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTI3NTMyPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFj
ZXMgdGhlIGNoZWNraW5nIG9mIHRoZSBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZSBmbGFnCisgICAg
ICAgIHdpdGggYSBwcm9jZWR1cmUgdG8gc2V0IGEgU3RlcHBpbmdNb2RlIGZsYWcgb24gYWxsIENv
ZGVCbG9ja3MgdW5kZXIKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGRlYnVnZ2VyLiBU
aGlzIHNpbXBsaWZpZXMgdGhlIG9wX2RlYnVnIGNoZWNraW5nCisgICAgICAgIGxvZ2ljIGluIGFs
bCB0aGUgZXhlY3V0aW9uIGVuZ2luZXMuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Omhhc0RlYnVnZ2VyUmVxdWVzdHMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRTdGVw
cGluZ01vZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyRGVidWdnZXJSZXF1ZXN0
cyk6CisgICAgICAgIC0gQ29kZUJsb2NrOjptX2RlYnVnZ2VyUmVxdWVzdHMgaXMgYSB1bmlvbiBv
ZiBtX251bUJyZWFrcG9pbnRzIGFuZCB0aGUKKyAgICAgICAgICBuZXcgbV9zdGVwcGluZ01vZGUu
IFRoZSBkZWJ1Z2dlciBjYW4gYWRkL3JlbW92ZSBicmVha3BvaW50cyB0byB0aGUKKyAgICAgICAg
ICBDb2RlQmxvY2sgYXMgd2VsbCBhcyBzZXQgdGhlIHN0ZXBwaW5nIG1vZGUuIEJ5IGhhdmluZwor
ICAgICAgICAgIG1fZGVidWdnZXJSZXF1ZXN0cyBhcyBhIHVuaW9uIG9mIHRoZSAyIGJpdCBmaWVs
ZHMsIHRoZSBvcF9kZWJ1ZyBjb2RlCisgICAgICAgICAgY2FuIG5vdyBjaGVjayBpZiBhbnkgb2Yg
dGhlIDIgcmVxdWVzdHMgbWFkZSBvbiB0aGUgQ29kZUJsb2NrIGlzIHN0aWxsCisgICAgICAgICAg
aW4gZWZmZWN0IGp1c3QgYnkgdGVzdGluZyBhIHNpbmdsZSBpbnQuCisKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1Z2dlcik6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpkZXRhY2gpOgorICAgICAgICAtIFRoaXMgd2FzIGJ1ZyBm
cm9tIGJlZm9yZSB3aGVyZSBJIGZvcmdvdCB0byBjbGVhciB0aGUgQ29kZUJsb2NrCisgICAgICAg
ICAgYnJlYWtwb2ludHMgYmVmb3JlIGRldGFjaGluZy4gV2Ugbm93IHRha2UgY2FyZSBvZiBpdCBi
eSBjbGVhcmluZyBhbGwKKyAgICAgICAgICBkZWJ1Z2dlciByZXF1ZXN0cyBtYWRlIHRvIHRoZSBD
b2RlQmxvY2suCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OlNldFN0ZXBwaW5nTW9kZUZ1bmN0
b3I6OlNldFN0ZXBwaW5nTW9kZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6U2V0
U3RlcHBpbmdNb2RlRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzZXRTdGVwcGluZ01vZGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW5yZWdpc3RlckNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2Vy
UmVxdWVzdHNGdW5jdG9yOjpDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkNsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1
bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Y2xlYXJCcmVha3Bv
aW50cyk6CisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OkNsZWFyRGVidWdnZXJSZXF1ZXN0c0Z1
bmN0b3I6OkNsZWFyRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlcjo6Q2xlYXJEZWJ1Z2dlclJlcXVlc3RzRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjpjbGVhckRlYnVnZ2VyUmVxdWVzdHMpOgorICAgICAgICAtIFdlIG5l
ZWQgYSBkaXN0aW5jdCBjbGVhckRlYnVnZ2VyUmVxdWVzdHMoKSBmcm9tIGNsZWFyQnJlYWtwb2lu
dHMoKQorICAgICAgICAgIGJlY2F1c2U6CisgICAgICAgICAgMS4gV2hlbiB3ZSBkZXRhY2ggYSBn
bG9iYWxPYmplY3QsIHdlIG9ubHkgd2FudCB0byBjbGVhciB0aGUgZGVidWdnZXIKKyAgICAgICAg
ICAgICByZXF1ZXN0cyBpbiBDb2RlQmxvY2tzIGZyb20gdGhhdCBnbG9iYWwuCisgICAgICAgICAg
Mi4gQ2xlYXJpbmcgdGhlIGRlYnVnZ2VyIHJlcXVlc3RzIGluIHRoZSBDb2RlQmxvY2tzIGlzIG5v
dCB0aGUgc2FtZQorICAgICAgICAgICAgIGFzIGNsZWFyaW5nIHRoZSBicmVha3BvaW50cy4gVGhl
IGJyZWFrcG9pbnRzIGFyZSBzdGlsbCBpbiBlZmZlY3QKKyAgICAgICAgICAgICBmb3IgdGhlIG5l
eHQgdGltZSBhIGdsb2JhbE9iamVjdCBpcyBhdHRhY2hlZCwgb3IgZm9yIG90aGVyCisgICAgICAg
ICAgICAgZ2xvYmFsT2JqZWN0cyB0aGF0IGFyZSBzdGlsbCBhdHRhY2hlZC4KKworICAgICAgICAo
SlNDOjpEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnN0ZXBJbnRv
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBh
dXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZCk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpleGNlcHRpb24pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRpZFJlYWNo
QnJlYWtwb2ludCk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuaDoKKyAgICAgICAgLSBX
ZSdyZSBhbHdheXMgZ29pbmcgdG8gc3VwcG9ydCB0aGUgZGVidWdnZXIuIFNvLCB0aGVyZSdzIG5v
IGxvbmdlcgorICAgICAgICAgIGEgbmVlZCB0byBjaGVjayBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikuIFJlbW92ZWQgdGhlIHVubmVlZGVkIGNvZGUuCisKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZGVidWcp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzZXREZWJ1Z2dlcik6CisKIDIwMTQtMDEtMjMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBERkcgZm9yIHRoZSBE
ZWJ1Z2dlciBhbmQgUHJvZmlsZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjksNiAr
MTQ2OSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxh
dGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBt
X3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2lu
dHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVy
RXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBt
X3ZtKG90aGVyLm1fdm0pCkBAIC0xNTI0LDYgKzE1MjUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVl
KQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2Vk
Q29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaykKKyAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQogICAgICwg
bV9udW1CcmVha3BvaW50cygwKQogICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmpl
Y3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1
bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODcxLDE3ICs4NzEs
MjMgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbih1bnNp
Z25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwogCi0gICAgaW50IG51bUJyZWFrcG9pbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1CcmVha3BvaW50czsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bnVtQnJlYWtwb2ludHNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX251bUJyZWFrcG9pbnRzKTsgfQotICAgIHZvaWQqIG51bUJyZWFrcG9pbnRzQWRkcmVzcygp
IHsgcmV0dXJuICZtX251bUJyZWFrcG9pbnRzOyB9CisgICAgaW50IGhhc0RlYnVnZ2VyUmVxdWVz
dHMoKSBjb25zdCB7IHJldHVybiAhIW1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHZvaWQqIGRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQog
Ci0gICAgdm9pZCBhZGRCcmVha3BvaW50KGludCBudW1CcmVha3BvaW50cykgeyBtX251bUJyZWFr
cG9pbnRzICs9IG51bUJyZWFrcG9pbnRzOyB9Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGlu
dCBudW1CcmVha3BvaW50cykKKyAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJl
YWtwb2ludHMpIHsgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsgfQorICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKICAgICB7CisgICAg
ICAgIEFTU0VSVChtX251bUJyZWFrcG9pbnRzID4gbnVtQnJlYWtwb2ludHMpOwogICAgICAgICBt
X251bUJyZWFrcG9pbnRzIC09IG51bUJyZWFrcG9pbnRzOwotICAgICAgICBBU1NFUlQobV9udW1C
cmVha3BvaW50cyA+PSAwKTsKICAgICB9Ci0gICAgdm9pZCBjbGVhckFsbEJyZWFrcG9pbnRzKCkg
eyBtX251bUJyZWFrcG9pbnRzID0gMDsgfQorCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAg
ICAgICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAor
ICAgIH07CisgICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlIG1vZGUpIHsgbV9z
dGVwcGluZ01vZGUgPSBtb2RlOyB9CisKKyAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cygp
IHsgbV9kZWJ1Z2dlclJlcXVlc3RzID0gMDsgfQogCiAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2Ug
cmVtYWluaW5nIG1lbWJlcnMgcHJpdmF0ZS4KIApAQCAtMTAxOSw3ICsxMDI1LDEzIEBAIHByaXZh
dGU6CiAjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRDb2RlQmxvY2s+IG1fdW5saW5r
ZWRDb2RlOwogICAgIGludCBtX251bVBhcmFtZXRlcnM7Ci0gICAgaW50IG1fbnVtQnJlYWtwb2lu
dHM7CisgICAgdW5pb24geworICAgICAgICB1bnNpZ25lZCBtX2RlYnVnZ2VyUmVxdWVzdHM7Cisg
ICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBtX3N0ZXBwaW5nTW9kZSA6IDE7
CisgICAgICAgICAgICB1bnNpZ25lZCBtX251bUJyZWFrcG9pbnRzIDogMzE7CisgICAgICAgIH07
CisgICAgfTsKICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gbV9vd25lckV4ZWN1
dGFibGU7CiAgICAgVk0qIG1fdm07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTYyNjY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDEzICsx
NDgsMTMgQEAgRGVidWdnZXI6OkRlYnVnZ2VyKGJvb2wgaXNJbldvcmtlclRocmVhZAogICAgICwg
bV9icmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKQogICAgICwgbV9oYXNIYW5kbGVyRm9yRXhjZXB0
aW9uQ2FsbGJhY2soZmFsc2UpCiAgICAgLCBtX2lzSW5Xb3JrZXJUaHJlYWQoaXNJbldvcmtlclRo
cmVhZCkKKyAgICAsIG1fc3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKQogICAgICwg
bV9yZWFzb25Gb3JQYXVzZShOb3RQYXVzZWQpCiAgICAgLCBtX3BhdXNlT25DYWxsRnJhbWUoMCkK
ICAgICAsIG1fY3VycmVudENhbGxGcmFtZSgwKQogICAgICwgbV9sYXN0RXhlY3V0ZWRMaW5lKFVJ
TlRfTUFYKQogICAgICwgbV9sYXN0RXhlY3V0ZWRTb3VyY2VJRChub1NvdXJjZUlEKQogICAgICwg
bV90b3BCcmVha3BvaW50SUQobm9CcmVha3BvaW50SUQpCi0gICAgLCBtX3Nob3VsZFBhdXNlKGZh
bHNlKQogewogfQogCkBAIC0xODksMjQgKzE4OSw2MCBAQCB2b2lkIERlYnVnZ2VyOjpkZXRhY2go
SlNHbG9iYWxPYmplY3QqIGdsCiAKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5z
KGdsb2JhbE9iamVjdCkpOwogICAgIG1fZ2xvYmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0
KTsKKworICAgIGNsZWFyRGVidWdnZXJSZXF1ZXN0cyhnbG9iYWxPYmplY3QpOwogICAgIGdsb2Jh
bE9iamVjdC0+c2V0RGVidWdnZXIoMCk7CiAgICAgaWYgKCFtX2dsb2JhbE9iamVjdHMuc2l6ZSgp
KQogICAgICAgICBtX3ZtID0gbnVsbHB0cjsKIH0KIAotdm9pZCBEZWJ1Z2dlcjo6c2V0U2hvdWxk
UGF1c2UoYm9vbCB2YWx1ZSkKK2NsYXNzIERlYnVnZ2VyOjpTZXRTdGVwcGluZ01vZGVGdW5jdG9y
IHsKK3B1YmxpYzoKKyAgICBTZXRTdGVwcGluZ01vZGVGdW5jdG9yKERlYnVnZ2VyKiBkZWJ1Z2dl
ciwgU3RlcHBpbmdNb2RlIG1vZGUpCisgICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikKKyAg
ICAgICAgLCBtX21vZGUobW9kZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigp
KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGVidWdnZXIgPT0g
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgeworICAgICAgICAgICAgaWYg
KG1fbW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkKQorICAgICAgICAgICAgICAgIGNvZGVCbG9j
ay0+c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlRW5hYmxlZCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRTdGVwcGluZ01vZGUo
Q29kZUJsb2NrOjpTdGVwcGluZ01vZGVEaXNhYmxlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsK
KyAgICBTdGVwcGluZ01vZGUgbV9tb2RlOworfTsKKwordm9pZCBEZWJ1Z2dlcjo6c2V0U3RlcHBp
bmdNb2RlKFN0ZXBwaW5nTW9kZSBtb2RlKQogewotICAgIG1fc2hvdWxkUGF1c2UgPSB2YWx1ZTsK
KyAgICBpZiAobW9kZSA9PSBtX3N0ZXBwaW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c3RlcHBpbmdNb2RlID0gbW9kZTsKKworICAgIGlmICghbV92bSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZShtX3ZtLT5oZWFwKTsKKyAgICBT
ZXRTdGVwcGluZ01vZGVGdW5jdG9yIGZ1bmN0b3IodGhpcywgbW9kZSk7CisgICAgbV92bS0+aGVh
cC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQogCiB2b2lkIERlYnVnZ2VyOjpyZWdpc3Rl
ckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBhcHBseUJyZWFrcG9pbnRz
KGNvZGVCbG9jayk7CisgICAgaWYgKGlzU3RlcHBpbmcoKSkKKyAgICAgICAgY29kZUJsb2NrLT5z
ZXRTdGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGVFbmFibGVkKTsKIH0KIAogdm9p
ZCBEZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
LSAgICBjb2RlQmxvY2stPmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKKyAgICBjb2RlQmxvY2stPmNs
ZWFyRGVidWdnZXJSZXF1ZXN0cygpOwogfQogCiB2b2lkIERlYnVnZ2VyOjp0b2dnbGVCcmVha3Bv
aW50KENvZGVCbG9jayogY29kZUJsb2NrLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBCcmVha3Bv
aW50U3RhdGUgZW5hYmxlZE9yTm90KQpAQCAtNDM1LDE3ICs0NzEsMTcgQEAgYm9vbCBEZWJ1Z2dl
cjo6aGFzQnJlYWtwb2ludChTb3VyY2VJRCBzbwogICAgIHJldHVybiByZXN1bHQudG9Cb29sZWFu
KG1fY3VycmVudENhbGxGcmFtZSk7CiB9CiAKLWNsYXNzIERlYnVnZ2VyOjpDbGVhckJyZWFrcG9p
bnRzRnVuY3RvciB7CitjbGFzcyBEZWJ1Z2dlcjo6Q2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVl
c3RzRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgQ2xlYXJCcmVha3BvaW50c0Z1bmN0b3IoRGVidWdn
ZXIqIGRlYnVnZ2VyKQorICAgIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3Io
RGVidWdnZXIqIGRlYnVnZ2VyKQogICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIpCiAgICAg
ewogICAgIH0KIAogICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICB7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPm51bUJyZWFrcG9pbnRzKCkgJiYgbV9kZWJ1Z2dl
ciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQotICAgICAgICAgICAg
Y29kZUJsb2NrLT5jbGVhckFsbEJyZWFrcG9pbnRzKCk7CisgICAgICAgIGlmIChjb2RlQmxvY2st
Pmhhc0RlYnVnZ2VyUmVxdWVzdHMoKSAmJiBtX2RlYnVnZ2VyID09IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmNsZWFyRGVidWdn
ZXJSZXF1ZXN0cygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00NjIsNyAr
NDk4LDMzIEBAIHZvaWQgRGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogICAgIGlmICghbV92
bSkKICAgICAgICAgcmV0dXJuOwogICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29w
ZShtX3ZtLT5oZWFwKTsKLSAgICBDbGVhckJyZWFrcG9pbnRzRnVuY3RvciBmdW5jdG9yKHRoaXMp
OworICAgIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3IgZnVuY3Rvcih0aGlz
KTsKKyAgICBtX3ZtLT5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7Cit9CisKK2NsYXNz
IERlYnVnZ2VyOjpDbGVhckRlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBD
bGVhckRlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgICAgIDogbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNEZWJ1Z2dlclJlcXVlc3RzKCkgJiYgbV9nbG9iYWxPYmplY3Qg
PT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y2xl
YXJEZWJ1Z2dlclJlcXVlc3RzKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworfTsKKwordm9pZCBE
ZWJ1Z2dlcjo6Y2xlYXJEZWJ1Z2dlclJlcXVlc3RzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgQVNTRVJUKG1fdm0pOworICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRp
b25TY29wZShtX3ZtLT5oZWFwKTsKKyAgICBDbGVhckRlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yIGZ1
bmN0b3IoZ2xvYmFsT2JqZWN0KTsKICAgICBtX3ZtLT5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVu
Y3Rvcik7CiB9CiAKQEAgLTQ4MCw3ICs1NDIsNyBAQCB2b2lkIERlYnVnZ2VyOjpzZXRQYXVzZU9u
TmV4dFN0YXRlbWVudChiCiB7CiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHBhdXNlOwog
ICAgIGlmIChwYXVzZSkKLSAgICAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgICAgIHNl
dFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVkKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6
YnJlYWtQcm9ncmFtKCkKQEAgLTQ4OSw3ICs1NTEsNyBAQCB2b2lkIERlYnVnZ2VyOjpicmVha1By
b2dyYW0oKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0g
dHJ1ZTsKLSAgICBzZXRTaG91bGRQYXVzZSh0cnVlKTsKKyAgICBzZXRTdGVwcGluZ01vZGUoU3Rl
cHBpbmdNb2RlRW5hYmxlZCk7CiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV92bS0+dG9wQ2Fs
bEZyYW1lOwogICAgIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOwogICAgIHBhdXNlSWZOZWVk
ZWQobV9jdXJyZW50Q2FsbEZyYW1lKTsKQEAgLTUxMCw3ICs1NzIsNyBAQCB2b2lkIERlYnVnZ2Vy
OjpzdGVwSW50b1N0YXRlbWVudCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5l
eHRTdGF0ZW1lbnQgPSB0cnVlOwotICAgIHNldFNob3VsZFBhdXNlKHRydWUpOworICAgIHNldFN0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVFbmFibGVkKTsKICAgICBub3RpZnlEb25lUHJvY2Vzc2lu
Z0RlYnVnZ2VyRXZlbnRzKCk7CiB9CiAKQEAgLTU0Niw3ICs2MDgsNyBAQCB2b2lkIERlYnVnZ2Vy
Ojp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmCiB7CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxG
cmFtZSk7CiAgICAgcGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGlmICghc2hvdWxkUGF1
c2UoKSkKKyAgICBpZiAoIWlzU3RlcHBpbmcoKSkKICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1l
ID0gMDsKIH0KIApAQCAtNTkwLDcgKzY1Miw3IEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVk
ZWQoQ2FsbEZyYW1lKiAKICAgICBoYW5kbGVQYXVzZShtX3JlYXNvbkZvclBhdXNlLCB2bUVudHJ5
R2xvYmFsT2JqZWN0KTsKIAogICAgIGlmICghbV9wYXVzZU9uTmV4dFN0YXRlbWVudCAmJiAhbV9w
YXVzZU9uQ2FsbEZyYW1lKSB7Ci0gICAgICAgIHNldFNob3VsZFBhdXNlKGZhbHNlKTsKKyAgICAg
ICAgc2V0U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZURpc2FibGVkKTsKICAgICAgICAgbV9jdXJy
ZW50Q2FsbEZyYW1lID0gbnVsbHB0cjsKICAgICB9CiB9CkBAIC02MDMsNyArNjY1LDcgQEAgdm9p
ZCBEZWJ1Z2dlcjo6ZXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbAogICAgIFBhdXNlUmVhc29uRGVj
bGFyYXRpb24gcmVhc29uKCp0aGlzLCBQYXVzZWRGb3JFeGNlcHRpb24pOwogICAgIGlmIChtX3Bh
dXNlT25FeGNlcHRpb25zU3RhdGUgPT0gUGF1c2VPbkFsbEV4Y2VwdGlvbnMgfHwgKG1fcGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSA9PSBQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zICYmICFoYXNIYW5k
bGVyKSkgewogICAgICAgICBtX3BhdXNlT25OZXh0U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAg
c2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgICAgIHNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01v
ZGVFbmFibGVkKTsKICAgICB9CiAKICAgICBtX2hhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFj
ayA9IHRydWU7CkBAIC02NjEsNyArNzIzLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQ
cm9ncmFtKENhbGxGcgogICAgIC8vIHRoZSBkZWJ1Z2dlciBpbXBsZW1lbnRhdGlvbiB0byBub3Qg
cmVxdWlyZSBjYWxsYmFja3MuCiAgICAgaWYgKCFtX2lzSW5Xb3JrZXJUaHJlYWQpCiAgICAgICAg
IHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKLSAgICBlbHNlIGlm
IChzaG91bGRQYXVzZSgpKQorICAgIGVsc2UgaWYgKGlzU3RlcHBpbmcoKSkKICAgICAgICAgdXBk
YXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiB9CiAKQEAgLTY5MSw3ICs3NTMsNyBAQCB2b2lkIERl
YnVnZ2VyOjpkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyCiAKICAgICBQYXVzZVJlYXNvbkRlY2xh
cmF0aW9uIHJlYXNvbigqdGhpcywgUGF1c2VkRm9yQnJlYWtwb2ludCk7CiAgICAgbV9wYXVzZU9u
TmV4dFN0YXRlbWVudCA9IHRydWU7Ci0gICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgc2V0
U3RlcHBpbmdNb2RlKFN0ZXBwaW5nTW9kZUVuYWJsZWQpOwogICAgIHVwZGF0ZUNhbGxGcmFtZUFu
ZFBhdXNlSWZOZWVkZWQoY2FsbEZyYW1lKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHJldmlzaW9uIDE2MjY2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNyAr
NDEsMTEgQEAgY2xhc3MgVk07CiAKIHR5cGVkZWYgRXhlY1N0YXRlIENhbGxGcmFtZTsKIAotI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBE
ZWJ1Z2dlciB7CiBwdWJsaWM6CiAgICAgRGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkID0g
ZmFsc2UpOwogICAgIHZpcnR1YWwgfkRlYnVnZ2VyKCk7CiAKLSAgICBib29sIHNob3VsZFBhdXNl
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
c2hvdWxkUGF1c2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGVidWdnZXIsIG1f
c2hvdWxkUGF1c2UpOyB9Ci0gICAgdm9pZCogc2hvdWxkUGF1c2VBZGRyZXNzKCkgeyByZXR1cm4g
Jm1fc2hvdWxkUGF1c2U7IH0KLQogICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUqIGN1cnJlbnRE
ZWJ1Z2dlckNhbGxGcmFtZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzSGFuZGxlckZvckV4Y2VwdGlv
bkNhbGxiYWNrKCkgY29uc3QKICAgICB7CkBAIC0xMzQsOCArMTI4LDEwIEBAIHByaXZhdGU6CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkLCBCcmVha3BvaW50c0luTGluZSwgV1RGOjpJbnRI
YXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gTGluZVRv
QnJlYWtwb2ludHNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVh
a3BvaW50c01hcCwgV1RGOjpJbnRIYXNoPFNvdXJjZUlEPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxTb3VyY2VJRD4+IFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDsKIAorICAg
IGNsYXNzIENsZWFyQ29kZUJsb2NrRGVidWdnZXJSZXF1ZXN0c0Z1bmN0b3I7CisgICAgY2xhc3Mg
Q2xlYXJEZWJ1Z2dlclJlcXVlc3RzRnVuY3RvcjsKKyAgICBjbGFzcyBTZXRTdGVwcGluZ01vZGVG
dW5jdG9yOwogICAgIGNsYXNzIFRvZ2dsZUJyZWFrcG9pbnRGdW5jdG9yOwotICAgIGNsYXNzIENs
ZWFyQnJlYWtwb2ludHNGdW5jdG9yOwogCiAgICAgY2xhc3MgUGF1c2VSZWFzb25EZWNsYXJhdGlv
biB7CiAgICAgcHVibGljOgpAQCAtMTU1LDcgKzE1MSw2IEBAIHByaXZhdGU6CiAKICAgICBib29s
IGhhc0JyZWFrcG9pbnQoU291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQq
IGhpdEJyZWFrcG9pbnQpOwogCi0gICAgdm9pZCBzZXRTaG91bGRQYXVzZShib29sKTsKICAgICB2
b2lkIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiAKICAgICAvLyBUaGVzZSB1cGRh
dGUgZnVuY3Rpb25zIGFyZSBvbmx5IG5lZWRlZCBiZWNhdXNlIG91ciBjdXJyZW50IGJyZWFrcG9p
bnRzIGFyZQpAQCAtMTY3LDYgKzE2MiwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ2Fs
bEZyYW1lQW5kUGF1c2VJZk5lZWRlZChKU0M6OkNhbGxGcmFtZSopOwogICAgIHZvaWQgcGF1c2VJ
Zk5lZWRlZChKU0M6OkNhbGxGcmFtZSopOwogCisgICAgZW51bSBTdGVwcGluZ01vZGUgeworICAg
ICAgICBTdGVwcGluZ01vZGVEaXNhYmxlZCwKKyAgICAgICAgU3RlcHBpbmdNb2RlRW5hYmxlZAor
ICAgIH07CisgICAgdm9pZCBzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlKTsKKyAgICBib29s
IGlzU3RlcHBpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBwaW5nTW9kZSA9PSBTdGVwcGluZ01v
ZGVFbmFibGVkOyB9CisKICAgICBlbnVtIEJyZWFrcG9pbnRTdGF0ZSB7CiAgICAgICAgIEJyZWFr
cG9pbnREaXNhYmxlZCwKICAgICAgICAgQnJlYWtwb2ludEVuYWJsZWQKQEAgLTE3NSw2ICsxNzcs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwbHlCcmVha3BvaW50cyhDb2RlQmxvY2sqKTsKICAg
ICB2b2lkIHRvZ2dsZUJyZWFrcG9pbnQoQnJlYWtwb2ludCYsIEJyZWFrcG9pbnRTdGF0ZSk7CiAK
KyAgICB2b2lkIGNsZWFyRGVidWdnZXJSZXF1ZXN0cyhKU0dsb2JhbE9iamVjdCopOworCiAgICAg
Vk0qIG1fdm07CiAgICAgSGFzaFNldDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsK
IApAQCAtMTg0LDYgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2JyZWFrcG9pbnRzQWN0
aXZhdGVkIDogMTsKICAgICBib29sIG1faGFzSGFuZGxlckZvckV4Y2VwdGlvbkNhbGxiYWNrIDog
MTsKICAgICBib29sIG1faXNJbldvcmtlclRocmVhZCA6IDE7CisgICAgU3RlcHBpbmdNb2RlIG1f
c3RlcHBpbmdNb2RlIDogMTsKIAogICAgIFJlYXNvbkZvclBhdXNlIG1fcmVhc29uRm9yUGF1c2U7
CiAgICAgSlNWYWx1ZSBtX2N1cnJlbnRFeGNlcHRpb247CkBAIC0xOTYsOCArMjAxLDYgQEAgcHJp
dmF0ZToKICAgICBCcmVha3BvaW50SURUb0JyZWFrcG9pbnRNYXAgbV9icmVha3BvaW50SURUb0Jy
ZWFrcG9pbnQ7CiAgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0JyZWFr
cG9pbnRzOwogCi0gICAgYm9vbCBtX3Nob3VsZFBhdXNlOwotCiAgICAgUmVmUHRyPEpTQzo6RGVi
dWdnZXJDYWxsRnJhbWU+IG1fY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lOwogCiAgICAgZnJpZW5k
IGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CkBAIC0yMDUsMzIgKzIwOCw2IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIH07CiAKLSNlbHNl
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotCi1jbGFzcyBEZWJ1Z2dlciB7Ci1wdWJs
aWM6Ci0gICAgRGVidWdnZXIoYm9vbCA9IGZhbHNlKQotICAgICAgICA6IG1fc2hvdWxkUGF1c2Uo
ZmFsc2UpCi0gICAgewotICAgIH0KLSAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICBib29sIG5lZWRzRXhjZXB0aW9uQ2FsbGJhY2tzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCopIHsgfQotICAg
IHZvaWQgc291cmNlUGFyc2VkKEV4ZWNTdGF0ZSosIFNvdXJjZVByb3ZpZGVyKiwgaW50LCBjb25z
dCBXVEY6OlN0cmluZyYpIHsgfQotICAgIHZvaWQgZXhjZXB0aW9uKENhbGxGcmFtZSosIEpTVmFs
dWUsIGJvb2wpIHsgfQotICAgIHZvaWQgYXRTdGF0ZW1lbnQoQ2FsbEZyYW1lKikgeyB9Ci0gICAg
dm9pZCBjYWxsRXZlbnQoQ2FsbEZyYW1lKikgeyB9Ci0gICAgdm9pZCByZXR1cm5FdmVudChDYWxs
RnJhbWUqKSB7IH0KLSAgICB2b2lkIHdpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUqKSB7IH0K
LSAgICB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKENhbGxGcmFtZSopIHsgfQotICAgIHZvaWQgZGlk
UmVhY2hCcmVha3BvaW50KENhbGxGcmFtZSopIHsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9z
aG91bGRQYXVzZTsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBEZWJ1Z2dlcl9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDE2MjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMzMsMjggKzQyMzMsMTUg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKIAogICAgIGNhc2UgQnJlYWtwb2ludDogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbik7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKGdsb2JhbE9iamVjdC0+ZGVidWdnZXJBZGRyZXNzKCksIHRlbXAuZ3ByKCkp
OworICAgICAgICBHUFJSZWcgZGVidWdnZXJSZXF1ZXN0c0dQUiA9IHRlbXAuZ3ByKCk7CisgICAg
ICAgIG1faml0LmxvYWQzMihtX2ppdC5jb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgZGVidWdnZXJSZXF1ZXN0c0dQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAg
ICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdGVtcC5ncHIoKSkpOwotCi0g
ICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwg
MCwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFk
ZHJlc3MoZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLT5zaG91bGRQYXVzZUFkZHJlc3MoKSkpKTsK
LQotICAgICAgICBHUFJSZWcgbnVtQnJlYWtwb2ludHNHUFIgPSB0ZW1wLmdwcigpOwotICAgICAg
ICBtX2ppdC5sb2FkMzIobV9qaXQuY29kZUJsb2NrKCktPm51bUJyZWFrcG9pbnRzQWRkcmVzcygp
LCBudW1CcmVha3BvaW50c0dQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICBEZWJ1Z2dlckV2ZW50LCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBudW1CcmVha3BvaW50c0dQUikpOwor
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBkZWJ1
Z2dlclJlcXVlc3RzR1BSKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKICAg
ICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9maWxl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVnIHByb2ZpbGVUYWdHUFIgPSBw
cm9maWxlLnRhZ0dQUigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTEwLDI5ICs0NTEwLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJyZWFrcG9pbnQ6IHsKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olpl
cm8sCi0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhnbG9iYWxP
YmplY3QtPmRlYnVnZ2VyQWRkcmVzcygpKSkpOwotCi0gICAgICAgIEFTU0VSVChnbG9iYWxPYmpl
Y3QtPmhhc0RlYnVnZ2VyKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgRGVidWdnZXJFdmVudCwgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q4KAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoZ2xvYmFsT2JqZWN0LT5kZWJ1
Z2dlcigpLT5zaG91bGRQYXVzZUFkZHJlc3MoKSkpKTsKLQogICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIG51bUJyZWFrcG9pbnRzR1BSID0gdGVtcC5ncHIo
KTsKLSAgICAgICAgbV9qaXQubG9hZDMyKG1faml0LmNvZGVCbG9jaygpLT5udW1CcmVha3BvaW50
c0FkZHJlc3MoKSwgbnVtQnJlYWtwb2ludHNHUFIpOworICAgICAgICBHUFJSZWcgZGVidWdnZXJS
ZXF1ZXN0c0dQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQzMihtX2ppdC5jb2Rl
QmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgZGVidWdnZXJSZXF1ZXN0c0dQUik7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBEZWJ1Z2dlckV2ZW50LCBK
U1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpOb25aZXJvLCBudW1CcmVha3BvaW50c0dQUikpOworICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBkZWJ1Z2dlclJlcXVlc3RzR1BSKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2Fs
bDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9maWxlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgR1BSUmVnIHByb2ZpbGVHUFIgPSBwcm9maWxlLmdwcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShy
ZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA3LDcgKzEyMDcsNyBAQCBORVZFUl9J
TkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsCiAgICAgRGVidWdnZXIqIGRlYnVnZ2Vy
ID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CiAgICAgaWYg
KCFkZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChkZWJ1Z2dlci0+c2hvdWxk
UGF1c2UoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5udW1CcmVha3BvaW50cygpIHx8IGNh
bGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5oYXNEZWJ1Z2dlclJlcXVlc3RzKCkgfHwgY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7
CiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxs
RnJhbWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MiwzMSArOTkyLDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93X3N0YXRpY19lcnJvcihJbnMKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSNpZiBFTkFCTEUo
REVCVUdfV0lUSF9CUkVBS1BPSU5UKQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotICAgIGJyZWFrcG9pbnQoKTsKLSNlbGlmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0KCk7Ci0gICAgY2hhciogZGVidWdnZXJBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0OjpkZWJ1Z2dlck9mZnNldCgpOwot
ICAgIGxvYWRQdHIoZGVidWdnZXJBZGRyZXNzLCByZWdUMCk7Ci0gICAgSnVtcCBub0RlYnVnZ2Vy
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0KLSAgICBEZWJ1Z2dlciogZGVidWdnZXIg
PSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7Ci0gICAgY2hhciogc2hvdWxkUGF1c2VBZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsgRGVidWdnZXI6OnNob3VsZFBh
dXNlT2Zmc2V0KCk7Ci0gICAgSnVtcCBjYWxsYmFja05lZWRlZCA9IGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJlc3MpKTsKLQotICAgIGNoYXIqIG51
bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVCbG9jaygp
KSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQoKTsKLSAgICBsb2FkMzIobnVtQnJl
YWtwb2ludHNBZGRyZXNzLCByZWdUMCk7Ci0gICAgSnVtcCBub0JyZWFrcG9pbnRTZXQgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDApOwotCi0gICAgY2FsbGJhY2tOZWVkZWQubGluayh0aGlzKTsK
KyAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1Qw
KTsKKyAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0KLSAgICBub0JyZWFrcG9pbnRTZXQubGluayh0aGlzKTsKLSAgICBu
b0RlYnVnZ2VyLmxpbmsodGhpcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotI2VuZGlmCisgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9
CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAxNjI2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MTAsMzAgKzcxMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
aHJvd19zdGF0aWNfZXJyb3IoSW5zCiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0jaWYgRU5BQkxFKERFQlVHX1dJVEhfQlJFQUtQ
T0lOVCkKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBicmVha3Bv
aW50KCk7Ci0jZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIGNo
YXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdsb2JhbE9iamVj
dCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKLSAgICBKdW1wIG5vRGVidWdn
ZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFic29sdXRlQWRkcmVzcyhkZWJ1Z2dlckFkZHJlc3Mp
KTsKLQotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsK
LSAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihk
ZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQoKTsKLSAgICBKdW1wIGNhbGxi
YWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHNob3VsZFBh
dXNlQWRkcmVzcykpOwotCi0gICAgY2hhciogbnVtQnJlYWtwb2ludHNBZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJsb2NrOjpudW1CcmVha3BvaW50
c09mZnNldCgpOwotICAgIGxvYWQzMihudW1CcmVha3BvaW50c0FkZHJlc3MsIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7Ci0KLSAg
ICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOworICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVi
dWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVl
c3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLQotICAgIG5vQnJl
YWtwb2ludFNldC5saW5rKHRoaXMpOwotICAgIG5vRGVidWdnZXIubGluayh0aGlzKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0jZW5kaWYKKyAgICBub0Rl
YnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVs
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MTYyNjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsMTggKzgzNSw5IEBAIF9sbGludF9vcF9wcm9m
aWxlX2RpZF9jYWxsOgogCiBfbGxpbnRfb3BfZGVidWc6CiAgICAgdHJhY2VFeGVjdXRpb24oKQot
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9i
YWxPYmplY3RbdDFdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX2RlYnVnZ2VyW3Qw
XSwgdDAKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKKyAgICBsb2FkaSBDb2RlQmxvY2s6
Om1fZGVidWdnZXJSZXF1ZXN0c1t0MF0sIHQwCiAgICAgYnRpeiB0MCwgLm9wRGVidWdEb25lCi0K
LSAgICBsb2FkYiBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZVt0MF0sIHQwCi0gICAgYnRibnogdDAs
IC5vcERlYnVnRG9DYWxsYmFjawotCi0gICAgbG9hZGkgQ29kZUJsb2NrOjptX251bUJyZWFrcG9p
bnRzW3QxXSwgdDAKLSAgICBidGl6IHQwLCAub3BEZWJ1Z0RvbmUKLQotLm9wRGVidWdEb0NhbGxi
YWNrOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2RlYnVnKQogLm9wRGVidWdE
b25lOiAgICAgICAgICAgICAgICAgICAgCiAgICAgZGlzcGF0Y2goMykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTYy
NjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcyLDggKzQ3Miw2IEBAIHB1YmxpYzoKIAogICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KICAgICB2b2lkIHNldERl
YnVnZ2VyKERlYnVnZ2VyKiBkZWJ1Z2dlcikgeyBtX2RlYnVnZ2VyID0gZGVidWdnZXI7IH0KLSAg
ICBzdGF0aWMgcHRyZGlmZl90IGRlYnVnZ2VyT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX2RlYnVnZ2VyKTsgfQotICAgIHZvaWQqIGRlYnVnZ2VyQWRk
cmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyOyB9CiAKICAgICBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlOyB9CiAK
</data>
<flag name="review"
          id="246088"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>