Added ESD devices for the 5V nFET and pFET, which are essentially
just marker layers used for LVS;  however, as these are the devices
with angled gates, they can be used
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech
index 8bfaff8..97cf5a4 100644
--- a/sky130/magic/sky130.tech
+++ b/sky130/magic/sky130.tech
@@ -79,6 +79,8 @@
 # sky130_fd_pr__cap_var_hvt	varactorhvt	high Vt varactor
 # sky130_fd_pr__cap_var		mvvaractor	thickox varactor
 # sky130_fd_pr__res_iso_pw	rpw		pwell resistor (in deep nwell)
+# sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd	ESD thickox nFET
+# sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd	ESD thickox pFET
 #
 # (*) Note that ppres may extract into some generic type called
 # "sky130_fd_pr__res_xhigh_po", but only specific sizes of xhrpoly are
@@ -93,9 +95,7 @@
 # only by script-generated subcells in the PDK.
 #-------------------------------------------------------------
 # sky130_fd_pr__esd_nfet_01v8		ESD nFET
-# sky130_fd_pr__esd_nfet_g5v0d10v5	ESD thickox nFET
 # sky130_fd_pr__esd_nfet_05v0_nvt	ESD native nFET
-# sky130_fd_pr__esd_pfet_g5v0d10v5	ESD thickox pFET
 # sky130_fd_pr__special_nfet_pass_flash	flash nFET device
 # sky130_fd_pr__esd_rf_diode_pw2nd_11v0	ESD n+ diode
 # sky130_fd_pr__esd_rf_diode_pd2nw_11v0	ESD p+ diode
@@ -162,6 +162,8 @@
   active mvnmos,mvntransistor,mvnfet
   active mvpmos,mvptransistor,mvpfet
   active mvnnmos,mvnntransistor,mvnnfet,nnfet
+ -active mvnmosesd,mvntransistoresd,mvnfetesd
+ -active mvpmosesd,mvptransistoresd,mvpfetesd
   active varactor,varact,var
   active mvvaractor,mvvaract,mvvar
 
@@ -171,8 +173,8 @@
   active nmoslvt,nfetlvt
   active varactorhvt,varacthvt,varhvt
  -active nsonos,sonos
-  active sramnvar,corenvar,corenvaractor
-  active srampvar,corepvar,corepvaractor
+ -active sramnvar,corenvar,corenvaractor
+ -active srampvar,corepvar,corepvaractor
 
 # Diffusions
   active ndiff,ndiffusion,ndif
@@ -364,13 +366,13 @@
   allwellplane     nwell
   allnwell	   nwell,obswell,pnp
 
-  allnfets	   nfet,npass,npd,scnfet,mvnfet,mvnnfet,nfetlvt,nsonos
-  allpfets	   pfet,ppu,scpfet,scpfethvt,mvpfet,pfethvt,pfetlvt,pfetmvt
+  allnfets	   nfet,npass,npd,scnfet,mvnfet,mvnfetesd,mvnnfet,nfetlvt,nsonos
+  allpfets	   pfet,ppu,scpfet,scpfethvt,mvpfet,mvpfetesd,pfethvt,pfetlvt,pfetmvt
   allfets	   allnfets,allpfets,varactor,mvvaractor,varhvt,corenvar,corepvar
-  allfetsstd	   nfet,mvnfet,mvnnfet,nfetlvt,pfet,mvpfet,pfethvt,pfetlvt,pfetmvt
+  allfetsstd	   nfet,mvnfet,mvnfetesd,mvnnfet,nfetlvt,pfet,mvpfet,mvpfetesd,pfethvt,pfetlvt,pfetmvt
   allfetsspecial   scnfet,scpfet,scpfethvt
   allfetscore	   npass,npd,nsonos,ppu,corenvar,corepvar
-  allfetsnolvt	   nfet,npass,npd,scnfet,mvnfet,mvnnfet,nsonos,pfet,ppu,scpfet,scpfethvt,mvpfet,pfethvt,pfetmvt,varactor,mvvaractor,varhvt,corenvar
+  allfetsnolvt	   nfet,npass,npd,scnfet,mvnfet,mvnfetesd,mvnnfet,nsonos,pfet,ppu,scpfet,scpfethvt,mvpfet,mvpfetesd,pfethvt,pfetmvt,varactor,mvvaractor,varhvt,corenvar
 
   allnactivenonfet *ndiff,*nsd,*ndiode,*nndiode,*mvndiff,*mvnsd,*mvndiode,*ndiodelvt
   allnactive	   allnactivenonfet,allnfets
