diff --git a/IG502 Edge Compute/device_supervisor-V3.2.1.tar.tar b/IG502 Edge Compute/device_supervisor-V3.2.1.tar.tar
new file mode 100644
index 0000000..d06d9ce
Binary files /dev/null and b/IG502 Edge Compute/device_supervisor-V3.2.1.tar.tar differ
diff --git a/IG502 Firmware/IG502-V2.1.23.bin b/IG502 Firmware/IG502-V2.1.23.bin
new file mode 100644
index 0000000..33449a0
Binary files /dev/null and b/IG502 Firmware/IG502-V2.1.23.bin differ
diff --git a/Pub_Sub/abbflow_rtu/thingsboard/measuresRTU.csv b/Pub_Sub/abbflow_rtu/thingsboard/measuresRTU.csv
new file mode 100644
index 0000000..39e5767
--- /dev/null
+++ b/Pub_Sub/abbflow_rtu/thingsboard/measuresRTU.csv
@@ -0,0 +1,11 @@
+MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit
+battery_voltage,abbflow-rtu,default,periodic,FLOAT,44002,2,1,ro,,,none,,,,,,,,
+volume_flow,abbflow-rtu,default,periodic,FLOAT,44004,2,1,ro,,,none,,,,,,,,
+today_volume,abbflow-rtu,default,periodic,FLOAT,44006,2,1,ro,,,none,,,,,,,,
+yesterday_volume,abbflow-rtu,default,periodic,FLOAT,44008,2,1,ro,,,none,,,,,,,,
+accumulated_volume,abbflow-rtu,default,periodic,FLOAT,44010,2,1,ro,,,none,,,,,,,,
+test,abbflow-rtu,default,periodic,FLOAT,44012,2,1,ro,,,none,,,,,,,,
+differential_pressure,abbflow-rtu,default,periodic,FLOAT,44014,2,1,ro,,,none,,,,,,,,
+static_pressure,abbflow-rtu,default,periodic,FLOAT,44016,2,1,ro,,,none,,,,,,,,
+temperature,abbflow-rtu,default,periodic,FLOAT,44018,2,1,ro,,,none,,,,,,,,
+charger_voltage,abbflow-rtu,default,periodic,FLOAT,44020,2,1,ro,,,none,,,,,,,,
\ No newline at end of file
diff --git a/Pub_Sub/ek_facility/thingsboard/ek_facility_measures.csv b/Pub_Sub/ek_facility/thingsboard/ek_facility_measures.csv
index c2689ea..e9bc833 100644
--- a/Pub_Sub/ek_facility/thingsboard/ek_facility_measures.csv
+++ b/Pub_Sub/ek_facility/thingsboard/ek_facility_measures.csv
@@ -1,10 +1,6 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
-a_current,ek_facility,default,periodic,,FLOAT,,,,,Val_A_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
-ab_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AB_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
-ac_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102a_turbitity,ek_facility,default,periodic,,FLOAT,,,,,AI_102A.Scaled_Out,2,,ro,,Inlet Turbitity Value,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_102B.Scaled_Out,2,,ro,,Inlet H2S Value,none,,,,,,,,,,,,,,,1,,,,,,,
-ait_102c_ph,ek_facility,default,periodic,,FLOAT,,,,,AI_102C.Scaled_Out,2,,ro,,Inlet pH Value,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102d_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_102D.Scaled_Out,2,,ro,,Inlet Oil In Water,none,,,,,,,,,,,,,,,1,,,,,,,
ait_114a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114a_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
@@ -28,8 +24,6 @@ at_109b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_109B.Scaled_Out,2,,ro,,Ou
at_109c_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109C.Scaled_Out,2,,ro,,Outlet Oil In Water Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109d_o2_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109D.Scaled_Out,2,,ro,,Outlet O2 In Water Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109e_orp,ek_facility,default,periodic,,FLOAT,,,,,AI_109E.Scaled_Out,2,,ro,,Outlet ORP Value,none,,,,,,,,,,,,,,,1,,,,,,,
-b_current,ek_facility,default,periodic,,FLOAT,,,,,Val_B_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
-bc_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_BC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
bp_3a_auto,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Auto,,,ro,,M107A HOA Hand Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_fault,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Fault_FBK,,,ro,,M107A Fault Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Hand,,,ro,,M107A HOA Auto Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
@@ -42,7 +36,6 @@ bp_3b_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Hand,,,ro,,M107B HOA Aut
bp_3b_run,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FDBK,,,ro,,M107B Run Status,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_run_cmd,ek_facility,default,periodic,,BIT,,,,0,BP_3B,,,ro,,M107B Run Command,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_run_fail_alm,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FAIL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
-c_current,ek_facility,default,periodic,,FLOAT,,,,,Val_C_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
chemical_pump_01_rate_offset,ek_facility,default,periodic,,FLOAT,,,,,SPT_Chemical_Pump_1_Rate_Offset,2,,ro,%,Operator Adjustment,none,,,,,,,,,,,,,,,1,,,,,,,
chemical_pump_01_run_status,ek_facility,default,periodic,,BIT,,,,0,FBK_Chemical_Pump_1_Running,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
chemical_pump_auto,ek_facility,default,periodic,,BIT,,,,0,CMD_Chemical_Pump_Auto,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
@@ -89,10 +82,16 @@ fit_100_water_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Wate
fit_101_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_101.Scaled_Out,2,,ro,bbls,Reject Stream Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_102_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_102.Scaled_Out,2,,ro,,Inlet Slip Stream Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_104_n2_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_004.Scaled_Out,2,,ro,,M-104 Onyx Pump N2 Injection Rate,none,,,,,,,,,,,,,,,1,,,,,,,
-fit_106a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106A.Scaled_Out,2,,ro,,M-106A Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106A.Scaled_Out,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
fit_106a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_106b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106B.Scaled_Out,2,,ro,,M-106B Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_106b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
+fit_106b_job,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_Job_Total,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106b_last_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_LastMonth,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106b_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_T1,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106b_this_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_Month,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106b_today,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_Todays,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
+fit_106b_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_106B_Yest,2,,ro,,Skim Tank Flow Meter,none,,,,,,,,,,,,,,,1,,,,,,,
fit_107a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107A.Scaled_Out,2,,ro,,M107A Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_107a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_107A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_107b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107B.Scaled_Out,2,,ro,,M107B Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
@@ -109,10 +108,10 @@ fit_111_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_111.Scaled_Out,2,,
fit_112a_h2o2_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112A.Scaled_Out,2,,ro,,H2O2 Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_112b_nahso3_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112B.Scaled_Out,2,,ro,,NaHSO3 Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
h2o2_chemical_rate,ek_facility,default,periodic,,INT,,0,,,Chemical_Pump_1_Rate,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
-inlet_ph_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Inlet_PH_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
inlet_turbidity_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Inlet_Turbidity_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
li_103D_level_alm,ek_facility,default,periodic,,BIT,,,,0,LI_103D_FBK,,,ro,,ACW Containment Level Tripped (Red When Tripped Please),none,,,,,,,,,,,,,0,,1,,,,,,,
lit_101_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_101.Scaled_Out,2,,ro,,Chamber 5 Skim Level In Weir,none,,,,,,,,,,,,,,,1,,,,,,,
+lit_110a_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_110A.Scaled_Out,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
lit_112a_h2o2_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112A.Scaled_Out,2,,ro,,H2O2 Chemical Level,none,,,,,,,,,,,,,,,1,,,,,,,
lit_112b_nahso3_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112B.Scaled_Out,2,,ro,,NaHSO3 Chemical Level,none,,,,,,,,,,,,,,,1,,,,,,,
lit_116a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_116A.AH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
@@ -145,7 +144,9 @@ n2_outlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_PSI,2,,
n2_outlet_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_purity,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_N2_Purity,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_run_time_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Run_Time,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
+outlet_o2,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_O2,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
outlet_orp_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_ORP_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
+outlet_ph,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_pH,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
outlet_turbidity_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_Turbidity_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
p100_auto,ek_facility,default,periodic,,BIT,,,,0,P100_Auto,,,ro,,M-104 Onyx Pump HOA Auto Status,none,,,,,,,,,,,,,0,,1,,,,,,,
p100_hand,ek_facility,default,periodic,,BIT,,,,0,P100_Hand,,,ro,,M-104 Onyx Pump HOA Hand Status,none,,,,,,,,,,,,,0,,1,,,,,,,
diff --git a/VPN/UniFi/unifi.ovpn b/VPN/UniFi/unifi.ovpn
new file mode 100644
index 0000000..3ddfaba
--- /dev/null
+++ b/VPN/UniFi/unifi.ovpn
@@ -0,0 +1,31 @@
+client
+dev tun
+proto tcp
+remote 216.82.205.207 1194
+resolv-retry infinite
+nobind
+
+# Downgrade privileges after initialization (non-Windows only)
+user nobody
+group nogroup
+
+persist-key
+persist-tun
+
+auth-user-pass
+remote-cert-tls server
+cipher AES-256-CBC
+comp-lzo
+verb 3
+
+auth SHA1
+key-direction 1
+
+reneg-sec 0
+
+redirect-gateway def1
+
+ca unifi_ca.crt
+cert unifi_client.crt
+key unifi_client.key
+tls-auth unifi_tls.key 1
\ No newline at end of file
diff --git a/VPN/UniFi/unifi_ca.crt b/VPN/UniFi/unifi_ca.crt
new file mode 100644
index 0000000..c6e69be
--- /dev/null
+++ b/VPN/UniFi/unifi_ca.crt
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEfDCCA2SgAwIBAgIIA0R07HDJsWIwDQYJKoZIhvcNAQELBQAwgYExCzAJBgNV
+BAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwITmV3IFlvcmsxFjAU
+BgNVBAoMDVViaXF1aXRpIEluYy4xGTAXBgNVBAsMEFVuaUZpX09wZW5WUE5fQ0Ex
+GTAXBgNVBAMMEFVuaUZpX09wZW5WUE5fQ0EwHhcNMjQwNTE0MTUwNzE1WhcNMzkw
+NTExMTUwNzE1WjCBgTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMREw
+DwYDVQQHDAhOZXcgWW9yazEWMBQGA1UECgwNVWJpcXVpdGkgSW5jLjEZMBcGA1UE
+CwwQVW5pRmlfT3BlblZQTl9DQTEZMBcGA1UEAwwQVW5pRmlfT3BlblZQTl9DQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqJRitzCBAP6TVctoTuWZhR
+wuMoxnwIJ+pffJAhw8fQH5ni7oimp/szCo3m49PwwdbX2vV1lu0BouUszCaLIX4p
+zP3cVx82iUM/DSDnFOlStIKT/fVfxhMa9rIz2VsAmFm/J51O7CPusZXacd4w/VU4
+TxJzbNmJIhHIsiRyTeyuXQ70NAh2ltrQd1mV/t/QGaLP5VtuKYbMmTsImduWUjep
+6MOmla6m+jwjjxdWr64E0U1QnwRp5ODMU+jDicAhjAJ+sISByMpNsDkZXefo1Daq
+d56pOpu8Me625lCR/LnT8UYigYJZ+1z1qBYfCn1BwMPZqbYHRAVcSfIHfISZ1f0C
+AwEAAaOB9TCB8jALBgNVHQ8EBAMCAQYwDAYDVR0TBAUwAwEB/zCBtQYDVR0jBIGt
+MIGqgBQXKaRymujXM7SDGzRjwKHXYyEeJKGBh6SBhDCBgTELMAkGA1UEBhMCVVMx
+ETAPBgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEWMBQGA1UECgwN
+VWJpcXVpdGkgSW5jLjEZMBcGA1UECwwQVW5pRmlfT3BlblZQTl9DQTEZMBcGA1UE
+AwwQVW5pRmlfT3BlblZQTl9DQYIIA0R07HDJsWIwHQYDVR0OBBYEFBcppHKa6Ncz
+tIMbNGPAoddjIR4kMA0GCSqGSIb3DQEBCwUAA4IBAQBLdExSs2TbQ7YOigHVjGhB
+Gy2akr3a5N1Tvrt5pn4ZjuB58cxNaUVem33fQn0TQ3aW0P/HrqVja6MbBhhA7TEw
+7oLbfuIjAaGHwpuLdN56AzesvqlUIpUreizPj4AO3E3s3x/gmtdLMW8Jjv0xLtSV
+GXbptinfP40QdWRUAAEENdOU2+sWknaYEJDOm/2poM5l8o+emr1THMrGhQ/3emVy
+eb/iApCKVtAxdz+kOmb6gCDGkfrjisgQz8/BrT+Q+KatEPhIckBCsh1Q3jyjLSFD
+HOPQIXjc9xC5Q/yAaBc3MGejVjdqEDGtZEpteUYu9A8Ld3d2z6aaobpmxbEh+pkL
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/VPN/UniFi/unifi_client.crt b/VPN/UniFi/unifi_client.crt
new file mode 100644
index 0000000..a098dca
--- /dev/null
+++ b/VPN/UniFi/unifi_client.crt
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEmDCCA4CgAwIBAgIIZWuMvlBLrI8wDQYJKoZIhvcNAQELBQAwgYExCzAJBgNV
+BAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazERMA8GA1UEBwwITmV3IFlvcmsxFjAU
+BgNVBAoMDVViaXF1aXRpIEluYy4xGTAXBgNVBAsMEFVuaUZpX09wZW5WUE5fQ0Ex
+GTAXBgNVBAMMEFVuaUZpX09wZW5WUE5fQ0EwHhcNMjQwNTE0MTUwNzE1WhcNMjkw
+NTEzMTUwNzE1WjCBiTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMREw
+DwYDVQQHDAhOZXcgWW9yazEWMBQGA1UECgwNVWJpcXVpdGkgSW5jLjEdMBsGA1UE
+CwwUVW5pRmlfT3BlblZQTl9DbGllbnQxHTAbBgNVBAMMFFVuaUZpX09wZW5WUE5f
+Q2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwngmvLPFNe6z
+o9ujaboYwOdnyvV1v794m6LJ9zFSCyLNfv8G5IaRVmwe7aUCaIKmsb9LaqMegfbt
+qnqoSj/fUPmcTjn0rWosbGOwdQyJ8fi4miw/JifI/pHubxzb2NpRCZtut/vEVsZI
+NEUcfkOasRWm9KDm6YUJ9+fQn9BuoOH9koNBi7NNn+2eFIOiv0LLQcWIC9D3hbOH
+mwPJfHhRmwhMFP98wud64N/N65DF9M83aK3bjKijVwBMHjjySP1nQ4TM0ee8vb9O
+gy9M2dSU2RCKA6/9w/JiH9iOwFo9qDQkGI7Mbhh7XiWkyauWXhr/XefFQk/DDPcQ
+vUiB7vzOQwIDAQABo4IBCDCCAQQwgbUGA1UdIwSBrTCBqoAUFymkcpro1zO0gxs0
+Y8Ch12MhHiShgYekgYQwgYExCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9y
+azERMA8GA1UEBwwITmV3IFlvcmsxFjAUBgNVBAoMDVViaXF1aXRpIEluYy4xGTAX
+BgNVBAsMEFVuaUZpX09wZW5WUE5fQ0ExGTAXBgNVBAMMEFVuaUZpX09wZW5WUE5f
+Q0GCCANEdOxwybFiMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoG
+CCsGAQUFBwMCMB0GA1UdDgQWBBQx7O3PhTotnfFnE65Zfp/Ot9ZeTzANBgkqhkiG
+9w0BAQsFAAOCAQEASnV26/u3aSR37DFhByeUteyWdYLN6mlTpjaA3DtkNZ702m/g
++ifvLlYQiTJstueF4qBoebZc68dqd3m4f8eqk4MzEoBrcsDNrNeuaH8cgz+8xq+/
+5IBZKOQt47CPjh+htpLgW1FaIw4pNoBJZK/RVaiLNorJy5TnOEh38KoeGX9ZULmD
+dJM0te6E5Twk82nNIiIg0uZTCT77FWGhsihXwK+1tO+3ph/vXhjUMrkmUeHLto5+
+6rPYDOrbZjG7NKnPnLNTbMQEvSupSP8LOpD4stCpnKvP96rChayDcZG+DXv4y92/
+z5vBUYxI4cujkvd51bbEULl5xyGI3mqzEhVvSQ==
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/VPN/UniFi/unifi_client.key b/VPN/UniFi/unifi_client.key
new file mode 100644
index 0000000..5e59077
--- /dev/null
+++ b/VPN/UniFi/unifi_client.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCeCa8s8U17rOj
+26NpuhjA52fK9XW/v3ibosn3MVILIs1+/wbkhpFWbB7tpQJogqaxv0tqox6B9u2q
+eqhKP99Q+ZxOOfStaixsY7B1DInx+LiaLD8mJ8j+ke5vHNvY2lEJm263+8RWxkg0
+RRx+Q5qxFab0oObphQn359Cf0G6g4f2Sg0GLs02f7Z4Ug6K/QstBxYgL0PeFs4eb
+A8l8eFGbCEwU/3zC53rg383rkMX0zzdorduMqKNXAEweOPJI/WdDhMzR57y9v06D
+L0zZ1JTZEIoDr/3D8mIf2I7AWj2oNCQYjsxuGHteJaTJq5ZeGv9d58VCT8MM9xC9
+SIHu/M5DAgMBAAECggEAHYxwJmASaR16Aj3PWLNEK5t9s+MUHyySwOM9WOgPlU2W
+d+N8QqEH2F/ZWzalZQflGED+zpc2fXzto+e7RnzqC73BuEkqGmd1lIqZN0/Obgvi
+0NpERiHpcnTuC8gQx6R0h8csTZxduump8vdFWxIeoSWvFqCUNYtXdmms03uyM5Of
+MVSp7WqnXcG9oQjtBBwFg0GfORbtIv7Sddcy9EMXi6AIoVkgi0Qe3FXqrf4rr+Sx
+k6vf6wLHnkEIBNj7/sp/HP+gN8K9osibeiv+XohLabsw4zNhjM54jTdUkphgLz5M
+tZRI3EN/NPNyXi7IOylIskYJbUZ3i8HBZG2ERoOO0QKBgQDrv0kBRDZr6QUn9u0V
+M5Wjw+//qQv/quVDF4RWBsLYzqC6+t4/SvpbqT5TvaBMm3Adr5jVyC/0Im6bVglz
+n0SE54jGbTIxTfSfnS2AJWLIcyNo6Mase2InkQR9i7mlwbGtDlJ8xpr9wNWQv5eC
+6tOa+M1olYYdjvF7ow6EFHfc1wKBgQDTLQ4NbUN7O2DksPu8+dWGhtqpermzyDG4
+VjWLvfJ0xQLwcXC7YEIBpDOGHDr75H5FrJomIwHluyjLhXkm9AFvQIJlHgn8ND7t
+jfHzGVth6kFiV4Yd6gJJKwh3KlHbAg5ed124X9vNF5Ao+aWs4H+yQANjBEzj581o
+G9k1bvYgdQKBgQC9NfHqSk1Dnuq8gLsYYSahIgnmME+pDAimKKHWSebpDC6E5ASs
+2AjIuLWFkJSv57G8ocsRCnMyhtAvbIZ5fkMISKzGVa4LVH4Z/ZUfXOJD7+VjtjB/
+DyhgiUwJV7PRDf0E4JHkA6MyNysx2hRIxyC/KSHz5s6VurymduCXsbXiUQKBgA4w
+AbivNZBq7diPd2o70remCbzHLQDCG20KBbDswwRLVCY5SNyd2/FmSbvh26ieskkW
+DokvYuo/R79cqUYPsKT7zYbjnMIf9HZbSf0OIBCU/22O+ci6twqZZIk1A6jWG4cH
+N/myHv9JbPsDwri5oHqmSFP3rv7EzQ0IifBIEysdAoGAPTrU9+QjKeP4Ar7wVKiz
+8U2v6ZgqKGZYD3l9PeHeT/pgebIxv+H0RC3VdtHg0WAi2v/LrI+Lgk62/EuwpuPR
+NUuGwpvUGIn1l9vVNrAqI60bibFYGtigvkLpllvFXDmdONiFz5pxFm7DzPifczTL
+jl+qzuis45TK6vypRtZa6t0=
+-----END PRIVATE KEY-----
\ No newline at end of file
diff --git a/VPN/UniFi/unifi_tls.key b/VPN/UniFi/unifi_tls.key
new file mode 100644
index 0000000..93ec536
--- /dev/null
+++ b/VPN/UniFi/unifi_tls.key
@@ -0,0 +1,18 @@
+-----BEGIN OpenVPN Static key V1-----
+e966ec45ce5404440fea2dc1e09a2c80
+7e64f634f8041c89effd0f2cd9d2698b
+d0e7802a8243373c595d113b3b0aafb4
+b73a5c15ad6353ef8d62f638f5afc341
+92fe64d292dd72bb1fe4585cfdde7fe8
+1411302e1aa7027363728cca2b74269e
+bad9547ea7d580b6e18204b50b089809
+ead0c8661bc10badbb627a1e384f9961
+88b06771e7827fbdc02843e4a11db54e
+c847166f065d303683e42059096bcc51
+5687ec7b80b791610cd5bc98d0e9bc29
+fbc7da5f81bd00069b59ed0bc3fb0979
+616d7dfb2332cdb945925716dbf67c66
+969774aac0d2e15f5c64dc11cf1dd427
+489ad83a29ffd9b47764dbaeb0e8c3d8
+d085b7495395290d451dcbe21afd11c0
+-----END OpenVPN Static key V1-----
\ No newline at end of file
diff --git a/VPN/UniFi/working_config.png b/VPN/UniFi/working_config.png
new file mode 100644
index 0000000..9851469
Binary files /dev/null and b/VPN/UniFi/working_config.png differ
diff --git a/VPN/extract_creds.py b/VPN/extract_creds.py
new file mode 100644
index 0000000..8336eb0
--- /dev/null
+++ b/VPN/extract_creds.py
@@ -0,0 +1,51 @@
+import os
+import re
+import argparse
+
+def extract_and_save(ovpn_path):
+ """Extracts certificates/keys from an .ovpn file and saves them as separate files in the same directory."""
+
+ # Check if file exists
+ if not os.path.isfile(ovpn_path):
+ print(f"Error: File '{ovpn_path}' not found.")
+ return
+
+ # Define regex patterns for extracting sections
+ sections = {
+ "ca": r"(.*?)",
+ "cert": r"(.*?)",
+ "key": r"(.*?)",
+ "tls-auth": r"(.*?)"
+ }
+
+ # Read the .ovpn file
+ with open(ovpn_path, "r", encoding="utf-8") as file:
+ data = file.read()
+
+ # Get directory of the .ovpn file
+ output_dir = os.path.dirname(ovpn_path) or "."
+
+ # Loop through sections and extract data
+ for name, pattern in sections.items():
+ match = re.search(pattern, data, re.DOTALL)
+ if match:
+ content = match.group(1).strip()
+ filename = f"{name.replace('-', '_')}.crt" if name in ["ca", "cert"] else f"{name.replace('-', '_')}.key"
+ file_path = os.path.join(output_dir, filename)
+
+ with open(file_path, "w", encoding="utf-8") as f:
+ #f.write(f"-----BEGIN {name.upper()}-----\n")
+ f.write(content + "\n")
+ #f.write(f"-----END {name.upper()}-----\n")
+
+ print(f"Extracted: {file_path}")
+
+ print("Extraction complete!")
+
+# Command-line argument handling
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="Extract certificates and keys from an OpenVPN .ovpn file.")
+ parser.add_argument("ovpn_file", help="Path to the OpenVPN .ovpn configuration file")
+ args = parser.parse_args()
+
+ extract_and_save(args.ovpn_file)