**** New definitions: A, type: {Id:i8, V:s}*
**** New definitions: B, type: {V:s}*
**** New definitions: C, type: {V:s}?*

> KeyJoin(x:A, y:A,     V,      V, (x, y), (x, null))
KeyJoin(x : A, y : A, V, V, (x, y), (x, null)) : ({Id:i8, V:s}, {Id:i8, V:s}?)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(A), [map:2] Global(A), GetField(Scope(1), V), GetField(Scope(2), V), (Scope(1), Ref<{Id:i8, V:s}?>(Scope(2))):({Id:i8, V:s}, {Id:i8, V:s}?), (Scope(1), null:{Id:i8, V:s}?):({Id:i8, V:s}, {Id:i8, V:s}?)):({Id:i8, V:s}, {Id:i8, V:s}?)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?)*
Sequence: Seq<({i8,str},{i8,str})>
 0) ({ Id: 0, V: <null> }, <null>)
 1) ({ Id: 1, V: A }, { Id: 1, V: A })
 2) ({ Id: 2, V: b }, { Id: 2, V: b })
 3) ({ Id: 3, V: <null> }, <null>)
 4) ({ Id: 4, V: B }, { Id: 4, V: B })
 5) ({ Id: 5, V: a }, { Id: 5, V: a })
 6) ({ Id: 6, V:  }, { Id: 6, V:  })
 7) ({ Id: 7, V: <null> }, <null>)
*** Ctx ping count: 7
    [0:3](7=0+0+7): KeyJoin(*1: A, *2: A, *1.V, *2.V, (*1, Ref<{Id:i8, V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:A, y:A, [~] V,      V, (x, y), (x, null))
KeyJoin(x : A, y : A, [~] V, V, (x, y), (x, null)) : ({Id:i8, V:s}, {Id:i8, V:s}?)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(A), [map:2] Global(A), [~] GetField(Scope(1), V), GetField(Scope(2), V), (Scope(1), Ref<{Id:i8, V:s}?>(Scope(2))):({Id:i8, V:s}, {Id:i8, V:s}?), (Scope(1), null:{Id:i8, V:s}?):({Id:i8, V:s}, {Id:i8, V:s}?)):({Id:i8, V:s}, {Id:i8, V:s}?)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?)*
Sequence: Seq<({i8,str},{i8,str})>
 0) ({ Id: 0, V: <null> }, <null>)
 1) ({ Id: 1, V: A }, { Id: 1, V: A })
 2) ({ Id: 1, V: A }, { Id: 5, V: a })
 3) ({ Id: 2, V: b }, { Id: 2, V: b })
 4) ({ Id: 2, V: b }, { Id: 4, V: B })
 5) ({ Id: 3, V: <null> }, <null>)
 6) ({ Id: 4, V: B }, { Id: 2, V: b })
 7) ({ Id: 4, V: B }, { Id: 4, V: B })
 8) ({ Id: 5, V: a }, { Id: 1, V: A })
 9) ({ Id: 5, V: a }, { Id: 5, V: a })
10) ({ Id: 6, V:  }, { Id: 6, V:  })
11) ({ Id: 7, V: <null> }, <null>)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*1: A, *2: A, [~] *1.V, *2.V, (*1, Ref<{Id:i8, V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:A, y:A,     V, [~]  V, (x, y), (x, null))
KeyJoin(x : A, y : A, V, [~] V, (x, y), (x, null)) : ({Id:i8, V:s}, {Id:i8, V:s}?)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(A), [map:2] Global(A), GetField(Scope(1), V), [~] GetField(Scope(2), V), (Scope(1), Ref<{Id:i8, V:s}?>(Scope(2))):({Id:i8, V:s}, {Id:i8, V:s}?), (Scope(1), null:{Id:i8, V:s}?):({Id:i8, V:s}, {Id:i8, V:s}?)):({Id:i8, V:s}, {Id:i8, V:s}?)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?)*
Sequence: Seq<({i8,str},{i8,str})>
 0) ({ Id: 0, V: <null> }, <null>)
 1) ({ Id: 1, V: A }, { Id: 1, V: A })
 2) ({ Id: 1, V: A }, { Id: 5, V: a })
 3) ({ Id: 2, V: b }, { Id: 2, V: b })
 4) ({ Id: 2, V: b }, { Id: 4, V: B })
 5) ({ Id: 3, V: <null> }, <null>)
 6) ({ Id: 4, V: B }, { Id: 2, V: b })
 7) ({ Id: 4, V: B }, { Id: 4, V: B })
 8) ({ Id: 5, V: a }, { Id: 1, V: A })
 9) ({ Id: 5, V: a }, { Id: 5, V: a })
