<?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>151073</bug_id>
          
          <creation_ts>2015-11-09 17:53:59 -0800</creation_ts>
          <short_desc>[B3] Add more tests for Check and fix bugs this found</short_desc>
          <delta_ts>2015-11-10 11:15:03 -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>WebKit 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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140647</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-09 17:53:59 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140650</commentid>
    <comment_count>1</comment_count>
      <attachid>265131</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-09 17:57:46 -0800</bug_when>
    <thetext>Created attachment 265131
the patch

It&apos;s cool to see the MegaCombo test in action:

[pizlo@shakezilla OpenSource] JSC_dumpDisassembly=true JSC_dumpGraphAtEachPhase=true JSC_validateGraphAtEachPhase=true DYLD_FRAMEWORK_PATH=WebKitBuild/Debug/ WebKitBuild/Debug/testb3 CheckMegaCombo
testCheckMegaCombo()...
B3 after initial, before reduceStrength:
BB#0: ; frequency = nan
    Int64 @0 = ArgumentReg(%rdi)
    Int64 @1 = ArgumentReg(%rsi)
    Int32 @2 = Trunc(@1)
    Int64 @3 = ZExt32(@2)
    Int32 @4 = Const32(1)
    Int64 @5 = Shl(@3, @4)
    Int64 @6 = Add(@0, @5)
    Int32 @7 = Load8S(@6, ControlDependent|Reads:Top)
    Int32 @8 = Const32(42)
    Int32 @9 = LessThan(@7, @8)
    Void @10 = Check(@9:Any, generator = 0x10a3eb010, clobbered = [], usedRegisters = [], ExitsSideways)
    Int32 @11 = Const32(0)
    Void @12 = Return(@11, Terminal)
B3 after reduceStrength, before moveConstants:
BB#0: ; frequency = nan
    Int64 @0 = ArgumentReg(%rdi)
    Int64 @1 = ArgumentReg(%rsi)
    Int32 @2 = Trunc(@1)
    Int64 @3 = ZExt32(@2)
    Int32 @4 = Const32(1)
    Int64 @5 = Shl(@3, @4)
    Int64 @6 = Add(@0, @5)
    Int32 @7 = Load8S(@6, ControlDependent|Reads:Top)
    Int32 @8 = Const32(42)
    Int32 @9 = LessThan(@7, @8)
    Void @10 = Check(@9:Any, generator = 0x10a3eb010, clobbered = [], usedRegisters = [], ExitsSideways)
    Int32 @11 = Const32(0)
    Void @12 = Return(@11, Terminal)
B3 after moveConstants, before lowerToAir:
BB#0: ; frequency = nan
    Int64 @0 = ArgumentReg(%rdi)
    Int64 @1 = ArgumentReg(%rsi)
    Int32 @2 = Trunc(@1)
    Int64 @3 = ZExt32(@2)
    Int32 @4 = Const32(1)
    Int64 @5 = Shl(@3, @4)
    Int64 @6 = Add(@0, @5)
    Int32 @7 = Load8S(@6, ControlDependent|Reads:Top)
    Int32 @8 = Const32(42)
    Int32 @9 = LessThan(@7, @8)
    Void @10 = Check(@9:Any, generator = 0x10a3eb010, clobbered = [], usedRegisters = [], ExitsSideways)
    Int32 @11 = Const32(0)
    Void @12 = Return(@11, Terminal)
