protected override void OnProcessOutputSchema(MutableObject newSchema)
        {
            foreach (var entry in ScoreEntries.GetEntries(newSchema))
            {
                RcsPatchingTarget.SetValue(true, entry);
                NdsPatchingTarget.SetValue(false, entry);
            }

            base.OnProcessOutputSchema(newSchema);
        }
        public override IEnumerator ReceivePayload(VisualPayload payload)
        {
            // construct offlines dictionary
            var offlines = new Dictionary <IntPair, CsOfflineReason>();

            foreach (var entry in CsOfflineScope.GetEntries(payload.Data))
            {
                var teamId        = OfflineTeamId.GetValue(entry);
                var csId          = OfflineCsId.GetValue(entry);
                var offlineReason = OfflineReason.GetValue(entry);

                offlines[new IntPair(csId, teamId)] = offlineReason;
            }

            // check each score entry against the offlines dictionary
            foreach (var entry in ScoreEntries.GetEntries(payload.Data))
            {
                var teamId = ScoreTeamId.GetValue(entry);
                var csId   = ScoreCsId.GetValue(entry);
                var idPair = new IntPair(csId, teamId);

                bool patchingRcs = false;
                bool patchingNds = false;
                if (offlines.ContainsKey(idPair))
                {
                    var reason = offlines[idPair];
                    patchingRcs = reason == CsOfflineReason.Rcs || reason == CsOfflineReason.Both;
                    patchingNds = reason == CsOfflineReason.Ids || reason == CsOfflineReason.Both;
                }
                RcsPatchingTarget.SetValue(patchingRcs, entry);
                NdsPatchingTarget.SetValue(patchingNds, entry);
            }

            var iterator = Router.TransmitAll(payload);

            while (iterator.MoveNext())
            {
                yield return(null);
            }
        }