10) ({ Id: 6, V:  }, { Id: 6, V:  })
11) ({ Id: 7, V: <null> }, <null>)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*1: A, *2: A, *1.V, [~] *2.V, (*1, Ref<{Id:i8, V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:B, y:B,     x,      y, (x, y), (x, null))
KeyJoin(x : B, y : B, x, y, (x, y), (x, null)) : ({V:s}, {V:s}?)*
BndKind:Call, Type:({V:s}, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(B), [map:2] Global(B), Scope(1), Scope(2), (Scope(1), Ref<{V:s}?>(Scope(2))):({V:s}, {V:s}?), (Scope(1), null:{V:s}?):({V:s}, {V:s}?)):({V:s}, {V:s}?)*))
Func sig: (<ctx>:x, B:{V:s}*) to ({V:s}, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: <null> }, <null>)
 1) ({ V: A }, { V: A })
 2) ({ V: b }, { V: b })
 3) ({ V: <null> }, <null>)
 4) ({ V: B }, { V: B })
 5) ({ V: a }, { V: a })
 6) ({ V:  }, { V:  })
 7) ({ V: <null> }, <null>)
*** Ctx ping count: 7
    [0:3](7=0+0+7): KeyJoin(*1: B, *2: B, *1, *2, (*1, Ref<{V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:B, y:B, [~] x,      y, (x, y), (x, null))
KeyJoin(x : B, y : B, [~] x, y, (x, y), (x, null)) : ({V:s}, {V:s}?)*
BndKind:Call, Type:({V:s}, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(B), [map:2] Global(B), [~] Scope(1), Scope(2), (Scope(1), Ref<{V:s}?>(Scope(2))):({V:s}, {V:s}?), (Scope(1), null:{V:s}?):({V:s}, {V:s}?)):({V:s}, {V:s}?)*))
Func sig: (<ctx>:x, B:{V:s}*) to ({V:s}, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: <null> }, <null>)
 1) ({ V: A }, { V: A })
 2) ({ V: A }, { V: a })
 3) ({ V: b }, { V: b })
 4) ({ V: b }, { V: B })
 5) ({ V: <null> }, <null>)
 6) ({ V: B }, { V: b })
 7) ({ V: B }, { V: B })
 8) ({ V: a }, { V: A })
 9) ({ V: a }, { V: a })
10) ({ V:  }, { V:  })
11) ({ V: <null> }, <null>)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*1: B, *2: B, [~] *1, *2, (*1, Ref<{V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:B, y:B,     x, [~]  y, (x, y), (x, null))
KeyJoin(x : B, y : B, x, [~] y, (x, y), (x, null)) : ({V:s}, {V:s}?)*
BndKind:Call, Type:({V:s}, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(B), [map:2] Global(B), Scope(1), [~] Scope(2), (Scope(1), Ref<{V:s}?>(Scope(2))):({V:s}, {V:s}?), (Scope(1), null:{V:s}?):({V:s}, {V:s}?)):({V:s}, {V:s}?)*))
Func sig: (<ctx>:x, B:{V:s}*) to ({V:s}, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: <null> }, <null>)
 1) ({ V: A }, { V: A })
 2) ({ V: A }, { V: a })
 3) ({ V: b }, { V: b })
 4) ({ V: b }, { V: B })
 5) ({ V: <null> }, <null>)
 6) ({ V: B }, { V: b })
 7) ({ V: B }, { V: B })
 8) ({ V: a }, { V: A })
 9) ({ V: a }, { V: a })