@@ -394,11 +396,11 @@
   allpdifflvnonfet *pdif,*psd,*pdiode,pdiffres,*pdiodelvt,*pdiodehvt
   alldifflvnonfet  allndifflvnonfet,allpdifflvnonfet
 
-  allndiffmv       *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnnfet
-  allpdiffmv       *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet
+  allndiffmv       *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnfetesd,mvnnfet
+  allpdiffmv       *mvpdif,*mvpsd,*mvpdiode,mvpdiffres,mvpfet,mvpfetesd
   alldiffmv        allndiffmv,allpdiffmv
-  allndiffmvnontap *mvndif,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnnfet
-  allpdiffmvnontap *mvpdif,*mvpdiode,mvpdiffres,mvpfet
+  allndiffmvnontap *mvndif,*mvndiode,*nndiode,mvndiffres,mvnfet,mvnfetesd,mvnnfet
+  allpdiffmvnontap *mvpdif,*mvpdiode,mvpdiffres,mvpfet,mvpfetesd
   alldiffmvnontap  allndiffmvnontap,allpdiffmvnontap
   allndiffmvnonfet *mvndif,*mvnsd,*mvndiode,*nndiode,mvndiffres
   allpdiffmvnonfet *mvpdif,*mvpsd,*mvpdiode,mvpdiffres
@@ -488,8 +490,10 @@
   mvnsd     ndiff_in_nwell hvndiff_mask
   mvpsd     pdiff_in_pwell hvpdiff_mask
   mvnfet    ntransistor    ntransistor_stripes hvndiff_mask
+  mvnfetesd ntransistor    ntransistor_stripes hvndiff_mask
   mvnnfet   ntransistor    ndiff_in_nwell hvndiff_mask
   mvpfet    ptransistor    ptransistor_stripes
+  mvpfetesd ptransistor    ptransistor_stripes
   mvvar     polysilicon    ndiff_in_nwell hvndiff_mask
   mvndc     ndiffusion     metal1  contact_X'es hvndiff_mask
   mvpdc     pdiffusion     metal1  contact_X'es hvpdiff_mask
@@ -943,7 +947,7 @@
 	grow 185
 
  layer HVNTM
-	bloat-all mvnfet,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff
+	bloat-all mvnfet,mvnfetesd,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff
 	bloat-all mvvaractor *mvnsd
 	and-not hvntm_block
         grow 185
@@ -1581,7 +1585,7 @@
  grow 185
 
  templayer hvntm_generate
- bloat-all mvnfet,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff
+ bloat-all mvnfet,mvnfetesd,mvnnfet,*mvndiode,mvrdn,*nndiode *mvndiff
  bloat-all mvvaractor *mvnsd
  and-not hvntm_block
  grow 185
@@ -2368,6 +2372,11 @@
  and POLY
 
  layer mvpfet mvpfetarea
+ and-not ESDID
+ labels DIFF
+
+ layer mvpfetesd mvpfetarea
+ and ESDID
  labels DIFF
 
  layer pdiff DIFF,DIFFTXT,DIFFPIN
@@ -2539,11 +2548,21 @@
  and THKOX
  and-not mvnfetarea
 
+ layer mvnfetesd DIFF
+ and POLY
+ and-not PPLUS
+ and NPLUS
+ and THKOX
+ and ESDID
+ and-not mvnnfetarea
+ labels DIFF
+
  layer mvnfet DIFF
  and POLY
  and-not PPLUS
  and NPLUS
  and THKOX
+ and-not ESDID
  and-not mvnnfetarea
  labels DIFF
 
@@ -3408,6 +3427,12 @@
  and-not CORELI
  copyup CONT
 
+ # barediff---treat as mvndiff---only found in GPIO cell
+ layer mvndiff DIFF
+ and-not NPLUS
+ and-not PPLUS
+ and-not NWELL
+
  layer glass GLASS,PADTXT,PADPIN
  labels GLASS
  labels PADTXT text