Air after initial, before eliminateDeadCode:
BB#0: ; frequency = nan
    Move %rsi, %tmp7, @1
    Move %rdi, %tmp1, @0
    Move32 %tmp7, %tmp2, @3
    Move $1, %tmp6, @4
    Move %tmp2, %tmp5, @5
    Lshift64 $1, %tmp5, @5
    Move %tmp1, %tmp4, @6
    Add64 %tmp5, %tmp4, @6
    Move $42, %tmp3, @8
    Patch &amp;Branch8(3), LessThan, (%tmp1,%tmp2,2), $42, @10
    Move $0, %tmp0, @11
    Move $0, %rax, @12
    Ret @12
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Air after eliminateDeadCode, before spillEverything:
BB#0: ; frequency = nan
    Move %rsi, %tmp7, @1
    Move %rdi, %tmp1, @0
    Move32 %tmp7, %tmp2, @3
    Patch &amp;Branch8(3), LessThan, (%tmp1,%tmp2,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Air after spillEverything, before handleCalleeSaves:
BB#0: ; frequency = nan
    Move %rsi, (stack0), @1
    Move %rdi, (stack6), @0
    Move32 (stack0), %rax, @3
    Move %rax, (stack5), @3
    Move (stack6), %rcx, @10
    Move (stack5), %rdx, @10
    Patch &amp;Branch8(3), LessThan, (%rcx,%rdx,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Stack slots:
    stack0: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack4: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack5: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack6: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack7: byteSize = 8, offsetFromFP = 0, kind = Anonymous
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Air after handleCalleeSaves, before allocateStack:
BB#0: ; frequency = nan
    Move %rsi, (stack0), @1
    Move %rdi, (stack6), @0
    Move32 (stack0), %rax, @3
    Move %rax, (stack5), @3
    Move (stack6), %rcx, @10
    Move (stack5), %rdx, @10
    Patch &amp;Branch8(3), LessThan, (%rcx,%rdx,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Stack slots:
    stack0: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack4: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack5: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack6: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack7: byteSize = 8, offsetFromFP = 0, kind = Anonymous
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Air after allocateStack, before simplifyCFG:
BB#0: ; frequency = nan
    Move %rsi, -8(%rbp), @1
    Move %rdi, -16(%rbp), @0
    Move32 -8(%rbp), %rax, @3
    Move %rax, -8(%rbp), @3
    Move -16(%rbp), %rcx, @10
    Move -8(%rbp), %rdx, @10
    Patch &amp;Branch8(3), LessThan, (%rcx,%rdx,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Stack slots:
    stack0: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack4: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack5: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack6: byteSize = 8, offsetFromFP = -16, kind = Anonymous
    stack7: byteSize = 8, offsetFromFP = -8, kind = Anonymous
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Frame size: 16
Air after simplifyCFG, before reportUsedRegisters:
BB#0: ; frequency = nan
    Move %rsi, -8(%rbp), @1
    Move %rdi, -16(%rbp), @0
    Move32 -8(%rbp), %rax, @3
    Move %rax, -8(%rbp), @3
    Move -16(%rbp), %rcx, @10
    Move -8(%rbp), %rdx, @10
    Patch &amp;Branch8(3), LessThan, (%rcx,%rdx,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Stack slots:
    stack0: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack4: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack5: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack6: byteSize = 8, offsetFromFP = -16, kind = Anonymous
    stack7: byteSize = 8, offsetFromFP = -8, kind = Anonymous
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Frame size: 16
Air after reportUsedRegisters, before generation:
BB#0: ; frequency = nan
    Move %rsi, -8(%rbp), @1
    Move %rdi, -16(%rbp), @0
    Move32 -8(%rbp), %rax, @3
    Move %rax, -8(%rbp), @3
    Move -16(%rbp), %rcx, @10
    Move -8(%rbp), %rdx, @10
    Patch &amp;Branch8(3), LessThan, (%rcx,%rdx,2), $42, @10
    Move $0, %rax, @12
    Ret @12
Stack slots:
    stack0: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack4: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack5: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack6: byteSize = 8, offsetFromFP = -16, kind = Anonymous
    stack7: byteSize = 8, offsetFromFP = -8, kind = Anonymous
Specials:
    &amp;Branch8(3): B3::CheckValue lowered to Branch8 with 3 args.
Frame size: 16
Generated JIT code for B3::Compilation:
    Code at [0x431355e01000, 0x431355e01040):
      0x431355e01000: push %rbp
      0x431355e01001: mov %rsp, %rbp
      0x431355e01004: add $0xfffffffffffffff0, %rsp
      0x431355e01008: mov %rsi, -0x8(%rbp)
      0x431355e0100c: mov %rdi, -0x10(%rbp)
      0x431355e01010: mov -0x8(%rbp), %eax
      0x431355e01013: mov %rax, -0x8(%rbp)
      0x431355e01017: mov -0x10(%rbp), %rcx
      0x431355e0101b: mov -0x8(%rbp), %rdx
      0x431355e0101f: cmp $0x2a, (%rcx,%rdx,2)
      0x431355e01023: jl 0x431355e01035
      0x431355e01029: mov $0x0, %rax
      0x431355e01030: mov %rbp, %rsp
      0x431355e01033: pop %rbp
      0x431355e01034: ret 
      0x431355e01035: mov $0x2a, %eax
      0x431355e0103a: mov %rbp, %rsp
      0x431355e0103d: pop %rbp
      0x431355e0103e: ret 
testCheckMegaCombo(): OK!
[pizlo@shakezilla OpenSource]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140654</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-09 18:00:21 -0800</bug_when>
    <thetext>Attachment 265131 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2417:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2418:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2420:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2433:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2433:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2434:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2434:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2435:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2436:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2437:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2464:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2465:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2467:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2482:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2482:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2484:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2484:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2486:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2488:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2490:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 20 in 4 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>1140831</commentid>
    <comment_count>3</comment_count>
      <attachid>265197</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 10:33:34 -0800</bug_when>
    <thetext>Created attachment 265197
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140832</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 10:36:15 -0800</bug_when>
    <thetext>Attachment 265197 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2417:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2418:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2420:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2433:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2433:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2434:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2434:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2435:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2436:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2437:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2464:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2465:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2467:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2482:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2482:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2484:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2484:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2486:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2488:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2490:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 20 in 4 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>1140835</commentid>
    <comment_count>5</comment_count>
      <attachid>265197</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 10:39:48 -0800</bug_when>
    <thetext>Comment on attachment 265197
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140853</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 11:15:03 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192257</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265131</attachid>
            <date>2015-11-09 17:57:46 -0800</date>
            <delta_ts>2015-11-10 10:33:34 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7455</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE1LTExLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W0IzXSBBZGQgbW9yZSB0ZXN0cyBmb3IgQ2hlY2sgYW5kIGZpeCBidWdzIHRoaXMgZm91bmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGVzdHMg
Zm9yIGNvbXBhcmUvQ2hlY2sgZnVzaW9uLiBUaGUgIk1lZ2FDb21ibyIgdGVzdCBmb3VuZCBhIGJ1
ZyBpbiBvdXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgb2YgZm9yRWFjaEFyZzogQWlyOjpzcGls
bEV2ZXJ5dGhpbmcoKSB3YXMgZXhwZWN0aW5nIHRoYXQgdGhlIEFyZyYgdG8gcG9pbnQgdG8gdGhl
IGFjdHVhbCBBcmcKKyAgICAgICAgc28gdGhhdCBpdCBjYW4gbXV0YXRlIGl0LiBCdXQgdGhpcyB3
YXNuJ3QgdGhlIGNhc2UgaW4gQjM6OkNoZWNrU3BlY2lhbC4gVGhpcyBmaXhlcyB0aGF0IGJ1Zy4K
KworICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6bnVtQjNBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6aGlkZGVuQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAg
ICogYjMvQjNDaGVja1NwZWNpYWwuaDoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVj
a0xlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01lZ2FDb21ibyk6CisgICAg
ICAgIChKU0M6OkIzOjpnZW5lcmljVGVzdENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6cnVu
KToKKwogMjAxNS0xMS0wOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBERkc6OlB1dFN0YWNrU2lua2luZ1BoYXNlIHNob3VsZCBub3QgdHJlYXQgdGhlIHN0YWNr
IHZhcmlhYmxlcyB3cml0dGVuIGJ5IExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzIGFzIGJlaW5n
IGxpdmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAkocmV2aXNpb24gMTkyMTk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNyBAQCB1bnNpZ25lZCBudW1C
M0FyZ3MoSW5zdCYgaW5zdCkKICAgICBjYXNlIENoZWNrQWRkOgogICAgIGNhc2UgQ2hlY2tTdWI6
CiAgICAgY2FzZSBDaGVja011bDoKLSAgICAgICAgLy8gUmVzQ29uZCwgVG1wLCBUbXAKLSAgICAg
ICAgcmV0dXJuIDM7CisgICAgICAgIHJldHVybiAyOwogICAgIGNhc2UgQ2hlY2s6CiAgICAgICAg
IHJldHVybiAxOwogICAgIGRlZmF1bHQ6CkBAIC05Myw5ICs5MiwxOSBAQCBJbnN0IENoZWNrU3Bl
Y2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluCiAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKIH0K
IAordm9pZCBDaGVja1NwZWNpYWw6OmNvbW1pdEhpZGRlbkJyYW5jaChJbnN0JiBvcmlnaW5hbCwg
SW5zdCYgaGlkZGVuQnJhbmNoKQoreworICAgIEFTU0VSVChoaWRkZW5CcmFuY2guYXJncy5zaXpl
KCkgPT0gbV9udW1DaGVja0FyZ3MpOworICAgIEFTU0VSVChoaWRkZW5CcmFuY2gub3Bjb2RlID0g
bV9jaGVja09wY29kZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtQ2hlY2tB
cmdzOyArK2kpCisgICAgICAgIG9yaWdpbmFsLmFyZ3NbaSArIDFdID0gaGlkZGVuQnJhbmNoLmFy
Z3NbaV07Cit9CisKIHZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKIHsKLSAg
ICBoaWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgSW5zdCBoaWRk
ZW4gPSBoaWRkZW5CcmFuY2goaW5zdCk7CisgICAgaGlkZGVuLmZvckVhY2hBcmcoY2FsbGJhY2sp
OworICAgIGNvbW1pdEhpZGRlbkJyYW5jaChpbnN0LCBoaWRkZW4pOwogICAgIGZvckVhY2hBcmdJ
bXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCShy
ZXZpc2lvbiAxOTIxOTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw5IEBAIHByb3RlY3RlZDoKICAgICAv
LyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNo
IHRoYXQgdGhpcyB3aWxsIHVzZS4KICAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEFp
cjo6SW5zdCYpIGNvbnN0OwogCisgICAgLy8gSWYgd2UgZWRpdGVkIHRoZSBoaWRkZW4gYnJhbmNo
LCB0aGlzIGluc3RhbGxzIHRoZSBlZGl0cyBpbnRvIHRoZSBnaXZlbiBpbnN0LgorICAgIHZvaWQg
Y29tbWl0SGlkZGVuQnJhbmNoKEFpcjo6SW5zdCYgb3JpZ2luYWwsIEFpcjo6SW5zdCYgaGlkZGVu
QnJhbmNoKTsKKwogICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRM
YW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBp
c1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MjE5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAxLDYgKzI0MDEsOTUgQEAgdm9p
ZCB0ZXN0U2ltcGxlQ2hlY2soKQogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAxKSA9PSA0
Mik7CiB9CiAKK3ZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFy
ZyA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVjayA9IHJv
b3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPigKKyAgICAgICAgcHJvYywgQ2hlY2ssIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgTGVz
c1RoYW4sIE9yaWdpbigpLCBhcmcsCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpKSk7CisgICAgY2hlY2stPnNldEdlbmVyYXRvcigK
KyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSAxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEpOworCisgICAgICAg
ICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVuY3Rpb24gdGhpcyBz
aW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAvLyBzYXZlcy4KKyAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgNDIpID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAxMDAwKSA9PSAwKTsK
KyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDEpID09IDQyKTsKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgMCkgPT0gNDIpOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAt
MSkgPT0gNDIpOworfQorCit2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBW
YWx1ZSogYmFzZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogaW5kZXggPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBWYWx1ZSogcHRyID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYmFz
ZSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNo
bCwgT3JpZ2luKCksIGluZGV4LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisgICAgCisgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4oCisgICAgICAgIHByb2MsIENoZWNrLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IExlc3NUaGFuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4ocHJvYywgTG9hZDhTLCBPcmlnaW4oKSwgcHRyKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpKTsKKyAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXND
b25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLnZhbHVlKCkgPT0g
MSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBm
dW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKKyAgICAgICAgICAg
IC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgaW50OF90IHZhbHVl
OworICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZ2YWx1ZSAt
IDIsIDEpID09IDApOworICAgIHZhbHVlID0gMTI3OworICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAmdmFsdWUgLSAyLCAxKSA9PSAwKTsKKyAgICB2YWx1ZSA9IDQxOworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CisgICAgdmFsdWUgPSAwOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CisgICAg
dmFsdWUgPSAtMTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkg
PT0gNDIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMZWZ0RnVuY3RvciwgdHlwZW5hbWUgUmln
aHRGdW5jdG9yPgogdm9pZCBnZW5lcmljVGVzdENvbXBhcmUoCiAgICAgQjM6Ok9wY29kZSBvcGNv
ZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBsZWZ0RnVuY3RvciwgY29uc3QgUmlnaHRGdW5jdG9yJiBy
aWdodEZ1bmN0b3IsCkBAIC0zMTA3LDYgKzMxOTYsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCiAKICAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnQoKSk7CiAgICAgUlVOKHRlc3RT
aW1wbGVDaGVjaygpKTsKKyAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CisgICAgUlVOKHRl
c3RDaGVja01lZ2FDb21ibygpKTsKIAogICAgIFJVTih0ZXN0Q29tcGFyZShFcXVhbCwgNDIsIDQy
KSk7CiAgICAgUlVOKHRlc3RDb21wYXJlKE5vdEVxdWFsLCA0MiwgNDIpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265197</attachid>
            <date>2015-11-10 10:33:34 -0800</date>
            <delta_ts>2015-11-10 10:39:48 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7410</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE1LTExLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W0IzXSBBZGQgbW9yZSB0ZXN0cyBmb3IgQ2hlY2sgYW5kIGZpeCBidWdzIHRoaXMgZm91bmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGVzdHMg
Zm9yIGNvbXBhcmUvQ2hlY2sgZnVzaW9uLiBUaGUgIk1lZ2FDb21ibyIgdGVzdCBmb3VuZCBhIGJ1
ZyBpbiBvdXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgb2YgZm9yRWFjaEFyZzogQWlyOjpzcGls
bEV2ZXJ5dGhpbmcoKSB3YXMgZXhwZWN0aW5nIHRoYXQgdGhlIEFyZyYgdG8gcG9pbnQgdG8gdGhl
IGFjdHVhbCBBcmcKKyAgICAgICAgc28gdGhhdCBpdCBjYW4gbXV0YXRlIGl0LiBCdXQgdGhpcyB3
YXNuJ3QgdGhlIGNhc2UgaW4gQjM6OkNoZWNrU3BlY2lhbC4gVGhpcyBmaXhlcyB0aGF0IGJ1Zy4K
KworICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6bnVtQjNBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6aGlkZGVuQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Y29tbWl0SGlkZGVuQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAg
ICogYjMvQjNDaGVja1NwZWNpYWwuaDoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVj
a0xlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01lZ2FDb21ibyk6CisgICAg
ICAgIChKU0M6OkIzOjpnZW5lcmljVGVzdENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6cnVu
KToKKwogMjAxNS0xMS0xMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9u
LmZyPgogCiAgICAgICAgIFJlbW92ZSBjcmVhdGVfaGFzaF90YWJsZSBvcHRpb25zIGFuZCBzaW1w
bGlmeSBidWlsZCBzeXN0ZW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkyMjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsNyBAQCB1
bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKICAgICBjYXNlIENoZWNrQWRkOgogICAgIGNh
c2UgQ2hlY2tTdWI6CiAgICAgY2FzZSBDaGVja011bDoKLSAgICAgICAgLy8gUmVzQ29uZCwgVG1w
LCBUbXAKLSAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIHJldHVybiAyOwogICAgIGNhc2UgQ2hl
Y2s6CiAgICAgICAgIHJldHVybiAxOwogICAgIGRlZmF1bHQ6CkBAIC05Myw5ICs5MiwxOSBAQCBJ
bnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluCiAgICAgcmV0dXJuIGhpZGRl
bkJyYW5jaDsKIH0KIAordm9pZCBDaGVja1NwZWNpYWw6OmNvbW1pdEhpZGRlbkJyYW5jaChJbnN0
JiBvcmlnaW5hbCwgSW5zdCYgaGlkZGVuQnJhbmNoKQoreworICAgIEFTU0VSVChoaWRkZW5CcmFu
Y2guYXJncy5zaXplKCkgPT0gbV9udW1DaGVja0FyZ3MpOworICAgIEFTU0VSVChoaWRkZW5CcmFu
Y2gub3Bjb2RlID0gbV9jaGVja09wY29kZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbnVtQ2hlY2tBcmdzOyArK2kpCisgICAgICAgIG9yaWdpbmFsLmFyZ3NbaSArIDFdID0gaGlk
ZGVuQnJhbmNoLmFyZ3NbaV07Cit9CisKIHZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKElu
c3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxs
YmFjaykKIHsKLSAgICBoaWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7Cisg
ICAgSW5zdCBoaWRkZW4gPSBoaWRkZW5CcmFuY2goaW5zdCk7CisgICAgaGlkZGVuLmZvckVhY2hB
cmcoY2FsbGJhY2spOworICAgIGNvbW1pdEhpZGRlbkJyYW5jaChpbnN0LCBoaWRkZW4pOwogICAg
IGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0
LCBjYWxsYmFjayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5oCShyZXZpc2lvbiAxOTIyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw5IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGlu
ZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KICAgICBBaXI6Okluc3QgaGlkZGVuQnJh
bmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNvbnN0OwogCisgICAgLy8gSWYgd2UgZWRpdGVkIHRoZSBo
aWRkZW4gYnJhbmNoLCB0aGlzIGluc3RhbGxzIHRoZSBlZGl0cyBpbnRvIHRoZSBnaXZlbiBpbnN0
LgorICAgIHZvaWQgY29tbWl0SGlkZGVuQnJhbmNoKEFpcjo6SW5zdCYgb3JpZ2luYWwsIEFpcjo6
SW5zdCYgaGlkZGVuQnJhbmNoKTsKKwogICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBj
b25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7
CiAgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgYWRtaXRz
U3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MjI1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAxLDYgKzI0
MDEsOTUgQEAgdm9pZCB0ZXN0U2ltcGxlQ2hlY2soKQogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAxKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgVmFsdWUqIGFyZyA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBDaGVja1ZhbHVl
KiBjaGVjayA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPigKKyAgICAgICAgcHJvYywgQ2hl
Y2ssIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgTGVzc1RoYW4sIE9yaWdpbigpLCBhcmcsCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpKSk7CisgICAgY2hlY2stPnNl
dEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzQ29u
c3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS52YWx1ZSgpID09IDEp
OworCisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgd29yayBiZWNhdXNlIGEgZnVu
Y3Rpb24gdGhpcyBzaW1wbGUgc2hvdWxkIG5ldmVyIGhhdmUgY2FsbGVlCisgICAgICAgICAgICAv
LyBzYXZlcy4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDQyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LmVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
OworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAKKyAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgNDIpID09IDApOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAx
MDAwKSA9PSAwKTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDEpID09IDQyKTsKKyAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gNDIpOworICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlLCAtMSkgPT0gNDIpOworfQorCit2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYmFzZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogaW5k
ZXggPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBaRXh0MzIsIE9yaWdp
bigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBW
YWx1ZSogcHRyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBP
cmlnaW4oKSwgYmFzZSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGluZGV4LAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisgICAgCisgICAgQ2hlY2tW
YWx1ZSogY2hlY2sgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4oCisgICAgICAgIHByb2Ms
IENoZWNrLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIExlc3NUaGFuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZDhTLCBPcmlnaW4oKSwgcHRyKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpKTsK
KyAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMF0uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBd
LnZhbHVlKCkgPT0gMSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3b3Jr
IGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUK
KyAgICAgICAgICAgIC8vIHNhdmVzLgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAg
aW50OF90IHZhbHVlOworICAgIHZhbHVlID0gNDI7CisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZ2YWx1ZSAtIDIsIDEpID09IDApOworICAgIHZhbHVlID0gMTI3OworICAgIENIRUNLKGlu
dm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSAwKTsKKyAgICB2YWx1ZSA9IDQxOwor
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CisgICAg
dmFsdWUgPSAwOworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9
PSA0Mik7CisgICAgdmFsdWUgPSAtMTsKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZh
bHVlIC0gMiwgMSkgPT0gNDIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMZWZ0RnVuY3Rvciwg
dHlwZW5hbWUgUmlnaHRGdW5jdG9yPgogdm9pZCBnZW5lcmljVGVzdENvbXBhcmUoCiAgICAgQjM6
Ok9wY29kZSBvcGNvZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBsZWZ0RnVuY3RvciwgY29uc3QgUmln
aHRGdW5jdG9yJiByaWdodEZ1bmN0b3IsCkBAIC0zMTA3LDYgKzMxOTYsOCBAQCB2b2lkIHJ1bihj
b25zdCBjaGFyKiBmaWx0ZXIpCiAKICAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnQoKSk7CiAg
ICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsKKyAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7
CisgICAgUlVOKHRlc3RDaGVja01lZ2FDb21ibygpKTsKIAogICAgIFJVTih0ZXN0Q29tcGFyZShF
cXVhbCwgNDIsIDQyKSk7CiAgICAgUlVOKHRlc3RDb21wYXJlKE5vdEVxdWFsLCA0MiwgNDIpKTsK
</data>
<flag name="review"
          id="290266"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>