<?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>65399</bug_id>
          <alias>StackBounds</alias>
          <creation_ts>2011-07-29 16:08:23 -0700</creation_ts>
          <short_desc>StackBounds checker fails on custom stack implementations (typically in a coroutine setting)</short_desc>
          <delta_ts>2012-03-11 13:00:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Slava Akhmechet">coffeemug</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>444159</commentid>
    <comment_count>0</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-07-29 16:08:23 -0700</bug_when>
    <thetext>Much of the code in JavaScriptCore (specifically the parser), rely on the StackBounds class to check that the interpreter doesn&apos;t blow the stack in deeply recursive situations. StackBounds sets the m_origin and m_bound member variables in its initialize() member in order to define the stack limits and has custom implementations for different platforms. We&apos;re embedding JavaScriptCore into our database project, and the bounds checking breaks down for us for the following reason. Our project is heavily event-driven, and instead of starting a thread per client, we start a thread per CPU core, and multiplex multiple coroutines within each thread. Our coroutine implementation manually manages the stack pointer register, and allocates the stack space for each coroutine on the heap. This is pretty common in event-driven systems, and is typically achieved via getcontext/setcontext API on POSIX platforms, and the Fibers API on Windows platforms. In order for us to successfully integrate JavaScriptCore we need it to be able to set custom stack bounds, as opposed to using the default implementation provided by the StackBounds class.

I propose adding a function to the API that explicitly sets the stack bounds for a given JSContext. It would be immensely useful for projects that have custom stack implementations:

JS_EXPORT bool JSSetStackBounds(JSContextRef ctx, void *origin, void *bound);

This would set m_origin and m_bound members of the StackBounds class for the given context. I am working on the patch now and would love to see it committed to the tree, however I am new to WebKit and would appreciate any guidance or suggestions for making this change (or perhaps structuring it differently).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444239</commentid>
    <comment_count>1</comment_count>
      <attachid>102421</attachid>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-07-29 20:19:41 -0700</bug_when>
    <thetext>Created attachment 102421
Proposed patch

The patch is slightly different from the original proposal since I realized the bounds need to be set for context groups, not contexts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444240</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 20:21:54 -0700</bug_when>
    <thetext>Attachment 102421 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSContextRef.cpp...&quot; exit_code: 1

Source/JavaScriptCore/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 7 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444243</commentid>
    <comment_count>3</comment_count>
      <attachid>102423</attachid>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-07-29 20:56:35 -0700</bug_when>
    <thetext>Created attachment 102423
Proposed patch v2 (fixed style errors in Changelog)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444298</commentid>
    <comment_count>4</comment_count>
      <attachid>102423</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-30 10:44:45 -0700</bug_when>
    <thetext>Comment on attachment 102423
Proposed patch v2 (fixed style errors in Changelog)

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

I think that Geoff Garen or Oliver Hunt should take a look at this before we land it. Geoff will be away for a while because he is getting married today and is going on a honeymoon, so Oliver may be the best bet.

Mark Rowe may also be a good person to help us properly add new API getting the version checking right and having it exported properly.

&gt; Source/JavaScriptCore/API/JSContextRef.cpp:70
&gt; +    RefPtr&lt;JSGlobalData&gt; globalData = PassRefPtr&lt;JSGlobalData&gt;(toJS(group));
&gt; +    globalData-&gt;stack()-&gt;setBounds(origin, bound);

There is no reason to put this into a local variable or use a RefPtr. It’s also not helpful and wrong style to use PassRefPtr here at all. It should just be toJS(group)-&gt;stack()-&gt;setBounds

&gt; Source/JavaScriptCore/API/JSContextRef.h:80
&gt; +JS_EXPORT void JSSetStackBounds(JSContextGroupRef, void *origin, void *bound) AVAILABLE_IN_WEBKIT_VERSION_4_0;

AVAILABLE_IN_WEBKIT_VERSION_4_0 is incorrect. This is something we just added, so it wasn’t available before.

In this file arguments need names, because it’s a C header file, not C++, so JSContextGroupRef needs the name &quot;group&quot; as you see above in other functions.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:588
&gt; -        StackBounds m_stack;
&gt; +        StackBounds *m_stack;

Formatting here is incorrect. The * goes next to the type.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.h:294
&gt; -        StackBounds m_stack;
&gt; +        StackBounds *m_stack;

Same problem with placement of the *.

&gt; Source/JavaScriptCore/wtf/StackBounds.h:81
&gt; +    void setBounds(void *origin, void *bound)

Incorrect formatting here. It&apos;s void* not void * in WebKit code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444734</commentid>
    <comment_count>5</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-08-01 09:56:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 102423 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102423&amp;action=review
Thanks for the feedback and sorry for the style problems. I relied on the check-webkit-style script, I didn&apos;t realize it doesn&apos;t catch issues like these.

I can fix these any time - I&apos;d love to get Oliver&apos;s and Mark&apos;s feedback to see if there are other improvements I can make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444758</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-01 10:37:44 -0700</bug_when>
    <thetext>One problem with this approach is that it assumes a single stack is used per context, which is not the case for JSC -- a single JSC context can be used on multiple threads (just not concurrently), so setting the stack bounds for a &quot;context&quot; doesn&apos;t necessarily make sense.

That aside, the new function should go into JSContextRefPrivate.h -- very few APIs ever get to go straight into a public header as we require API and ABI stability: once it&apos;s public we can&apos;t remove it.  Given this change is very specific to your use case I&apos;m dubious as to its wider value.

It seems to me that a better solution would be for JSC to have a mechanism that checked the actual stack extent that it&apos;s executing on, rather than requiring developers that are using this technique to jump through hoops to get the correct behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444778</commentid>
    <comment_count>7</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-08-01 11:03:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; One problem with this approach is that it assumes a single stack is used per context, which is not the case for JSC -- a single JSC context can be used on multiple threads (just not concurrently), so setting the stack bounds for a &quot;context&quot; doesn&apos;t necessarily make sense.

Yes, the idea is that every time the host program calls into the interpreter from a different coroutine, it would have to make the JSSetStackBounds call first. The same would apply to different threads, except the host would have to ensure it does proper serialization. JSC context group seems like the most logical object to set the bounds on, I can&apos;t think of a better way.

&gt; That aside, the new function should go into JSContextRefPrivate.h
Thanks, will do. The change isn&apos;t *too* specific to us - custom lightweight threading implementations are actually pretty common, but it&apos;s definitely not something most embedders do.

&gt; It seems to me that a better solution would be for JSC to have a mechanism that checked the actual stack extent that it&apos;s executing on, rather than requiring developers that are using this technique to jump through hoops to get the correct behavior.

