<?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>164356</bug_id>
          
          <creation_ts>2016-11-02 20:12:15 -0700</creation_ts>
          <short_desc>[DOMJIT] Add DOMJIT::Signature annotation to Document::getElementById</short_desc>
          <delta_ts>2016-11-04 18:18:21 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162980</dependson>
          <blocked>162544</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1247632</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-02 20:12:15 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247665</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-02 23:43:32 -0700</bug_when>
    <thetext>Haha, it figures out that the result of getElementById will be hoisted since it does not write anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247670</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 00:08:36 -0700</bug_when>
    <thetext>We have dromaeo test like this.

        test( &quot;getElementById&quot;, function(){
                for ( var i = 0; i &lt; num * 30; i++ ) {
                        ret = document.getElementById(&quot;testA&quot; + num).nodeType;
                        ret = document.getElementById(&quot;testB&quot; + num).nodeType;
                        ret = document.getElementById(&quot;testC&quot; + num).nodeType;
                        ret = document.getElementById(&quot;testD&quot; + num).nodeType;
                        ret = document.getElementById(&quot;testE&quot; + num).nodeType;
                        ret = document.getElementById(&quot;testF&quot; + num).nodeType;
                }
        });

After fix up phase in DFG FTL is finished the graph becomes like this.
https://gist.github.com/Constellation/21a8d938fa73ced9ca7e1b20d98bae41
Especially, per `ret = document.getElementById(&quot;testA&quot; + num).nodeType;` line, 

  42:&lt; 1:-&gt;	JSConstant(JS|UseAsOther, Otherobj, Weak:Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261, bc#34)
  43:&lt;!0:-&gt;	MovHint(Check:Untyped:@42, MustGen, loc7, W:SideState, ClobbersExit, bc#34)
  44:&lt; 1:-&gt;	SetLocal(Check:Untyped:@42, loc7(P~&lt;Object&gt;/FlushedJSValue), W:Stack(-8), bc#34, exit: bc#41)  predicting Otherobj
  45:&lt; 1:-&gt;	JSConstant(JS|UseAsOther, Otherobj, Weak:Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391, bc#41)
  46:&lt;!0:-&gt;	MovHint(Check:Untyped:@45, MustGen, loc12, W:SideState, ClobbersExit, bc#41)
  47:&lt;!0:-&gt;	Check(MustGen, bc#41, ExitInvalid)
  48:&lt; 1:-&gt;	SetLocal(Check:Untyped:@45, loc12(Q~&lt;Object&gt;/FlushedJSValue), W:Stack(-13), bc#41, exit: bc#48)  predicting Otherobj
  49:&lt;!0:-&gt;	Check(MustGen, bc#48)
  50:&lt; 1:-&gt;	GetGlobalVar(JS|UseAsOther, Otherobj, global(0x1166dc900), R:Absolute(4671260928), Exits, bc#48)  predicting Otherobj
  51:&lt;!0:-&gt;	MovHint(Check:Untyped:@50, MustGen, loc12, W:SideState, ClobbersExit, bc#48)
  52:&lt; 1:-&gt;	SetLocal(Check:Untyped:@50, loc12(R~&lt;Object&gt;/FlushedJSValue), W:Stack(-13), bc#48, exit: bc#56)  predicting Otherobj
  53:&lt;!0:-&gt;	PureGetById(Check:Cell:@50, JS|MustGen|UseAsOther, Function, id3{getElementById}, R:JSCell_indexingType,JSCell_structureID,JSCell_typeInfoFlags,JSCell_typeInfoType,JSObject_butterfly,NamedProperties(3),MiscFields, W:JSCell_structureID,JSCell_typeInfoFlags,JSObject_butterfly,Watchpoint_fire,MiscFields, Exits, ClobbersExit, bc#56)  predicting Function
  54:&lt;!0:-&gt;	MovHint(Check:Untyped:@53, MustGen, loc8, W:SideState, ClobbersExit, bc#56, ExitInvalid)
 316:&lt;!0:-&gt;	InvalidationPoint(MustGen, W:SideState, Exits, bc#56, exit: bc#65)
  55:&lt; 1:-&gt;	SetLocal(Check:Untyped:@53, loc8(S~&lt;Function&gt;/FlushedJSValue), W:Stack(-9), bc#56, exit: bc#65)  predicting Function
  56:&lt;!0:-&gt;	Check(MustGen, bc#65)
  57:&lt; 1:-&gt;	JSConstant(JS|UseAsOther, Otherobj, Weak:Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261, bc#65)
  58:&lt;!0:-&gt;	MovHint(Check:Untyped:@57, MustGen, loc13, W:SideState, ClobbersExit, bc#65)
  59:&lt; 1:-&gt;	SetLocal(Check:Untyped:@57, loc13(T~&lt;Object&gt;/FlushedJSValue), W:Stack(-14), bc#65, exit: bc#72)  predicting Otherobj
  60:&lt;!0:-&gt;	Check(MustGen, bc#72)
  61:&lt; 1:-&gt;	JSConstant(JS|PureNum|UseAsOther, Nonboolint32, Int32: 40, bc#72)
  62:&lt;!0:-&gt;	MovHint(Check:Untyped:@61, MustGen, loc14, W:SideState, ClobbersExit, bc#72)
  63:&lt; 1:-&gt;	SetLocal(Check:Untyped:@61, loc14(U~&lt;Int32&gt;/FlushedJSValue), W:Stack(-15), bc#72, exit: bc#80)  predicting Nonboolint32
  64:&lt; 1:-&gt;	JSConstant(JS|PureNum|UseAsOther, Stringident, Strong:String (atomic) (identifier): testA, ID: 4, bc#80)
  65:&lt;!0:-&gt;	ValueAdd(Check:Untyped:@64, Check:Untyped:@61, JS|MustGen|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, R:World, W:Heap, Exits, ClobbersExit, bc#80)
  66:&lt;!0:-&gt;	MovHint(Check:Untyped:@65, MustGen, loc11, W:SideState, ClobbersExit, bc#80, ExitInvalid)
 317:&lt;!0:-&gt;	InvalidationPoint(MustGen, W:SideState, Exits, bc#80, exit: bc#85)
  67:&lt; 1:-&gt;	SetLocal(Check:Untyped:@65, loc11(V~/FlushedJSValue), W:Stack(-12), bc#80, exit: bc#85)  predicting StringBoolint32Nonboolint32
  68:&lt;!0:-&gt;	CheckCell(Check:Cell:@53, Check:Untyped:@50, MustGen, &lt;0x11c9e2da0, Function&gt;, &lt;host function&gt;, Exits, bc#85)
 304:&lt;!0:-&gt;	CheckDOM(Check:Cell:@50, MustGen, Exits, bc#85)
  69:&lt; 1:-&gt;	CallDOM(Check:Cell:@50, Check:String:@65, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#85)  predicting Otherobj
  70:&lt;!0:-&gt;	MovHint(Check:Untyped:@69, MustGen, loc8, W:SideState, ClobbersExit, bc#85, ExitInvalid)
  71:&lt;!0:-&gt;	Check(MustGen, bc#85, ExitInvalid)
  72:&lt;!0:-&gt;	Check(MustGen, bc#85, ExitInvalid)
  73:&lt;!0:-&gt;	Check(MustGen, bc#85, ExitInvalid)
  74:&lt; 1:-&gt;	SetLocal(Check:Untyped:@69, loc8(W~&lt;Object&gt;/FlushedJSValue), W:Stack(-9), bc#85, exit: bc#94)  predicting Otherobj
  75:&lt;!0:-&gt;	CheckStructure(Check:Cell:@69, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#94)
  76:&lt;!0:-&gt;	CheckDOM(Check:Cell:@69, MustGen, Exits, bc#94)
  77:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@69, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#94)  predicting Boolint32
  78:&lt;!0:-&gt;	MovHint(Check:Untyped:@77, MustGen, loc9, W:SideState, ClobbersExit, bc#94)
  79:&lt; 1:-&gt;	SetLocal(Check:Untyped:@77, loc9(X~&lt;BoolInt32&gt;/FlushedJSValue), W:Stack(-10), bc#94, exit: bc#103)  predicting Boolint32
 305:&lt;!0:-&gt;	Check(Check:Int32:@77, MustGen, Exits, bc#103)
  80:&lt;!0:-&gt;	PutClosureVar(Check:KnownCell:@42, Check:Untyped:@77, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#103)


The crazy thing is,

1. Since nodeType is now handled as CallDOMGetter, we know that it is pure
2. PureGetById does not write Heap/DOMState
3. `&quot;testA&quot; + num` will be converted to constant thing
4. CallDOM for getElementById said it just reads(DOM).
5. CheckCell leading CallDOM ensures the inlined getElementById node. (CallDOM node)

The important thing is, anyone does not write DOMState -&gt; Heap!
CallDOM will be hoisted. The final code becomes like this.

DFG for #B0dEnY:[0x11c9adae0-&gt;0x11c9ad680-&gt;0x11c9d21a0, DFGFunctionCall, 518 (DidTryToEnterInLoop)]:
  Fixpoint state: FixpointConverged; Form: SSA; Unification state: GloballyUnified; Ref count state: ExactRefCount
  Argument formats: FlushedJSValue

Block #0 (bc#0): (OSR target)
  Execution count: 1.000000
  Predecessors:
  Successors: #2
  Dominated by: #0
  Dominates: #0 #1 #2 #3 #4
  Dominance Frontier: 
  Iterated Dominance Frontier: 
  Backwards dominates by: #end #0 #2 #3 #4
  Backwards dominates: #0
  Control equivalent to: #0 #2 #3 #4
  States: StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable; heap = }
  Live: 
  Values: 
  17:&lt; 13:-&gt;	JSConstant(JS|UseAsOther, Otherobj, Weak:Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261, bc#0)
  22:&lt; 2:-&gt;	JSConstant(JS|UseAsOther, Boolint32, Int32: 0, bc#0)
  11:&lt; 1:-&gt;	JSConstant(JS|PureNum, Boolint32, Int32: 1, bc#0)
  34:&lt; 3:-&gt;	JSConstant(Number|UseAsOther, Int32, Int32: 1200, bc#0)
   1:&lt; 1:-&gt;	JSConstant(JS|PureInt, Other, Undefined, bc#0)
  32:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#0)
  61:&lt;!0:-&gt;	KillStack(MustGen, loc0, W:SideState, ClobbersExit, bc#0)
   2:&lt;!0:-&gt;	ZombieHint(MustGen, loc0, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  41:&lt;!0:-&gt;	KillStack(MustGen, loc1, W:SideState, ClobbersExit, bc#0, ExitInvalid)
   4:&lt;!0:-&gt;	ZombieHint(MustGen, loc1, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  29:&lt;!0:-&gt;	KillStack(MustGen, loc2, W:SideState, ClobbersExit, bc#0, ExitInvalid)
   6:&lt;!0:-&gt;	ZombieHint(MustGen, loc2, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  55:&lt;!0:-&gt;	KillStack(MustGen, loc3, W:SideState, ClobbersExit, bc#0, ExitInvalid)
   8:&lt;!0:-&gt;	ZombieHint(MustGen, loc3, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  56:&lt;!0:-&gt;	KillStack(MustGen, loc4, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  10:&lt;!0:-&gt;	ZombieHint(MustGen, loc4, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  59:&lt;!0:-&gt;	KillStack(MustGen, loc5, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  12:&lt;!0:-&gt;	ZombieHint(MustGen, loc5, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  63:&lt;!0:-&gt;	KillStack(MustGen, loc6, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  14:&lt;!0:-&gt;	ZombieHint(MustGen, loc6, W:SideState, ClobbersExit, bc#0, ExitInvalid)
  74:&lt;!0:-&gt;	KillStack(MustGen, loc3, W:SideState, ClobbersExit, bc#1)
  18:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc3, W:SideState, ClobbersExit, bc#1, ExitInvalid)
  84:&lt;!0:-&gt;	KillStack(MustGen, loc4, W:SideState, ClobbersExit, bc#3)
  20:&lt;!0:-&gt;	ZombieHint(MustGen, loc4, W:SideState, ClobbersExit, bc#3, ExitInvalid)
  88:&lt;!0:-&gt;	KillStack(MustGen, loc5, W:SideState, ClobbersExit, bc#6)
  23:&lt;!0:-&gt;	MovHint(Untyped:@22, MustGen, loc5, W:SideState, ClobbersExit, bc#6, ExitInvalid)
  92:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#9)
  27:&lt;!0:-&gt;	ZombieHint(MustGen, loc7, W:SideState, ClobbersExit, bc#9, ExitInvalid)
  97:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#16)
  31:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#16, ExitInvalid)
 101:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#24, ExitInvalid)
  35:&lt;!0:-&gt;	MovHint(Untyped:@34, MustGen, loc8, W:SideState, ClobbersExit, bc#24, ExitInvalid)
  25:&lt;!0:-&gt;	Jump(MustGen, T:#2, W:SideState, bc#29, ExitInvalid)
  States: InvalidBranchDirection, StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc3:ConflictingFlush/@17 loc5:ConflictingFlush/@22 loc8:ConflictingFlush/@34; heap = }
  Live: @1, @11, @17, @22, @34
  Values: @1=&gt;(Other, Undefined), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, NonArray, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @22=&gt;(Boolint32, Int32: 0), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391)

Block #1 (bc#33):
  Execution count: 10.000000
  Predecessors: #3
  Successors: #3
  Dominated by: #0 #1 #2 #3
  Dominates: #1
  Dominance Frontier: #3
  Iterated Dominance Frontier: #3
  Backwards dominates by: #end #1 #3 #4
  Backwards dominates: #1
  Control equivalent to: #1
  Containing loop headers: #3
  States: StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc5:ConflictingFlush/@9 loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @9, @11, @17, @19, @34, @38, @50, @65, @69, @77, @109, @117, @119, @147, @149, @157, @189, @197
  Values: @1=&gt;(Other, Undefined), @9=&gt;(Int32), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, TOP, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @19=&gt;(Int32), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @38=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391), @47=&gt;(String, TOP, [%Ck:string]), @50=&gt;(Otherobj, TOP, TOP), @65=&gt;(String, TOP, [%Ck:string]), @69=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @77=&gt;(Int32), @105=&gt;(String, TOP, [%Ck:string]), @109=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @117=&gt;(Int32), @119=&gt;(Int32), @145=&gt;(String, TOP, [%Ck:string]), @147=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @149=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @157=&gt;(Int32), @164=&gt;(String, TOP, [%Ck:string]), @185=&gt;(String, TOP, [%Ck:string]), @189=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @197=&gt;(Int32)
 111:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#33)
  87:&lt; 1:-&gt;	Upsilon(KnownInt32:@9, ^28, W:SideState, bc#33)
   5:&lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#33)
  States: InvalidBranchDirection, StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc5:ConflictingFlush/@9 loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @11, @17, @19, @28, @34, @38, @50, @65, @69, @77, @109, @117, @119, @147, @149, @157, @189, @197
  Values: @1=&gt;(Other, Undefined), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, TOP, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @19=&gt;(Int32), @28=&gt;(Int32), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @38=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391), @47=&gt;(String, TOP, [%Ck:string]), @50=&gt;(Otherobj, TOP, TOP), @65=&gt;(String, TOP, [%Ck:string]), @69=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @77=&gt;(Int32), @105=&gt;(String, TOP, [%Ck:string]), @109=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @117=&gt;(Int32), @119=&gt;(Int32), @145=&gt;(String, TOP, [%Ck:string]), @147=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @149=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @157=&gt;(Int32), @164=&gt;(String, TOP, [%Ck:string]), @185=&gt;(String, TOP, [%Ck:string]), @189=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @197=&gt;(Int32)

Block #2 (bc#33):
  Execution count: 1.000000
  Predecessors: #0
  Successors: #3
  Dominated by: #0 #2
  Dominates: #1 #2 #3 #4
  Dominance Frontier: 
  Iterated Dominance Frontier: 
  Backwards dominates by: #end #2 #3 #4
  Backwards dominates: #0 #2
  Control equivalent to: #0 #2 #3 #4
  States: StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc5:ConflictingFlush/@22 loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @11, @17, @22, @34
  Values: @1=&gt;(Other, Undefined), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, NonArray, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @22=&gt;(Boolint32, Int32: 0), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391)
 103:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#33)
  71:&lt; 1:-&gt;	Upsilon(KnownInt32:@22, ^28, W:SideState, bc#33)
  50:&lt; 10:-&gt;	GetGlobalVar(JS|UseAsOther, Otherobj, global(0x1166dc900), R:Absolute(4671260928), Exits, bc#48, exit: bc#33)  predicting Otherobj
  65:&lt; 2:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testA40), bc#80, exit: bc#33)
  89:&lt;!0:-&gt;	CheckDOM(Check:Cell:@50, MustGen, Exits, bc#85, exit: bc#33)
  69:&lt; 3:-&gt;	CallDOM(Cell:@50, String:@65, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#85, exit: bc#33)  predicting Otherobj
  77:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@69, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#94, exit: bc#33)  predicting Boolint32
 105:&lt; 1:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testB40), bc#156, exit: bc#33)
 109:&lt; 3:-&gt;	CallDOM(Cell:@50, String:Kill:@105, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#161, exit: bc#33)  predicting Otherobj
 117:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@109, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#170, exit: bc#33)  predicting Boolint32
 145:&lt; 1:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testC40), bc#232, exit: bc#33)
 149:&lt; 3:-&gt;	CallDOM(Cell:@50, String:Kill:@145, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#237, exit: bc#33)  predicting Otherobj
 157:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@149, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#246, exit: bc#33)  predicting Boolint32
 185:&lt; 1:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testD40), bc#308, exit: bc#33)
 189:&lt; 3:-&gt;	CallDOM(Cell:@50, String:Kill:@185, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#313, exit: bc#33)  predicting Otherobj
 197:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@189, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#322, exit: bc#33)  predicting Boolint32
 164:&lt; 1:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testE40), bc#384, exit: bc#33)
 147:&lt; 3:-&gt;	CallDOM(Cell:@50, String:Kill:@164, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#389, exit: bc#33)  predicting Otherobj
 119:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@147, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#398, exit: bc#33)  predicting Boolint32
  47:&lt; 1:-&gt;	LazyJSConstant(JS|UseAsOther|MayHaveNonNumberResult, StringBoolint32Nonboolint32, Lazy:NewString(testF40), bc#460, exit: bc#33)
  38:&lt; 3:-&gt;	CallDOM(Cell:@50, String:Kill:@47, JS|PureInt, Otherobj, R:DOMState(0x0-0x7), Exits, bc#465, exit: bc#33)  predicting Otherobj
  19:&lt; 1:-&gt;	CallDOMGetter(Check:Cell:@38, JS|UseAsOther, Boolint32, id4{nodeType}, domJIT = 0x110a1de20, Exits, bc#474, exit: bc#33)  predicting Boolint32
   3:&lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#33)
  States: InvalidBranchDirection, StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc5:ConflictingFlush/@22 loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @11, @17, @19, @28, @34, @38, @50, @65, @69, @77, @109, @117, @119, @147, @149, @157, @189, @197
  Values: @1=&gt;(Other, Undefined), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, NonArray, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @19=&gt;(Int32), @28=&gt;(Boolint32, Int32: 0), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @38=&gt;(Cell, TOP, TOP), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391), @47=&gt;(String, TOP, [%Ck:string]), @50=&gt;(Otherobj, TOP, TOP), @65=&gt;(String, TOP, [%Ck:string]), @69=&gt;(Cell, TOP, TOP), @77=&gt;(Int32), @105=&gt;(String, TOP, [%Ck:string]), @109=&gt;(Cell, TOP, TOP), @117=&gt;(Int32), @119=&gt;(Int32), @145=&gt;(String, TOP, [%Ck:string]), @147=&gt;(Cell, TOP, TOP), @149=&gt;(Cell, TOP, TOP), @157=&gt;(Int32), @164=&gt;(String, TOP, [%Ck:string]), @185=&gt;(String, TOP, [%Ck:string]), @189=&gt;(Cell, TOP, TOP), @197=&gt;(Int32)

Block #3 (bc#33): (OSR target)
  Execution count: 10.000000
  Predecessors: #1 #2
  Successors: #1 #4
  Dominated by: #0 #2 #3
  Dominates: #1 #3 #4
  Dominance Frontier: #3
  Iterated Dominance Frontier: #3
  Backwards dominates by: #end #3 #4
  Backwards dominates: #0 #1 #2 #3
  Control equivalent to: #0 #2 #3 #4
  Loop header, contains: #1 #3
  Containing loop headers: #3
  States: StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @11, @17, @19, @28, @34, @38, @50, @65, @69, @77, @109, @117, @119, @147, @149, @157, @189, @197
  Values: @1=&gt;(Other, Undefined), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, TOP, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @19=&gt;(Int32), @28=&gt;(Int32), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @38=&gt;(Cell, TOP, TOP), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391), @47=&gt;(String, TOP, [%Ck:string]), @50=&gt;(Otherobj, TOP, TOP), @65=&gt;(String, TOP, [%Ck:string]), @69=&gt;(Cell, TOP, TOP), @77=&gt;(Int32), @105=&gt;(String, TOP, [%Ck:string]), @109=&gt;(Cell, TOP, TOP), @117=&gt;(Int32), @119=&gt;(Int32), @145=&gt;(String, TOP, [%Ck:string]), @147=&gt;(Cell, TOP, TOP), @149=&gt;(Cell, TOP, TOP), @157=&gt;(Int32), @164=&gt;(String, TOP, [%Ck:string]), @185=&gt;(String, TOP, [%Ck:string]), @189=&gt;(Cell, TOP, TOP), @197=&gt;(Int32)
  28:&lt; 2:-&gt;	Phi(Int32|PureInt, Int32, W:SideState, bc#33, ExitInvalid)
 124:&lt;!0:-&gt;	MovHint(Untyped:@28, MustGen, loc5, W:SideState, ClobbersExit, bc#33, ExitInvalid)
 132:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#33)
  39:&lt;!0:-&gt;	LoopHint(MustGen, W:SideState, bc#33)
 135:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#34)
  43:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#34, ExitInvalid)
 139:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#41)
  46:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#41, ExitInvalid)
  72:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#48)
  51:&lt;!0:-&gt;	MovHint(Untyped:@50, MustGen, loc12, W:SideState, ClobbersExit, bc#48, ExitInvalid)
  53:&lt;!2:-&gt;	PureGetById(Cell:@50, JS|MustGen|UseAsOther, Function, id3{getElementById}, R:JSCell_indexingType,JSCell_structureID,JSCell_typeInfoFlags,JSCell_typeInfoType,JSObject_butterfly,NamedProperties(3),MiscFields, W:JSCell_structureID,JSCell_typeInfoFlags,JSObject_butterfly,Watchpoint_fire,MiscFields, Exits, ClobbersExit, bc#56)  predicting Function
 154:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#56, ExitInvalid)
  54:&lt;!0:-&gt;	MovHint(Untyped:@53, MustGen, loc8, W:SideState, ClobbersExit, bc#56, ExitInvalid)
  60:&lt;!0:-&gt;	InvalidationPoint(MustGen, W:SideState, Exits, bc#56, exit: bc#65)
  40:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#65)
  58:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#65, ExitInvalid)
 175:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#72)
  62:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#72, ExitInvalid)
 179:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#80, ExitInvalid)
  66:&lt;!0:-&gt;	MovHint(Untyped:@65, MustGen, loc11, W:SideState, ClobbersExit, bc#80, ExitInvalid)
  68:&lt;!0:-&gt;	CheckCell(Check:Cell:Kill:@53, Untyped:@50, MustGen, &lt;0x11c9e2da0, Function&gt;, &lt;host function&gt;, Exits, bc#85)
 187:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#85, ExitInvalid)
  70:&lt;!0:-&gt;	MovHint(Untyped:@69, MustGen, loc8, W:SideState, ClobbersExit, bc#85, ExitInvalid)
  75:&lt;!0:-&gt;	CheckStructure(Cell:@69, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#94)
 194:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#94)
  78:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#94, ExitInvalid)
  80:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@77, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#103)
 204:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#110)
  83:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#110, ExitInvalid)
 210:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#117)
  86:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#117, ExitInvalid)
 209:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#124)
  91:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#124, ExitInvalid)
 207:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#132, ExitInvalid)
  94:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#132, ExitInvalid)
 205:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#141)
  98:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#141, ExitInvalid)
 202:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#148)
 102:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#148, ExitInvalid)
 201:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#156, ExitInvalid)
 106:&lt;!0:-&gt;	ZombieHint(MustGen, loc11, W:SideState, ClobbersExit, bc#156, ExitInvalid)
  73:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#161, ExitInvalid)
 110:&lt;!0:-&gt;	MovHint(Untyped:@109, MustGen, loc8, W:SideState, ClobbersExit, bc#161, ExitInvalid)
 115:&lt;!0:-&gt;	CheckStructure(Cell:@109, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#170)
 196:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#170)
 118:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#170, ExitInvalid)
 120:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@117, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#179)
 193:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#186)
 123:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#186, ExitInvalid)
 192:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#193)
 126:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#193, ExitInvalid)
 191:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#200)
 131:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#200, ExitInvalid)
  76:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#208, ExitInvalid)
 134:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#208, ExitInvalid)
 188:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#217)
 138:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#217, ExitInvalid)
  42:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#224)
 142:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#224, ExitInvalid)
 181:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#232, ExitInvalid)
 146:&lt;!0:-&gt;	ZombieHint(MustGen, loc11, W:SideState, ClobbersExit, bc#232, ExitInvalid)
 180:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#237, ExitInvalid)
 150:&lt;!0:-&gt;	MovHint(Untyped:@149, MustGen, loc8, W:SideState, ClobbersExit, bc#237, ExitInvalid)
 155:&lt;!0:-&gt;	CheckStructure(Cell:@149, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#246)
 177:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#246)
 158:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#246, ExitInvalid)
 160:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@157, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#255)
 176:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#262)
 163:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#262, ExitInvalid)
 173:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#269)
 166:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#269, ExitInvalid)
 170:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#276)
 171:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#276, ExitInvalid)
 169:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#284, ExitInvalid)
 174:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#284, ExitInvalid)
 167:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#293)
 178:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#293, ExitInvalid)
 165:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#300)
 182:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#300, ExitInvalid)
 162:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#308, ExitInvalid)
 186:&lt;!0:-&gt;	ZombieHint(MustGen, loc11, W:SideState, ClobbersExit, bc#308, ExitInvalid)
 161:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#313, ExitInvalid)
 190:&lt;!0:-&gt;	MovHint(Untyped:@189, MustGen, loc8, W:SideState, ClobbersExit, bc#313, ExitInvalid)
 195:&lt;!0:-&gt;	CheckStructure(Cell:@189, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#322)
  81:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#322)
 198:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#322, ExitInvalid)
 200:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@197, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#331)
 156:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#338)
 203:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#338, ExitInvalid)
 153:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#345)
 206:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#345, ExitInvalid)
 152:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#352)
 208:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#352, ExitInvalid)
 151:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#360, ExitInvalid)
 199:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#360, ExitInvalid)
  82:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#369)
 183:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#369, ExitInvalid)
 148:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#376)
 172:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#376, ExitInvalid)
  49:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#384, ExitInvalid)
 159:&lt;!0:-&gt;	ZombieHint(MustGen, loc11, W:SideState, ClobbersExit, bc#384, ExitInvalid)
 141:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#389, ExitInvalid)
 143:&lt;!0:-&gt;	MovHint(Untyped:@147, MustGen, loc8, W:SideState, ClobbersExit, bc#389, ExitInvalid)
 128:&lt;!0:-&gt;	CheckStructure(Cell:@147, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#398)
 140:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#398)
 114:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#398, ExitInvalid)
 107:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@119, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#407)
 137:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#414)
  99:&lt;!0:-&gt;	MovHint(Untyped:@17, MustGen, loc7, W:SideState, ClobbersExit, bc#414, ExitInvalid)
 136:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#421)
  95:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#421, ExitInvalid)
 133:&lt;!0:-&gt;	KillStack(MustGen, loc12, W:SideState, ClobbersExit, bc#428)
  79:&lt;!0:-&gt;	ZombieHint(MustGen, loc12, W:SideState, ClobbersExit, bc#428, ExitInvalid)
 130:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#436, ExitInvalid)
  67:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#436, ExitInvalid)
 129:&lt;!0:-&gt;	KillStack(MustGen, loc13, W:SideState, ClobbersExit, bc#445)
  57:&lt;!0:-&gt;	ZombieHint(MustGen, loc13, W:SideState, ClobbersExit, bc#445, ExitInvalid)
 127:&lt;!0:-&gt;	KillStack(MustGen, loc14, W:SideState, ClobbersExit, bc#452)
  52:&lt;!0:-&gt;	ZombieHint(MustGen, loc14, W:SideState, ClobbersExit, bc#452, ExitInvalid)
 125:&lt;!0:-&gt;	KillStack(MustGen, loc11, W:SideState, ClobbersExit, bc#460, ExitInvalid)
  44:&lt;!0:-&gt;	ZombieHint(MustGen, loc11, W:SideState, ClobbersExit, bc#460, ExitInvalid)
 122:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#465, ExitInvalid)
  36:&lt;!0:-&gt;	MovHint(Untyped:@38, MustGen, loc8, W:SideState, ClobbersExit, bc#465, ExitInvalid)
  24:&lt;!0:-&gt;	CheckStructure(Cell:@38, MustGen, [%D9:HTMLHeadingElement], R:JSCell_structureID, Exits, bc#474)
 121:&lt;!0:-&gt;	KillStack(MustGen, loc9, W:SideState, ClobbersExit, bc#474)
  15:&lt;!0:-&gt;	ZombieHint(MustGen, loc9, W:SideState, ClobbersExit, bc#474, ExitInvalid)
  13:&lt;!0:-&gt;	PutClosureVar(KnownCell:@17, Untyped:@19, MustGen, scope2, W:ScopeProperties(2), ClobbersExit, bc#483)
   9:&lt;!3:-&gt;	ArithAdd(Int32:Kill:@28, Int32:@11, Number|MustGen|UseAsOther, Int32, Unchecked, Exits, bc#490)
  85:&lt;!0:-&gt;	KillStack(MustGen, loc5, W:SideState, ClobbersExit, bc#490)
   7:&lt;!0:-&gt;	MovHint(Untyped:@9, MustGen, loc5, W:SideState, ClobbersExit, bc#490, ExitInvalid)
 116:&lt;!0:-&gt;	KillStack(MustGen, loc7, W:SideState, ClobbersExit, bc#492)
   0:&lt;!0:-&gt;	ZombieHint(MustGen, loc7, W:SideState, ClobbersExit, bc#492, ExitInvalid)
 113:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#499)
  21:&lt;!0:-&gt;	ZombieHint(MustGen, loc8, W:SideState, ClobbersExit, bc#499, ExitInvalid)
 112:&lt;!0:-&gt;	KillStack(MustGen, loc8, W:SideState, ClobbersExit, bc#507, ExitInvalid)
 100:&lt;!0:-&gt;	MovHint(Untyped:@34, MustGen, loc8, W:SideState, ClobbersExit, bc#507, ExitInvalid)
  96:&lt; 1:-&gt;	CompareLess(Int32:@9, Int32:@34, Boolean|UseAsOther, Bool, Exits, bc#512)
  93:&lt;!0:-&gt;	Branch(KnownBoolean:Kill:@96, MustGen, T:#1/w:10.000000, F:#4/w:1.000000, W:SideState, bc#512, ExitInvalid)
  States: TakeBoth, StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:ConflictingFlush/@17 loc4:DeadFlush/Undecided loc5:ConflictingFlush/@9 loc6:DeadFlush/Undecided loc8:ConflictingFlush/@34 loc10:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1, @9, @11, @17, @19, @34, @38, @50, @65, @69, @77, @109, @117, @119, @147, @149, @157, @189, @197
  Values: @1=&gt;(Other, Undefined), @9=&gt;(Int32), @11=&gt;(Boolint32, Int32: 1), @17=&gt;(Otherobj, TOP, [%Bj:JSLexicalEnvironment], Object: 0x118fca660 with butterfly 0x0 (%Bj:JSLexicalEnvironment), ID: 2261), @19=&gt;(Int32), @30=&gt;(Nonboolint32, Int32: 40), @34=&gt;(Nonboolint32, Int32: 1200), @38=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @45=&gt;(Otherobj, TOP, TOP, Object: 0x118fd7570 with butterfly 0x118e832c8 (%CR:Window), ID: 2391), @47=&gt;(String, TOP, [%Ck:string]), @50=&gt;(Otherobj, TOP, TOP), @65=&gt;(String, TOP, [%Ck:string]), @69=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @77=&gt;(Int32), @105=&gt;(String, TOP, [%Ck:string]), @109=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @117=&gt;(Int32), @119=&gt;(Int32), @145=&gt;(String, TOP, [%Ck:string]), @147=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @149=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @157=&gt;(Int32), @164=&gt;(String, TOP, [%Ck:string]), @185=&gt;(String, TOP, [%Ck:string]), @189=&gt;(Otherobj, NonArray, [%D9:HTMLHeadingElement]), @197=&gt;(Int32)

Block #4 (bc#516):
  Execution count: 1.000000
  Predecessors: #3
  Successors:
  Dominated by: #0 #2 #3 #4
  Dominates: #4
  Dominance Frontier: 
  Iterated Dominance Frontier: 
  Backwards dominates by: #end #4
  Backwards dominates: #0 #1 #2 #3 #4
  Control equivalent to: #0 #2 #3 #4
  States: StructuresAreWatched
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:DeadFlush/Undecided loc4:DeadFlush/Undecided loc5:DeadFlush/Undecided loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: @1
  Values: @1=&gt;(Other, Undefined)
 108:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#516)
  90:&lt;!0:-&gt;	Return(Untyped:Kill:@1, MustGen, W:SideState, Exits, bc#516)
  States: InvalidBranchDirection, StructuresAreWatched, CFAInvalidated
  Availability: {locals = arg0:this:FlushedJSValue/Unavailable loc0:DeadFlush/Undecided loc1:DeadFlush/Undecided loc2:DeadFlush/Undecided loc3:DeadFlush/Undecided loc4:DeadFlush/Undecided loc5:DeadFlush/Undecided loc6:DeadFlush/Undecided loc7:DeadFlush/Undecided loc8:DeadFlush/Undecided loc9:DeadFlush/Undecided loc10:DeadFlush/Undecided loc11:DeadFlush/Undecided loc12:DeadFlush/Undecided loc13:DeadFlush/Undecided loc14:DeadFlush/Undecided loc15:DeadFlush/Undecided loc16:DeadFlush/Undecided loc17:DeadFlush/Undecided; heap = }
  Live: 
  Values:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247671</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 00:15:05 -0700</bug_when>
    <thetext>Saam and Filip, is that sound? I&apos;m still carefully considering about it.
But I think it is sound.

getByIdElement cannot be changed. And it is figured out by DFG.
Only way to change it is doing something PureGetById and in that case the watchpoint is fired.
And even if the getElementById is changed, CheckCell will cause OSR and it ensures the result of inlining is correct.
And CallDOM said that getElementById is not observable and it returns the same value if  DOMState(DOM) is not changed. That is correct. If you change the tree, your node should say that DOMState(DOM) / DOMState(Tree) is changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247673</commentid>
    <comment_count>4</comment_count>
      <attachid>293754</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 01:04:22 -0700</bug_when>
    <thetext>Created attachment 293754
Patch

Performance numbers will be added tomorrow. But quick comparison between STP shows that getElementById test becomes 43x faster (250638 v.s. 5791.2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247681</commentid>
    <comment_count>5</comment_count>
      <attachid>293754</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 02:54:13 -0700</bug_when>
    <thetext>Comment on attachment 293754
Patch

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

&gt; Source/WebCore/dom/NonElementParentNode.idl:31
&gt; +    [DOMJIT=ReadDOM] Element? getElementById([RequiresExistingAtomicString] DOMString elementId);

I found this IDL was wrong. It may return null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247772</commentid>
    <comment_count>6</comment_count>
      <attachid>293782</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 11:39:27 -0700</bug_when>
    <thetext>Created attachment 293782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247781</commentid>
    <comment_count>7</comment_count>
      <attachid>293782</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 11:48:06 -0700</bug_when>
    <thetext>Comment on attachment 293782
Patch

Wow, this is cool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247795</commentid>
    <comment_count>8</comment_count>
      <attachid>293782</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 12:19:40 -0700</bug_when>
    <thetext>Comment on attachment 293782
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247820</commentid>
    <comment_count>9</comment_count>
      <attachid>293782</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 13:26:40 -0700</bug_when>
    <thetext>Comment on attachment 293782
Patch

Before landing I&apos;ll check the crashing things. It may be unrelated, since the current ToT seems crashing with Speedometer and DOMJIT::Signature patch was not related to that (I checked it))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248166</commentid>
    <comment_count>10</comment_count>
      <attachid>293901</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 10:56:00 -0700</bug_when>
    <thetext>Created attachment 293901
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248398</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 18:18:21 -0700</bug_when>
    <thetext>Committed r208412: &lt;http://trac.webkit.org/changeset/208412&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293754</attachid>
            <date>2016-11-03 01:04:22 -0700</date>
            <delta_ts>2016-11-03 11:39:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164356-20161103010022.patch</filename>
            <type>text/plain</type>
            <size>12176</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWYzNDdkMDBlMGEzYTNi
YTNiZjcxZDNlYjUwZWVmYzIyOGU0ZTI0MS4uOTAwY2I4ODFmMDJjZjgzZDZkNmQ5YWMwMDEzOTdh
NWI5OWMyODFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTExLTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIEFk
ZCBET01KSVQ6OlNpZ25hdHVyZSBhbm5vdGF0aW9uIHRvIERvY3VtZW50OjpnZXRFbGVtZW50QnlJ
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbXBsZW1lbnRzIERPTUpJVDo6U2lnbmF0dXJlIGFubm90YXRpb24gZm9yIGdldEVsZW1l
bnRCeUlkLgorICAgICAgICBTaW5jZSBnZXRFbGVtZW50QnlJZCBpcyBhbHNvIGltcGxlbWVudGVk
IGluIERvY3VtZW50RnJhZ21lbnQsIHdlIGltcGxlbWVudAorICAgICAgICB0aGUgYnJhbmNoSWZE
b2N1bWVudEZyYWdtZW50L2JyYW5jaElmTm90RG9jdW1lbnRGcmFnbWVudCBmb3IgdGhhdC4KKwor
ICAgICAgICBJbiBkcm9tYWVvLCB3ZSBoYXZlIGEgdGVzdCBsaWtlIHRoaXMuCisKKyAgICAgICAg
dGVzdCggImdldEVsZW1lbnRCeUlkIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IG51bSAqIDMwOyBpKysgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RBIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAg
ICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RCIiArIG51bSkubm9kZVR5
cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RD
IiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRlc3REIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFIiArIG51bSkubm9kZVR5cGU7CisgICAgICAg
ICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RGIiArIG51bSkubm9k
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEluIHRoZSBhYm92
ZSB0ZXN0LCBKU0MgYWxyZWFkeSBrbm93cyB0aGUgZm9sbG93aW5nIHRoaW5ncy4KKworICAgICAg
ICAxLiBTaW5jZSBub2RlVHlwZSBpcyBub3cgaGFuZGxlZCBhcyBDYWxsRE9NR2V0dGVyLCB3ZSBr
bm93IHRoYXQgaXQgaXMgcHVyZS4KKyAgICAgICAgMi4gZ2V0RWxlbWVudEJ5SWQgbG9vayB1cCBi
ZWNvbWVzIFB1cmVHZXRCeUlkIHNpbmNlIGRvY3VtZW50IGlzIGltcHVyZSBvYmplY3QuIEJ1dCBp
dCBpcyBrZXB0IGFzIFB1cmVHZXRCeUlkLiBTbyBpdCBkb2VzIG5vdCB3cml0ZSBET01TdGF0ZS4K
KyAgICAgICAgMy4gYCJ0ZXN0QSIgKyBudW1gIHdpbGwgYmUgY29udmVydGVkIHRvIGNvbnN0YW50
IHN0cmluZy4KKyAgICAgICAgNC4gQ2FsbERPTSBmb3IgZ2V0RWxlbWVudEJ5SWQgc2FpZCBpdCBq
dXN0IHJlYWRzKERPTVN0YXRlOkRPTSkuIEFuZCBpdCBzYWlkcyB0aGF0IGl0IHJldHVybnMgdGhl
IHNhbWUgdmFsdWUgYXMgbG9uZyBhcyBET01TdGF0ZSBpcyBub3QgY2xvYmJlcmVkLgorICAgICAg
ICA1LiBDaGVja0NlbGwgbGVhZGluZyBDYWxsRE9NIGVuc3VyZXMgdGhlIGlubGluZWQgZ2V0RWxl
bWVudEJ5SWQgbm9kZS4gKENhbGxET00gbm9kZSkuCisKKyAgICAgICAgVGhlIGtleSB0aGluZyBp
cyB0aGF0IG5vIG5vZGUgY2xvYmJlcnMgRE9NU3RhdGUgZHVyaW5nIHRoZSBsb29wLiBTbyBDYWxs
RE9NICYgQ2FsbERPTUdldHRlciBjYW4gYmUgaG9pc3RlZC4KKworICAgICAgICBUZXN0czoganMv
ZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwKKyAgICAg
ICAgICAgICAgIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtbGljbS5o
dG1sCisgICAgICAgICAgICAgICBqcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5
LWlkLmh0bWwKKworICAgICAgICAqIGRvbS9Ob25FbGVtZW50UGFyZW50Tm9kZS5pZGw6CisgICAg
ICAgICogZG9taml0L0RPTUpJVENoZWNrRE9NLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6
OlR5cGVDaGVja2VyPERvY3VtZW50RnJhZ21lbnQ+OjpicmFuY2hJZkZhaWwpOgorICAgICAgICAq
IGRvbWppdC9ET01KSVRIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5j
aElmRG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5jaElm
Tm90RG9jdW1lbnRGcmFnbWVudCk6CisKIDIwMTYtMTEtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBDU1Muc3VwcG9ydHMoImZvbnQtdmFyaWF0
aW9uLXNldHRpbmdzIiwgIid3Z2h0JyA1MDAiKSBlcnJvbmVvdXNseSByZXR1cm5zIGZhbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9uRWxlbWVudFBhcmVudE5vZGUuaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vbkVsZW1lbnRQYXJlbnROb2RlLmlkbAppbmRleCBkOGY0MDIw
NzYzMjk3MWQyYTFjODk2MWMwYmRjNjE4MzEzMWZhYTg3Li45MjIzODcwM2YyYWQ3M2ZmNzQ4OGE0
NTUzNjU3YTNiNzAyZTE5MGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9uRWxl
bWVudFBhcmVudE5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob25FbGVtZW50UGFy
ZW50Tm9kZS5pZGwKQEAgLTI4LDUgKzI4LDUgQEAKIFsKICAgICBOb0ludGVyZmFjZU9iamVjdCwK
IF0gaW50ZXJmYWNlIE5vbkVsZW1lbnRQYXJlbnROb2RlIHsKLSAgICBFbGVtZW50IGdldEVsZW1l
bnRCeUlkKFtSZXF1aXJlc0V4aXN0aW5nQXRvbWljU3RyaW5nXSBET01TdHJpbmcgZWxlbWVudElk
KTsKKyAgICBbRE9NSklUPVJlYWRET01dIEVsZW1lbnQ/IGdldEVsZW1lbnRCeUlkKFtSZXF1aXJl
c0V4aXN0aW5nQXRvbWljU3RyaW5nXSBET01TdHJpbmcgZWxlbWVudElkKTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUQ2hlY2tET00uaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCmluZGV4IDA4ZjUwMjIxMjEwMWIzM2FiMTQzOTA3
YzhiNGYyODllMWNjMDhjMDcuLjFiYTMxMDYzMTg0ODNkYTI4Mjk0Y2E1ZjU5NDUyMjcxNGQ3MDVl
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCkBAIC01OCw2ICs1OCwx
NCBAQCBzdHJ1Y3QgVHlwZUNoZWNrZXI8RG9jdW1lbnQ+IHsKIH07CiAKIHRlbXBsYXRlPD4KK3N0
cnVjdCBUeXBlQ2hlY2tlcjxEb2N1bWVudEZyYWdtZW50PiB7CisgICAgc3RhdGljIENDYWxsSGVs
cGVyczo6SnVtcCBicmFuY2hJZkZhaWwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBkb20pCisg
ICAgeworICAgICAgICByZXR1cm4gRE9NSklUOjpicmFuY2hJZk5vdERvY3VtZW50RnJhZ21lbnQo
aml0LCBkb20pOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KIHN0cnVjdCBUeXBlQ2hlY2tlcjxF
dmVudD4gewogICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJhbmNoSWZGYWlsKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgZG9tKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklU
SGVscGVycy5oCmluZGV4IDU0YjdhYTNlYjc2MWE4OWNiYzgwN2QzYWUwZDFjZDFlZDhlOTc3MTQu
LmIyYTM2ODM1OTQ1NTU3ZDMyMzg5MTA2ZGVmZDMwMmIwMWRmMjFiZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9taml0L0RPTUpJVEhlbHBlcnMuaApAQCAtMTUyLDYgKzE1MiwxNiBAQCBpbmxpbmUgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGJyYW5jaElmTm90RWxlbWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IHRhcmdldCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjpKU1R5cGUo
SlNFbGVtZW50VHlwZSkpKTsKIH0KIAoraW5saW5lIENDYWxsSGVscGVyczo6SnVtcCBicmFuY2hJ
ZkRvY3VtZW50RnJhZ21lbnQoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJnZXQpCit7Cisg
ICAgcmV0dXJuIGppdC5icmFuY2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShKU0RvY3VtZW50
RnJhZ21lbnROb2RlVHlwZSkpOworfQorCitpbmxpbmUgQ0NhbGxIZWxwZXJzOjpKdW1wIGJyYW5j
aElmTm90RG9jdW1lbnRGcmFnbWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHRhcmdldCkK
K3sKKyAgICByZXR1cm4gaml0LmJyYW5jaElmTm90VHlwZSh0YXJnZXQsIEpTQzo6SlNUeXBlKEpT
RG9jdW1lbnRGcmFnbWVudE5vZGVUeXBlKSk7Cit9CisKIGlubGluZSBDQ2FsbEhlbHBlcnM6Okp1
bXAgYnJhbmNoSWZEb2N1bWVudFdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJn
ZXQpCiB7CiAgICAgcmV0dXJuIGppdC5icmFuY2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShK
U0RvY3VtZW50V3JhcHBlclR5cGUpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkODA4ODlkNmRmZmE3OTAxMWM4ZDBjYTZk
NTUxOWIzMzhjMGZjMjViLi40ZGY1NTIxMjQ2MzgwMGFiNjVlZTYxMjZjYzQxMzljYjcwZmMzNzg2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTEtMDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0RPTUpJVF0gQWRkIERPTUpJVDo6U2lnbmF0
dXJlIGFubm90YXRpb24gdG8gRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rp
b24tZ2V0LWVsZW1lbnQtYnktaWQtY2hhbmdlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtY2hhbmdlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5
LWlkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2RvbWppdC1mdW5jdGlv
bi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQuaHRt
bDogQWRkZWQuCisKIDIwMTYtMTEtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBDU1Muc3VwcG9ydHMoImZvbnQtdmFyaWF0aW9uLXNldHRpbmdz
IiwgIid3Z2h0JyA1MDAiKSBlcnJvbmVvdXNseSByZXR1cm5zIGZhbHNlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNoYW5n
ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQt
ZWxlbWVudC1ieS1pZC1jaGFuZ2VkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjZlYTlkYTRk
MzAyNmQ2YzNjMGUzOGYzNTQ4N2IxNjJiZjA2OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1Rlc3QgTElDTS1lZCBET01KSVQgZnVuY3Rpb24g
Z2V0RWxlbWVudEJ5SWQgd2lsbCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBy
ZXBsYWNlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNo
YW5nZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjhkODAwZDU4MzM1MTUwMmYxYzc1YzEyOWUwOThhMjky
NGNmMWRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5j
dGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJw
YXJlbnROb2RlIj4KKzxkaXYgaWQ9InByZXZpb3VzU2libGluZyI+PC9kaXY+PGRpdiBpZD0idGFy
Z2V0Ij48ZGl2IGlkPSJmaXJzdENoaWxkIj48L2Rpdj48ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2
PjwvZGl2PjxkaXYgaWQ9Im5leHRTaWJsaW5nIj48L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oJ1Rlc3QgTElDTS1lZCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQg
d2lsbCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZXBsYWNlZC4nKTsKKwor
ZnVuY3Rpb24gdGVzdChmbGFnKSB7CisgICAgdmFyIHJldCA9IDA7CisgICAgdmFyIHRleHQgPSBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQ29jb2EnKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJn
ZXQiKS5ub2RlVHlwZTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
cmdldCIpLm5vZGVUeXBlOworICAgICAgICBpZiAoaSA9PT0gMTAwICYmIGZsYWcpCisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gdGV4
dDsgfTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5v
ZGVUeXBlOworICAgICAgICByZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iiku
bm9kZVR5cGU7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1bmN0
aW9uICgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJl
c3VsdCA9IHRlc3QoZmFsc2UpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVl
KTsKKyAgICB9CisgICAgdmFyIG9yaWdpbmFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ7Cisg
ICAgcmVzdWx0ID0gdGVzdCh0cnVlKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IG9y
aWdpbmFsOworICAgIHNob3VsZEJlKGByZXN1bHRgLCBgTm9kZS5URVhUX05PREVgLCB0cnVlKTsK
K30oKSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlMTRkOGRhYmIxYmM4NDU3MDM0MTg3NzUyNWFkYjI2
MGIzMzZlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVu
Y3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAorVGVz
dCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCBiZSBMSUNNLWVkLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0
LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWxpY20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MmUxNGQ4ZGFiYjFiYzg0NTcwMzQxODc3NTI1YWRiMjYwYjMzNmVh
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1n
ZXQtZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1Rlc3Qg
RE9NSklUIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkIHdpbGwgYmUgTElDTS1lZC4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1m
dW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20v
ZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWxpY20uaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZWJlNTBkMDQ3ZWJjNWRjZDYzNDEwMmEyZWU5NmUyM2Y5NjZkNTcyCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1s
aWNtLmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJwYXJlbnROb2RlIj4KKzxkaXYgaWQ9InByZXZp
b3VzU2libGluZyI+PC9kaXY+PGRpdiBpZD0idGFyZ2V0Ij48ZGl2IGlkPSJmaXJzdENoaWxkIj48
L2Rpdj48ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9Im5leHRTaWJsaW5n
Ij48L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgRE9NSklUIGZ1
bmN0aW9uIGdldEVsZW1lbnRCeUlkIHdpbGwgYmUgTElDTS1lZC4nKTsKKworZnVuY3Rpb24gdGVz
dCgpIHsKKyAgICB2YXIgcmV0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2Rl
VHlwZTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5v
ZGVUeXBlOworICAgICAgICByZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iiku
bm9kZVR5cGU7CisgICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQi
KS5ub2RlVHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK3ZhciByZXN1bHQ7CisoZnVu
Y3Rpb24gKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAg
cmVzdWx0ID0gdGVzdCgpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsK
KyAgICB9Cit9KCkpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDM2ZDEyMmZjN2Y5MTlmYmUwYTZkMGQ5NmI2MWJiYWMyNjQ2Y2IyMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0
LWVsZW1lbnQtYnktaWQuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InBhcmVudE5vZGUiPgorPGRp
diBpZD0icHJldmlvdXNTaWJsaW5nIj48L2Rpdj48ZGl2IGlkPSJ0YXJnZXQiPjxkaXYgaWQ9ImZp
cnN0Q2hpbGQiPjwvZGl2PjxkaXYgaWQ9Imxhc3RDaGlsZCI+PC9kaXY+PC9kaXY+PGRpdiBpZD0i
bmV4dFNpYmxpbmciPjwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVz
dCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCBiZSBMSUNNLWVkLicpOworCitm
dW5jdGlvbiB0ZXN0KGRvYywgaWQpIHsKKyAgICB2YXIgcmV0ID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHJldCA9IGRvYy5nZXRFbGVtZW50QnlJZChp
ZCkubm9kZVR5cGU7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1
bmN0aW9uICgpIHsKKyAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3RhcmdldDInKTsKKyAgICBmcmFnbWVudC5hcHBl
bmRDaGlsZChkaXYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgcmVzdWx0ID0gdGVzdChkb2N1bWVudCwgJ3RhcmdldCcpOworICAgICAgICBzaG91bGRCZShg
cmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAgICAgICAgcmVzdWx0ID0gdGVzdChmcmFnbWVudCwgJ3Rh
cmdldDInKTsKKyAgICAgICAgc2hvdWxkQmUoYHJlc3VsdGAsIGAxYCwgdHJ1ZSk7CisgICAgfQor
fSgpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293782</attachid>
            <date>2016-11-03 11:39:27 -0700</date>
            <delta_ts>2016-11-03 13:26:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164356-20161103113527.patch</filename>
            <type>text/plain</type>
            <size>12398</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWYzNDdkMDBlMGEzYTNi
YTNiZjcxZDNlYjUwZWVmYzIyOGU0ZTI0MS4uYjMzNTAxNDRmNjE2YzNkMjMzNTVlN2Q5MDIwY2M3
NjJkMTA1MTRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE2LTExLTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIEFk
ZCBET01KSVQ6OlNpZ25hdHVyZSBhbm5vdGF0aW9uIHRvIERvY3VtZW50OjpnZXRFbGVtZW50QnlJ
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbXBsZW1lbnRzIERPTUpJVDo6U2lnbmF0dXJlIGFubm90YXRpb24gZm9yIGdldEVsZW1l
bnRCeUlkLgorICAgICAgICBTaW5jZSBnZXRFbGVtZW50QnlJZCBpcyBhbHNvIGltcGxlbWVudGVk
IGluIERvY3VtZW50RnJhZ21lbnQsIHdlIGltcGxlbWVudAorICAgICAgICB0aGUgYnJhbmNoSWZE
b2N1bWVudEZyYWdtZW50L2JyYW5jaElmTm90RG9jdW1lbnRGcmFnbWVudCBmb3IgdGhhdC4KKwor
ICAgICAgICBJbiBkcm9tYWVvLCB3ZSBoYXZlIGEgdGVzdCBsaWtlIHRoaXMuCisKKyAgICAgICAg
dGVzdCggImdldEVsZW1lbnRCeUlkIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGZvciAoIHZh
ciBpID0gMDsgaSA8IG51bSAqIDMwOyBpKysgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RBIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAg
ICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RCIiArIG51bSkubm9kZVR5
cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RD
IiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRlc3REIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFIiArIG51bSkubm9kZVR5cGU7CisgICAgICAg
ICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RGIiArIG51bSkubm9k
ZVR5cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEluIHRoZSBhYm92
ZSB0ZXN0LCBKU0MgYWxyZWFkeSBrbm93cyB0aGUgZm9sbG93aW5nIHRoaW5ncy4KKworICAgICAg
ICAxLiBTaW5jZSBub2RlVHlwZSBpcyBub3cgaGFuZGxlZCBhcyBDYWxsRE9NR2V0dGVyLCB3ZSBr
bm93IHRoYXQgaXQgaXMgcHVyZS4KKyAgICAgICAgMi4gZ2V0RWxlbWVudEJ5SWQgbG9vayB1cCBi
ZWNvbWVzIFB1cmVHZXRCeUlkIHNpbmNlIGRvY3VtZW50IGlzIGltcHVyZSBvYmplY3QuIEJ1dCBp
dCBpcyBrZXB0IGFzIFB1cmVHZXRCeUlkLiBTbyBpdCBkb2VzIG5vdCB3cml0ZSBET01TdGF0ZS4K
KyAgICAgICAgMy4gYCJ0ZXN0QSIgKyBudW1gIHdpbGwgYmUgY29udmVydGVkIHRvIGNvbnN0YW50
IHN0cmluZy4KKyAgICAgICAgNC4gQ2FsbERPTSBmb3IgZ2V0RWxlbWVudEJ5SWQgc2FpZCBpdCBq
dXN0IHJlYWRzKERPTVN0YXRlOkRPTSkuIEFuZCBpdCBzYWlkcyB0aGF0IGl0IHJldHVybnMgdGhl
IHNhbWUgdmFsdWUgYXMgbG9uZyBhcyBET01TdGF0ZSBpcyBub3QgY2xvYmJlcmVkLgorICAgICAg
ICA1LiBDaGVja0NlbGwgbGVhZGluZyBDYWxsRE9NIGVuc3VyZXMgdGhlIGlubGluZWQgZ2V0RWxl
bWVudEJ5SWQgbm9kZS4gKENhbGxET00gbm9kZSkuCisKKyAgICAgICAgVGhlIGtleSB0aGluZyBp
cyB0aGF0IG5vIG5vZGUgY2xvYmJlcnMgRE9NU3RhdGUgZHVyaW5nIHRoZSBsb29wLiBTbyBDYWxs
RE9NICYgQ2FsbERPTUdldHRlciBjYW4gYmUgaG9pc3RlZC4KKyAgICAgICAgVGhpcyBpbXByb3Zl
cyBkb20tcXVlcnkgc2lnbmlmaWNhbnRseS4gRHJvbWFlbyBkb20tcXVlcnkgZ2V0RWxlbWVudEJ5
SWQgYmVjb21lcyA0MHggZmFzdGVyICgyNDc3OTYgdi5zLiA2MTk3KS4KKyAgICAgICAgRHJvbWFl
byBkb20tcXVlcnkgZ2V0RWxlbWVudEJ5SWQgKG5vdCBpbiBkb2N1bWVudCkgYmVjb21lcyA4OXgg
ZmFzdGVyICg2MzAzMTcuOCB2LnMuIDcwNjYuKS4KKworICAgICAgICBUZXN0czoganMvZG9tL2Rv
bWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwKKyAgICAgICAgICAg
ICAgIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtbGljbS5odG1sCisg
ICAgICAgICAgICAgICBqcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0
bWwKKworICAgICAgICAqIGRvbS9Ob25FbGVtZW50UGFyZW50Tm9kZS5pZGw6CisgICAgICAgICog
ZG9taml0L0RPTUpJVENoZWNrRE9NLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OlR5cGVD
aGVja2VyPERvY3VtZW50RnJhZ21lbnQ+OjpicmFuY2hJZkZhaWwpOgorICAgICAgICAqIGRvbWpp
dC9ET01KSVRIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5jaElmRG9j
dW1lbnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5jaElmTm90RG9j
dW1lbnRGcmFnbWVudCk6CisKIDIwMTYtMTEtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZp
ZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBDU1Muc3VwcG9ydHMoImZvbnQtdmFyaWF0aW9uLXNl
dHRpbmdzIiwgIid3Z2h0JyA1MDAiKSBlcnJvbmVvdXNseSByZXR1cm5zIGZhbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9uRWxlbWVudFBhcmVudE5vZGUuaWRsIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vbkVsZW1lbnRQYXJlbnROb2RlLmlkbAppbmRleCBkOGY0MDIwNzYzMjk3
MWQyYTFjODk2MWMwYmRjNjE4MzEzMWZhYTg3Li45MjIzODcwM2YyYWQ3M2ZmNzQ4OGE0NTUzNjU3
YTNiNzAyZTE5MGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9uRWxlbWVudFBh
cmVudE5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob25FbGVtZW50UGFyZW50Tm9k
ZS5pZGwKQEAgLTI4LDUgKzI4LDUgQEAKIFsKICAgICBOb0ludGVyZmFjZU9iamVjdCwKIF0gaW50
ZXJmYWNlIE5vbkVsZW1lbnRQYXJlbnROb2RlIHsKLSAgICBFbGVtZW50IGdldEVsZW1lbnRCeUlk
KFtSZXF1aXJlc0V4aXN0aW5nQXRvbWljU3RyaW5nXSBET01TdHJpbmcgZWxlbWVudElkKTsKKyAg
ICBbRE9NSklUPVJlYWRET01dIEVsZW1lbnQ/IGdldEVsZW1lbnRCeUlkKFtSZXF1aXJlc0V4aXN0
aW5nQXRvbWljU3RyaW5nXSBET01TdHJpbmcgZWxlbWVudElkKTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUQ2hlY2tET00uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bWppdC9ET01KSVRDaGVja0RPTS5oCmluZGV4IDA4ZjUwMjIxMjEwMWIzM2FiMTQzOTA3YzhiNGYy
ODllMWNjMDhjMDcuLjFiYTMxMDYzMTg0ODNkYTI4Mjk0Y2E1ZjU5NDUyMjcxNGQ3MDVlNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCkBAIC01OCw2ICs1OCwxNCBAQCBz
dHJ1Y3QgVHlwZUNoZWNrZXI8RG9jdW1lbnQ+IHsKIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBU
eXBlQ2hlY2tlcjxEb2N1bWVudEZyYWdtZW50PiB7CisgICAgc3RhdGljIENDYWxsSGVscGVyczo6
SnVtcCBicmFuY2hJZkZhaWwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBkb20pCisgICAgewor
ICAgICAgICByZXR1cm4gRE9NSklUOjpicmFuY2hJZk5vdERvY3VtZW50RnJhZ21lbnQoaml0LCBk
b20pOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KIHN0cnVjdCBUeXBlQ2hlY2tlcjxFdmVudD4g
ewogICAgIHN0YXRpYyBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJhbmNoSWZGYWlsKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgZG9tKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bWppdC9ET01KSVRIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVy
cy5oCmluZGV4IDU0YjdhYTNlYjc2MWE4OWNiYzgwN2QzYWUwZDFjZDFlZDhlOTc3MTQuLmIyYTM2
ODM1OTQ1NTU3ZDMyMzg5MTA2ZGVmZDMwMmIwMWRmMjFiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbWppdC9ET01KSVRIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9taml0
L0RPTUpJVEhlbHBlcnMuaApAQCAtMTUyLDYgKzE1MiwxNiBAQCBpbmxpbmUgQ0NhbGxIZWxwZXJz
OjpKdW1wIGJyYW5jaElmTm90RWxlbWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHRhcmdl
dCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjpKU1R5cGUoSlNFbGVt
ZW50VHlwZSkpKTsKIH0KIAoraW5saW5lIENDYWxsSGVscGVyczo6SnVtcCBicmFuY2hJZkRvY3Vt
ZW50RnJhZ21lbnQoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJnZXQpCit7CisgICAgcmV0
dXJuIGppdC5icmFuY2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShKU0RvY3VtZW50RnJhZ21l
bnROb2RlVHlwZSkpOworfQorCitpbmxpbmUgQ0NhbGxIZWxwZXJzOjpKdW1wIGJyYW5jaElmTm90
RG9jdW1lbnRGcmFnbWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHRhcmdldCkKK3sKKyAg
ICByZXR1cm4gaml0LmJyYW5jaElmTm90VHlwZSh0YXJnZXQsIEpTQzo6SlNUeXBlKEpTRG9jdW1l
bnRGcmFnbWVudE5vZGVUeXBlKSk7Cit9CisKIGlubGluZSBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJh
bmNoSWZEb2N1bWVudFdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJnZXQpCiB7
CiAgICAgcmV0dXJuIGppdC5icmFuY2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShKU0RvY3Vt
ZW50V3JhcHBlclR5cGUpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkODA4ODlkNmRmZmE3OTAxMWM4ZDBjYTZkNTUxOWIz
MzhjMGZjMjViLi40ZGY1NTIxMjQ2MzgwMGFiNjVlZTYxMjZjYzQxMzljYjcwZmMzNzg2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMTEtMDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CisKKyAgICAgICAgW0RPTUpJVF0gQWRkIERPTUpJVDo6U2lnbmF0dXJlIGFu
bm90YXRpb24gdG8gRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzNTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0
LWVsZW1lbnQtYnktaWQtY2hhbmdlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtY2hhbmdlZC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQt
ZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9t
L2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQuaHRtbDogQWRk
ZWQuCisKIDIwMTYtMTEtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KIAogICAgICAgICBDU1Muc3VwcG9ydHMoImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzIiwgIid3
Z2h0JyA1MDAiKSBlcnJvbmVvdXNseSByZXR1cm5zIGZhbHNlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNoYW5nZWQtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVu
dC1ieS1pZC1jaGFuZ2VkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjZlYTlkYTRkMzAyNmQ2
YzNjMGUzOGYzNTQ4N2IxNjJiZjA2OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDggQEAKK1Rlc3QgTElDTS1lZCBET01KSVQgZnVuY3Rpb24gZ2V0RWxl
bWVudEJ5SWQgd2lsbCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZXBsYWNl
ZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
ZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwgYi9MYXlv
dXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNoYW5nZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNjhkODAwZDU4MzM1MTUwMmYxYzc1YzEyOWUwOThhMjkyNGNmMWRh
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1n
ZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0
aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJwYXJlbnRO
b2RlIj4KKzxkaXYgaWQ9InByZXZpb3VzU2libGluZyI+PC9kaXY+PGRpdiBpZD0idGFyZ2V0Ij48
ZGl2IGlkPSJmaXJzdENoaWxkIj48L2Rpdj48ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2PjwvZGl2
PjxkaXYgaWQ9Im5leHRTaWJsaW5nIj48L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oJ1Rlc3QgTElDTS1lZCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCB3
b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZXBsYWNlZC4nKTsKKworZnVuY3Rp
b24gdGVzdChmbGFnKSB7CisgICAgdmFyIHJldCA9IDA7CisgICAgdmFyIHRleHQgPSBkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgnQ29jb2EnKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsg
KytpKSB7CisgICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5u
b2RlVHlwZTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIp
Lm5vZGVUeXBlOworICAgICAgICBpZiAoaSA9PT0gMTAwICYmIGZsYWcpCisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gdGV4dDsgfTsK
KyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5vZGVUeXBl
OworICAgICAgICByZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iikubm9kZVR5
cGU7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1bmN0aW9uICgp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9
IHRlc3QoZmFsc2UpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAg
ICB9CisgICAgdmFyIG9yaWdpbmFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ7CisgICAgcmVz
dWx0ID0gdGVzdCh0cnVlKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IG9yaWdpbmFs
OworICAgIHNob3VsZEJlKGByZXN1bHRgLCBgTm9kZS5URVhUX05PREVgLCB0cnVlKTsKK30oKSk7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTJlMTRkOGRhYmIxYmM4NDU3MDM0MTg3NzUyNWFkYjI2MGIzMzZl
YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24t
Z2V0LWVsZW1lbnQtYnktaWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAorVGVzdCBET01K
SVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCBiZSBMSUNNLWVkLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0
aW9uLWdldC1lbGVtZW50LWJ5LWlkLWxpY20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMv
ZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MmUxNGQ4ZGFiYjFiYzg0NTcwMzQxODc3NTI1YWRiMjYwYjMzNmVhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxl
bWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1Rlc3QgRE9NSklU
IGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkIHdpbGwgYmUgTElDTS1lZC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlv
bi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0
LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWxpY20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWJlNTBk
MDQ3ZWJjNWRjZDYzNDEwMmEyZWU5NmUyM2Y5NjZkNTcyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0
bWwKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8ZGl2IGlkPSJwYXJlbnROb2RlIj4KKzxkaXYgaWQ9InByZXZpb3VzU2li
bGluZyI+PC9kaXY+PGRpdiBpZD0idGFyZ2V0Ij48ZGl2IGlkPSJmaXJzdENoaWxkIj48L2Rpdj48
ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9Im5leHRTaWJsaW5nIj48L2Rp
dj4KKzwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgRE9NSklUIGZ1bmN0aW9u
IGdldEVsZW1lbnRCeUlkIHdpbGwgYmUgTElDTS1lZC4nKTsKKworZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICB2YXIgcmV0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2RlVHlwZTsK
KyAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5vZGVUeXBl
OworICAgICAgICByZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iikubm9kZVR5
cGU7CisgICAgICAgIHJldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2Rl
VHlwZTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK3ZhciByZXN1bHQ7CisoZnVuY3Rpb24g
KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0
ID0gdGVzdCgpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAgICB9
Cit9KCkpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwgYi9MYXlv
dXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDM2ZDEyMmZjN2Y5MTlmYmUwYTZkMGQ5NmI2MWJiYWMyNjQ2Y2IyMgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1l
bnQtYnktaWQuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxkaXYgaWQ9InBhcmVudE5vZGUiPgorPGRpdiBpZD0i
cHJldmlvdXNTaWJsaW5nIj48L2Rpdj48ZGl2IGlkPSJ0YXJnZXQiPjxkaXYgaWQ9ImZpcnN0Q2hp
bGQiPjwvZGl2PjxkaXYgaWQ9Imxhc3RDaGlsZCI+PC9kaXY+PC9kaXY+PGRpdiBpZD0ibmV4dFNp
YmxpbmciPjwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBET01K
SVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCBiZSBMSUNNLWVkLicpOworCitmdW5jdGlv
biB0ZXN0KGRvYywgaWQpIHsKKyAgICB2YXIgcmV0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNDsgKytpKSB7CisgICAgICAgIHJldCA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCkubm9k
ZVR5cGU7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRp
di5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3RhcmdldDInKTsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGls
ZChkaXYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVz
dWx0ID0gdGVzdChkb2N1bWVudCwgJ3RhcmdldCcpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0
YCwgYDFgLCB0cnVlKTsKKyAgICAgICAgcmVzdWx0ID0gdGVzdChmcmFnbWVudCwgJ3RhcmdldDIn
KTsKKyAgICAgICAgc2hvdWxkQmUoYHJlc3VsdGAsIGAxYCwgdHJ1ZSk7CisgICAgfQorfSgpKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="316618"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="316628"
          type_id="3"
          status="-"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293901</attachid>
            <date>2016-11-04 10:56:00 -0700</date>
            <delta_ts>2016-11-04 10:56:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-164356-20161105025157.patch</filename>
            <type>text/plain</type>
            <size>12374</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJlOTNlMWI1NTc3ZWEx
MTc0NTA5ODY1OTJkMGE5N2FiYzc0MGI4NS4uZGY3MDE3YTA3YjUxYTczNWE2YzU5NjhiOTlhYjQ3
Y2M2MWMxMTA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE2LTExLTA0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIEFk
ZCBET01KSVQ6OlNpZ25hdHVyZSBhbm5vdGF0aW9uIHRvIERvY3VtZW50OjpnZXRFbGVtZW50QnlJ
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbXBsZW1lbnRzIERPTUpJVDo6U2lnbmF0dXJlIGFubm90YXRpb24gZm9yIGdldEVsZW1lbnRC
eUlkLgorICAgICAgICBTaW5jZSBnZXRFbGVtZW50QnlJZCBpcyBhbHNvIGltcGxlbWVudGVkIGlu
IERvY3VtZW50RnJhZ21lbnQsIHdlIGltcGxlbWVudAorICAgICAgICB0aGUgYnJhbmNoSWZEb2N1
bWVudEZyYWdtZW50L2JyYW5jaElmTm90RG9jdW1lbnRGcmFnbWVudCBmb3IgdGhhdC4KKworICAg
ICAgICBJbiBkcm9tYWVvLCB3ZSBoYXZlIGEgdGVzdCBsaWtlIHRoaXMuCisKKyAgICAgICAgdGVz
dCggImdldEVsZW1lbnRCeUlkIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIGZvciAoIHZhciBp
ID0gMDsgaSA8IG51bSAqIDMwOyBpKysgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RBIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAg
ICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RCIiArIG51bSkubm9kZVR5cGU7
CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RDIiAr
IG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3REIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RFIiArIG51bSkubm9kZVR5cGU7CisgICAgICAgICAg
ICAgICAgcmV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RGIiArIG51bSkubm9kZVR5
cGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEluIHRoZSBhYm92ZSB0
ZXN0LCBKU0MgYWxyZWFkeSBrbm93cyB0aGUgZm9sbG93aW5nIHRoaW5ncy4KKworICAgICAgICAx
LiBTaW5jZSBub2RlVHlwZSBpcyBub3cgaGFuZGxlZCBhcyBDYWxsRE9NR2V0dGVyLCB3ZSBrbm93
IHRoYXQgaXQgaXMgcHVyZS4KKyAgICAgICAgMi4gZ2V0RWxlbWVudEJ5SWQgbG9vayB1cCBiZWNv
bWVzIFB1cmVHZXRCeUlkIHNpbmNlIGRvY3VtZW50IGlzIGltcHVyZSBvYmplY3QuIEJ1dCBpdCBp
cyBrZXB0IGFzIFB1cmVHZXRCeUlkLiBTbyBpdCBkb2VzIG5vdCB3cml0ZSBET01TdGF0ZS4KKyAg
ICAgICAgMy4gYCJ0ZXN0QSIgKyBudW1gIHdpbGwgYmUgY29udmVydGVkIHRvIGNvbnN0YW50IHN0
cmluZy4KKyAgICAgICAgNC4gQ2FsbERPTSBmb3IgZ2V0RWxlbWVudEJ5SWQgc2FpZCBpdCBqdXN0
IHJlYWRzKERPTVN0YXRlOkRPTSkuIEFuZCBpdCBzYWlkcyB0aGF0IGl0IHJldHVybnMgdGhlIHNh
bWUgdmFsdWUgYXMgbG9uZyBhcyBET01TdGF0ZSBpcyBub3QgY2xvYmJlcmVkLgorICAgICAgICA1
LiBDaGVja0NlbGwgbGVhZGluZyBDYWxsRE9NIGVuc3VyZXMgdGhlIGlubGluZWQgZ2V0RWxlbWVu
dEJ5SWQgbm9kZS4gKENhbGxET00gbm9kZSkuCisKKyAgICAgICAgVGhlIGtleSB0aGluZyBpcyB0
aGF0IG5vIG5vZGUgY2xvYmJlcnMgRE9NU3RhdGUgZHVyaW5nIHRoZSBsb29wLiBTbyBDYWxsRE9N
ICYgQ2FsbERPTUdldHRlciBjYW4gYmUgaG9pc3RlZC4KKyAgICAgICAgVGhpcyBpbXByb3ZlcyBk
b20tcXVlcnkgc2lnbmlmaWNhbnRseS4gRHJvbWFlbyBkb20tcXVlcnkgZ2V0RWxlbWVudEJ5SWQg
YmVjb21lcyA0MHggZmFzdGVyICgyNDc3OTYgdi5zLiA2MTk3KS4KKyAgICAgICAgRHJvbWFlbyBk
b20tcXVlcnkgZ2V0RWxlbWVudEJ5SWQgKG5vdCBpbiBkb2N1bWVudCkgYmVjb21lcyA4OXggZmFz
dGVyICg2MzAzMTcuOCB2LnMuIDcwNjYuKS4KKworICAgICAgICBUZXN0czoganMvZG9tL2RvbWpp
dC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwKKyAgICAgICAgICAgICAg
IGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtbGljbS5odG1sCisgICAg
ICAgICAgICAgICBqcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwK
KworICAgICAgICAqIGRvbS9Ob25FbGVtZW50UGFyZW50Tm9kZS5pZGw6CisgICAgICAgICogZG9t
aml0L0RPTUpJVENoZWNrRE9NLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OlR5cGVDaGVj
a2VyPERvY3VtZW50RnJhZ21lbnQ+OjpicmFuY2hJZkZhaWwpOgorICAgICAgICAqIGRvbWppdC9E
T01KSVRIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5jaElmRG9jdW1l
bnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01KSVQ6OmJyYW5jaElmTm90RG9jdW1l
bnRGcmFnbWVudCk6CisKIDIwMTYtMTEtMDQgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIEFYOiBbQVRLXSBBdHRlbXB0aW5nIHRvIGNsZWFyIHNlbGVjdGlv
biBvbiBBUklBIGxpc3Rib3hlcyByZXN1bHRzIGluIGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9uRWxlbWVudFBhcmVudE5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vbkVsZW1lbnRQYXJlbnROb2RlLmlkbAppbmRleCBkOGY0MDIwNzYzMjk3MWQyYTFjODk2MWMw
YmRjNjE4MzEzMWZhYTg3Li45MjIzODcwM2YyYWQ3M2ZmNzQ4OGE0NTUzNjU3YTNiNzAyZTE5MGJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9uRWxlbWVudFBhcmVudE5vZGUuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob25FbGVtZW50UGFyZW50Tm9kZS5pZGwKQEAgLTI4
LDUgKzI4LDUgQEAKIFsKICAgICBOb0ludGVyZmFjZU9iamVjdCwKIF0gaW50ZXJmYWNlIE5vbkVs
ZW1lbnRQYXJlbnROb2RlIHsKLSAgICBFbGVtZW50IGdldEVsZW1lbnRCeUlkKFtSZXF1aXJlc0V4
aXN0aW5nQXRvbWljU3RyaW5nXSBET01TdHJpbmcgZWxlbWVudElkKTsKKyAgICBbRE9NSklUPVJl
YWRET01dIEVsZW1lbnQ/IGdldEVsZW1lbnRCeUlkKFtSZXF1aXJlc0V4aXN0aW5nQXRvbWljU3Ry
aW5nXSBET01TdHJpbmcgZWxlbWVudElkKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb21qaXQvRE9NSklUQ2hlY2tET00uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRD
aGVja0RPTS5oCmluZGV4IDA4ZjUwMjIxMjEwMWIzM2FiMTQzOTA3YzhiNGYyODllMWNjMDhjMDcu
LjFiYTMxMDYzMTg0ODNkYTI4Mjk0Y2E1ZjU5NDUyMjcxNGQ3MDVlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRDaGVja0RPTS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbWppdC9ET01KSVRDaGVja0RPTS5oCkBAIC01OCw2ICs1OCwxNCBAQCBzdHJ1Y3QgVHlwZUNo
ZWNrZXI8RG9jdW1lbnQ+IHsKIH07CiAKIHRlbXBsYXRlPD4KK3N0cnVjdCBUeXBlQ2hlY2tlcjxE
b2N1bWVudEZyYWdtZW50PiB7CisgICAgc3RhdGljIENDYWxsSGVscGVyczo6SnVtcCBicmFuY2hJ
ZkZhaWwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBkb20pCisgICAgeworICAgICAgICByZXR1
cm4gRE9NSklUOjpicmFuY2hJZk5vdERvY3VtZW50RnJhZ21lbnQoaml0LCBkb20pOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4KIHN0cnVjdCBUeXBlQ2hlY2tlcjxFdmVudD4gewogICAgIHN0YXRp
YyBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJhbmNoSWZGYWlsKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgZG9tKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbWppdC9ET01KSVRI
ZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUSGVscGVycy5oCmluZGV4IDU0
YjdhYTNlYjc2MWE4OWNiYzgwN2QzYWUwZDFjZDFlZDhlOTc3MTQuLmIyYTM2ODM1OTQ1NTU3ZDMy
Mzg5MTA2ZGVmZDMwMmIwMWRmMjFiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbWpp
dC9ET01KSVRIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9taml0L0RPTUpJVEhlbHBl
cnMuaApAQCAtMTUyLDYgKzE1MiwxNiBAQCBpbmxpbmUgQ0NhbGxIZWxwZXJzOjpKdW1wIGJyYW5j
aElmTm90RWxlbWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHRhcmdldCkKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNDOjpKU1R5cGUoSlNFbGVtZW50VHlwZSkpKTsK
IH0KIAoraW5saW5lIENDYWxsSGVscGVyczo6SnVtcCBicmFuY2hJZkRvY3VtZW50RnJhZ21lbnQo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJnZXQpCit7CisgICAgcmV0dXJuIGppdC5icmFu
Y2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShKU0RvY3VtZW50RnJhZ21lbnROb2RlVHlwZSkp
OworfQorCitpbmxpbmUgQ0NhbGxIZWxwZXJzOjpKdW1wIGJyYW5jaElmTm90RG9jdW1lbnRGcmFn
bWVudChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHRhcmdldCkKK3sKKyAgICByZXR1cm4gaml0
LmJyYW5jaElmTm90VHlwZSh0YXJnZXQsIEpTQzo6SlNUeXBlKEpTRG9jdW1lbnRGcmFnbWVudE5v
ZGVUeXBlKSk7Cit9CisKIGlubGluZSBDQ2FsbEhlbHBlcnM6Okp1bXAgYnJhbmNoSWZEb2N1bWVu
dFdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyB0YXJnZXQpCiB7CiAgICAgcmV0dXJu
IGppdC5icmFuY2hJZlR5cGUodGFyZ2V0LCBKU0M6OkpTVHlwZShKU0RvY3VtZW50V3JhcHBlclR5
cGUpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA1NTRjNTA5ZmE2ZmExYTAxYTAzOTM2YWY4ZTcxZjA2NTZmY2I0ZDkzLi4z
N2IwN2U2NDMwMWYxYThjZmVlNjFlZGM0ZTA4OTE4NWE2NTEyNDUyIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTYtMTEtMDQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKKyAgICAgICAgW0RPTUpJVF0gQWRkIERPTUpJVDo6U2lnbmF0dXJlIGFubm90YXRpb24gdG8g
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQzNTYKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXps
by4KKworICAgICAgICAqIGpzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQt
Y2hhbmdlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9kb21qaXQtZnVu
Y3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtY2hhbmdlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICoganMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1s
aWNtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2RvbWppdC1mdW5jdGlv
bi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9k
b21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQuaHRtbDogQWRkZWQuCisKIDIwMTYtMTEt
MDQgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFYOiBb
QVRLXSBBdHRlbXB0aW5nIHRvIGNsZWFyIHNlbGVjdGlvbiBvbiBBUklBIGxpc3Rib3hlcyByZXN1
bHRzIGluIGNyYXNoCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0
aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNoYW5nZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
anMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xNjZlYTlkYTRkMzAyNmQ2YzNjMGUzOGYzNTQ4N2IxNjJiZjA2OGE2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1n
ZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2VkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1Rl
c3QgTElDTS1lZCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCB3b3JrIGNvcnJl
Y3RseSB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZXBsYWNlZC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQt
ZWxlbWVudC1ieS1pZC1jaGFuZ2VkLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1
bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWNoYW5nZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjhkODAw
ZDU4MzM1MTUwMmYxYzc1YzEyOWUwOThhMjkyNGNmMWRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1jaGFuZ2Vk
Lmh0bWwKQEAgLTAsMCArMSw0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJwYXJlbnROb2RlIj4KKzxkaXYgaWQ9InByZXZpb3Vz
U2libGluZyI+PC9kaXY+PGRpdiBpZD0idGFyZ2V0Ij48ZGl2IGlkPSJmaXJzdENoaWxkIj48L2Rp
dj48ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9Im5leHRTaWJsaW5nIj48
L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgTElDTS1lZCBET01K
SVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQgd2lsbCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSBm
dW5jdGlvbiBpcyByZXBsYWNlZC4nKTsKKworZnVuY3Rpb24gdGVzdChmbGFnKSB7CisgICAgdmFy
IHJldCA9IDA7CisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQ29jb2En
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHJldCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2RlVHlwZTsKKyAgICAgICAgcmV0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5vZGVUeXBlOworICAgICAgICBpZiAo
aSA9PT0gMTAwICYmIGZsYWcpCisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9
IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gdGV4dDsgfTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5vZGVUeXBlOworICAgICAgICByZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iikubm9kZVR5cGU7CisgICAgfQorICAgIHJldHVybiBy
ZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1bmN0aW9uICgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IHRlc3QoZmFsc2UpOworICAgICAgICBz
aG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAgICB9CisgICAgdmFyIG9yaWdpbmFsID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ7CisgICAgcmVzdWx0ID0gdGVzdCh0cnVlKTsKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCA9IG9yaWdpbmFsOworICAgIHNob3VsZEJlKGByZXN1bHRg
LCBgTm9kZS5URVhUX05PREVgLCB0cnVlKTsKK30oKSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0
LWVsZW1lbnQtYnktaWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1m
dW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlMTRk
OGRhYmIxYmM4NDU3MDM0MTg3NzUyNWFkYjI2MGIzMzZlYQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsOCBAQAorVGVzdCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5
SWQgd2lsbCBiZSBMSUNNLWVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLWxp
Y20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQt
ZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmUxNGQ4ZGFiYjFi
Yzg0NTcwMzQxODc3NTI1YWRiMjYwYjMzNmVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDggQEAKK1Rlc3QgRE9NSklUIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlk
IHdpbGwgYmUgTElDTS1lZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1mdW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNt
Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0aW9uLWdldC1lbGVtZW50LWJ5
LWlkLWxpY20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWJlNTBkMDQ3ZWJjNWRjZDYzNDEwMmEyZWU5NmUy
M2Y5NjZkNTcyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1m
dW5jdGlvbi1nZXQtZWxlbWVudC1ieS1pZC1saWNtLmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IGlkPSJw
YXJlbnROb2RlIj4KKzxkaXYgaWQ9InByZXZpb3VzU2libGluZyI+PC9kaXY+PGRpdiBpZD0idGFy
Z2V0Ij48ZGl2IGlkPSJmaXJzdENoaWxkIj48L2Rpdj48ZGl2IGlkPSJsYXN0Q2hpbGQiPjwvZGl2
PjwvZGl2PjxkaXYgaWQ9Im5leHRTaWJsaW5nIj48L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oJ1Rlc3QgRE9NSklUIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkIHdpbGwgYmUg
TElDTS1lZC4nKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICB2YXIgcmV0ID0gMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHJldCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2RlVHlwZTsKKyAgICAgICAgcmV0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRhcmdldCIpLm5vZGVUeXBlOworICAgICAgICByZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iikubm9kZVR5cGU7CisgICAgICAgIHJldCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5ub2RlVHlwZTsKKyAgICB9CisgICAgcmV0dXJu
IHJldDsKK30KK3ZhciByZXN1bHQ7CisoZnVuY3Rpb24gKCkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gdGVzdCgpOworICAgICAgICBzaG91
bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAgICB9Cit9KCkpOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1bmN0
aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWZ1
bmN0aW9uLWdldC1lbGVtZW50LWJ5LWlkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM2ZDEyMmZjN2Y5MTlm
YmUwYTZkMGQ5NmI2MWJiYWMyNjQ2Y2IyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2pzL2RvbS9kb21qaXQtZnVuY3Rpb24tZ2V0LWVsZW1lbnQtYnktaWQuaHRtbApAQCAtMCwwICsx
LDQwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxkaXYgaWQ9InBhcmVudE5vZGUiPgorPGRpdiBpZD0icHJldmlvdXNTaWJsaW5nIj48L2Rpdj48
ZGl2IGlkPSJ0YXJnZXQiPjxkaXYgaWQ9ImZpcnN0Q2hpbGQiPjwvZGl2PjxkaXYgaWQ9Imxhc3RD
aGlsZCI+PC9kaXY+PC9kaXY+PGRpdiBpZD0ibmV4dFNpYmxpbmciPjwvZGl2PgorPC9kaXY+CisK
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBET01KSVQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5
SWQgd2lsbCBiZSBMSUNNLWVkLicpOworCitmdW5jdGlvbiB0ZXN0KGRvYywgaWQpIHsKKyAgICB2
YXIgcmV0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IHJldCA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCkubm9kZVR5cGU7CisgICAgfQorICAgIHJldHVy
biByZXQ7Cit9Cit2YXIgcmVzdWx0OworKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZnJhZ21lbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3Rh
cmdldDInKTsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gdGVzdChkb2N1bWVudCwgJ3Rh
cmdldCcpOworICAgICAgICBzaG91bGRCZShgcmVzdWx0YCwgYDFgLCB0cnVlKTsKKyAgICAgICAg
cmVzdWx0ID0gdGVzdChmcmFnbWVudCwgJ3RhcmdldDInKTsKKyAgICAgICAgc2hvdWxkQmUoYHJl
c3VsdGAsIGAxYCwgdHJ1ZSk7CisgICAgfQorfSgpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>