10) ({ V:  }, { V:  })
11) ({ V: <null> }, <null>)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*1: B, *2: B, *1, [~] *2, (*1, Ref<{V:s}?>(*2)), (*1, null))
###
> KeyJoin(x:C, y:C,     x,      y, (x, y))
KeyJoin(x : C, y : C, x, y, (x, y)) : ({V:s}?, {V:s}?)*
BndKind:Call, Type:({V:s}?, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(C), [map:2] Global(C), Scope(1), Scope(2), (Scope(1), Scope(2)):({V:s}?, {V:s}?)):({V:s}?, {V:s}?)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: A }, { V: A })
 1) ({ V: b }, { V: b })
 2) ({ V: B }, { V: B })
 3) ({ V: a }, { V: a })
 4) ({ V:  }, { V:  })
*** Ctx ping count: 14
    [0:3](14=3+2+9): KeyJoin(*1: C, *2: C, *1, *2, (*1, *2))
###
> KeyJoin(x:C, y:C, [~] x,      y, (x, y))
KeyJoin(x : C, y : C, [~] x, y, (x, y)) : ({V:s}?, {V:s}?)*
BndKind:Call, Type:({V:s}?, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(C), [map:2] Global(C), [~] Scope(1), Scope(2), (Scope(1), Scope(2)):({V:s}?, {V:s}?)):({V:s}?, {V:s}?)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: A }, { V: A })
 1) ({ V: A }, { V: a })
 2) ({ V: b }, { V: b })
 3) ({ V: b }, { V: B })
 4) ({ V: B }, { V: b })
 5) ({ V: B }, { V: B })
 6) ({ V: a }, { V: A })
 7) ({ V: a }, { V: a })
 8) ({ V:  }, { V:  })
*** Ctx ping count: 13
    [0:3](13=3+2+8): KeyJoin(*1: C, *2: C, [~] *1, *2, (*1, *2))
###
> KeyJoin(x:C, y:C,     x, [~]  y, (x, y))
KeyJoin(x : C, y : C, x, [~] y, (x, y)) : ({V:s}?, {V:s}?)*
BndKind:Call, Type:({V:s}?, {V:s}?)*, Bnd:(Call(∂.KeyJoin([map:1] Global(C), [map:2] Global(C), Scope(1), [~] Scope(2), (Scope(1), Scope(2)):({V:s}?, {V:s}?)):({V:s}?, {V:s}?)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?)*
Sequence: Seq<({str},{str})>
 0) ({ V: A }, { V: A })
 1) ({ V: A }, { V: a })
 2) ({ V: b }, { V: b })
 3) ({ V: b }, { V: B })
 4) ({ V: B }, { V: b })
 5) ({ V: B }, { V: B })
 6) ({ V: a }, { V: A })
 7) ({ V: a }, { V: a })
 8) ({ V:  }, { V:  })
*** Ctx ping count: 13
    [0:3](13=3+2+8): KeyJoin(*1: C, *2: C, *1, [~] *2, (*1, *2))