@@ -3502,6 +3527,8 @@
  calma SEALID 81 1
  # Low tap density ID mark
  calma LOWTAPDENSITY 81 14
+ # ESD area ID
+ calma ESDID 81 19
  
  # LICON
  calma CONT 66 44
@@ -3904,6 +3931,11 @@
  and POLY
 
  layer mvpfet mvpfetarea
+ and-not ESDID
+ labels DIFF
+
+ layer mvpfetesd mvpfetarea
+ and ESDID
  labels DIFF
 
  layer pdiff DIFF,DIFFTXT,DIFFPIN
@@ -4072,11 +4104,21 @@
  and THKOX
  and-not mvnfetarea
 
+ layer mvnfetesd DIFF
+ and POLY
+ and-not PPLUS
+ and NPLUS
+ and THKOX
+ and ESD
+ and-not mvnnfetarea
+ labels DIFF
+
  layer mvnfet DIFF
  and POLY
  and-not PPLUS
  and NPLUS
  and THKOX
+ and-not ESDID
  and-not mvnnfetarea
  labels DIFF
 
@@ -5030,6 +5072,8 @@
  calma SEALID 81 1
  # Low tap density ID mark
  calma LOWTAPDENSITY 81 14
+ # ESD area ID
+ calma ESDID 81 19
  
  # LICON
  calma CONT 66 44
@@ -5230,7 +5274,7 @@
 
  width *ndiff,nfet,scnfet,npd,npass,*nsd,*ndiode,ndiffres,*pdiff,pfet,scpfet,scpfethvt,ppu,*psd,*pdiode,pdiffres \
 	150 "Diffusion width < %d (diff/tap.1)"
- width *mvndiff,mvnfet,mvnnfet,*mvndiode,*nndiode,mvndiffres,*mvpdiff,mvpfet,*mvpdiode,mvpdiffres 290 \
+ width *mvndiff,mvnfet,mvnfetesd,mvnnfet,*mvndiode,*nndiode,mvndiffres,*mvpdiff,mvpfet,mvpfetesd,*mvpdiode,mvpdiffres 290 \
 	"MV Diffusion width < %d (diff/tap.14)"
 
  width *mvnsd,*mvpsd 150 "MV Tap width < %d (diff/tap.1)"
@@ -5245,9 +5289,9 @@
 	"MV Diffusion spacing < %d (diff/tap.15a)"
  spacing alldiffmv *mvnsd,*mvpsd 270 touching_ok \
 	"MV Diffusion to MV tap spacing < %d (diff/tap.3)"
- spacing *mvndiff,mvnfet,mvnnfet,*mvndiode,*nndiode,mvndiffres,mvvar *mvpsd 370 \
+ spacing *mvndiff,mvnfet,mvnfetesd,mvnnfet,*mvndiode,*nndiode,mvndiffres,mvvar *mvpsd 370 \
 	touching_ok "MV P-Diffusion to MV N-tap spacing < %d (diff/tap.15b)"
- spacing *mvnsd,*mvpdiff,mvpfet,mvvar,*mvpdiode *mvpsd,*psd 760 touching_illegal \
+ spacing *mvnsd,*mvpdiff,mvpfet,mvpfetesd,mvvar,*mvpdiode *mvpsd,*psd 760 touching_illegal \
 	"MV Diffusion in N-well to P-tap spacing < %d (diff/tap.20 + diff/tap.17,19)"
  spacing *ndiff,*ndiode,nfet allnwell 340 touching_illegal \
 	"N-Diffusion spacing to N-well < %d (diff/tap.9)"
@@ -5263,7 +5307,7 @@
 	"N-well overlap of MV N-tap < %d (diff/tap.19)"
  surround *pdiff,*pdiode,pfet,scpfet,ppu allnwell 180 absence_illegal \
 	"N-well overlap of P-Diffusion < %d (diff/tap.8)"
