public static void CollectElimination(EliminateContext ctx)
	{
		var extensionResults = new List<Pos2D>();
		foreach (var record in ctx.records)
		{
			foreach (var scatter in record.rule.scatters)
			{
				ctx.sandbox[record.y + scatter.y, record.x + scatter.x] = true;
			}
			foreach (var extension in ctx.extensionRules)
			{
				if (extension.Apply(ctx.container, record, extensionResults))
				{
					for (int i = 0, len = extensionResults.Count; i < len; ++i)
					{
						var e = extensionResults[i];
						ctx.sandbox[e.y, e.x] = true;
					}
					extensionResults.Clear();
				}
			}
		}

		ctx.container.ForeachSlot((x, y, slot)=>{
			if (null != slot && slot.slotAttribute.category == SlotAttribute.Category.SPECIAL){
				slot.slotAttribute.specialty.Trigger(SlotSpecialty.TRIGGER_STAGE_ELIMINATION,
				                                     ctx.container, 
				                                     ctx.sandbox);
			}
		});
	}
    public static void CollectElimination(EliminateContext ctx)
    {
        var extensionResults = new List <Pos2D>();

        foreach (var record in ctx.records)
        {
            foreach (var scatter in record.rule.scatters)
            {
                ctx.sandbox[record.y + scatter.y, record.x + scatter.x] = true;
            }
            foreach (var extension in ctx.extensionRules)
            {
                if (extension.Apply(ctx.container, record, extensionResults))
                {
                    for (int i = 0, len = extensionResults.Count; i < len; ++i)
                    {
                        var e = extensionResults[i];
                        ctx.sandbox[e.y, e.x] = true;
                    }
                    extensionResults.Clear();
                }
            }
        }

        ctx.container.ForeachSlot((x, y, slot) => {
            if (null != slot && slot.slotAttribute.category == SlotAttribute.Category.SPECIAL)
            {
                slot.slotAttribute.specialty.Trigger(SlotSpecialty.TRIGGER_STAGE_ELIMINATION,
                                                     ctx.container,
                                                     ctx.sandbox);
            }
        });
    }