diff --git a/common/get_gds_date.py b/common/get_gds_date.py
new file mode 100755
index 0000000..5e0f143
--- /dev/null
+++ b/common/get_gds_date.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+# Script to read a GDS file and print out the timestamp(s).
+
+import os
+import sys
+import datetime
+
+def usage():
+    print('get_gds_date.py <path_to_gds_in> [-created | -modified]')
+
+if __name__ == '__main__':
+    debug = False
+
+    if len(sys.argv) == 1:
+        print("No options given to change_gds_date.py.")
+        usage()
+        sys.exit(0)
+
+    optionlist = []
+    arguments = []
+
+    for option in sys.argv[1:]:
+        if option.find('-', 0) == 0:
+            optionlist.append(option)
+        else:
+            arguments.append(option)
+
+    if len(arguments) != 1:
+        print("Wrong number of arguments given to get_gds_date.py.")
+        usage()
+        sys.exit(0)
+
+    created = True
+    modified = True
+
+    if '-debug' in optionlist:
+        debug = True
+    if '-created' in optionlist:
+        modified = False
+    if '-modified' in optionlist:
+        created = False
+
+    source = arguments[0]
+
+    sourcedir = os.path.split(source)[0]
+    gdsinfile = os.path.split(source)[1]
+
+    with open(source, 'rb') as ifile:
+        gdsdata = ifile.read()
+
+    datalen = len(gdsdata)
+    dataptr = 0
+    while dataptr < datalen:
+        # Read stream records up to any string, then search for search text.
+        bheader = gdsdata[dataptr:dataptr + 2]
+        reclen = int.from_bytes(bheader, 'big')
+        if reclen == 0:
+            print('Error: found zero-length record at position ' + str(dataptr))
+            break
+
+        rectype = gdsdata[dataptr + 2]
+        datatype = gdsdata[dataptr + 3]
+
+        brectype = rectype.to_bytes(1, byteorder='big')
+        bdatatype = datatype.to_bytes(1, byteorder='big')
+
+        if rectype == 1:		# 1 = beginlib
+            # Datatype should be 2
+            if datatype != 2:
+                print('Error:  Header data type is not 2-byte integer!')
+            if reclen != 28:
+                print('Error:  Header record length is not 28!')
+            if debug:
+                print('Record type = ' + str(rectype) + ' data type = ' + str(datatype) + ' length = ' + str(reclen))
+
+            if created: 
+                crec1 = gdsdata[dataptr + 4:dataptr + 6]
+                crec2 = gdsdata[dataptr + 6:dataptr + 8]
+                crec3 = gdsdata[dataptr + 8:dataptr + 10]
+                crec4 = gdsdata[dataptr + 10:dataptr + 12]
+                crec5 = gdsdata[dataptr + 12:dataptr + 14]
+                crec6 = gdsdata[dataptr + 14:dataptr + 16]
+
+                modyear = int.from_bytes(crec1, 'big')
+                year = modyear + 1900
+                month = int.from_bytes(crec2, 'big')
+                day = int.from_bytes(crec3, 'big')
+                hour = int.from_bytes(crec4, 'big')
+                minute = int.from_bytes(crec5, 'big')
+                second = int.from_bytes(crec6, 'big')
+
+                print('Created date: {}-{}-{}-{}-{}-{}'.format(year, month, day, hour, minute, second))
+
+            if modified:
+                mrec1 = gdsdata[dataptr + 16:dataptr + 18]
+                mrec2 = gdsdata[dataptr + 18:dataptr + 20]
+                mrec3 = gdsdata[dataptr + 20:dataptr + 22]
+                mrec4 = gdsdata[dataptr + 22:dataptr + 24]
+                mrec5 = gdsdata[dataptr + 24:dataptr + 26]
+                mrec6 = gdsdata[dataptr + 26:dataptr + 28]
+
+                modyear = int.from_bytes(mrec1, 'big')
+                year = modyear + 1900
+                month = int.from_bytes(mrec2, 'big')
+                day = int.from_bytes(mrec3, 'big')
+                hour = int.from_bytes(mrec4, 'big')
+                minute = int.from_bytes(mrec5, 'big')
+                second = int.from_bytes(mrec6, 'big')
+
+                print('Modified date: {}-{}-{}-{}-{}-{}'.format(year, month, day, hour, minute, second))
+            break
+
+        # Advance the pointer past the data
+        dataptr += reclen
+
+    exit(0)
diff --git a/sky130/custom/sky130_fd_sc_hd/gds/sky130_ef_sc_hd__fakediode_2.gds b/sky130/custom/sky130_fd_sc_hd/gds/sky130_ef_sc_hd__fakediode_2.gds
index f3d1e24..9fe03d9 100644
--- a/sky130/custom/sky130_fd_sc_hd/gds/sky130_ef_sc_hd__fakediode_2.gds
+++ b/sky130/custom/sky130_fd_sc_hd/gds/sky130_ef_sc_hd__fakediode_2.gds
Binary files differ