- surround *mvpdiff,*mvpdiode,mvpfet allnwell 330 absence_illegal \
+ surround *mvpdiff,*mvpdiode,mvpfet,mvpfetesd allnwell 330 absence_illegal \
 	"N-well overlap of P-Diffusion < %d (diff/tap.17)"
  surround mvvar allnwell 560 absence_illegal \
 	"N-well overlap of MV varactor < %d (lvtn.10 + lvtn.4b)"
@@ -5338,7 +5382,7 @@
  overhang *mvndiff,mvrndiff mvnfet,mvnnfet 250 \
 	"N-Diffusion overhang of nFET < %d (poly.7)"
  overhang *pdiff,rpdiff pfet,scpfet,ppu 250 "P-Diffusion overhang of pmos < %d (poly.7)"
- overhang *mvpdiff,mvrpdiff mvpfet 250 "P-Diffusion overhang of pmos < %d (poly.7)"
+ overhang *mvpdiff,mvrpdiff mvpfet,mvpfetesd 250 "P-Diffusion overhang of pmos < %d (poly.7)"
  overhang *poly allfetsstd,allfetsspecial 130 "poly overhang of transistor < %d (poly.8)"
  overhang *poly allfetscore 110 "poly overhang of SRAM core transistor < %d (poly.8)"
  rect_only allfets "No bends in transistors (poly.11)"
@@ -5361,7 +5405,7 @@
 # HVTP
 #--------------------------------------------------------------------
 
- spacing pfethvt,pdiodehvt,varactorhvt pfet,ppu,scpfet,mvpfet,pfetlvt,pfetmvt \
+ spacing pfethvt,pdiodehvt,varactorhvt pfet,ppu,scpfet,mvpfet,mvpfetesd,pfetlvt,pfetmvt \
 		360 touching_illegal \
 		"Min. spacing between pFET and HVTP < %d (hvtp.4)"
 
@@ -5433,7 +5477,7 @@
 	"Diffusion contact to standard cell gate < %d (licon.11)"
  spacing ndc,pdc npd,npass,ppu 40 touching_illegal \
 	"Diffusion contact to SRAM gate < %d (licon.11)"
- spacing mvndc,mvpdc mvnfet,mvnnfet,mvpfet 55 touching_illegal \
+ spacing mvndc,mvpdc mvnfet,mvnfetesd,mvnnfet,mvpfet,mvpfetesd 55 touching_illegal \
 	"Diffusion contact to gate < %d (licon.11)"
  spacing nsc varactor,varhvt 250 touching_illegal \
 	"Diffusion contact to varactor gate < %d (licon.10)"
@@ -5470,9 +5514,9 @@
  surround psc/a *psd 120 directional \
 	"P-tap overlap of P-tap contact < %d in one direction (licon.7)"
 
- surround mvndc/a *mvndiff,mvnfet,mvrnd 40 absence_illegal \
+ surround mvndc/a *mvndiff,mvnfet,mvnfetesd,mvrnd 40 absence_illegal \
 	"N-diffusion overlap of N-diffusion contact < %d (licon.5a)"
- surround mvpdc/a *mvpdiff,mvpfet,mvrpd 40 absence_illegal \
+ surround mvpdc/a *mvpdiff,mvpfet,mvpfetesd,mvrpd 40 absence_illegal \
 	"P-diffusion overlap of P-diffusion contact < %d (licon.5a)"
  surround mvndic/a *mvndi 40 absence_illegal \
 	"N-diode overlap of N-diode contact < %d (licon.5a)"
@@ -5484,9 +5528,9 @@
  spacing mvnsc/a allpdiffmvnontap 60 touching_illegal \
 	"Min. space between N-tap contact and butting P diffusion < %d (licon.5b)"
 
- surround mvndc/a *mvndiff,mvnfet,mvrnd 60 directional \
+ surround mvndc/a *mvndiff,mvnfet,mvnfetesd,mvrnd 60 directional \
 	"N-diffusion overlap of N-diffusion contact < %d in one direction (licon.5c)"
- surround mvpdc/a *mvpdiff,mvpfet,mvrpd 60 directional \
+ surround mvpdc/a *mvpdiff,mvpfet,mvpfetesd,mvrpd 60 directional \
 	"P-diffusion overlap of P-diffusion contact < %d in one direction (licon.5c)"
  surround mvndic/a *mvndi 60 directional \
 	"N-diode overlap of N-diode contact < %d in one direction (licon.5c)"