###
> KeyJoin(x:A, y:A,     V if # < 100 else null,     V if # < 100 else null, (x, y, #x, #y))
KeyJoin(x : A, y : A, V if # $< 100 else null, V if # $< 100 else null, (x, y, #x, #y)) : ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Scope(4), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 1) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 2) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 3) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
 4) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
*** Ctx ping count: 10
    [0:3](10=2+1+7): KeyJoin(*2: A, *4: A, If(#1 @< 100, *2.V, str(<null>)), If(#3 @< 100, *4.V, str(<null>)), (*2, *4, #1, #3))
###
> KeyJoin(x:A, y:A, [~] V if # < 100 else null,     V if # < 100 else null, (x, y, #x, #y))
KeyJoin(x : A, y : A, [~] V if # $< 100 else null, V if # $< 100 else null, (x, y, #x, #y)) : ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), [~] If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Scope(4), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 1) ({ Id: 1, V: A }, { Id: 5, V: a }, 1, 5)
 2) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 3) ({ Id: 2, V: b }, { Id: 4, V: B }, 2, 4)
 4) ({ Id: 4, V: B }, { Id: 2, V: b }, 4, 2)
 5) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 6) ({ Id: 5, V: a }, { Id: 1, V: A }, 5, 1)
 7) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
 8) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
*** Ctx ping count: 9
    [0:3](9=2+1+6): KeyJoin(*2: A, *4: A, [~] If(#1 @< 100, *2.V, str(<null>)), If(#3 @< 100, *4.V, str(<null>)), (*2, *4, #1, #3))
###
> KeyJoin(x:A, y:A,     V if # < 100 else null, [~] V if # < 100 else null, (x, y, #x, #y))
KeyJoin(x : A, y : A, V if # $< 100 else null, [~] V if # $< 100 else null, (x, y, #x, #y)) : ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), [~] If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Scope(4), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 1) ({ Id: 1, V: A }, { Id: 5, V: a }, 1, 5)
 2) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 3) ({ Id: 2, V: b }, { Id: 4, V: B }, 2, 4)
 4) ({ Id: 4, V: B }, { Id: 2, V: b }, 4, 2)
 5) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 6) ({ Id: 5, V: a }, { Id: 1, V: A }, 5, 1)
 7) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
 8) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
*** Ctx ping count: 9
    [0:3](9=2+1+6): KeyJoin(*2: A, *4: A, If(#1 @< 100, *2.V, str(<null>)), [~] If(#3 @< 100, *4.V, str(<null>)), (*2, *4, #1, #3))
###
> KeyJoin(x:A, y:A,     V if # < 100 else null,     V if # < 100 else null, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : A, y : A, V if # $< 100 else null, V if # $< 100 else null, (x, y, #x, #y), (x, null, #x, -1)) : ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Ref<{Id:i8, V:s}?>(Scope(4)), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8), (Scope(2), null:{Id:i8, V:s}?, Scope(1), -1:i8):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 0, V: <null> }, <null>, 0, -1)
 1) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 2) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 3) ({ Id: 3, V: <null> }, <null>, 3, -1)
 4) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 5) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
 6) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
 7) ({ Id: 7, V: <null> }, <null>, 7, -1)
*** Ctx ping count: 7
    [0:3](7=0+0+7): KeyJoin(*2: A, *4: A, If(#1 @< 100, *2.V, str(<null>)), If(#3 @< 100, *4.V, str(<null>)), (*2, Ref<{Id:i8, V:s}?>(*4), #1, #3), (*2, null, #1, -1))
###
> KeyJoin(x:A, y:A, [~] V if # < 100 else null,     V if # < 100 else null, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : A, y : A, [~] V if # $< 100 else null, V if # $< 100 else null, (x, y, #x, #y), (x, null, #x, -1)) : ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), [~] If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Ref<{Id:i8, V:s}?>(Scope(4)), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8), (Scope(2), null:{Id:i8, V:s}?, Scope(1), -1:i8):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 0, V: <null> }, <null>, 0, -1)
 1) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 2) ({ Id: 1, V: A }, { Id: 5, V: a }, 1, 5)
 3) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 4) ({ Id: 2, V: b }, { Id: 4, V: B }, 2, 4)
 5) ({ Id: 3, V: <null> }, <null>, 3, -1)
 6) ({ Id: 4, V: B }, { Id: 2, V: b }, 4, 2)
 7) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 8) ({ Id: 5, V: a }, { Id: 1, V: A }, 5, 1)
 9) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
10) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
11) ({ Id: 7, V: <null> }, <null>, 7, -1)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*2: A, *4: A, [~] If(#1 @< 100, *2.V, str(<null>)), If(#3 @< 100, *4.V, str(<null>)), (*2, Ref<{Id:i8, V:s}?>(*4), #1, #3), (*2, null, #1, -1))
###
> KeyJoin(x:A, y:A,     V if # < 100 else null, [~] V if # < 100 else null, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : A, y : A, V if # $< 100 else null, [~] V if # $< 100 else null, (x, y, #x, #y), (x, null, #x, -1)) : ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
BndKind:Call, Type:({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(A), [map:4] Global(A), If(Cmp(Scope(1) @< 100:i8), GetField(Scope(2), V), str(<null>)), [~] If(Cmp(Scope(3) @< 100:i8), GetField(Scope(4), V), str(<null>)), (Scope(2), Ref<{Id:i8, V:s}?>(Scope(4)), Scope(1), Scope(3)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8), (Scope(2), null:{Id:i8, V:s}?, Scope(1), -1:i8):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)):({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*))
Func sig: (<ctx>:x, A:{Id:i8, V:s}*) to ({Id:i8, V:s}, {Id:i8, V:s}?, i8, i8)*
Sequence: Seq<({i8,str},{i8,str},i8,i8)>
 0) ({ Id: 0, V: <null> }, <null>, 0, -1)
 1) ({ Id: 1, V: A }, { Id: 1, V: A }, 1, 1)
 2) ({ Id: 1, V: A }, { Id: 5, V: a }, 1, 5)
 3) ({ Id: 2, V: b }, { Id: 2, V: b }, 2, 2)
 4) ({ Id: 2, V: b }, { Id: 4, V: B }, 2, 4)
 5) ({ Id: 3, V: <null> }, <null>, 3, -1)
 6) ({ Id: 4, V: B }, { Id: 2, V: b }, 4, 2)
 7) ({ Id: 4, V: B }, { Id: 4, V: B }, 4, 4)
 8) ({ Id: 5, V: a }, { Id: 1, V: A }, 5, 1)
 9) ({ Id: 5, V: a }, { Id: 5, V: a }, 5, 5)
10) ({ Id: 6, V:  }, { Id: 6, V:  }, 6, 6)
11) ({ Id: 7, V: <null> }, <null>, 7, -1)
*** Ctx ping count: 6
    [0:3](6=0+0+6): KeyJoin(*2: A, *4: A, If(#1 @< 100, *2.V, str(<null>)), [~] If(#3 @< 100, *4.V, str(<null>)), (*2, Ref<{Id:i8, V:s}?>(*4), #1, #3), (*2, null, #1, -1))
###
> KeyJoin(x:C, y:C,     x,      y, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : C, y : C, x, y, (x, y, #x, #y), (x, null, #x, -1)) : ({V:s}?, {V:s}?, i8, i8)*
BndKind:Call, Type:({V:s}?, {V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(C), [map:4] Global(C), Scope(2), Scope(4), (Scope(2), Scope(4), Scope(1), Scope(3)):({V:s}?, {V:s}?, i8, i8), (Scope(2), null:{V:s}?, Scope(1), -1:i8):({V:s}?, {V:s}?, i8, i8)):({V:s}?, {V:s}?, i8, i8)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?, i8, i8)*
Sequence: Seq<({str},{str},i8,i8)>
 0) (<null>, <null>, 0, -1)
 1) ({ V: <null> }, <null>, 1, -1)
 2) ({ V: A }, { V: A }, 2, 2)
 3) ({ V: b }, { V: b }, 3, 3)
 4) ({ V: <null> }, <null>, 4, -1)
 5) ({ V: B }, { V: B }, 5, 5)
 6) ({ V: a }, { V: a }, 6, 6)
 7) ({ V:  }, { V:  }, 7, 7)
 8) ({ V: <null> }, <null>, 8, -1)
 9) (<null>, <null>, 9, -1)
