public void ResetLeap()
        {
            //IDictionary<int, object> setBind = binding.ids[nodeBsIK];
            //Core.TLType param = setBind[0] as Core.TLType;
            //Core.TLType.Exec setNode = (Core.TLType.Exec)((Core.TLType)setBind[0]).timeline;
            Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
            //TO-DO Finish
            //int setLeapNext = setBind.node[stream][setBindProperty.binding].leapNext;
            int setLeapNext = setBindProperty.leapNext ?? 0;

            //int setLeapList = setBind.node[stream][setBindProperty.binding].leap;
            Core.Bind.Leap[] setLeapList = setBindProperty.leap;

            // TO-DO Finish
            leapPos     = setBindProperty.leapNext;
            setLeapList = setBindProperty.leap;
            if (setLeapList == null)
            {
                return;
            }
            int setLeapLength = setLeapList.Length;

            for (int l = 0; l < setLeapLength; l++)
            {
                if (setLeapList[l] != null)
                {
                    setBindProperty.leapNext = l;
                    break;
                }
                else
                {
                }
            }
        }
        void CallOutLeap(int nextPos)
        {
            IDictionary <int, object> setBind = binding.ids[nodeBsIK];

            //Core.TLType param = setBind[0] as Core.TLType;
            Core.TLType.Exec   setNode         = (Core.TLType.Exec)((Core.TLType)setBind[0]).timeline;
            Core.Bind.Property setBindProperty = (Core.Bind.Property)setBind[propBsIK];
            //TO-DO Finish
            //int setLeapNext = setBind.node[stream][setBindProperty.binding].leapNext;
            int?setLeapNext = setBindProperty.leapNext;

            //int setLeapList = setBind.node[stream][setBindProperty.binding].leap;
            Core.Bind.Leap[] setLeapList = setBindProperty.leap;

            if (setLeapList[leapPos ?? 0] == null)
            {
                return;
            }
            Core.Bind.Leap setLeapBind = setLeapList[setLeapNext ?? 0];
            int            leapPosI    = setLeapBind.dataPosI;

            // if (!setLeapBind) { return }
            data[leapPosI] = !setLeapBind.dispose ? arguments.leap : setLeapBind.zeroIn != leap ? setLeapBind.zeroIn : data[leapPosI + 1];// b.Zero out data
            setLeapBind.CallBack/*.apply*/ (setBindProperty);
            if (setLeapBind.dispose)
            {
                setBindProperty.leapNext  = null;
                setLeapList[leapPos ?? 0] = null;
                //delete setLeapList[leapPos];
            }

            int setLeapLength = setLeapList.Length;

            for (int l = (leapPos ?? 0) + 1; l < setLeapLength; l++)
            {
                if (setLeapList[l] == null)
                {
                    setBindProperty.leapNext = l;
                    if (l <= nextPos)
                    {
                        leapPos = l;
                        CallOutLeap(l);
                    }
                    // break
                }
                else
                {
                }
            }
            // leapPos
        }
        // ToDo - for threading
        void MeasureAll(int count)
        {
            measureData = new float[count * propsPerNode + propsPerNode + 1 * nodesPerStream];
            for (
                sI = 0,
                partition = 0,
                partFrac = 0,
                cursor = 0,
                reads = 0;
                sI < streamDataLength;
                sI++
                )
            {
                // Node Level//
                if ((sI - partition) % nodeDataLength == 0)
                {
                    // let node_i = sI/nodeDataLength;//node index number
                    // ->> Node Selection > buffer identifier
                    nodeBsIK = (int)data[sI];
                    if (propsPerNodeList[nodeBsIK] != 0)
                    {
                        if ((sI - partition) != partition)
                        {
                            partition = sI;
                            partFrac  = sI % data0PropDataLength;
                            reads     = 0;
                        }
                        propsPerNode   = propsPerNodeList[nodeBsIK];
                        nodeDataLength = data0PropDataLength * propsPerNode + propsPerNode + 1;
                    }
                    sI++;
                    cursor = 1;
                    reads++;
                }

                // Property Level//
                if ((sI - reads) % data0PropDataLength == partFrac)
                {
                    chunkStartI = (sI - cursor);
                    // var prop = ((sI-reads) - ( data0PropDataLength * propsPerNode * node_i)) / data0PropDataLength;//property index number of chunk
                    // ->> Property Selection > buffer identifier

                    propBsIK          = (int)data[sI];
                    measureData[mI++] = propBsIK;
                    sI++;
                    cursor++;
                    reads++;

                    dataPos  = ((sI - cursor) - chunkStartI);
                    dataPosI = sI - dataPos;
                    int endPos = (data0PropDataLength - dataPos) - 1;
                    endPosI = dataPosI + endPos;

                    if (reset)
                    {
                        data[dataPosI] = continuancePosValData0;
                    }

                    sI = this.CheckInContinuance();
                    // sI = this.CheckOutRevert();
                }

                Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
                leapPos = setBindProperty.leapNext;
                if (nodeBsIK == -1)
                {
                    sI = endPosI;
                    this.UpdateDataPos();
                }
                else if (dataPos + count > propDataLength - 1)
                {
                    if (!revert)
                    {
                    }
                    else
                    {
                        if (nodeBsIK != 101)
                        {
                            this.CheckOutRevert(count);
                        }
                        else
                        {
                            this.CheckOutRevertCallback(count);
                        }
                    }
                    this.ResetLeap();
                }
                else if (count > 0)
                {
                    // Data Level//
                    // process.UtilizeMeasureData(this.DataReturn(count), setBindProperty, nodeBsIK, propBsIK);
                }
                else
                {
                    return;
                }
            }

            //return measureData;
        }
        // //read

        // //Thrusting stores dataoffsets and zeros out data
        void ThrustAll(int count)
        {
            for (
                sI = 0,
                partition = 0,
                partFrac = 0,
                cursor = 0,
                reads = 0;
                sI < streamDataLength;
                sI++
                )
            {
                // Node Level//
                if ((sI - partition) % nodeDataLength == 0)
                {
                    // let node_i = sI/nodeDataLength;//node index number
                    // ->> Node Selection > buffer identifier
                    nodeBsIK = (int)data[sI];
                    if (propsPerNodeList[nodeBsIK] != 0)
                    {
                        if ((sI - partition) != partition)
                        {
                            partition = sI;
                            partFrac  = sI % data0PropDataLength;
                            reads     = 0;
                        }
                        propsPerNode   = propsPerNodeList[nodeBsIK];
                        nodeDataLength = data0PropDataLength * propsPerNode + propsPerNode + 1;
                    }
                    sI++;
                    cursor = 1;
                    reads++;
                }

                // Property Level//
                if ((sI - reads) % data0PropDataLength == partFrac)
                {
                    chunkStartI = (sI - cursor);
                    // var prop = ((sI-reads) - ( data0PropDataLength * propsPerNode * node_i)) / data0PropDataLength;//property index number of chunk
                    // ->> Property Selection > buffer identifier
                    propBsIK = (int)data[sI];
                    sI++;
                    cursor++;
                    reads++;

                    dataPos  = ((sI - cursor) - chunkStartI);
                    dataPosI = sI - dataPos;
                    int endPos = (data0PropDataLength - dataPos) - 1;
                    endPosI = dataPosI + endPos;

                    if (reset)
                    {
                        data[dataPosI] = continuancePosValData0;
                    }

                    sI = CheckInContinuance();
                    // sI = CheckOutRevert()
                }

                Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
                leapPos = setBindProperty.leapNext;
                if (nodeBsIK == -1)
                {
                    sI = endPosI;
                    UpdateDataPos();
                }
                else if (dataPos + count > propDataLength - 1)
                {
                    if (dataPos + count >= leapPos)
                    {
                        CallOutLeap(dataPos + count);
                        // data[nextPosI] = data[nextPosI + 1] // b.Zero out data
                        // get data from previous
                    }
                    if (!revert)
                    {
                    }
                    else
                    {
                        if (nodeBsIK != 101)
                        {
                            CheckOutRevert(count);
                        }
                        else
                        {
                            CheckOutRevertCallback(count);
                        }
                    }
                    ResetLeap();
                }
                else if (count > 0)
                {
                    // Data Level//
                    process.UtilizeThrustData(_dataSum(count), setBindProperty, nodeBsIK, propBsIK);
                }
                else
                {
                    return;
                }
            }
        }
        // //

        // //Reading stores
        void ReadAll(int count)
        {
            readCount = count + rCount;
            defaults.RuntimeCallbacks(readCount);
            for (
                sI = 0,
                partition = 0,
                partFrac = 0,
                cursor = 0,
                reads = 0;
                sI < streamDataLength;
                sI++
                )
            {
                // Node Level//
                if ((sI - partition) % nodeDataLength == 0)
                {
                    // let node_i = sI/nodeDataLength;//node index number
                    // ->> Node Selection > buffer identifier
                    nodeBsIK = (int)data[sI];
                    if (propsPerNodeList[nodeBsIK] != 0)
                    {
                        if ((sI - partition) != partition)
                        {
                            partition = sI;
                            partFrac  = sI % data0PropDataLength;
                            reads     = 0;
                        }
                        propsPerNode   = propsPerNodeList[nodeBsIK];
                        nodeDataLength = data0PropDataLength * propsPerNode + propsPerNode + 1;
                    }
                    sI++;
                    cursor = 1;
                    reads++;
                }

                // Property Level//
                if ((sI - reads) % data0PropDataLength == partFrac)
                {
                    chunkStartI = (sI - cursor);
                    // var prop = ((sI-reads) - ( data0PropDataLength * propsPerNode * node_i)) / data0PropDataLength;//property index number of chunk
                    // ->> Property Selection > buffer identifier

                    propBsIK = (int)data[sI];
                    sI++;
                    cursor++;
                    reads++;

                    dataPos  = ((sI - cursor) - chunkStartI);
                    dataPosI = sI - dataPos;
                    int endPos = (data0PropDataLength - dataPos) - 1;
                    endPosI = dataPosI + endPos;

                    if (reset)
                    {
                        data[dataPosI] = continuancePosValData0;
                    }

                    sI = CheckInContinuance();
                    // sI = CheckOutRevert(count)
                }
                Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
                leapPos = setBindProperty.leapNext;

                if (nodeBsIK == -1)
                {
                    sI = endPosI;
                    UpdateDataPos();
                }
                else if (dataPos + count > propDataLength - 1)
                {
                    if (dataPos + count >= leapPos)
                    {
                        CallOutLeap(dataPos + count);
                        // data[nextPosI] = data[nextPosI + 1] // b.Zero out data
                        // get data from previous
                    }
                    if (!revert)
                    {
                    }
                    else
                    {
                        if (nodeBsIK != 101)
                        {
                            CheckOutRevert(count);
                        }
                        else
                        {
                            CheckOutRevertCallback(count);
                        }
                    }
                    ResetLeap();
                }
                else if (count > 0)
                {
                    // Data Level//
                    //IDictionary<int, object> setBind = binding.ids[nodeBsIK];
                    //Core.TLType param = setBind[0] as Core.TLType;
                    //Core.TLType.Exec setNode = (Core.TLType.Exec)((Core.TLType)setBind[0]).timeline;
                    //Core.Bind.Property setBindProperty = (Core.Bind.Property)setBind[propBsIK];
                    //Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
                    //if (setBindProperty.property != null && setBindProperty.property == "x")
                    //param.x /*[setBindProperty.property][setBindProperty.binding]*/ = setBindProperty.value;
                    //else param.value/*[setBindProperty.binding]*/ = setBindProperty.value;
                    // ToDO - fix
                    //leapPos = setNode.x.leapNext; //else leapPos = setBind.node[stream][setBindProperty.binding].leapNext : setBind.node[stream][setBindProperty.property].leapNext;
                    //leapPos = setBind.node[stream][setBindProperty.binding] ? setBind.node[stream][setBindProperty.binding].leapNext : setBind.node[stream][setBindProperty.property].leapNext;
                    /**/
                    //leapPos = setBindProperty.leapNext;
                    process.UtilizeReadData(DataVal(count), setBindProperty, nodeBsIK, propBsIK);
                    //process.UtilizeReadData(DataVal(count), nodeBsIK, propBsIK);
                }
                else
                {
                    return;
                }
            }
        }
        // //measure

        public void SyncOffsets(int syncI)
        {
            int syncIS = 0;

            for (
                sI = 0,
                partition = 0,
                partFrac = 0,
                cursor = 0,
                reads = 0;
                sI < streamDataLength;
                sI++
                )
            {
                // Node Level//
                if ((sI - partition) % nodeDataLength == 0)
                {
                    // var node_i = sI/nodeDataLength;//node index number
                    // ->> Node Selection > buffer identifier
                    nodeBsIK = (int)data[sI];
                    if (propsPerNodeList[nodeBsIK] != 0)
                    {
                        if ((sI - partition) != partition)
                        {
                            partition = sI;
                            partFrac  = sI % data0PropDataLength;
                            reads     = 0;
                        }
                        propsPerNode   = propsPerNodeList[nodeBsIK];
                        nodeDataLength = data0PropDataLength * propsPerNode + propsPerNode + 1;
                    }
                    sI++;
                    cursor = 1;
                    reads++;
                }

                // Property Level//
                if ((sI - reads) % data0PropDataLength == partFrac)
                {
                    chunkStartI = (sI - cursor);
                    // var prop = ((sI-reads) - ( data0PropDataLength * propsPerNode * node_i)) / data0PropDataLength;//property index number of chunk
                    // ->> Property Selection > buffer identifier
                    propBsIK = (int)data[sI];
                    sI++;
                    cursor++;
                    reads++;

                    dataPos  = ((sI - cursor) - chunkStartI);
                    dataPosI = sI - dataPos;
                    int endPos = (data0PropDataLength - dataPos) - 1;
                    endPosI = dataPosI + endPos;

                    if (reset)
                    {
                        data[dataPosI] = continuancePosValData0;
                    }

                    sI = this.CheckInContinuance();

                    syncIS = 0;
                    //IDictionary<int, object> setBind = binding.ids[nodeBsIK];
                    //Core.TLType setNode = (Core.TLType)setBind[0];
                    //Core.Bind.Property setBindProperty = (Core.Bind.Property)setBind[propBsIK];
                    Core.Bind.Property setBindProperty = (Core.Bind.Property)binding.ids[nodeBsIK][propBsIK];
                    // To-Do fix / shift
                    int shift = setBindProperty._shift;
                    shift  = shift > 0 ? shift : this.CheckOutRevert(propDataLength + shift);
                    syncIS = syncI + shift;
                    if (syncIS > propDataLength)
                    {
                        syncIS = this.Reversion(syncIS);
                    }
                }

                data[dataPosI] = syncIS;    // a.
                sI             = endPosI;
                this.UpdateDataPos();
            }
        }