@@ -5748,9 +5792,9 @@
 	"Butting P-tap spacing to NMOS gate < %d (poly.6)"
  edge4way *nsd *pdiff 300 ~(pfet,ppu,scpfet,scpfethvt,pfetlvt,pfetmvt)/a *nsd 300 \
 	"Butting N-tap spacing to PMOS gate < %d (poly.6)"
- edge4way *mvpsd *mvndiff 300 ~(mvnfet,mvnnfet)/a *mvpsd 300 \
+ edge4way *mvpsd *mvndiff 300 ~(mvnfet,mvnfetesd,mvnnfet)/a *mvpsd 300 \
 	"Butting MV P-tap spacing to MV NMOS gate < %d (poly.6)"
- edge4way *mvnsd *mvpdiff 300 ~mvpfet/a *mvnsd 300 \
+ edge4way *mvnsd *mvpdiff 300 ~(mvpfet,mvpfetesd)/a *mvnsd 300 \
 	"Butting MV N-tap spacing to MV PMOS gate < %d (poly.6)"
 
  # No LV FETs in HV diff
@@ -5761,22 +5805,22 @@
 	"LV N-diffusion to MV N-diffusion < %d (diff/tap.23 + diff/tap.22)"
 
  # No HV FETs in LV diff
- spacing mvpfet,*mvpdiff *pdiff 360 touching_illegal \
+ spacing mvpfet,mvpfetesd,*mvpdiff *pdiff 360 touching_illegal \
 	"MV P-diffusion to LV P-diffusion < %d (diff/tap.23 + diff/tap.22)"
 
- spacing mvnfet,mvvaractor,*mvndiff *ndiff 360 touching_illegal \
+ spacing mvnfet,mvnfetesd,mvvaractor,*mvndiff *ndiff 360 touching_illegal \
 	"MV N-diffusion to LV N-diffusion < %d (diff/tap.23 + diff/tap.22)"
 
  # Minimum length of MV FETs.  Note that this is larger than the minimum
  # width (0.29um), so an edge rule is required
 
- edge4way mvndiff mvnfet 500 mvnfet 0 0 \
+ edge4way mvndiff mvnfet,mvnfetesd 500 mvnfet,mvnfetesd 0 0 \
 	"MV NMOS minimum length < %d (poly.13)"
 
  edge4way mvnsd mvvaractor 500 mvvaractor 0 0 \
 	"MV Varactor minimum length < %d (poly.13)"
 
- edge4way mvpdiff mvpfet 500 mvpfet 0 0 \
+ edge4way mvpdiff mvpfet,mvpfetesd 500 mvpfet,mvpfetesd 0 0 \
 	"MV PMOS minimum length < %d (poly.13)"
 
 #--------------------------------------------------
@@ -6415,6 +6459,10 @@
 	*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w
  device msubcircuit sky130_fd_pr__nfet_05v0_nvt mvnnfet \
 	*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w
+ device msubcircuit sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd \
+	*mvndiff,mvndiffres *mvndiff,mvndiffres pwell,space/w error l=l w=w
+ device msubcircuit sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd \
+	*mvpdiff,mvpdiffres *mvpdiff,mvpdiffres nwell error l=l w=w
 
  device resistor sky130_fd_pr__res_generic_l1 rli1 *li,coreli
  device resistor sky130_fd_pr__res_generic_m1 rmetal1 *metal1
@@ -6515,7 +6563,9 @@
 	pwell,space/w nwell error
 
  device mosfet sky130_fd_pr__pfet_g5v0d10v5 mvpfet mvpdiff,mvpdiffres,mvpdc nwell 
+ device mosfet sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd mvpdiff,mvpdiffres,mvpdc nwell 
  device mosfet sky130_fd_pr__nfet_g5v0d10v5 mvnfet mvndiff,mvndiffres,mvndc pwell,space/w
+ device mosfet sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd mvndiff,mvndiffres,mvndc pwell,space/w
  device mosfet sky130_fd_pr__nfet_05v0_nvt mvnnfet *mvndiff,mvndiffres pwell,space/w
 
  # These devices always extract as subcircuits