*** Ctx ping count: 9
    [0:3](9=0+0+9): KeyJoin(*2: C, *4: C, *2, *4, (*2, *4, #1, #3), (*2, null, #1, -1))
###
> KeyJoin(x:C, y:C, [~] x,      y, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : C, y : C, [~] x, y, (x, y, #x, #y), (x, null, #x, -1)) : ({V:s}?, {V:s}?, i8, i8)*
BndKind:Call, Type:({V:s}?, {V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(C), [map:4] Global(C), [~] Scope(2), Scope(4), (Scope(2), Scope(4), Scope(1), Scope(3)):({V:s}?, {V:s}?, i8, i8), (Scope(2), null:{V:s}?, Scope(1), -1:i8):({V:s}?, {V:s}?, i8, i8)):({V:s}?, {V:s}?, i8, i8)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?, i8, i8)*
Sequence: Seq<({str},{str},i8,i8)>
 0) (<null>, <null>, 0, -1)
 1) ({ V: <null> }, <null>, 1, -1)
 2) ({ V: A }, { V: A }, 2, 2)
 3) ({ V: A }, { V: a }, 2, 6)
 4) ({ V: b }, { V: b }, 3, 3)
 5) ({ V: b }, { V: B }, 3, 5)
 6) ({ V: <null> }, <null>, 4, -1)
 7) ({ V: B }, { V: b }, 5, 3)
 8) ({ V: B }, { V: B }, 5, 5)
 9) ({ V: a }, { V: A }, 6, 2)
10) ({ V: a }, { V: a }, 6, 6)
11) ({ V:  }, { V:  }, 7, 7)
12) ({ V: <null> }, <null>, 8, -1)
13) (<null>, <null>, 9, -1)
*** Ctx ping count: 8
    [0:3](8=0+0+8): KeyJoin(*2: C, *4: C, [~] *2, *4, (*2, *4, #1, #3), (*2, null, #1, -1))
###
> KeyJoin(x:C, y:C,     x, [~]  y, (x, y, #x, #y), (x, null, #x, -1))
KeyJoin(x : C, y : C, x, [~] y, (x, y, #x, #y), (x, null, #x, -1)) : ({V:s}?, {V:s}?, i8, i8)*
BndKind:Call, Type:({V:s}?, {V:s}?, i8, i8)*, Bnd:(Call(∂.KeyJoin([map:2] Global(C), [map:4] Global(C), Scope(2), [~] Scope(4), (Scope(2), Scope(4), Scope(1), Scope(3)):({V:s}?, {V:s}?, i8, i8), (Scope(2), null:{V:s}?, Scope(1), -1:i8):({V:s}?, {V:s}?, i8, i8)):({V:s}?, {V:s}?, i8, i8)*))
Func sig: (<ctx>:x, C:{V:s}?*) to ({V:s}?, {V:s}?, i8, i8)*
Sequence: Seq<({str},{str},i8,i8)>
 0) (<null>, <null>, 0, -1)
 1) ({ V: <null> }, <null>, 1, -1)
 2) ({ V: A }, { V: A }, 2, 2)
 3) ({ V: A }, { V: a }, 2, 6)
 4) ({ V: b }, { V: b }, 3, 3)
 5) ({ V: b }, { V: B }, 3, 5)
 6) ({ V: <null> }, <null>, 4, -1)
 7) ({ V: B }, { V: b }, 5, 3)
 8) ({ V: B }, { V: B }, 5, 5)
 9) ({ V: a }, { V: A }, 6, 2)
10) ({ V: a }, { V: a }, 6, 6)
11) ({ V:  }, { V:  }, 7, 7)
12) ({ V: <null> }, <null>, 8, -1)
13) (<null>, <null>, 9, -1)
*** Ctx ping count: 8
    [0:3](8=0+0+8): KeyJoin(*2: C, *4: C, *2, [~] *4, (*2, *4, #1, #3), (*2, null, #1, -1))
###
