diff --git a/bal_release/scripts/bal_autostart.ini b/bal_release/scripts/bal_autostart.ini
new file mode 100644
index 0000000..129eb49
--- /dev/null
+++ b/bal_release/scripts/bal_autostart.ini
@@ -0,0 +1,117 @@
+# ========================================================================
+#
+# This is a sample bal_autostart.ini file.  If used, it must reside in 
+# the same directory as the bcm_sdn_agent executable.  
+#
+# Examples for EPON ,GPON, XGPON1, and XGSPON systems are given below.  You cannot mix
+# EPON / GPON / XGPON1 / XGSPON entries in this file.  Systems are assumed to be either
+# EPON or GPON or XGPON1 or XGSPON (as determined by the entry for topology.pon_mode in
+# the bal_config.ini file).  NGPON2 systems are not supported by the autostart feature
+# or BAL code at this time.
+#
+# ========================================================================
+# This is a sample autostart script for a MAPLE EPON system, 
+# where ONUs are identified by their MAC address
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent.  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an EPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, mac=MAC ADDRESS OF THE ONU
+# e.g.
+# onu=3, int=2, mac=00:33:23:33:33:98
+# ========================================================================
+# 
+# Uncomment-out entries below and modify them for your EPON system
+#
+#onu=1, int=0, mac=00:10:18:ad:69:d0
+#onu=6, int=0, mac=00:10:18:ad:63:38
+#onu=3, int=2, mac=00:10:18:ad:66:74
+#onu=12, int=0, mac=00:10:18:ad:29:32
+#onu=3, int=1, mac=00:10:18:ad:59:22
+#onu=3, int=0, mac=00:10:18:ad:68:44
+
+
+
+# ========================================================================
+# This is a sample autostart script for a MAPLE GPON system, 
+# where ONUs are identified by their password and serial number
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an GPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, vend=VENDOR ID, pass=PASSWORD
+# e.g.
+# onu=3, int=2, vend=VENDOR ID FROM ONU LABEL, pass=ONU PASSWORD
+#
+# NOTE: If bcm_sdn_agent is started in autonoumous ONU activation mode (-O or --auto_activate command line option),
+# vend and pass parameters should be set as 0. In this case, the system does not bring the
+# subscriber terminal up. The subscriber terminal will be activated automatically when discovered. 
+# Note that ONU entries with with vend & pass equal and not-equal 0 can be mixed. In this case,
+# some subscriber terminals will be pre-configured, before they are discovered 
+# ===================================================================
+#
+# Uncomment-out entries below and modify them for your GPON system
+#
+#onu=1, int=0, vend=4252434d01946121, pass=31323334353637383930
+#onu=6, int=0, vend=4252434d01946132, pass=31323334353637383930
+#
+# Uncomment the entry below if bcm_sdn_agent is started in autonomous ONU 
+# activation mode (-O or --auto_activate). The entry below will cause PON 
+# interface 2 to be enabled. ONUs will be activated automatically when discovered
+#
+#onu=1, int=2, vend=00, pass=00
+
+
+# ========================================================================
+# This is a sample autostart script for a MAPLE XGPON1 or XGSPON system, 
+# where ONUs are identified by their password and registration ID
+#
+# NOTE: This script is only useable on an SDN version
+# of BAL, that is, with the bcm_sdn_agent  
+#
+# On startup, the bcm_sdn_agent code reads this autostart file,
+# then:
+# - brings up the access-terminal
+# - brings up each interface specified in the entry list
+# - brings up a subscriber-terminal for each ONU entry
+#
+# ONU IDs can overlap on different PON interfaces
+#
+# Entry format for an XGPON1 or XGSPON system is:
+# onu=ONU ID, int=PON INTERFACE ID, vend=VENDOR ID, registration_id=REGISTRATION_ID
+# e.g.
+# onu=3, int=2, vend=VENDOR ID FROM ONU LABEL, registration_id=REGISTRATION_ID
+# 
+# As in case with GPON, bcm_sdn_agent controlling XGPON1 or XGSPON system can be started in autonomous
+# ONU activation mode. In this case vend and registration_id should be set 0.
+# The ONU will be activated automatically when discovered 
+# ===================================================================
+#
+# Uncomment-out entries below and modify them for your XGPON1 or XGSPON system
+#
+#onu=1, int=0, vend=4252434d01946121, registration_id=202020202020202020202020202020202020202020202020202020202020202020202020
+#onu=6, int=0, vend=4252434d01946132, registration_id=202020202020202020202020202020202020202020202020202020202020202020202020
+#
+# Uncomment the entry below if bcm_sdn_agent is started in autonomous ONU 
+# activation mode (-O or --auto_activate). The entry below will cause PON 
+# interface 2 to be enabled. ONUs will be activated automatically when discovered
+#
+#onu=1, int=2, vend=00, registration_id=00
diff --git a/bal_release/scripts/bal_config.ini b/bal_release/scripts/bal_config.ini
new file mode 100644
index 0000000..a48ab23
--- /dev/null
+++ b/bal_release/scripts/bal_config.ini
@@ -0,0 +1,24 @@
+iwf_mode=direct
+# Mapping table between Qumran and Maple: 3-separate QaX/Maple SVKs, 4-SVK4
+intf_maptable=3
+num_nni_ports=1
+# UDP port where bcm.user listens for pkt_send messages from core (needed for remote bcm.user only!)
+pkt_send_svr_listen_port=50002
+# UDP port where the core listens for pkt_rcv message from bcm.user (needed for remote bcm.user only!)
+trap_udp_port=50001
+
+# The following topology configuration (currently commented out) is an alternative for bal_topology.ini.
+# In case both exist, bal_topology.ini takes precedence over this configuration.
+topology.num_of_devs=1
+topology.num_of_pons_per_dev=2
+# Allowed pon modes are: gpon|xgpon|xgs|ngpon2|epon_tdma|epon_1g|epon_10g
+topology.pon_mode=xgs
+
+#enable (y) or disable (n) loopback mode in MAC (does not need access to Maple HW if enabled)
+#mac_loopback=y
+
+# Enable NNI auto-negotiation on NNI port <n>.
+# It is known to work on NNI0 with some 1G transceivers, however
+# this mode wasn't tested on NNI interfaces other than 0 and/or with different transceivers.
+# Use at your own risk
+# autoneg_nni<n>=y
diff --git a/bal_release/scripts/bal_setup_svk4.sh b/bal_release/scripts/bal_setup_svk4.sh
new file mode 100755
index 0000000..ceb1cc2
--- /dev/null
+++ b/bal_release/scripts/bal_setup_svk4.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Start bal devices
+#
+
+case "$1" in
+    start)
+	echo -n "Starting bal devices: "
+        /broadcom/mk_bcm_node.sh
+        /broadcom/svk_init_startup.sh
+	echo "OK"
+	;;
+    stop)
+	echo "OK"
+	;;
+    restart|reload)
+	;;
+    *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/bal_topology.ini b/bal_release/scripts/bal_topology.ini
new file mode 100644
index 0000000..4cf96ec
--- /dev/null
+++ b/bal_release/scripts/bal_topology.ini
@@ -0,0 +1,18 @@
+# Logical PON ID, PON Mode (gpon|xgpon|epon_10g|xgs|ngpon2), Physical Device ID, Physical PON ID
+# Comments below contain gpon configuration example
+#0, gpon, 0, 0
+#1, gpon, 0, 1
+#2, gpon, 0, 2
+#3, gpon, 0, 3
+#4, gpon, 0, 4
+#5, gpon, 0, 5
+#6, gpon, 0, 6
+#7, gpon, 0, 7
+#8, gpon, 0, 8
+#9, gpon, 0, 9
+#10, gpon, 0, 10
+#11, gpon, 0, 11
+#12, gpon, 0, 12
+#13, gpon, 0, 13
+#14, gpon, 0, 14
+#15, gpon, 0, 15
diff --git a/bal_release/scripts/bcm_user_start_stop b/bal_release/scripts/bcm_user_start_stop
new file mode 100755
index 0000000..0e3985c
--- /dev/null
+++ b/bal_release/scripts/bcm_user_start_stop
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# Start/Stop BCM.USER
+#
+
+# 
+# Set the directory path to bcm.user, or 
+# allow the user to specify the path to bcm.user as the second argument when calling this script 
+# (the first argument must be one of: [ start, stop ]
+#
+if [ -z $2 ]; then
+
+# Look for bcm.user, set the starting directory appropriately, or
+# simple exit if not found
+#
+if [ -f /mnt/bcm.user ]; then
+BCM_USER_BIN_DIR=/mnt/
+elif [ -f /broadcom/bcm.user ]; then
+BCM_USER_BIN_DIR=/broadcom
+elif [ -f /opt/bcm56450/bcm.user ]; then
+BCM_USER_BIN_DIR=/opt/bcm56450
+elif [ -f ./bcm.user ]; then
+BCM_USER_BIN_DIR=.
+else
+echo "cannot find bcm.user, exiting"
+exit 1
+fi
+
+else # the user may choose the starting directory directly using the second argment 
+BCM_USER_BIN_DIR=$2
+fi   
+
+case "$1" in
+  start)
+  	echo -n "Starting bcm.user: "
+	cd ${BCM_USER_BIN_DIR}
+        lsmod | grep -q linux_user_bde > /dev/null
+        if [ "$?" == "0" ]; then
+            rmmod linux_user_bde
+            echo -n "(-user)"
+        fi
+
+        lsmod | grep -q linux_kernel_bde > /dev/null
+        if [ "$?" == "0" ]; then
+            rmmod linux_kernel_bde
+            echo -n "(-kernel)"
+        fi
+
+#
+# The linux_kernel_bde and linux_user_bde modules are loaded by the bcm.user executable
+#
+
+# Create the linux device file, if it does not already exist
+        if [ ! -c /dev/linux-user-bde ]; then
+            mknod /dev/linux-user-bde c 126 0
+        fi
+        ./bcm.user
+	echo "OK"
+	;;
+  stop)
+	echo -n "Stopping bcm.user: "
+	pkill -f bcm.user
+	echo "OK"
+	;;
+  restart|reload)
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/maple_start_stop b/bal_release/scripts/maple_start_stop
new file mode 100755
index 0000000..bd81d75
--- /dev/null
+++ b/bal_release/scripts/maple_start_stop
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# Start/Stop Maple
+#
+case "$1" in
+  start)
+  	echo -e  "Checking if svk_init.sh calls trx_init.sh\n"
+  	cd /opt/bcm68620
+  	if [ ! -e trx_init.sh ]; then
+  	    echo "trx_init.sh not present" && cd - && exit 1
+  	fi
+  	if [ -z "`grep "./bcm_user_appl < trx_init.sh" svk_init.sh`" ]; then
+  	    echo "svk_init.sh does not call trx_init.sh" && cd - && exit 1
+  	elif [[ ! -z "`grep "./bcm_user_appl < trx_init.sh" svk_init.sh | grep "^\s*#\s*"`" ]]; then
+  	    echo "call to trx_init.sh is commented out in svk_init.sh" && cd - && exit 1
+  	fi
+
+        echo -n "Starting MAPLE: "
+        cd /opt/bcm68620 && ./svk_init.sh --proxy 40000
+ 	;;
+  stop)
+        echo -n "Stopping Maple: "
+        pkill -f bcm_user_appl
+        if [ ! -z "`lsmod | grep -m 1 coop_dba_linux`" ]; then
+	    rmmod coop_dba_linux
+        fi
+        if [ ! -z "`lsmod | grep -m 1 bcm_dev_ctrl_linux`" ]; then
+	    rmmod bcm_dev_ctrl_linux
+        fi
+        if [ ! -z "`lsmod | grep -m 1 i2c_devs`" ]; then
+	    rmmod i2c_devs.ko
+        fi
+        if [ ! -z "`lsmod | grep -m 1 os_linux`" ]; then
+	    rmmod os_linux.ko
+        fi
+        if [ ! -z "`lsmod | grep -m 1 ll_pcie`" ]; then
+	    rmmod ll_pcie.ko
+        fi
+        if [ -e /dev/maple_dev_ctrl ]; then
+	    rm /dev/maple_dev_ctrl
+        fi
+        LOCK_DIR_INIT=/tmp/bcm68620_svk_init
+        LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned
+        rm -fr $LOCK_DIR_INIT
+        rm -fr $LOCK_DIR_KERNEL_LOG_OWNED
+        echo "OK"
+	;;
+  restart|reload)
+        "$0" stop
+        "$0" start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart}"
+	exit 1
+esac
+
+exit $?
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py
new file mode 100644
index 0000000..16e3b1f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all.py
@@ -0,0 +1,112 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+from ryu.base import app_manager
+from time import sleep
+from ryu.controller import ofp_event
+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
+from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_3
+from ryu.lib.packet import packet
+from ryu.lib.packet import ethernet
+from ryu.lib import addrconv
+
+LOG = logging.getLogger('ryu.app.pon_topology')
+
+class PonTopology13(app_manager.RyuApp):
+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+
+    def __init__(self, *args, **kwargs):
+        super(PonTopology13, self).__init__(*args, **kwargs)
+        self.mac_to_port = {}
+
+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
+    def switch_features_handler(self, ev):
+        datapath = ev.msg.datapath
+
+        # This does nothing if flows have not been previously configured in the OF agent
+        self.del_all_flows(datapath)
+
+        # Configure the flows (VID 100)
+        #
+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1->128
+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above
+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)
+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)
+
+        sleep(1)
+        self.send_barrier(datapath)
+
+        sleep(5)
+        
+        self.del_all_flows(datapath)
+
+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
+    def port_status_handler(self, ev):
+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)
+
+    def add_meter(self, datapath, meter_id, rate):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)
+        mod = parser.OFPMeterMod(datapath=datapath,command=ofproto.OFPMC_ADD, flags=ofproto.OFPMF_KBPS, meter_id=meter_id, bands=[band])
+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")
+        datapath.send_msg(mod)
+
+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        actions = [parser.OFPActionOutput(dst_port)]
+        if meter_id != 0:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]
+        else:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]
+
+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 
+        # message match field.
+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))
+        mod = parser.OFPFlowMod(datapath=datapath,
+                                cookie=cookie, 
+                                cookie_mask=32767, 
+                                priority=0, 
+                                match=match, 
+                                instructions=inst)
+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 
+                 src_port, dst_port, vid, meter_id, cookie)
+        datapath.send_msg(mod)
+
+    def del_flow(self, datapath, cookie):
+        LOG.info("del_flow: cookie=%d", cookie)
+        self._del_flow(datapath, cookie, 32767)
+
+    def del_all_flows(self, datapath):
+        LOG.info("del_all_flows")
+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows
+        self._del_flow(datapath, 0, 0)
+
+    def _del_flow(self, datapath, cookie, mask):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(
+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,
+            command=ofproto.OFPFC_DELETE)
+        datapath.send_msg(mod)
+
+    def send_barrier(self, datapath):
+        LOG.info("send_barrier")
+        datapath.send_barrier()
+                   
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py
new file mode 100644
index 0000000..ad87847
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_all_loop.py
@@ -0,0 +1,120 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+from ryu.base import app_manager
+from time import sleep
+from ryu.controller import ofp_event
+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
+from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_3
+from ryu.lib.packet import packet
+from ryu.lib.packet import ethernet
+from ryu.lib import addrconv
+
+LOG = logging.getLogger('ryu.app.pon_topology')
+
+class PonTopology13(app_manager.RyuApp):
+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+
+    def __init__(self, *args, **kwargs):
+        super(PonTopology13, self).__init__(*args, **kwargs)
+        self.mac_to_port = {}
+
+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
+    def switch_features_handler(self, ev):
+        datapath = ev.msg.datapath
+
+        # Add/Del upstream/downstream flows (VID 100) in a loop to test for leaks in the OF agent
+        #
+        # (NOTE: The first del_all_flows does nothing if flows have not been previously 
+        # configured in the OF agent)
+        while 1:
+            self.del_all_flows(datapath)
+
+            self.add_vid_flow(datapath,10000, 1, 129, 100, 0)
+            self.add_vid_flow(datapath,10001, 129, 1, 100, 0)
+
+            sleep(1)
+            self.send_barrier(datapath)
+          
+            sleep(5)
+        
+ 
+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
+    def port_status_handler(self, ev):
+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)
+
+    def add_meter(self, datapath, meter_id, rate):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)
+        mod = parser.OFPMeterMod(datapath=datapath,
+                                 command=ofproto.OFPMC_ADD, 
+                                 flags=ofproto.OFPMF_KBPS, 
+                                 meter_id=meter_id, 
+                                 bands=[band])
+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")
+        datapath.send_msg(mod)
+
+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        actions = [parser.OFPActionOutput(dst_port)]
+        if meter_id != 0:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), 
+                    parser.OFPInstructionMeter(meter_id)]
+        else:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]
+
+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 
+        # message match field.
+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))
+        mod = parser.OFPFlowMod(datapath=datapath,
+                                cookie=cookie, 
+                                cookie_mask=32767, 
+                                priority=0, 
+                                match=match, 
+                                instructions=inst)
+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 
+                 src_port, dst_port, vid, meter_id, cookie)
+        datapath.send_msg(mod)
+
+    def del_flow(self, datapath, cookie):
+        LOG.info("del_flow: cookie=%d", cookie)
+        self._del_flow(datapath, cookie, 32767)
+
+    def del_all_flows(self, datapath):
+        LOG.info("del_all_flows")
+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows
+        self._del_flow(datapath, 0, 0)
+
+    def _del_flow(self, datapath, cookie, mask):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(
+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,
+            command=ofproto.OFPFC_DELETE)
+        datapath.send_msg(mod)
+    
+    def send_barrier(self, datapath):
+        LOG.info("send_barrier")
+        datapath.send_barrier()
+                   
+
+
+
+                   
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py
new file mode 100644
index 0000000..377903f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_ds_then_us.py
@@ -0,0 +1,123 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+from ryu.base import app_manager
+from time import sleep
+from ryu.controller import ofp_event
+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
+from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_3
+from ryu.lib.packet import packet
+from ryu.lib.packet import ethernet
+from ryu.lib import addrconv
+
+LOG = logging.getLogger('ryu.app.pon_topology')
+
+class PonTopology13(app_manager.RyuApp):
+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+
+    def __init__(self, *args, **kwargs):
+        super(PonTopology13, self).__init__(*args, **kwargs)
+        self.mac_to_port = {}
+
+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
+    def switch_features_handler(self, ev):
+        datapath = ev.msg.datapath
+
+        # This does nothing if flows have not been previously configured in the OF agent
+        self.del_all_flows(datapath)
+
+        # Configure the flows (VID 100)
+        #
+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1-12
+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above
+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)
+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)
+
+        sleep(1)
+        self.send_barrier(datapath)
+
+        sleep(5)
+        
+        # Delete the downstream flow
+        self.del_flow(datapath, 10001)
+        # Then delete the upstream flow
+        self.del_flow(datapath, 10000)
+
+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
+    def port_status_handler(self, ev):
+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)
+
+    def add_meter(self, datapath, meter_id, rate):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)
+        mod = parser.OFPMeterMod(datapath=datapath,
+                                 command=ofproto.OFPMC_ADD, 
+                                 flags=ofproto.OFPMF_KBPS, 
+                                 meter_id=meter_id, 
+                                 bands=[band])
+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")
+        datapath.send_msg(mod)
+
+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        actions = [parser.OFPActionOutput(dst_port)]
+        if meter_id != 0:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), 
+                    parser.OFPInstructionMeter(meter_id)]
+        else:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]
+
+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 
+        # message match field.
+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))
+        mod = parser.OFPFlowMod(datapath=datapath,
+                                cookie=cookie, 
+                                cookie_mask=32767, 
+                                priority=0, 
+                                match=match, 
+                                instructions=inst)
+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 
+                 src_port, dst_port, vid, meter_id, cookie)
+        datapath.send_msg(mod)
+
+    def del_flow(self, datapath, cookie):
+        LOG.info("del_flow: cookie=%d", cookie)
+        self._del_flow(datapath, cookie, 32767)
+
+    def del_all_flows(self, datapath):
+        LOG.info("del_all_flows")
+
+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows
+        self._del_flow(datapath, 0, 0)
+
+    def _del_flow(self, datapath, cookie, mask):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(datapath=datapath, 
+                                match=None, 
+                                cookie=cookie, 
+                                cookie_mask=mask,
+                                command=ofproto.OFPFC_DELETE)
+        datapath.send_msg(mod)
+
+    def send_barrier(self, datapath):
+        LOG.info("send_barrier")
+        datapath.send_barrier()
+                   
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py
new file mode 100644
index 0000000..188208f
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_then_delete_us_then_ds.py
@@ -0,0 +1,119 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+from ryu.base import app_manager
+from time import sleep
+from ryu.controller import ofp_event
+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
+from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_3
+from ryu.lib.packet import packet
+from ryu.lib.packet import ethernet
+from ryu.lib import addrconv
+
+LOG = logging.getLogger('ryu.app.pon_topology')
+
+class PonTopology13(app_manager.RyuApp):
+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+
+    def __init__(self, *args, **kwargs):
+        super(PonTopology13, self).__init__(*args, **kwargs)
+        self.mac_to_port = {}
+
+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
+    def switch_features_handler(self, ev):
+        datapath = ev.msg.datapath
+
+        # This does nothing if flows have not been previously configured in the OF agent
+        self.del_all_flows(datapath)
+
+        # Configure the flows (VID 100)
+        #
+        # Ports 1-128 are implicitly mapped to UNI-0 on ONU 1->128
+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above
+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)
+        self.add_vid_flow(datapath,10001, 129, 1, 100, 0)
+
+        sleep(1)
+        self.send_barrier(datapath)
+
+        sleep(5)
+        
+        # Delete the upstream flow
+        self.del_flow(datapath, 10000)
+        # Then delete the downstream flow
+        self.del_flow(datapath, 10001)
+
+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
+    def port_status_handler(self, ev):
+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)
+
+    def add_meter(self, datapath, meter_id, rate):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)
+        mod = parser.OFPMeterMod(datapath=datapath,
+                                 command=ofproto.OFPMC_ADD, 
+                                 flags=ofproto.OFPMF_KBPS, 
+                                 meter_id=meter_id, 
+                                 bands=[band])
+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")
+        datapath.send_msg(mod)
+
+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        actions = [parser.OFPActionOutput(dst_port)]
+        if meter_id != 0:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]
+        else:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]
+
+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 
+        # message match field.
+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))
+        mod = parser.OFPFlowMod(datapath=datapath,
+                                cookie=cookie, 
+                                cookie_mask=32767, 
+                                priority=0, 
+                                match=match, 
+                                instructions=inst)
+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 
+                 src_port, dst_port, vid, meter_id, cookie)
+        datapath.send_msg(mod)
+
+    def del_flow(self, datapath, cookie):
+        LOG.info("del_flow: cookie=%d", cookie)
+        self._del_flow(datapath, cookie, 32767)
+
+    def del_all_flows(self, datapath):
+        LOG.info("del_all_flows")
+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows
+        self._del_flow(datapath, 0, 0)
+
+    def _del_flow(self, datapath, cookie, mask):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(
+            datapath=datapath, match=None, cookie=cookie, cookie_mask=mask,
+            command=ofproto.OFPFC_DELETE)
+        datapath.send_msg(mod)
+
+    def send_barrier(self, datapath):
+        LOG.info("send_barrier")
+        datapath.send_barrier()
+                   
diff --git a/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py b/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py
new file mode 100644
index 0000000..6b73d17
--- /dev/null
+++ b/bal_release/scripts/ryu/PON_topology_100_flow_add_with_ds_meter.py
@@ -0,0 +1,125 @@
+# Copyright (C) 2011 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import logging
+
+from ryu.base import app_manager
+from time import sleep
+from ryu.controller import ofp_event
+from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
+from ryu.controller.handler import set_ev_cls
+from ryu.ofproto import ofproto_v1_3
+from ryu.lib.packet import packet
+from ryu.lib.packet import ethernet
+from ryu.lib import addrconv
+
+LOG = logging.getLogger('ryu.app.pon_topology')
+
+class PonTopology13(app_manager.RyuApp):
+    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+
+    def __init__(self, *args, **kwargs):
+        super(PonTopology13, self).__init__(*args, **kwargs)
+        self.mac_to_port = {}
+
+    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
+    def switch_features_handler(self, ev):
+        datapath = ev.msg.datapath
+        
+        # This does nothing if flows have not been previously configured in the OF agent
+        self.del_all_flows(datapath)
+        
+        # Add a meter (500 Kbps rate limit) with an ID of 11
+        self.add_meter(datapath, 11, 500)
+ 
+        # Configure the flows  (VID 100) 
+        # Note: the downstream flow has a meter ID reference
+        #
+        # Ports 1-128 are implicitly mapped to UNI-0 on ONUs 1->128
+        # Ports 129 and above are implicitly mapped to OLT NNI-0 and above
+        self.add_vid_flow(datapath,10000, 1, 129, 100, 0)
+        self.add_vid_flow(datapath,10001, 129, 1, 100, 11)
+
+        sleep(1)
+        self.send_barrier(datapath)
+
+
+    @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER)
+    def port_status_handler(self, ev):
+        LOG.debug('port_status_handler port id: %d', ev.msg.desc.port_no)
+
+    def add_meter(self, datapath, meter_id, rate):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        band = parser.OFPMeterBandDrop(burst_size=0, rate=rate)
+        mod = parser.OFPMeterMod(datapath=datapath,command=ofproto.OFPMC_ADD, flags=ofproto.OFPMF_KBPS, meter_id=meter_id, bands=[band])
+        LOG.info("add_meter: meter_id=%d, rate=%d KBPS")
+        datapath.send_msg(mod)
+
+    def add_vid_flow(self, datapath, cookie, src_port, dst_port, vid, meter_id):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+        actions = [parser.OFPActionOutput(dst_port)]
+        if meter_id != 0:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions), parser.OFPInstructionMeter(meter_id)]
+        else:
+            inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]
+
+        # NOTE: 0x1000 is OR'd into the vid to set the OFPVID_PRESENT flag in the OpenFlow FLOW_MOD (OFPFC_ADD) 
+        # message match field.
+        match = parser.OFPMatch(in_port=src_port, vlan_vid=(vid | 0x1000))
+        mod = parser.OFPFlowMod(datapath=datapath,
+                                cookie=cookie, 
+                                cookie_mask=32767, 
+                                priority=0, 
+                                match=match, 
+                                instructions=inst)
+        LOG.info("add_vid_flow: src_port=%d dst_port=%d vid=%d meter=%d cookie=%d", 
+                 src_port, dst_port, vid, meter_id, cookie)
+        datapath.send_msg(mod)
+
+    def del_flow(self, datapath, cookie):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(
+            datapath=datapath, match=None, cookie=cookie, cookie_mask=32767,
+            command=ofproto.OFPFC_DELETE)
+        LOG.info("del_flow: cookie=%d", cookie)
+        datapath.send_msg(mod)
+
+    def del_all_flows(self, datapath):
+        LOG.info("del_all_flows")
+        # Cookie 0 (argument 2) tells the OF agent to delete all configured flows
+        self._del_flow(datapath, 0, 0)
+
+    def _del_flow(self, datapath, cookie, mask):
+        ofproto = datapath.ofproto
+        parser = datapath.ofproto_parser
+ 
+        mod = parser.OFPFlowMod(datapath=datapath, 
+                                match=None, 
+                                cookie=cookie, 
+                                cookie_mask=mask,
+                                command=ofproto.OFPFC_DELETE)
+        datapath.send_msg(mod)
+
+    def send_barrier(self, datapath):
+        LOG.info("send_barrier")
+        datapath.send_barrier()
+                   
+
+
+
+                   
diff --git a/bal_release/scripts/trx_init.sh b/bal_release/scripts/trx_init.sh
new file mode 100644
index 0000000..880bff6
--- /dev/null
+++ b/bal_release/scripts/trx_init.sh
@@ -0,0 +1,67 @@
+###############################################################################
+#
+#  <:copyright-BRCM:2016:proprietary:standard
+#   
+#     Broadcom Ltd. Proprietary and Confidential.(c) 2016 Broadcom Ltd.
+#     All Rights Reserved
+#   
+#  This program is the proprietary software of Broadcom Ltd. and/or its
+#  licensors, and may only be used, duplicated, modified or distributed pursuant
+#  to the terms and conditions of a separate, written license agreement executed
+#  between you and Broadcom Ltd. (an "Authorized License").  Except as set forth in
+#  an Authorized License, Broadcom Ltd. grants no license (express or implied), right
+#  to use, or waiver of any kind with respect to the Software, and Broadcom Ltd.
+#  expressly reserves all rights in and to the Software and all intellectual
+#  property rights therein.  IF YOU HAVE NO AUTHORIZED LICENSE, THEN YOU HAVE
+#  NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY
+#  BROADCOM LTD AND DISCONTINUE ALL USE OF THE SOFTWARE.
+#   
+#  Except as expressly set forth in the Authorized License,
+#   
+#  1. This program, including its structure, sequence and organization,
+#      constitutes the valuable trade secrets of Broadcom Ltd., and you shall use
+#      all reasonable efforts to protect the confidentiality thereof, and to
+#      use this information only in connection with your use of Broadcom Ltd.
+#      integrated circuit products.
+#   
+#  2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+#      AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
+#      WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
+#      RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND
+#      ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT,
+#      FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
+#      COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE
+#      TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR
+#      PERFORMANCE OF THE SOFTWARE.
+#   
+#  3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR
+#      ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
+#      INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY
+#      WAY RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN
+#      IF BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES;
+#      OR (ii) ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE
+#      SOFTWARE ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS
+#      SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY
+#      LIMITED REMEDY.
+#  :>
+#
+###############################################################################
+ 
+# Commands required to enable all 16 PON ports on the MAPLE device
+
+/board/trx_enable pon_id=0
+/board/trx_enable pon_id=1
+/board/trx_enable pon_id=2
+/board/trx_enable pon_id=3
+/board/trx_enable pon_id=4
+/board/trx_enable pon_id=5
+/board/trx_enable pon_id=6
+/board/trx_enable pon_id=7
+/board/trx_enable pon_id=8
+/board/trx_enable pon_id=9
+/board/trx_enable pon_id=10
+/board/trx_enable pon_id=11
+/board/trx_enable pon_id=12
+/board/trx_enable pon_id=13
+/board/trx_enable pon_id=14
+/board/trx_enable pon_id=15
diff --git a/bal_release/scripts/upgrade_bal_qumran.sh b/bal_release/scripts/upgrade_bal_qumran.sh
new file mode 100755
index 0000000..8b8b61d
--- /dev/null
+++ b/bal_release/scripts/upgrade_bal_qumran.sh
@@ -0,0 +1,96 @@
+#!/bin/bash 
+
+# Define all BAL apps to be upgraded here
+FILELIST=('bcm.user' 'linux-kernel-bde.ko' 'linux-user-bde.ko' 'bcm88470_board.soc' 'combo28_dram.soc' 'config.bcm' 'init.sh' 'qax.soc' 'rc.soc')
+#JENKINSSERVER='jenkins-tlva-06.il.broadcom.com'
+JENKINSSERVER='10.187.130.172'
+ING_SDK_VER='6.5.6'
+
+mkdir -p old
+
+JENKINSPATH1="http://${JENKINSSERVER}/job/Bal.Synced.bcm-sdk-${ING_SDK_VER}/lastSuccessfulBuild/artifact/bal/cur/"
+JENKINSFILE1=(
+		'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/bcm.user'
+        	'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/linux-kernel-bde.ko'
+        	'3rdparty/bcm-sdk/build/sdk-all-'${ING_SDK_VER}'/build/linux/user/wrx-3_7/linux-user-bde.ko'
+        	'3rdparty/bcm-sdk/rc/qax/bcm88470_board.soc'
+		'3rdparty/bcm-sdk/rc/qax/combo28_dram.soc'
+		'3rdparty/bcm-sdk/rc/qax/config.bcm'
+		'3rdparty/bcm-sdk/rc/qax/init.sh'
+		'3rdparty/bcm-sdk/rc/qax/qax.soc'
+		'3rdparty/bcm-sdk/rc/qax/rc.soc'
+)
+
+
+function coloredEcho(){
+    local exp=$1;
+    local color=$2;
+    if ! [[ $color =~ '^[0-9]$' ]] ; then
+       case $(echo $color | tr '[:upper:]' '[:lower:]') in
+        black) color=0 ;;
+        red) color=1 ;;
+        green) color=2 ;;
+        yellow) color=3 ;;
+        blue) color=4 ;;
+        magenta) color=5 ;;
+        cyan) color=6 ;;
+        white|*) color=7 ;; # white or invalid color
+       esac
+    fi
+    tput setaf $color;
+    echo $exp;
+    tput sgr0;
+}
+
+function check_return(){
+	echo -n "$1...	"
+	$($2)
+	if [ $? -eq 0 ]; then
+		coloredEcho '[ OK ]' green
+	else
+		coloredEcho '[ ERROR ]' red
+	fi
+}
+
+# Checking connectivity to Jenkins Server
+echo -n "Verifing Connectivity to Jenkins...	"
+ping -c 1 ${JENKINSSERVER} &> /dev/null
+if [ $? -eq 0 ]; then
+		coloredEcho '[ OK ]' green
+	else
+		coloredEcho '[ ERROR ]' red
+		echo 'Aborting Upgrade!'
+		exit 0
+	fi
+
+# delete any old versions
+echo 'Deleting older versions...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Deleting ${FILE}.old" "rm -f old/${FILE}.old"
+	done
+
+# rename the existing versions
+echo 'Renaming last version x.old ...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Moving ${FILE} to ${FILE}.old" "mv ${FILE} old/${FILE}.old"
+	done
+
+# Get the new versions
+echo 'Downloading ING version '${ING_SDK_VER}'...'
+for FILE in ${JENKINSFILE1[@]}
+	do
+		COMMAND="wget -q ${JENKINSPATH1}${FILE}"
+		SHORTFILE=$(echo ${FILE} | sed 's:.*/::')
+		check_return "Getting Latest ${SHORTFILE}" "${COMMAND}"
+	done
+
+# Changing permissions to executable
+echo 'Changing permissions to executable...'
+for FILE in ${FILELIST[@]}
+	do
+		check_return "Makiing ${FILE} executable" "chmod 755 ${FILE}"
+	done
+
+echo 'Upgrade Complete'