Unfortunately with custom stack implementations that&apos;s not possible (or at least I can&apos;t think of a way to do it). The stack could start and end at essentially any location. It&apos;s easy for JSC to check where it currently is on the stack, but impossible to know where it ends without the host telling it. Since the boundary can change with every call into the interpreter (due to a coroutine switch), JSC must be notified every time there is a coroutine switch. The only way to tell automatically is to set up a protocol where the host can put some magic value and then have JSC scan the stack for it (or, alternatively, have the host unmap a page just after the stack and have JSC catch the fault signal), but that still requires a protocol, in addition to signal trickery. I think that&apos;s much worse (and more complex) than a clean API call.

Thanks for all the feedback - I&apos;ll make the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444789</commentid>
    <comment_count>8</comment_count>
      <attachid>102539</attachid>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-08-01 11:47:42 -0700</bug_when>
    <thetext>Created attachment 102539
Proposed patch v2 (fixed more style errors, moved export to private header)

Made all the relevant changes as discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448341</commentid>
    <comment_count>9</comment_count>
      <attachid>102539</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-08-08 16:11:53 -0700</bug_when>
    <thetext>Comment on attachment 102539
Proposed patch v2 (fixed more style errors, moved export to private header)

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

&gt; Source/JavaScriptCore/API/JSContextRef.cpp:67
&gt; +void JSSetStackBounds(JSContextGroupRef group, void* origin, void* bound)

Our namespacing convention calls for &quot;JSContextGroupSetStackBounds&quot;.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:210
&gt;          m_stack = wtfThreadData().stack();
&gt; +    else
&gt; +        m_stack = new StackBounds();

This doesn&apos;t seem right. For globalDataType != Default, m_stack gets set to &quot;new StackBounds()&quot;, but stack() returns wtfThreadData().stack().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449569</commentid>
    <comment_count>10</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-08-10 20:26:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Our namespacing convention calls for &quot;JSContextGroupSetStackBounds&quot;.
Sorry, will change.

&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:210
&gt; &gt;          m_stack = wtfThreadData().stack();
&gt; &gt; +    else
&gt; &gt; +        m_stack = new StackBounds();
&gt; 
&gt; This doesn&apos;t seem right. For globalDataType != Default, m_stack gets set to &quot;new StackBounds()&quot;, but stack() returns wtfThreadData().stack().

I agree, but this is equivalent to the code that&apos;s in place right now. Currently JSGlobalData constructs m_stack via the default constructor, and later conditionally overwrites it as follows:

207    if (globalDataType == Default)
208        m_stack = wtfThreadData().stack();

The member function stack() is defined as follows:

211        const StackBounds&amp; stack()
212        {
213            return (globalDataType == Default)
214                ? m_stack
215                : wtfThreadData().stack();
216        }

I didn&apos;t want to dive into this and make changes because they&apos;re outside the scope of the patch. Do you have thoughts on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456521</commentid>
    <comment_count>11</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-08-24 16:28:12 -0700</bug_when>
    <thetext>Hey guys, does anyone have feedback on this?

