<?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>23068</bug_id>
          
          <creation_ts>2009-01-01 14:43:43 -0800</creation_ts>
          <short_desc>Merge m_transitionCount and m_offset in Structure</short_desc>
          <delta_ts>2009-01-04 16:19:20 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alice Liu">alice.barraclough</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>103992</commentid>
    <comment_count>0</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2009-01-01 14:43:43 -0800</bug_when>
    <thetext>The m_transitionCount and m_cachedTransistionOffset of StructureID can be merged into one field to save a word per StructureID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103993</commentid>
    <comment_count>1</comment_count>
      <attachid>26352</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2009-01-01 14:52:11 -0800</bug_when>
    <thetext>Created attachment 26352
patch

memory usage stats for Structure during membuster first 30 windows
TOT:
47001 blocks ( 3%), 5749 KB ( 4%) -- JavaScript Structure
WIth Patch:
47123 blocks ( 3%), 5480 KB ( 4%) -- JavaScript Structure

Sunspider
TOT :
run 1: Total:                  811.1ms +/- 0.4%
run 2: Total:                  847.2ms +/- 2.0%

With Patch:
run 1:Total:                  826.5ms +/- 0.7%
run 2:Total:                  810.2ms +/- 0.3%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104000</commentid>
    <comment_count>2</comment_count>
      <attachid>26352</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-01 17:11:39 -0800</bug_when>
    <thetext>Comment on attachment 26352
patch

Looks great.

I don&apos;t entirely understand the change, because m_offset starts with the value -1 (WTF::notFound), and m_transitionCount used to start with the value 0. It seems that to get the transition length you need to add 1 to m_offset, and in fact you also would need to check for notFound.

&gt; +        * runtime/Structure.cpp:
&gt; +        (JSC::Structure::Structure):
&gt; +        (JSC::Structure::addPropertyTransition):
&gt; +        (JSC::Structure::changePrototypeTransition):
&gt; +        (JSC::Structure::getterSetterTransition):
&gt; +        * runtime/Structure.h:
&gt; +        (JSC::Structure::isEmpty):

I prefer patches with comments for each function. And in header files I normally just delete the function names added by the prepare-ChangeLog script, unless the change is really worth commenting on.

&gt; -    , m_offset(WTF::notFound)
&gt; +    , m_offset((char)WTF::notFound)

We try to avoid C-style casts in our C++ code. In the case of this code, there&apos;s no need to use the WTF::notFound constant; it was handy when the variable was of size_t, but there&apos;s nothing special about that particular named constant and now that it&apos;s the wrong type it&apos;s actively harmful because it&apos;s causing us to put type casts in. We can use our own constant instead. In addition, in general it&apos;s best to avoid using the &quot;char&quot; type for anything other than string characters, because whether it&apos;s a signed or unsigned type can vary between platforms. So I suggest using &quot;signed char&quot; or &quot;unsigned char&quot; when you want a 1-byte integer and care about whether it&apos;s signed or not. For this use, I suggest unsigned char for the offset and then we can use this static data member in the Structure class instead:

    const unsigned char noOffset = 0xFF;

Then we won&apos;t need to use WTF::notFound at all. Also, the best style is to use the WTF:: prefix only in headers, and in cpp files we would do &quot;using namespace WTF&quot; and then omit the WTF:: prefix.