(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Our namespacing convention calls for &quot;JSContextGroupSetStackBounds&quot;.
&gt; Sorry, will change.
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:210
&gt; &gt; &gt;          m_stack = wtfThreadData().stack();
&gt; &gt; &gt; +    else
&gt; &gt; &gt; +        m_stack = new StackBounds();
&gt; &gt; 
&gt; &gt; This doesn&apos;t seem right. For globalDataType != Default, m_stack gets set to &quot;new StackBounds()&quot;, but stack() returns wtfThreadData().stack().
&gt; 
&gt; I agree, but this is equivalent to the code that&apos;s in place right now. Currently JSGlobalData constructs m_stack via the default constructor, and later conditionally overwrites it as follows:
&gt; 
&gt; 207    if (globalDataType == Default)
&gt; 208        m_stack = wtfThreadData().stack();
&gt; 
&gt; The member function stack() is defined as follows:
&gt; 
&gt; 211        const StackBounds&amp; stack()
&gt; 212        {
&gt; 213            return (globalDataType == Default)
&gt; 214                ? m_stack
&gt; 215                : wtfThreadData().stack();
&gt; 216        }
&gt; 
&gt; I didn&apos;t want to dive into this and make changes because they&apos;re outside the scope of the patch. Do you have thoughts on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470643</commentid>
    <comment_count>12</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-09-21 00:57:16 -0700</bug_when>
    <thetext>Could someone take a look at this? Just pinging to make sure it didn&apos;t slip through the cracks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470958</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-21 11:15:16 -0700</bug_when>
    <thetext>I just realised that this behaviour may not be GC safe -- JSC is a conservative collector: at gc time we perform a conservative sweep of all machine stacks for references to GC objects.  By hoisting execution of the OS stack it seems that you would put JSC into a state where at least one set of roots can be missed.

How do you avoid this problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471070</commentid>
    <comment_count>14</comment_count>
    <who name="Slava Akhmechet">coffeemug</who>
    <bug_when>2011-09-21 12:53:28 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I just realised that this behaviour may not be GC safe -- JSC is a conservative collector: at gc time we perform a conservative sweep of all machine stacks for references to GC objects.  By hoisting execution of the OS stack it seems that you would put JSC into a state where at least one set of roots can be missed.
&gt; 
&gt; How do you avoid this problem?
Ahh, you&apos;re correct.  We get around this by writing our code and creating contexts and context groups in a very precise way. We could fix this, but it&apos;s getting increasingly hacky. We&apos;ll just work around this in our code, please feel free to close this, and sorry for using up the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575822</commentid>
    <comment_count>15</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-11 13:00:48 -0700</bug_when>
    <thetext>Based on comments in this bug, looks like this isn&apos;t going ahead, so I&apos;m going to close it.  This is meant with no prejudice! - if this becomes relevant again, please reopen.

Thanks, G.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102421</attachid>
            <date>2011-07-29 20:19:41 -0700</date>
            <delta_ts>2011-08-01 11:47:42 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>stack_bounds_patch</filename>
            <type>text/plain</type>
            <size>9365</size>
            <attacher name="Slava Akhmechet">coffeemug</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMjkgIFNsYXZhIEFraG1lY2hldCAgPGNvZmZlZW11Z0BnbWFpbC5jb20+CisKKyAg
ICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBjdXN0b20gc3RhY2sgYm91bmRzCisJ
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1Mzk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisJCisJQWRkZWQgSlNTZXRTdGFja0JvdW5kcyBm
dW5jdGlvbiB0byB0aGUgcHVibGljIEFQSSBpbiBvcmRlciB0bworCWFsbG93IGVtYmVkZGluZyBh
cHBsaWNhdGlvbnMgdGhhdCB1c2UgY3VzdG9tIHN0YWNrIGltcGxlbWVudGF0aW9ucworCXRvIGV4
cGxpY2l0bHkgc2V0IHN0YWNrIGJvdW5kcyBmb3IgYSBjb250ZXh0IGdyb3VwLiBUaGlzCisJZW5o
YW5jZW1lbnQgaXMgcGFydGljdWxhcmx5IGRpZmZpY3VsdCB0byB0ZXN0IGJlY2F1c2UgaXQgcmVx
dWlyZXMKKwlhIGN1c3RvbSBzdGFjayBpbXBsZW1lbnRhdGlvbiwgc28gSSBhbSBub3QgYWRkaW5n
IGEgdGVzdCBmb3IgdGhpcy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAg
ICAgICAoSlNTZXRTdGFja0JvdW5kcyk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5oOgor
ICAgICAgICAqIE1ha2VmaWxlOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQp
OgorICAgICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQpOgorICAgICAgICAqIHBhcnNlci9KU1Bh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6
SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRh
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbERhdGE6OnN0YWNrKToKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAg
KFdURjo6U3RhY2tCb3VuZHM6OnNldEJvdW5kcyk6CisgICAgICAgICogd3RmL1dURlRocmVhZERh
dGEuaDoKKyAgICAgICAgKFdURjo6V1RGVGhyZWFkRGF0YTo6c3RhY2spOgorCiAyMDExLTA3LTI5
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIEpJVCB2ZXJi
b3NlIG1vZGUgcHJvdmlkZXMgbm8gZGV0YWlscyBhYm91dCBwcmVkaWN0aW9ucwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE5NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDYgKzY0LDEyIEBAIHZvaWQgSlNDb250ZXh0R3JvdXBSZWxlYXNlKEpTQ29u
dGV4dEdyb3UKICAgICB0b0pTKGdyb3VwKS0+ZGVyZWYoKTsKIH0KIAordm9pZCBKU1NldFN0YWNr
Qm91bmRzKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwLCB2b2lkICpvcmlnaW4sIHZvaWQgKmJvdW5k
KQoreworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBQYXNzUmVmUHRyPEpT
R2xvYmFsRGF0YT4odG9KUyhncm91cCkpOworICAgIGdsb2JhbERhdGEtPnN0YWNrKCktPnNldEJv
dW5kcyhvcmlnaW4sIGJvdW5kKTsKK30KKwogSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29u
dGV4dENyZWF0ZShKU0NsYXNzUmVmIGdsb2JhbE9iamVjdENsYXNzKQogewogICAgIGluaXRpYWxp
emVUaHJlYWRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRS
ZWYuaAkocmV2aXNpb24gOTE5NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dFJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwyMCBAQCBKU19FWFBPUlQgSlND
b250ZXh0R3JvdXBSZWYgSlNDb250ZXh0R3JvCiAqLwogSlNfRVhQT1JUIHZvaWQgSlNDb250ZXh0
R3JvdXBSZWxlYXNlKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwKSBBVkFJTEFCTEVfSU5fV0VCS0lU
X1ZFUlNJT05fNF8wOwogCisKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3QgU2V0cyB0aGUgdmFs
aWQgc3RhY2sgYm91bmRzIGZvciB0aGUgaW50ZXJwcmV0ZXIuCitAZGlzY3Vzc2lvbiBXaGVuIEph
dmFTY3JpcHRDb3JlIGlzIGVtYmVkZGVkIGludG8gYXBwbGljYXRpb25zIHRoYXQgaW1wbGVtZW50
IGN1c3RvbQorIHN0YWNrIG1hbmFnZW1lbnQsIHRoZSBkZWZhdWx0IHN0YWNrIGJvdW5kcyBvZiB0
aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBtYXkgbm90IGNvcnJlc3BvbmQKKyB0byB0aGUgYWN0dWFs
IHN0YWNrIGJvdW5kcyBzZXQgYnkgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGZ1bmN0aW9uIGFs
bG93cyBzZXR0aW5nIHRoZQorIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHN0YWNrIGZvciBjdXN0b20g
c3RhY2sgaW1wbGVtZW50YXRpb25zLgorQHBhcmFtIGdyb3VwIFRoZSBzdGFjayBib3VuZHMgYXJl
IHNldCBmb3IgdGhlIHRocmVhZCB0aGF0J3MgYm91bmQgdG8gdGhlIEpTQ29udGV4dEdyb3VwLgor
QHBhcmFtIG9yaWdpbiBTcGVjaWZpZXMgdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4KK0BwYXJhbSBi
b3VuZCBTcGVjaWZpZXMgdGhlIGVuZCBvZiB0aGUgc3RhY2suCisqLworSlNfRVhQT1JUIHZvaWQg
SlNTZXRTdGFja0JvdW5kcyhKU0NvbnRleHRHcm91cFJlZiwgdm9pZCAqb3JpZ2luLCB2b2lkICpi
b3VuZCkgQVZBSUxBQkxFX0lOX1dFQktJVF9WRVJTSU9OXzRfMDsKKwogLyohCiBAZnVuY3Rpb24K
IEBhYnN0cmFjdCBDcmVhdGVzIGEgZ2xvYmFsIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1p
dENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9y
IGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3Qg
PT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3Vu
dCgpKTsKICAgICAgICAgICAgIGFkZExpbmVJbmZvKG4tPmxpbmVObygpKTsKLSAgICAgICAgICAg
IHJldHVybiBtX3N0YWNrLnJlY3Vyc2lvbkNoZWNrKCkKKyAgICAgICAgICAgIHJldHVybiBtX3N0
YWNrLT5yZWN1cnNpb25DaGVjaygpCiAgICAgICAgICAgICAgICAgPyBuLT5lbWl0Qnl0ZWNvZGUo
KnRoaXMsIGRzdCkKICAgICAgICAgICAgICAgICA6IGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVw
RXhjZXB0aW9uKCk7CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9k
ZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhy
b3VnaE1lYW5zVHJ1ZSkKICAgICAgICAgewogICAgICAgICAgICAgYWRkTGluZUluZm8obi0+bGlu
ZU5vKCkpOwotICAgICAgICAgICAgaWYgKG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKSkKKyAgICAg
ICAgICAgIGlmIChtX3N0YWNrLT5yZWN1cnNpb25DaGVjaygpKQogICAgICAgICAgICAgICAgIG4t
PmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFsc2VU
YXJnZXQsIGZhbGxUaHJvdWdoTWVhbnNUcnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwpAQCAtNTg1LDcg
KzU4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV9sYXN0T3Bjb2RlUG9z
aXRpb247CiAjZW5kaWYKIAotICAgICAgICBTdGFja0JvdW5kcyBtX3N0YWNrOworICAgICAgICBT
dGFja0JvdW5kcyAqbV9zdGFjazsKIAogICAgICAgICBib29sIG1fdXNlc0V4Y2VwdGlvbnM7CiAg
ICAgICAgIGJvb2wgbV9leHByZXNzaW9uVG9vRGVlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gOTE5NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRk
Q3VycmVudFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHB0aHJlYWRfc2V0c3BlY2lm
aWMobV90aHJlYWRTcGVjaWZpYywgdGhpcyk7Ci0gICAgVGhyZWFkKiB0aHJlYWQgPSBuZXcgVGhy
ZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQoKSwgbV9oZWFwLT5n
bG9iYWxEYXRhKCktPnN0YWNrKCkub3JpZ2luKCkpOworICAgIFRocmVhZCogdGhyZWFkID0gbmV3
IFRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIG1faGVh
cC0+Z2xvYmFsRGF0YSgpLT5zdGFjaygpLT5vcmlnaW4oKSk7CiAKICAgICBNdXRleExvY2tlciBs
b2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lk
IE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRoCiAgICAgY29uc2VydmF0aXZlUm9v
dHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQpOwogCiAgICAgdm9pZCogc3RhY2tC
ZWdpbiA9IHN0YWNrQ3VycmVudDsKLSAgICB2b2lkKiBzdGFja0VuZCA9IG1faGVhcC0+Z2xvYmFs
RGF0YSgpLT5zdGFjaygpLm9yaWdpbigpOworICAgIHZvaWQqIHN0YWNrRW5kID0gbV9oZWFwLT5n
bG9iYWxEYXRhKCktPnN0YWNrKCktPm9yaWdpbigpOwogICAgIHN3YXBJZkJhY2t3YXJkcyhzdGFj
a0JlZ2luLCBzdGFja0VuZCk7CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHN0YWNrQmVnaW4s
IHN0YWNrRW5kKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
SlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMwLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGFjay5y
ZWN1cnNpb25DaGVjaygpOworICAgICAgICByZXR1cm4gbV9zdGFjay0+cmVjdXJzaW9uQ2hlY2so
KTsKICAgICB9CiAgICAgCiAgICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0CkBAIC01NDAsNyAr
NTQwLDcgQEAgcHJpdmF0ZToKIAogICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CiAgICAgTGV4ZXIq
IG1fbGV4ZXI7Ci0gICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKKyAgICBTdGFja0JvdW5kcyogbV9z
dGFjazsKICAgICBib29sIG1fZXJyb3I7CiAgICAgVVN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAg
ICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTE5NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsNiArMjA2LDggQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0
YVR5cAogICAgIGludGVycHJldGVyID0gbmV3IEludGVycHJldGVyOwogICAgIGlmIChnbG9iYWxE
YXRhVHlwZSA9PSBEZWZhdWx0KQogICAgICAgICBtX3N0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCk7CisgICAgZWxzZQorICAgICAgICBtX3N0YWNrID0gbmV3IFN0YWNrQm91bmRzKCk7CiAK
ICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQg
aGVyZQogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJs
ZSk7CkBAIC0zNjQsNiArMzY2LDkgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgZGVsZXRlIG1fcnRUcmFjZUxpc3Q7CiAjZW5k
aWYKKworICAgIGlmIChnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0KQorICAgICAgICBkZWxldGUg
bV9zdGFjazsKIH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkxOTUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5V
c2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJVDsgfQogI2VuZGlmCiAKLSAgICAgICAgY29uc3Qg
U3RhY2tCb3VuZHMmIHN0YWNrKCkKKyAgICAgICAgU3RhY2tCb3VuZHMqIHN0YWNrKCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIChnbG9iYWxEYXRhVHlwZSA9PSBEZWZhdWx0KQogICAg
ICAgICAgICAgICAgID8gbV9zdGFjawpAQCAtMjkxLDcgKzI5MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgYm9vbCBt
X2NhblVzZUpJVDsKICNlbmRpZgotICAgICAgICBTdGFja0JvdW5kcyBtX3N0YWNrOworICAgICAg
ICBTdGFja0JvdW5kcyAqbV9zdGFjazsKICAgICB9OwogCiAgICAgaW5saW5lIEhhbmRsZVNsb3Qg
YWxsb2NhdGVHbG9iYWxIYW5kbGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24gOTE5NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDYgKzc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogY3VycmVudCgpIDw9IHJlY3Vy
c2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKTsKICAgICB9CiAKKyAgICB2b2lkIHNldEJvdW5k
cyh2b2lkICpvcmlnaW4sIHZvaWQgKmJvdW5kKQorICAgIHsKKyAgICAgICAgbV9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIG1fYm91bmQgPSBib3VuZDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
dm9pZCBpbml0aWFsaXplKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvV1RG
VGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvV1RG
VGhyZWFkRGF0YS5oCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzExNSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY3VycmVudElkZW50aWZpZXJUYWJsZSA9IG1fZGVmYXVsdElkZW50
aWZpZXJUYWJsZTsKICAgICB9CiAKLSAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2soKSBjb25z
dAorICAgIFN0YWNrQm91bmRzKiBzdGFjaygpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGFj
a0JvdW5kczsKKyAgICAgICAgcmV0dXJuICZtX3N0YWNrQm91bmRzOwogICAgIH0KKyAgICAKICNl
bmRpZgogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102423</attachid>
            <date>2011-07-29 20:56:35 -0700</date>
            <delta_ts>2011-08-01 11:47:42 -0700</delta_ts>
            <desc>Proposed patch v2 (fixed style errors in Changelog)</desc>
            <filename>stack_bounds_patch</filename>
            <type>text/plain</type>
            <size>9414</size>
            <attacher name="Slava Akhmechet">coffeemug</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMjkgIFNsYXZhIEFraG1lY2hldCAgPGNvZmZlZW11Z0BnbWFpbC5jb20+CisKKyAg
ICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBjdXN0b20gc3RhY2sgYm91bmRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTM5OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRk
ZWQgSlNTZXRTdGFja0JvdW5kcyBmdW5jdGlvbiB0byB0aGUgcHVibGljIEFQSSBpbiBvcmRlciB0
bworICAgICAgICBhbGxvdyBlbWJlZGRpbmcgYXBwbGljYXRpb25zIHRoYXQgdXNlIGN1c3RvbSBz
dGFjayBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgdG8gZXhwbGljaXRseSBzZXQgc3RhY2sgYm91
bmRzIGZvciBhIGNvbnRleHQgZ3JvdXAuIFRoaXMKKyAgICAgICAgZW5oYW5jZW1lbnQgaXMgcGFy
dGljdWxhcmx5IGRpZmZpY3VsdCB0byB0ZXN0IGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgICAg
YSBjdXN0b20gc3RhY2sgaW1wbGVtZW50YXRpb24sIHNvIEkgYW0gbm90IGFkZGluZyBhIHRlc3Qg
Zm9yIHRoaXMuCisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpT
U2V0U3RhY2tCb3VuZHMpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuaDoKKyAgICAgICAg
KiBNYWtlZmlsZToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KToKKyAgICAg
ICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKToKKyAgICAgICAgKiBwYXJzZXIvSlNQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6Y2FuUmVjdXJzZSk6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFs
RGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpzdGFjayk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0
YWNrQm91bmRzOjpzZXRCb3VuZHMpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmg6Cisg
ICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKwogMjAxMS0wNy0yOSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgdmVyYm9zZSBtb2Rl
IHByb3ZpZGVzIG5vIGRldGFpbHMgYWJvdXQgcHJlZGljdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDkxOTUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxMiBAQCB2b2lkIEpTQ29udGV4dEdyb3VwUmVsZWFzZShKU0NvbnRleHRHcm91
CiAgICAgdG9KUyhncm91cCktPmRlcmVmKCk7CiB9CiAKK3ZvaWQgSlNTZXRTdGFja0JvdW5kcyhK
U0NvbnRleHRHcm91cFJlZiBncm91cCwgdm9pZCAqb3JpZ2luLCB2b2lkICpib3VuZCkKK3sKKyAg
ICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+KHRvSlMoZ3JvdXApKTsKKyAgICBnbG9iYWxEYXRhLT5zdGFjaygpLT5zZXRCb3VuZHMob3Jp
Z2luLCBib3VuZCk7Cit9CisKIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVh
dGUoSlNDbGFzc1JlZiBnbG9iYWxPYmplY3RDbGFzcykKIHsKICAgICBpbml0aWFsaXplVGhyZWFk
aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmgJKHJl
dmlzaW9uIDkxOTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMjAgQEAgSlNfRVhQT1JUIEpTQ29udGV4dEdy
b3VwUmVmIEpTQ29udGV4dEdybwogKi8KIEpTX0VYUE9SVCB2b2lkIEpTQ29udGV4dEdyb3VwUmVs
ZWFzZShKU0NvbnRleHRHcm91cFJlZiBncm91cCkgQVZBSUxBQkxFX0lOX1dFQktJVF9WRVJTSU9O
XzRfMDsKIAorCisvKiEKK0BmdW5jdGlvbgorQGFic3RyYWN0IFNldHMgdGhlIHZhbGlkIHN0YWNr
IGJvdW5kcyBmb3IgdGhlIGludGVycHJldGVyLgorQGRpc2N1c3Npb24gV2hlbiBKYXZhU2NyaXB0
Q29yZSBpcyBlbWJlZGRlZCBpbnRvIGFwcGxpY2F0aW9ucyB0aGF0IGltcGxlbWVudCBjdXN0b20K
KyBzdGFjayBtYW5hZ2VtZW50LCB0aGUgZGVmYXVsdCBzdGFjayBib3VuZHMgb2YgdGhlIHVuZGVy
bHlpbmcgcGxhdGZvcm0gbWF5IG5vdCBjb3JyZXNwb25kCisgdG8gdGhlIGFjdHVhbCBzdGFjayBi
b3VuZHMgc2V0IGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBmdW5jdGlvbiBhbGxvd3Mgc2V0
dGluZyB0aGUKKyBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdGFjayBmb3IgY3VzdG9tIHN0YWNrIGlt
cGxlbWVudGF0aW9ucy4KK0BwYXJhbSBncm91cCBUaGUgc3RhY2sgYm91bmRzIGFyZSBzZXQgZm9y
IHRoZSB0aHJlYWQgdGhhdCdzIGJvdW5kIHRvIHRoZSBKU0NvbnRleHRHcm91cC4KK0BwYXJhbSBv
cmlnaW4gU3BlY2lmaWVzIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suCitAcGFyYW0gYm91bmQgU3Bl
Y2lmaWVzIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTU2V0U3Rh
Y2tCb3VuZHMoSlNDb250ZXh0R3JvdXBSZWYsIHZvaWQgKm9yaWdpbiwgdm9pZCAqYm91bmQpIEFW
QUlMQUJMRV9JTl9XRUJLSVRfVkVSU0lPTl80XzA7CisKIC8qIQogQGZ1bmN0aW9uCiBAYWJzdHJh
Y3QgQ3JlYXRlcyBhIGdsb2JhbCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gOTE5NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsy
MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIE5vZGU6OmVtaXRDb2RlIGFz
c3VtZXMgdGhhdCBkc3QsIGlmIHByb3ZpZGVkLCBpcyBlaXRoZXIgYSBsb2NhbCBvciBhIHJlZmVy
ZW5jZWQgdGVtcG9yYXJ5LgogICAgICAgICAgICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9y
ZWRSZXN1bHQoKSB8fCAhZHN0LT5pc1RlbXBvcmFyeSgpIHx8IGRzdC0+cmVmQ291bnQoKSk7CiAg
ICAgICAgICAgICBhZGRMaW5lSW5mbyhuLT5saW5lTm8oKSk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zdGFjay5yZWN1cnNpb25DaGVjaygpCisgICAgICAgICAgICByZXR1cm4gbV9zdGFjay0+cmVj
dXJzaW9uQ2hlY2soKQogICAgICAgICAgICAgICAgID8gbi0+ZW1pdEJ5dGVjb2RlKCp0aGlzLCBk
c3QpCiAgICAgICAgICAgICAgICAgOiBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlv
bigpOwogICAgICAgICB9CkBAIC0yMjAsNyArMjIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQoRXhwcmVzc2lvbk5vZGUqIG4sIExh
YmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFu
c1RydWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGFkZExpbmVJbmZvKG4tPmxpbmVObygpKTsK
LSAgICAgICAgICAgIGlmIChtX3N0YWNrLnJlY3Vyc2lvbkNoZWNrKCkpCisgICAgICAgICAgICBp
ZiAobV9zdGFjay0+cmVjdXJzaW9uQ2hlY2soKSkKICAgICAgICAgICAgICAgICBuLT5lbWl0Qnl0
ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoKnRoaXMsIHRydWVUYXJnZXQsIGZhbHNlVGFyZ2V0LCBm
YWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKQEAgLTU4NSw3ICs1ODUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IG1fbGFzdE9wY29kZVBvc2l0aW9uOwog
I2VuZGlmCiAKLSAgICAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKKyAgICAgICAgU3RhY2tCb3Vu
ZHMgKm1fc3RhY2s7CiAKICAgICAgICAgYm9vbCBtX3VzZXNFeGNlcHRpb25zOwogICAgICAgICBi
b29sIG1fZXhwcmVzc2lvblRvb0RlZXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHJldmlzaW9uIDkxOTUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRU
aHJlYWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBwdGhyZWFkX3NldHNwZWNpZmljKG1fdGhy
ZWFkU3BlY2lmaWMsIHRoaXMpOwotICAgIFRocmVhZCogdGhyZWFkID0gbmV3IFRocmVhZChwdGhy
ZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5zdGFjaygpLm9yaWdpbigpKTsKKyAgICBUaHJlYWQqIHRocmVhZCA9IG5ldyBUaHJlYWQo
cHRocmVhZF9zZWxmKCksIGdldEN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpLCBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+c3RhY2soKS0+b3JpZ2luKCkpOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3Jl
Z2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwogCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBNYWNoaW5l
VGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaAogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChy
ZWdpc3RlcnNCZWdpbiwgcmVnaXN0ZXJzRW5kKTsKIAogICAgIHZvaWQqIHN0YWNrQmVnaW4gPSBz
dGFja0N1cnJlbnQ7Ci0gICAgdm9pZCogc3RhY2tFbmQgPSBtX2hlYXAtPmdsb2JhbERhdGEoKS0+
c3RhY2soKS5vcmlnaW4oKTsKKyAgICB2b2lkKiBzdGFja0VuZCA9IG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5zdGFjaygpLT5vcmlnaW4oKTsKICAgICBzd2FwSWZCYWNrd2FyZHMoc3RhY2tCZWdpbiwg
c3RhY2tFbmQpOwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChzdGFja0JlZ2luLCBzdGFja0Vu
ZCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTUGFyc2VyLmNwcAko
cmV2aXNpb24gOTE5NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDcgKzUzMCw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIGNhblJlY3Vyc2UoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9u
Q2hlY2soKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2stPnJlY3Vyc2lvbkNoZWNrKCk7CiAgICAg
fQogICAgIAogICAgIGludCBsYXN0VG9rZW5FbmQoKSBjb25zdApAQCAtNTQwLDcgKzU0MCw3IEBA
IHByaXZhdGU6CiAKICAgICBQYXJzZXJBcmVuYSBtX2FyZW5hOwogICAgIExleGVyKiBtX2xleGVy
OwotICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CisgICAgU3RhY2tCb3VuZHMqIG1fc3RhY2s7CiAg
ICAgYm9vbCBtX2Vycm9yOwogICAgIFVTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiAgICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDkxOTUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2
LDYgKzIwNiw4IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAg
ICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKICAgICBpZiAoZ2xvYmFsRGF0YVR5cGUg
PT0gRGVmYXVsdCkKICAgICAgICAgbV9zdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zdGFjayA9IG5ldyBTdGFja0JvdW5kcygpOwogCiAgICAgLy8g
TmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKICAg
ICBJZGVudGlmaWVyVGFibGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJl
YWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwpAQCAt
MzY0LDYgKzM2Niw5IEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYgRU5BQkxF
KFJFR0VYUF9UUkFDSU5HKQogICAgIGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCisKKyAg
ICBpZiAoZ2xvYmFsRGF0YVR5cGUgIT0gRGVmYXVsdCkKKyAgICAgICAgZGVsZXRlIG1fc3RhY2s7
CiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRl
eHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDgsNyArMjA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgY2FuVXNlSklUKCkg
eyByZXR1cm4gbV9jYW5Vc2VKSVQ7IH0KICNlbmRpZgogCi0gICAgICAgIGNvbnN0IFN0YWNrQm91
bmRzJiBzdGFjaygpCisgICAgICAgIFN0YWNrQm91bmRzKiBzdGFjaygpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiAoZ2xvYmFsRGF0YVR5cGUgPT0gRGVmYXVsdCkKICAgICAgICAgICAg
ICAgICA/IG1fc3RhY2sKQEAgLTI5MSw3ICsyOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBF
TkFCTEUoSklUKSAmJiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIGJvb2wgbV9jYW5Vc2VK
SVQ7CiAjZW5kaWYKLSAgICAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKKyAgICAgICAgU3RhY2tC
b3VuZHMgKm1fc3RhY2s7CiAgICAgfTsKIAogICAgIGlubGluZSBIYW5kbGVTbG90IGFsbG9jYXRl
R2xvYmFsSGFuZGxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmgJKHJldmlzaW9uIDkxOTUxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICA6IGN1cnJlbnQoKSA8PSByZWN1cnNpb25MaW1p
dChtaW5BdmFpbGFibGVEZWx0YSk7CiAgICAgfQogCisgICAgdm9pZCBzZXRCb3VuZHModm9pZCAq
b3JpZ2luLCB2b2lkICpib3VuZCkKKyAgICB7CisgICAgICAgIG1fb3JpZ2luID0gb3JpZ2luOwor
ICAgICAgICBtX2JvdW5kID0gYm91bmQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW5p
dGlhbGl6ZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERh
dGEuaAkocmV2aXNpb24gOTE5NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1dURlRo
cmVhZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDEwICsxMTUsMTEgQEAgcHVibGljOgog
ICAgICAgICBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUgPSBtX2RlZmF1bHRJZGVudGlmaWVyVGFi
bGU7CiAgICAgfQogCi0gICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkgY29uc3QKKyAgICBT
dGFja0JvdW5kcyogc3RhY2soKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RhY2tCb3VuZHM7
CisgICAgICAgIHJldHVybiAmbV9zdGFja0JvdW5kczsKICAgICB9CisgICAgCiAjZW5kaWYKIAog
cHJpdmF0ZToK
</data>
<flag name="review"
          id="97681"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102539</attachid>
            <date>2011-08-01 11:47:42 -0700</date>
            <delta_ts>2011-08-08 16:11:53 -0700</delta_ts>
            <desc>Proposed patch v2 (fixed more style errors, moved export to private header)</desc>
            <filename>stack_bounds_patch</filename>
            <type>text/plain</type>
            <size>9365</size>
            <attacher name="Slava Akhmechet">coffeemug</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMjkgIFNsYXZhIEFraG1lY2hldCAgPGNvZmZlZW11Z0BnbWFpbC5jb20+CisKKyAg
ICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyBjdXN0b20gc3RhY2sgYm91bmRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTM5OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRk
ZWQgSlNTZXRTdGFja0JvdW5kcyBmdW5jdGlvbiB0byB0aGUgcHVibGljIEFQSSBpbiBvcmRlciB0
bworICAgICAgICBhbGxvdyBlbWJlZGRpbmcgYXBwbGljYXRpb25zIHRoYXQgdXNlIGN1c3RvbSBz
dGFjayBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgdG8gZXhwbGljaXRseSBzZXQgc3RhY2sgYm91
bmRzIGZvciBhIGNvbnRleHQgZ3JvdXAuIFRoaXMKKyAgICAgICAgZW5oYW5jZW1lbnQgaXMgcGFy
dGljdWxhcmx5IGRpZmZpY3VsdCB0byB0ZXN0IGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgICAg
YSBjdXN0b20gc3RhY2sgaW1wbGVtZW50YXRpb24sIHNvIEkgYW0gbm90IGFkZGluZyBhIHRlc3Qg
Zm9yIHRoaXMuCisKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpT
U2V0U3RhY2tCb3VuZHMpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuaDoKKyAgICAgICAg
KiBNYWtlZmlsZToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KToKKyAgICAg
ICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6
OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKToKKyAgICAgICAgKiBwYXJzZXIvSlNQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6Y2FuUmVjdXJzZSk6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFs
RGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpzdGFjayk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0
YWNrQm91bmRzOjpzZXRCb3VuZHMpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmg6Cisg
ICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKwogMjAxMS0wNy0yOSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgdmVyYm9zZSBtb2Rl
IHByb3ZpZGVzIG5vIGRldGFpbHMgYWJvdXQgcHJlZGljdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDkxOTUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxMSBAQCB2b2lkIEpTQ29udGV4dEdyb3VwUmVsZWFzZShKU0NvbnRleHRHcm91
CiAgICAgdG9KUyhncm91cCktPmRlcmVmKCk7CiB9CiAKK3ZvaWQgSlNTZXRTdGFja0JvdW5kcyhK
U0NvbnRleHRHcm91cFJlZiBncm91cCwgdm9pZCogb3JpZ2luLCB2b2lkKiBib3VuZCkKK3sKKyAg
ICB0b0pTKGdyb3VwKS0+c3RhY2soKS0+c2V0Qm91bmRzKG9yaWdpbiwgYm91bmQpOworfQorCiBK
U0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRlKEpTQ2xhc3NSZWYgZ2xvYmFs
T2JqZWN0Q2xhc3MpCiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWZQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWZQcml2YXRlLmgJKHJldmlzaW9u
IDkxOTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWZQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDIwIEBAIEpTX0VYUE9SVCBKU0dsb2JhbENv
bnRleHRSZWYgSlNDb250ZXh0R2UKIEByZXN1bHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFj
a3RyYWNlCiAqLwogSlNfRVhQT1JUIEpTU3RyaW5nUmVmIEpTQ29udGV4dENyZWF0ZUJhY2t0cmFj
ZShKU0NvbnRleHRSZWYgY3R4LCB1bnNpZ25lZCBtYXhTdGFja1NpemUpIEFWQUlMQUJMRV9JTl9X
RUJLSVRfVkVSU0lPTl80XzA7Ci0gICAgCisKKy8qIQorQGZ1bmN0aW9uCitAYWJzdHJhY3QgU2V0
cyB0aGUgdmFsaWQgc3RhY2sgYm91bmRzIGZvciB0aGUgaW50ZXJwcmV0ZXIuCitAZGlzY3Vzc2lv
biBXaGVuIEphdmFTY3JpcHRDb3JlIGlzIGVtYmVkZGVkIGludG8gYXBwbGljYXRpb25zIHRoYXQg
aW1wbGVtZW50IGN1c3RvbQorIHN0YWNrIG1hbmFnZW1lbnQsIHRoZSBkZWZhdWx0IHN0YWNrIGJv
dW5kcyBvZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBtYXkgbm90IGNvcnJlc3BvbmQKKyB0byB0
aGUgYWN0dWFsIHN0YWNrIGJvdW5kcyBzZXQgYnkgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGZ1
bmN0aW9uIGFsbG93cyBzZXR0aW5nIHRoZQorIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHN0YWNrIGZv
ciBjdXN0b20gc3RhY2sgaW1wbGVtZW50YXRpb25zLgorQHBhcmFtIGdyb3VwIFRoZSBzdGFjayBi
b3VuZHMgYXJlIHNldCBmb3IgdGhlIHRocmVhZCB0aGF0J3MgYm91bmQgdG8gdGhlIEpTQ29udGV4
dEdyb3VwLgorQHBhcmFtIG9yaWdpbiBTcGVjaWZpZXMgdGhlIHN0YXJ0IG9mIHRoZSBzdGFjay4K
K0BwYXJhbSBib3VuZCBTcGVjaWZpZXMgdGhlIGVuZCBvZiB0aGUgc3RhY2suCisqLworSlNfRVhQ
T1JUIHZvaWQgSlNTZXRTdGFja0JvdW5kcyhKU0NvbnRleHRHcm91cFJlZiBjdHhHcm91cCwgdm9p
ZCogb3JpZ2luLCB2b2lkKiBib3VuZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1p
dENvZGUgYXNzdW1lcyB0aGF0IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9y
IGEgcmVmZXJlbmNlZCB0ZW1wb3JhcnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3Qg
PT0gaWdub3JlZFJlc3VsdCgpIHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3Vu
dCgpKTsKICAgICAgICAgICAgIGFkZExpbmVJbmZvKG4tPmxpbmVObygpKTsKLSAgICAgICAgICAg
IHJldHVybiBtX3N0YWNrLnJlY3Vyc2lvbkNoZWNrKCkKKyAgICAgICAgICAgIHJldHVybiBtX3N0
YWNrLT5yZWN1cnNpb25DaGVjaygpCiAgICAgICAgICAgICAgICAgPyBuLT5lbWl0Qnl0ZWNvZGUo
KnRoaXMsIGRzdCkKICAgICAgICAgICAgICAgICA6IGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVw
RXhjZXB0aW9uKCk7CiAgICAgICAgIH0KQEAgLTIyMCw3ICsyMjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9k
ZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhy
b3VnaE1lYW5zVHJ1ZSkKICAgICAgICAgewogICAgICAgICAgICAgYWRkTGluZUluZm8obi0+bGlu
ZU5vKCkpOwotICAgICAgICAgICAgaWYgKG1fc3RhY2sucmVjdXJzaW9uQ2hlY2soKSkKKyAgICAg
ICAgICAgIGlmIChtX3N0YWNrLT5yZWN1cnNpb25DaGVjaygpKQogICAgICAgICAgICAgICAgIG4t
PmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCgqdGhpcywgdHJ1ZVRhcmdldCwgZmFsc2VU
YXJnZXQsIGZhbGxUaHJvdWdoTWVhbnNUcnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwpAQCAtNTg1LDcg
KzU4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV9sYXN0T3Bjb2RlUG9z
aXRpb247CiAjZW5kaWYKIAotICAgICAgICBTdGFja0JvdW5kcyBtX3N0YWNrOworICAgICAgICBT
dGFja0JvdW5kcyogbV9zdGFjazsKIAogICAgICAgICBib29sIG1fdXNlc0V4Y2VwdGlvbnM7CiAg
ICAgICAgIGJvb2wgbV9leHByZXNzaW9uVG9vRGVlcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gOTE5NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6YWRk
Q3VycmVudFRocmVhZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHB0aHJlYWRfc2V0c3BlY2lm
aWMobV90aHJlYWRTcGVjaWZpYywgdGhpcyk7Ci0gICAgVGhyZWFkKiB0aHJlYWQgPSBuZXcgVGhy
ZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQoKSwgbV9oZWFwLT5n
bG9iYWxEYXRhKCktPnN0YWNrKCkub3JpZ2luKCkpOworICAgIFRocmVhZCogdGhyZWFkID0gbmV3
IFRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIG1faGVh
cC0+Z2xvYmFsRGF0YSgpLT5zdGFjaygpLT5vcmlnaW4oKSk7CiAKICAgICBNdXRleExvY2tlciBs
b2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lk
IE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVudFRoCiAgICAgY29uc2VydmF0aXZlUm9v
dHMuYWRkKHJlZ2lzdGVyc0JlZ2luLCByZWdpc3RlcnNFbmQpOwogCiAgICAgdm9pZCogc3RhY2tC
ZWdpbiA9IHN0YWNrQ3VycmVudDsKLSAgICB2b2lkKiBzdGFja0VuZCA9IG1faGVhcC0+Z2xvYmFs
RGF0YSgpLT5zdGFjaygpLm9yaWdpbigpOworICAgIHZvaWQqIHN0YWNrRW5kID0gbV9oZWFwLT5n
bG9iYWxEYXRhKCktPnN0YWNrKCktPm9yaWdpbigpOwogICAgIHN3YXBJZkJhY2t3YXJkcyhzdGFj
a0JlZ2luLCBzdGFja0VuZCk7CiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHN0YWNrQmVnaW4s
IHN0YWNrRW5kKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
SlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMwLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGFjay5y
ZWN1cnNpb25DaGVjaygpOworICAgICAgICByZXR1cm4gbV9zdGFjay0+cmVjdXJzaW9uQ2hlY2so
KTsKICAgICB9CiAgICAgCiAgICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0CkBAIC01NDAsNyAr
NTQwLDcgQEAgcHJpdmF0ZToKIAogICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CiAgICAgTGV4ZXIq
IG1fbGV4ZXI7Ci0gICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKKyAgICBTdGFja0JvdW5kcyogbV9z
dGFjazsKICAgICBib29sIG1fZXJyb3I7CiAgICAgVVN0cmluZyBtX2Vycm9yTWVzc2FnZTsKICAg
ICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTE5NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsNiArMjA2LDggQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0
YVR5cAogICAgIGludGVycHJldGVyID0gbmV3IEludGVycHJldGVyOwogICAgIGlmIChnbG9iYWxE
YXRhVHlwZSA9PSBEZWZhdWx0KQogICAgICAgICBtX3N0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCk7CisgICAgZWxzZQorICAgICAgICBtX3N0YWNrID0gbmV3IFN0YWNrQm91bmRzKCk7CiAK
ICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQg
aGVyZQogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJs
ZSk7CkBAIC0zNjQsNiArMzY2LDkgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgZGVsZXRlIG1fcnRUcmFjZUxpc3Q7CiAjZW5k
aWYKKworICAgIGlmIChnbG9iYWxEYXRhVHlwZSAhPSBEZWZhdWx0KQorICAgICAgICBkZWxldGUg
bV9zdGFjazsKIH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkxOTUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBjYW5V
c2VKSVQoKSB7IHJldHVybiBtX2NhblVzZUpJVDsgfQogI2VuZGlmCiAKLSAgICAgICAgY29uc3Qg
U3RhY2tCb3VuZHMmIHN0YWNrKCkKKyAgICAgICAgU3RhY2tCb3VuZHMqIHN0YWNrKCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIChnbG9iYWxEYXRhVHlwZSA9PSBEZWZhdWx0KQogICAg
ICAgICAgICAgICAgID8gbV9zdGFjawpAQCAtMjkxLDcgKzI5MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2lmIEVOQUJMRShKSVQpICYmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgYm9vbCBt
X2NhblVzZUpJVDsKICNlbmRpZgotICAgICAgICBTdGFja0JvdW5kcyBtX3N0YWNrOworICAgICAg
ICBTdGFja0JvdW5kcyogbV9zdGFjazsKICAgICB9OwogCiAgICAgaW5saW5lIEhhbmRsZVNsb3Qg
YWxsb2NhdGVHbG9iYWxIYW5kbGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24gOTE5NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDYgKzc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogY3VycmVudCgpIDw9IHJlY3Vy
c2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKTsKICAgICB9CiAKKyAgICB2b2lkIHNldEJvdW5k
cyh2b2lkKiBvcmlnaW4sIHZvaWQqIGJvdW5kKQorICAgIHsKKyAgICAgICAgbV9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIG1fYm91bmQgPSBib3VuZDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
dm9pZCBpbml0aWFsaXplKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvV1RG
VGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvV1RG
VGhyZWFkRGF0YS5oCShyZXZpc2lvbiA5MTk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzExNSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY3VycmVudElkZW50aWZpZXJUYWJsZSA9IG1fZGVmYXVsdElkZW50
aWZpZXJUYWJsZTsKICAgICB9CiAKLSAgICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2soKSBjb25z
dAorICAgIFN0YWNrQm91bmRzKiBzdGFjaygpCiAgICAgewotICAgICAgICByZXR1cm4gbV9zdGFj
a0JvdW5kczsKKyAgICAgICAgcmV0dXJuICZtX3N0YWNrQm91bmRzOwogICAgIH0KKyAgICAKICNl
bmRpZgogCiBwcml2YXRlOgo=
</data>
<flag name="review"
          id="97816"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>