&gt; -    if (structure-&gt;m_transitionCount &gt; s_maxTransitionLength) {
&gt; +    if (structure-&gt;m_offset &gt; s_maxTransitionLength) { // transitions move in step with offsets, so we can use offset here to reduce footprint of the object

This comment is good, but a little confusing.

In the future when I read this, I won&apos;t really know what &quot;move in step with&quot; means and &quot;reduce footprint&quot; is a little confusing too, once the footprint is reduced. It&apos;s more a comment from our current perspective than a future one.

One idea is that the comment could say, &quot;Since the number of transitions is always the same as the value of m_offset, we can check the transition length by looking at it.&quot; Another is that, &quot;Since the number of transitions is always the same as m_offset, we keep the size of Structure down by not storing both.&quot;

Another idea is to have an inline function called transitionCount that just returns m_offset. It seems that would be a great place for the comment, and it&apos;s nice to keep it out of the middle of the function. And also, if the transition count really is the offset minus one, then that&apos;s the perfect place to do that math.

&gt; -        bool isEmpty() const { return m_propertyTable ? !m_propertyTable-&gt;keyCount : m_offset == WTF::notFound; }
&gt; +        bool isEmpty() const { return m_propertyTable ? !m_propertyTable-&gt;keyCount : (size_t)m_offset == WTF::notFound; }

Again, we&apos;d want to avoid the C++ style cast, either using static_cast, or better, avoiding the cast entirely (see my comments above).

I think the patch as-is is OK. It gets us the memory saving, and it&apos;s pretty clear. However, there are two weaknesses:

    1) I think the logic has an off-by-one error now because we use m_offset as if it was the transition count, and it&apos;s really the transition count minus one. The reason this off-by-one error is not a big deal is that it just means we allow less transition before switching to a dictionary representation, which is mostly harmless.

    2) The second reason the off-by-one error is harmless is that the initial value of m_offset, notFound, ends up being less than s_maxTransitionLength because &quot;char&quot; is signed on the platforms we normally work on. But this is not good to rely on. Platforms are allowed to have &quot;char&quot; be an unsigned type.

I&apos;m going to say r=me as-is, but I think it would be better to fix the things I mentioned above. Feel free to clear the review flag and post a new patch if you decide to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104226</commentid>
    <comment_count>3</comment_count>
      <attachid>26390</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2009-01-03 00:25:58 -0800</bug_when>
    <thetext>Created attachment 26390
patch

This patch addresses everything Darin mentioned (at least i hope so).  I ended up using signed char instead of unsigned char only because i was having a lot of trouble debugging why my unsigned char version of this patch was crashing in garbage collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104244</commentid>
    <comment_count>4</comment_count>
      <attachid>26390</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-03 10:58:56 -0800</bug_when>
    <thetext>Comment on attachment 26390
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104380</commentid>
    <comment_count>5</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2009-01-04 16:19:20 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/runtime/Structure.cpp
Sending        JavaScriptCore/runtime/Structure.h
Transmitting file data ...
Committed revision 39593.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26352</attachid>
            <date>2009-01-01 14:52:11 -0800</date>
            <delta_ts>2009-01-03 00:28:56 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4866</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTM2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDEt
MDEgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzYzNDE3NzY+IE1lcmdlIG1fdHJhbnNpdGlvbkNvdW50IGFuZCBtX29mZnNldCBpbiBT
dHJ1Y3R1cmUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0dGVyU2V0dGVyVHJhbnNpdGlvbik6CisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0VtcHR5
KToKKwogMjAwOC0xMi0zMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6IHJ1bnRpbWUvU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDM5NTA3
KQorKysgcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTAgKzEy
Niw5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSwKICAgICAsIG1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4oMCkKICAgICAsIG1fcHJldmlvdXMoMCkKICAgICAsIG1fbmFt
ZUluUHJldmlvdXMoMCkKLSAgICAsIG1fdHJhbnNpdGlvbkNvdW50KDApCiAgICAgLCBtX3Byb3Bl
cnR5VGFibGUoMCkKICAgICAsIG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoSlNPYmplY3Q6Omlu
bGluZVN0b3JhZ2VDYXBhY2l0eSkKLSAgICAsIG1fb2Zmc2V0KFdURjo6bm90Rm91bmQpCisgICAg
LCBtX29mZnNldCgoY2hhcilXVEY6Om5vdEZvdW5kKQogICAgICwgbV9pc0RpY3Rpb25hcnkoZmFs
c2UpCiAgICAgLCBtX2lzUGlubmVkUHJvcGVydHlUYWJsZShmYWxzZSkKICAgICAsIG1faGFzR2V0
dGVyU2V0dGVyUHJvcGVydGllcyhmYWxzZSkKQEAgLTM4Miw3ICszODEsNyBAQCBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gU3RydWN0dXJlOjphZGRQcm9wCiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSk7CiAgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogCi0gICAgaWYgKHN0cnVjdHVyZS0+bV90cmFu
c2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICBpZiAoc3RydWN0dXJl
LT5tX29mZnNldCA+IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCkgeyAvLyB0cmFuc2l0aW9ucyBtb3Zl
IGluIHN0ZXAgd2l0aCBvZmZzZXRzLCBzbyB3ZSBjYW4gdXNlIG9mZnNldCBoZXJlIHRvIHJlZHVj
ZSBmb290cHJpbnQgb2YgdGhlIG9iamVjdAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiB0cmFu
c2l0aW9uID0gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihzdHJ1Y3R1cmUpOwogICAgICAgICBvZmZz
ZXQgPSB0cmFuc2l0aW9uLT5wdXQocHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKHRyYW5zaXRpb24tPnByb3BlcnR5U3RvcmFnZVNpemUoKSA+IHRyYW5zaXRpb24tPnByb3Bl
cnR5U3RvcmFnZUNhcGFjaXR5KCkpCkBAIC0zOTUsNyArMzk0LDYgQEAgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IFN0cnVjdHVyZTo6YWRkUHJvcAogICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMgPSBz
dHJ1Y3R1cmU7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFt
ZS51c3RyaW5nKCkucmVwKCk7CiAgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91
cyA9IGF0dHJpYnV0ZXM7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uQ291bnQgPSBzdHJ1
Y3R1cmUtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
U3RvcmFnZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5Owog
ICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+
bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwogCkBAIC00NTAsNyArNDQ4LDYgQEAgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6Y2hhbmdlUAogewogICAgIFJlZlB0cjxTdHJ1Y3R1
cmU+IHRyYW5zaXRpb24gPSBjcmVhdGUocHJvdG90eXBlLCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkp
OwogCi0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uQ291bnQgPSBzdHJ1Y3R1cmUtPm1fdHJh
bnNpdGlvbkNvdW50ICsgMTsKICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFj
aXR5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5OwogICAgIHRyYW5zaXRp
b24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA9IHN0cnVjdHVyZS0+bV9oYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzOwogCkBAIC00NjYsNyArNDYzLDYgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IFN0cnVjdHVyZTo6Y2hhbmdlUAogUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6
Z2V0dGVyU2V0dGVyVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBSZWZQ
dHI8U3RydWN0dXJlPiB0cmFuc2l0aW9uID0gY3JlYXRlKHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCksIHN0cnVjdHVyZS0+dHlwZUluZm8oKSk7Ci0gICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0
aW9uQ291bnQgPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvbkNvdW50ICsgMTsKICAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5U3RvcmFnZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5U3Rv
cmFnZUNhcGFjaXR5OwogICAgIHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cyA9IHRyYW5zaXRpb24tPm1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsKIApJbmRleDogcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiAzOTUwNykKKysrIHJ1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
Niw3ICsxMDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
OyB9CiAgICAgICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhib29sIGhhc0dl
dHRlclNldHRlclByb3BlcnRpZXMpIHsgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gaGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllczsgfQogCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJsZSA/ICFtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50IDog
bV9vZmZzZXQgPT0gV1RGOjpub3RGb3VuZDsgfQorICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5VGFibGUgPyAhbV9wcm9wZXJ0eVRhYmxlLT5rZXlDb3VudCA6
IChzaXplX3QpbV9vZmZzZXQgPT0gV1RGOjpub3RGb3VuZDsgfQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgU3RydWN0dXJlKEpTVmFsdWUqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mKTsKQEAg
LTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW1wdHlFbnRyeUluZGV4ID0gMDsKICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBzX21heFRyYW5zaXRpb25MZW5ndGggPSA2NDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIgc19tYXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAKICAgICAgICAgVHlwZUluZm8gbV90
eXBlSW5mbzsKIApAQCAtMTUxLDcgKzE1MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWZQdHI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgICAgICBSZWZQdHI8VVN0cmluZzo6UmVw
PiBtX25hbWVJblByZXZpb3VzOwogCi0gICAgICAgIHNpemVfdCBtX3RyYW5zaXRpb25Db3VudDsK
ICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9u
OwogICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKiB0YWJsZTsKQEAgLTE2Miw3
ICsxNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlNYXBIYXNoVGFibGUq
IG1fcHJvcGVydHlUYWJsZTsKIAogICAgICAgICBzaXplX3QgbV9wcm9wZXJ0eVN0b3JhZ2VDYXBh
Y2l0eTsKLSAgICAgICAgc2l6ZV90IG1fb2Zmc2V0OworICAgICAgICBjaGFyIG1fb2Zmc2V0Owog
CiAgICAgICAgIGJvb2wgbV9pc0RpY3Rpb25hcnkgOiAxOwogICAgICAgICBib29sIG1faXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlIDogMTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26390</attachid>
            <date>2009-01-03 00:25:58 -0800</date>
            <delta_ts>2009-01-03 10:58:56 -0800</delta_ts>
            <desc>patch</desc>
            <filename>StructurePatchWorks-signed.txt</filename>
            <type>text/plain</type>
            <size>9080</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5NTcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDEt
MDIgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzYzNDE3NzY+IE1lcmdlIG1fdHJhbnNpdGlvbkNvdW50IGFuZCBtX29mZnNldCBpbiBT
dHJ1Y3R1cmUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6U3Ry
dWN0dXJlKTogUmVtb3ZlIG1fdHJhbnNpdGlvbkNvdW50CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSk6IE5vIG5lZWQgdG8g
d2FpdCB1bnRpbCBhZnRlciB0aGUgYXNzaWdubWVudCB0byBvZmZzZXQgdG8gYXNzZXJ0IGlmIGl0
J3Mgbm90Rm91bmQ7IG1vdmUgaXQgdXAuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uKTogVXNlIG1ldGhvZCBmb3IgdHJhbnNpdGlvbkNvdW50IGluc3RlYWQg
b2YgbV90cmFuc2l0aW9uQ291bnQuIFJlbW92ZSBsaW5lIHRoYXQgbWFpbnRhaW5zIHRoZSBtX3Ry
YW5zaXRpb25Db3VudC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKTogUmVtb3ZlIGxpbmUgdGhhdCBtYWludGFpbnMgdGhlIG1fdHJhbnNpdGlvbkNv
dW50LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldHRlclNldHRlclRyYW5zaXRpb24pOiBS
ZW1vdmUgbGluZSB0aGF0IG1haW50YWlucyB0aGUgbV90cmFuc2l0aW9uQ291bnQuCisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgQ2hhbmdlZCBzX21heFRyYW5zaXRpb25M
ZW5ndGggYW5kIG1fb2Zmc2V0IGZyb20gc2l6ZV90IHRvIHNpZ25lZCBjaGFyLiAgbV9vZmZzZXQg
d2lsbCBuZXZlciBiZWNvbWUgZ3JlYXRlciB0aGFuIDY0IAorICAgICAgICBiZWNhdXNlIHRoZSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbnMgdG8gYSBkaWN0aW9uYXJ5IGF0IHRoYXQgdGltZS4KKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjp0cmFuc2l0aW9uQ291bnQpOiBtZXRob2QgdG8gcmVwbGFjZSB0
aGUgZGF0YSBtZW1iZXIKKwogMjAwOS0wMS0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGQgZml4KS4KSW5kZXg6IHJ1
bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDM5NTA3KQorKysgcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5n
IFdURjo6ZG91YmxlSGFzaDsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0xMjYsMTAgKzEyNiw5IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTVmFsdWUqIHBy
b3RvdHlwZSwKICAgICAsIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4oMCkKICAgICAsIG1fcHJldmlv
dXMoMCkKICAgICAsIG1fbmFtZUluUHJldmlvdXMoMCkKLSAgICAsIG1fdHJhbnNpdGlvbkNvdW50
KDApCiAgICAgLCBtX3Byb3BlcnR5VGFibGUoMCkKICAgICAsIG1fcHJvcGVydHlTdG9yYWdlQ2Fw
YWNpdHkoSlNPYmplY3Q6OmlubGluZVN0b3JhZ2VDYXBhY2l0eSkKLSAgICAsIG1fb2Zmc2V0KFdU
Rjo6bm90Rm91bmQpCisgICAgLCBtX29mZnNldChub09mZnNldCkKICAgICAsIG1faXNEaWN0aW9u
YXJ5KGZhbHNlKQogICAgICwgbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUoZmFsc2UpCiAgICAgLCBt
X2hhc0dldHRlclNldHRlclByb3BlcnRpZXMoZmFsc2UpCkBAIC0yMzcsNyArMjM2LDcgQEAgc3Rh
dGljIHVuc2lnbmVkIG5leHRQb3dlck9mMih1bnNpZ25lZCB2KQogCiBzdGF0aWMgdW5zaWduZWQg
c2l6ZUZvcktleUNvdW50KHNpemVfdCBrZXlDb3VudCkKIHsKLSAgICBpZiAoa2V5Q291bnQgPT0g
V1RGOjpub3RGb3VuZCkKKyAgICBpZiAoa2V5Q291bnQgPT0gbm90Rm91bmQpCiAgICAgICAgIHJl
dHVybiBuZXdUYWJsZVNpemU7CiAKICAgICBpZiAoa2V5Q291bnQgPCA4KQpAQCAtMzYxLDE0ICsz
NjAsMTQgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IFN0cnVjdHVyZTo6YWRkUHJvcAogICAgIGlm
IChzdHJ1Y3R1cmUtPm1fdXNpbmdTaW5nbGVUcmFuc2l0aW9uU2xvdCkgewogICAgICAgICBTdHJ1
Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9ucy5zaW5n
bGVUcmFuc2l0aW9uOwogICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2l0aW9uICYmIGV4aXN0aW5n
VHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSA9PSBwcm9wZXJ0eU5hbWUudXN0cmlu
ZygpLnJlcCgpICYmIGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9
PSBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25zLnNpbmdsZVRyYW5zaXRpb24tPm1fb2Zmc2V0ICE9IG5vT2Zmc2V0KTsKICAgICAgICAgICAg
IG9mZnNldCA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9ucy5zaW5nbGVUcmFuc2l0aW9uLT5tX29m
ZnNldDsKLSAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gV1RGOjpub3RGb3VuZCk7CiAgICAg
ICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJl
LT5tX3RyYW5zaXRpb25zLnRhYmxlLT5nZXQobWFrZV9wYWlyKHByb3BlcnR5TmFtZS51c3RyaW5n
KCkucmVwKCksIGF0dHJpYnV0ZXMpKSkgeworICAgICAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJh
bnNpdGlvbi0+bV9vZmZzZXQgIT0gbm9PZmZzZXQpOwogICAgICAgICAgICAgb2Zmc2V0ID0gZXhp
c3RpbmdUcmFuc2l0aW9uLT5tX29mZnNldDsKLSAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgIT0g
V1RGOjpub3RGb3VuZCk7CiAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzgyLDcgKzM4MSw3IEBAIFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBTdHJ1Y3R1cmU6OmFkZFByb3AKICAgICBBU1NFUlQoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSA9PSBPYmplY3RUeXBlKTsKICAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgb2Zmc2V0KSk7CiAKLSAgICBpZiAoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Db3Vu
dCA+IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCkgeworICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25Db3VudCgpID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFJlZlB0cjxTdHJ1
Y3R1cmU+IHRyYW5zaXRpb24gPSB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHN0cnVjdHVyZSk7CiAg
ICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwogICAgICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpID4gdHJhbnNp
dGlvbi0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKQEAgLTM5NSw3ICszOTQsNiBAQCBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gU3RydWN0dXJlOjphZGRQcm9wCiAgICAgdHJhbnNpdGlvbi0+bV9w
cmV2aW91cyA9IHN0cnVjdHVyZTsKICAgICB0cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0g
cHJvcGVydHlOYW1lLnVzdHJpbmcoKS5yZXAoKTsKICAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0
ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKLSAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25D
b3VudCA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uQ291bnQgKyAxOwogICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlTdG9yYWdl
Q2FwYWNpdHk7CiAgICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0g
c3RydWN0dXJlLT5tX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7CiAKQEAgLTQ1MCw3ICs0NDgs
NiBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gU3RydWN0dXJlOjpjaGFuZ2VQCiB7CiAgICAgUmVm
UHRyPFN0cnVjdHVyZT4gdHJhbnNpdGlvbiA9IGNyZWF0ZShwcm90b3R5cGUsIHN0cnVjdHVyZS0+
dHlwZUluZm8oKSk7CiAKLSAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Db3VudCA9IHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uQ291bnQgKyAxOwogICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlT
dG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7CiAg
ICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzID0gc3RydWN0dXJlLT5t
X2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7CiAKQEAgLTQ2Niw3ICs0NjMsNiBAQCBQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gU3RydWN0dXJlOjpjaGFuZ2VQCiBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
U3RydWN0dXJlOjpnZXR0ZXJTZXR0ZXJUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IHRyYW5zaXRpb24gPSBjcmVhdGUoc3RydWN0dXJlLT5z
dG9yZWRQcm90b3R5cGUoKSwgc3RydWN0dXJlLT50eXBlSW5mbygpKTsKLSAgICB0cmFuc2l0aW9u
LT5tX3RyYW5zaXRpb25Db3VudCA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uQ291bnQgKyAxOwog
ICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7CiAgICAgdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzID0gdHJhbnNpdGlvbi0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOwog
CkBAIC02MTQsNyArNjEwLDcgQEAgc2l6ZV90IFN0cnVjdHVyZTo6Z2V0KGNvbnN0IElkZW50aWZp
ZXImIAogCiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KCk7CiAgICAgaWYg
KCFtX3Byb3BlcnR5VGFibGUpCi0gICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOworICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7CiAKICAgICBVU3RyaW5nOjpSZXAqIHJlcCA9IHByb3BlcnR5TmFt
ZS5fdXN0cmluZy5yZXAoKTsKIApAQCAtNjI2LDcgKzYyMiw3IEBAIHNpemVfdCBTdHJ1Y3R1cmU6
OmdldChjb25zdCBJZGVudGlmaWVyJiAKIAogICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX3By
b3BlcnR5VGFibGUtPmVudHJ5SW5kaWNlc1tpICYgbV9wcm9wZXJ0eVRhYmxlLT5zaXplTWFza107
CiAgICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICByZXR1cm4g
V1RGOjpub3RGb3VuZDsKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwogCiAgICAgaWYgKHJlcCA9
PSBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KSB7CiAgICAg
ICAgIGF0dHJpYnV0ZXMgPSBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0g
MV0uYXR0cmlidXRlczsKQEAgLTY0OCw3ICs2NDQsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpnZXQo
Y29uc3QgSWRlbnRpZmllciYgCiAKICAgICAgICAgZW50cnlJbmRleCA9IG1fcHJvcGVydHlUYWJs
ZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrXTsKICAgICAgICAg
aWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bm90Rm91bmQ7CisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAKICAgICAgICAgaWYg
KHJlcCA9PSBtX3Byb3BlcnR5VGFibGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5KSB7
CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50
cnlJbmRleCAtIDFdLmF0dHJpYnV0ZXM7CkBAIC02NjAsNyArNjU2LDcgQEAgc2l6ZV90IFN0cnVj
dHVyZTo6Z2V0KGNvbnN0IElkZW50aWZpZXImIAogc2l6ZV90IFN0cnVjdHVyZTo6cHV0KGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBB
U1NFUlQoIXByb3BlcnR5TmFtZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKGdldChwcm9wZXJ0eU5h
bWUpID09IFdURjo6bm90Rm91bmQpOworICAgIEFTU0VSVChnZXQocHJvcGVydHlOYW1lKSA9PSBu
b3RGb3VuZCk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTc1NSw3ICs3NTEsNyBA
QCBzaXplX3QgU3RydWN0dXJlOjpyZW1vdmUoY29uc3QgSWRlbnRpZmllCiAgICAgVVN0cmluZzo6
UmVwKiByZXAgPSBwcm9wZXJ0eU5hbWUuX3VzdHJpbmcucmVwKCk7CiAKICAgICBpZiAoIW1fcHJv
cGVydHlUYWJsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bm90Rm91bmQ7CisgICAgICAgIHJldHVy
biBub3RGb3VuZDsKIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICArK251bVByb2Jl
czsKQEAgLTc3MCw3ICs3NjYsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpyZW1vdmUoY29uc3QgSWRl
bnRpZmllCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZW50cnlJbmRleCA9IG1fcHJvcGVydHlU
YWJsZS0+ZW50cnlJbmRpY2VzW2kgJiBtX3Byb3BlcnR5VGFibGUtPnNpemVNYXNrXTsKICAgICAg
ICAgaWYgKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgcmV0dXJu
IFdURjo6bm90Rm91bmQ7CisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAKICAgICAgICAg
a2V5ID0gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmtleTsKICAg
ICAgICAgaWYgKHJlcCA9PSBrZXkpCkluZGV4OiBydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJ1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDM5NTA3KQorKysgcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXM7IH0KICAgICAgICAgdm9pZCBzZXRIYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGJvb2wgaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcykgeyBt
X2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgPSBoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzOyB9
CiAKLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVRhYmxl
ID8gIW1fcHJvcGVydHlUYWJsZS0+a2V5Q291bnQgOiBtX29mZnNldCA9PSBXVEY6Om5vdEZvdW5k
OyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlUYWJs
ZSA/ICFtX3Byb3BlcnR5VGFibGUtPmtleUNvdW50IDogbV9vZmZzZXQgPT0gbm9PZmZzZXQ7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZShKU1ZhbHVlKiBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJik7CkBAIC0xMzksOSArMTM5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuICZtX3JlZkNvdW50OwogICAgICAgICB9CiAKKyAgICAgICAgc2lnbmVk
IGNoYXIgdHJhbnNpdGlvbkNvdW50KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
U2luY2UgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBpcyBhbHdheXMgdGhlIHNhbWUgYXMgbV9v
ZmZzZXQsIHdlIGtlZXAgdGhlIHNpemUgb2YgU3RydWN0dXJlIGRvd24gYnkgbm90IHN0b3Jpbmcg
Ym90aC4KKyAgICAgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBub09mZnNldCA/IDAgOiBtX29m
ZnNldCArIDE7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW1w
dHlFbnRyeUluZGV4ID0gMDsKICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX21h
eFRyYW5zaXRpb25MZW5ndGggPSA2NDsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFy
IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OworCisgICAgICAgIHN0YXRpYyBjb25zdCBzaWdu
ZWQgY2hhciBub09mZnNldCA9IC0xOwogCiAgICAgICAgIFR5cGVJbmZvIG1fdHlwZUluZm87CiAK
QEAgLTE1MSw3ICsxNTksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFN0cnVj
dHVyZT4gbV9wcmV2aW91czsKICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gbV9uYW1lSW5Q
cmV2aW91czsKIAotICAgICAgICBzaXplX3QgbV90cmFuc2l0aW9uQ291bnQ7CiAgICAgICAgIHVu
aW9uIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc2luZ2xlVHJhbnNpdGlvbjsKICAgICAgICAg
ICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSogdGFibGU7CkBAIC0xNjIsNyArMTY5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TWFwSGFzaFRhYmxlKiBtX3Byb3BlcnR5
VGFibGU7CiAKICAgICAgICAgc2l6ZV90IG1fcHJvcGVydHlTdG9yYWdlQ2FwYWNpdHk7Ci0gICAg
ICAgIHNpemVfdCBtX29mZnNldDsKKyAgICAgICAgc2lnbmVkIGNoYXIgbV9vZmZzZXQ7CiAKICAg
ICAgICAgYm9vbCBtX2lzRGljdGlvbmFyeSA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1Bpbm5lZFBy
b3BlcnR5VGFibGUgOiAxOwo=
</data>
<flag name="review"
          id="12514"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>