diff --git a/ats/scott_test/analysis_test.js b/ats/scott_test/analysis_test.js
index 648d2d4dfd136f25b734f5000d94b6be57b9ce7f..d602c7b3b37ad4760d49f0e03468e7a265aee96c 100644
--- a/ats/scott_test/analysis_test.js
+++ b/ats/scott_test/analysis_test.js
@@ -158,6 +158,7 @@ try {
                         GEN.COM("sel_change_atr,mode=add")
                     }
                 }
+                GEN.deleteLayer({job:job,layer:[tmp_layer]})
             }
         }
     })
@@ -249,7 +250,7 @@ try {
         } else {
             GEN.clearLayers()
             GEN.workLayer({name:drill.odb_name,display_number:2,clear_before:'yes'})
-            GEN.selectByFilter({attribute:[{attribute:".drill",option:"plated"}],profile:"in"})
+            GEN.selectByFilter({attribute:[{attribute:".drill",option:"plated"}]})
             if(GEN.getSelectCount()>0){
                 GEN.selClearFeature()
                 drill_info.drl_type = "PTH"
@@ -263,8 +264,16 @@ try {
         drill_info.drl_filler = drl_filler
         drill_info.drl_zones = "{A}"
         cam_drill_structure.push(drill_info)
-        // save_stack_info({info:drill_info})
     })
+    var is_via_filling = cam_drill_structure.filter(function(v){return v.drl_filler == "Via Filling"})
+    if(is_via_filling.length>0){
+        cam_drill_structure = cam_drill_structure.map(function(item){
+            if(item.drl_type=="Laser" && item.drl_filler=="None"){
+                item.drl_filler = "Via Filling"
+            }
+            return item
+        })
+    }
     save_job_info({
         jobid: JobId,
         jobinfohash: {cam_drill_structure: JSON.stringify(cam_drill_structure)}
@@ -456,7 +465,8 @@ try {
 		if(pcs_steps.length > 0){
 			pcs_steps.forEach(function(step){
 				if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){
-					var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"});
+                    GEN.COM("tools_set,layer="+layer+",slots=by_length")
+					var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm",});
 					if(drill_tool_info[layer]){
 						Object.keys(tool).forEach(function(hashkey){
 							if(drill_tool_info[layer][hashkey]){
@@ -476,23 +486,25 @@ try {
         }
 		if(arr_steps.length > 0){
 			arr_steps.forEach(function(step){
-				if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){
-					var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"});
-					if(drill_tool_info[layer]){
-						Object.keys(tool).forEach(function(hashkey){
-							if(drill_tool_info[layer][hashkey]){
-								if(!drill_tool_info[layer][hashkey].array_count){drill_tool_info[layer][hashkey].array_count = 0}
-								drill_tool_info[layer][hashkey].array_count += Number(tool[hashkey].count) ;
-							}
-						})
-					}else{
-						drill_tool_info[layer] = tool ;
-						Object.keys(tool).forEach(function(hashkey){
-								if(!drill_tool_info[layer][hashkey].array_count){drill_tool_info[layer][hashkey].array_count = 0}
-								drill_tool_info[layer][hashkey].array_count += Number(tool[hashkey].count) ;
-						})
-					}
-				}
+                if(GEN.isStepExists({job:job,step:step})){
+                    if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){
+                        var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"});
+                        if(drill_tool_info[layer]){
+                            Object.keys(tool).forEach(function(hashkey){
+                                if(drill_tool_info[layer][hashkey]){
+                                    if(!drill_tool_info[layer][hashkey].array_count){drill_tool_info[layer][hashkey].array_count = 0}
+                                    drill_tool_info[layer][hashkey].array_count += Number(tool[hashkey].count) ;
+                                }
+                            })
+                        }else{
+                            drill_tool_info[layer] = tool ;
+                            Object.keys(tool).forEach(function(hashkey){
+                                    if(!drill_tool_info[layer][hashkey].array_count){drill_tool_info[layer][hashkey].array_count = 0}
+                                    drill_tool_info[layer][hashkey].array_count += Number(tool[hashkey].count) ;
+                            })
+                        }
+                    }
+                }
 			})
         }
     })
@@ -503,6 +515,7 @@ try {
             where:{job_id:JobId}
         })
     });
+
     var seq_index = 1 ;
 	Object.keys(drill_tool_info).forEach(function(layer){
 		var datalist = []
@@ -557,6 +570,7 @@ try {
 	})
 
     console.log("=============================> 6 set smd bga")
+    
     var allStep = GEN.getStepList({job:job})
     allStep.forEach(function(step){
         GEN.openStep({job:job,name:step})
@@ -615,7 +629,6 @@ try {
         })
         GEN.closeStep()
     })
-    // GEN.createChklist()
     console.log("============= ===============> 6 analysis smd")
 
     // smd
@@ -630,7 +643,6 @@ try {
     console.log("===================================> 7 bga info")
     var bgaInfo;
     bgaInfo = bgaAnalysis({job:job,steplist:[pcs_step],layers:analysis_obj.matrixInfo.mOuters,attr:".bga"})
-  
     console.log("========================bgaInfo:" + _.toString(bgaInfo));
     // 保存
     console.log("============== =====================> 8 save bga smd info")
@@ -688,8 +700,6 @@ try {
             GEN.closeStep()
         }
     })
-
-
     var info = {
         min_line_width: ["line","user_nor_line"],
         min_line_spacing: ["l2l"],
@@ -1415,7 +1425,7 @@ function analysis(props){
         GEN.closeStep()
         return res
     }
-    T_m_p.prototype.analysis_vc_src_EDGE_PLATING = function(props){        // ? 检查线路外形是否存在物件,存在则存yes
+    T_m_p.prototype.analysis_vc_src_EDGE_PLATING = function(props){        
         var res = "no"
         var rout = this.matrixInfo.matrixVal.filter(function(v){return v.layer_type == "rout"})   // 找rout层
         if(rout.length == 0){
@@ -1986,19 +1996,24 @@ function all_bga_min_pitch_anal(props){  // 分析所有bga中间距最小的
     GEN.workLayer({name:tmp_layer,display_number:1,clear_before:'yes'});
     // 获取最小bga间距
     var features = GEN.getFeatures({job:job,step:step,layer:tmp_layer})
-    var tmp = features.map(function(v){
-        var num = Math.sqrt((v.xe-v.xs)*(v.xe-v.xs) + (v.ye-v.ys)*(v.ye-v.ys))*1000
-        return {num:num.toFixed(4),symbol:v.symbol}
-    })
-    var bga_min_pitch = tmp.sort(function(a,b){return a-b})[0]
-    res.bga_min_pitch = bga_min_pitch.num
+    if(features && features.length){
+        var tmp = features.map(function(v){
+            var num = Math.sqrt((v.xe-v.xs)*(v.xe-v.xs) + (v.ye-v.ys)*(v.ye-v.ys))*1000
+            return {num:num.toFixed(4),symbol:v.symbol}
+        })
+        var bga_min_pitch = tmp.sort(function(a,b){return a-b})[0]
+        res.bga_min_pitch = bga_min_pitch.num
+        // pitch 中选最小的
+        GEN.selClearFeature()
+        GEN.COM("filter_set,filter_name=popup,update_popup=no,profile=in")
+        GEN.COM("filter_set,filter_name=popup,update_popup=yes,slot=line,slot_by=length,min_len=0,max_len="+(bga_min_pitch.num/1000)+0.0002)
+        GEN.COM("filter_area_strt") 
+        GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no")
+        GEN.COM("filter_reset,filter_name=popup")
+    }
     // 所有BGA中间距最小的PAD大小
-    GEN.selClearFeature()
-    GEN.selectByFilter({include_syms:bga_min_pitch.symbol})
-
     var min_pitch_layer = tmp_layer + "_min"
     selCopyLayer({job:job,layer:min_pitch_layer})
-
     GEN.workLayer({name:layer,display_number:1,clear_before:'yes'});
     GEN.selClearFeature()
     GEN.selRefFeat({layers:min_pitch_layer,use:'filter',mode:'touch'})
@@ -2007,8 +2022,12 @@ function all_bga_min_pitch_anal(props){  // 分析所有bga中间距最小的
     GEN.workLayer({name:min_pad_layer,display_number:1,clear_before:'yes'});
     var min_pad_symbols = GEN.getLayerSymsHist({job:job,layer:min_pad_layer,step:step})
     var min_pad_symbol = _.values(min_pad_symbols).sort(function(a,b){return Number(a.size)-Number(b.size)})[0]
+    // 删除非最小的
+    GEN.selectByFilter({include_syms:min_pad_symbol.symbol})
+    GEN.selReverse()
+    if(GEN.getSelectCount()>0){GEN.selDelete()}
     res.bga_min_pitch_pad_size = min_pad_symbol.size
-    res.bga_min_pitch = res.bga_min_pitch - 0 + (min_pad_symbol.size-0)
+    res.bga_min_pitch = (res.bga_min_pitch || 20) - 0 + (min_pad_symbol.size-0)
     if(solder_layer){
         // 最小pitch开窗大小
         GEN.workLayer({name:solder_layer,display_number:1,clear_before:'yes'});
@@ -2120,34 +2139,39 @@ function bgaPitch(props){
     GEN.COM("chklist_create_lyrs,chklist="+ck+",severity=3,suffix=pitch");
     GEN.workLayer({name:tmp_layer2,display_number:1,clear_before:'yes'});
     GEN.selectByFilter({attribute:[{attribute:".string",text:"p2p"}]})
-    
-    GEN.saveJob({job:job})
-
     var tmp_layer = tmp_layer2 + "_tmp"
     selCopyLayer({job:job,layer:tmp_layer})
     GEN.workLayer({name:tmp_layer,display_number:1,clear_before:'yes'});
-    // var symbollists = GEN.getLayerSymsHist({job:job,step:step,layer:tmp_layer})
-    // var sys = Object.keys(symbollists)
-    // if(sys.length > 1){
-    //     sys = sys.sort(function(a,b){return symbollists[a].size - symbollists[b].size})
-    //     // todo 如何找到线距离最小的pad 删除其他的
-    // }
     var features = GEN.getFeatures({job:job,step:step,layer:tmp_layer})
+    var res
     if(features && features.length){
         var tmp = features.map(function(v){
             var num = Math.sqrt((v.xe-v.xs)*(v.xe-v.xs) + (v.ye-v.ys)*(v.ye-v.ys))*1000
             return num.toFixed(4)
         })
-        var res = tmp.sort(function(a,b){return a-b})[0]
-        return res
+        res = tmp.sort(function(a,b){return a-b})[0]
+    }
+    if (res) {
+        // 过滤掉pitch不是最小的线
+        GEN.COM("filter_set,filter_name=popup,update_popup=no,profile=in")
+        GEN.COM("filter_set,filter_name=popup,update_popup=yes,slot=line,slot_by=length,min_len=0,max_len="+(res/1000)+0.0002)
+        GEN.COM("filter_area_strt") 
+        GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no")
+        GEN.COM("filter_reset,filter_name=popup")
+        GEN.selReverse()
+        if(GEN.getSelectCount()>0){GEN.selDelete()}
+        GEN.workLayer({name:layer,display_number:1,clear_before:'yes'});
+        GEN.selRefFeat({layers:tmp_layer,use:'filter',mode:'touch'})
+        GEN.selReverse()
+        if(GEN.getSelectCount()>0){GEN.selDelete()}
     }
     GEN.deleteLayer({job:job,layer:tmp_layer})
     GEN.deleteLayer({job:job,layer:tmp_layer1})
     GEN.deleteLayer({job:job,layer:tmp_layer2})
     // 矩阵
+    return res || 20.1
 }
 
-
 function myFixed(str, num) {
 	if(/^[1-9][0-9]*([.][0-9]+)?$/.test(str)){
 		return Number(str).toFixed(num)
diff --git a/ats/scott_test/input_test.js b/ats/scott_test/input_test.js
index cc5657853a6334aab8c259967d4be873f0209201..37b09f3e4d9332fd359466752787b629e27c93e1 100644
--- a/ats/scott_test/input_test.js
+++ b/ats/scott_test/input_test.js
@@ -130,12 +130,18 @@ try {
 	if(!fs.exists(path)){throw "path error"}
 	var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1)
 	// 判断存不存在料号文件
+	// var vc_position = db.query("",function(q){
+	// 	return q.selectValue({
+	// 		table:'pdm_job',
+	// 		field:'version',
+	// 		where:{id : JobId}
+	// 	})
+	// });
 	var job_file_baseName = job
 	// if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
 	// 	job_file_baseName = job_file_baseName + "_" + vc_position
 	// }
 	var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
-	
 	if(jobFile.length == 0){throw "job file is not exist"}
 	var jobFiles = []  // 记录要分析的文件
 	if (!jobFile[0].isDir) {
@@ -143,13 +149,17 @@ try {
 	} else {
 		jobFiles = fs.listDir(jobFile[0].path)
 	}
+	GEN.COM("config_edit,name=iol_gbr_polygon_break,value=1,mode=user")
+	GEN.COM("config_edit,name=iol_fix_ill_polygon,value=yes,mode=user")
 	// 分析料号文件 得到料号导入信息 导入类型
 	var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
 	if(jobInfo.data.length == 0){throw "file error"}
 	var importOk = false;  // 是否成功导入
 	if(/odb/ig.test(jobInfo.type)){  // odb导入
+		fs.writeFile("./tmp.js",_.toString(jobInfo.data))
 		if(jobInfo.data.length == 1){  // 只分析到一个tgz文件 直接导入
-			console.log("========= import one ====>path:"+ _.toString(jobInfo.data))  // ? tmp
+			resultData.push( {type: "info", title: "读取"+jobInfo.data[0].file.name,
+				detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
 			var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
 			if(err){throw err}
 		} else {  // 多个tgz文件 说明需要合并
@@ -158,6 +168,8 @@ try {
 				var path = item.file.path
 				var tmp_job_name = job + "_tmp_" + i
 				var err = importJob({name:tmp_job_name,db:custCfg.db,path:path},config.delSameJob)
+				resultData.push( {type: "info", title: "读取"+item.file.name,
+				detail: [{desc: _.toString({format:"odb++",date:now(),user:$.user_name})}]})
 				if(err){throw err}
 				return {
 					name:tmp_job_name,
@@ -230,6 +242,8 @@ try {
 		})
 		GEN.COM("input_manual_reset")
 		gerberInfo.forEach(function(v){
+			resultData.push( {type: "info", title: "读取"+v.layer,
+				detail: [{desc: _.toString({format:v.format,date:now(),user:$.user_name})}]})
 			GEN.COM("input_manual_set",v)
 		})
 		GEN.COM("input_manual")
@@ -379,3 +393,11 @@ function getStepType(step){
     }
     return pcs
 }
+
+function now(){
+    var date = new Date()
+    var time = _.toString(date)
+    res1 = /\d{4}-\d{2}-\d{2}/.exec(time)
+    res2 = /\d{2}:\d{2}:\d{2}/.exec(time)
+    return res1 + " " +res2
+}
\ No newline at end of file
diff --git a/config_ats.js b/config_ats.js
index 33ec0abbf71c0a68bc69bb705cb9ca9ce04cad4b..8c7c29fd415cf6ab6429f9dc57ed14ef180b0a41 100644
--- a/config_ats.js
+++ b/config_ats.js
@@ -187,8 +187,8 @@
 			"text_line_width": 0.0024
 		},
 		"Excellon2_5": { 
-			"nf1": 3,
-			"nf2": 2,
+			"nf1": 2,
+			"nf2": 3,
 			"units": "mm",
 			"zeroes": "leading",
 			"decimal": "no",
@@ -207,7 +207,7 @@
 			"text_line_width": 0.0024
 		},
 		"Excellon2_6": { 
-			"nf1": 2,
+			"nf1": 3,
 			"nf2": 4,
 			"units": "mm",
 			"zeroes": "leading",
@@ -525,16 +525,16 @@
 				}
 			],
 			"tl_name": [
-				{"orig_name" : ["assytop.art","past_top"], "tl_name" : "past_top" },
-				{"orig_name" : ["assybot.art","past_botm"], "tl_name" : "past_botm" },
-				{"orig_name" : ["pleg.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
-				{"orig_name" : ["sleg.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
-				{"orig_name" : ["ssm.art","sm_top"], "tl_name" : "sm_top" },
-				{"orig_name" : ["psm.art","sm_bot"], "tl_name" : "sm_botm" },
+				{"orig_name" : ["assytop\\.art","past_top"], "tl_name" : "past_top" },
+				{"orig_name" : ["assybot\\.art","past_botm"], "tl_name" : "past_botm" },
+				{"orig_name" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
+				{"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
+				{"orig_name" : ["ssm\\.art","sm_top"], "tl_name" : "sm_top" },
+				{"orig_name" : ["psm\\.art","sm_bot"], "tl_name" : "sm_botm" },
 				{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
-				{"orig_name" : ["^0(\\d+).*ccp_ms","^s(\\d+)\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
-				{"orig_name" : ["^bottom$","^bottom.art$"], "tl_name" : "bottom" },
-				{"orig_name" : ["-(\\d+)-(\\d+)\.drl$","(\\d+)-(\\d+)-laser\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
+				{"orig_name" : ["^0(\\d+).*ccp_ms","^s(\\d+)\\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["^bottom$","^bottom\\.art$"], "tl_name" : "bottom" },
+				{"orig_name" : ["-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
 				{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
 				{"orig_name" : "fab.art", "tl_name" : "fab.art" },
 				{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
@@ -647,16 +647,16 @@
 			],
 			"tl_name": [
 				{"orig_name" : ["pasttop.art","^past_top$","top_solderpaste"], "tl_name" : "past_top" },
-				{"orig_name" : ["^silk_top\\.art$","pleg.art","^silk_top$","top_silkscreen"], "tl_name" : "silk_top" },
+				{"orig_name" : ["^silk_top\\.art$","pleg\\.art","^silk_top$","top_silkscreen"], "tl_name" : "silk_top" },
 				{"orig_name" : ["_r1\\.phd$","_r1\\.fph$","^smt\\.art$","soldtop.art","^sm_top$","top_soldermask"], "tl_name" : "sm_top" },
-				{"orig_name" : ["^top.art$","^top$"], "tl_name" : "top" },
+				{"orig_name" : ["^top\\.art$","^top$"], "tl_name" : "top" },
 				{"orig_name" : ["_l(\\d+)\\.phd$","_l(\\d+)\\.fph$","^in_(\\d+)\\.art$","^l(\\d+)\\.art$","inner_(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
-				{"orig_name" : ["^bot.art$","^bottom.art","^bottom$"], "tl_name" : "bottom" },
+				{"orig_name" : ["^bot\\.art$","^bottom\\.art","^bottom$"], "tl_name" : "bottom" },
 				{"orig_name" : ["_r\\d\\.phd$","_r\\d\\.fph$","^smb\\.art$","soldbotm.art","^sm_botm$","bot_soldermask"], "tl_name" : "sm_botm" },
-				{"orig_name" : ["^silk_bottom\\.art$","sleg.art","^silk_bot$","bot_silkscreen"], "tl_name" : "silk_bot" },
-				{"orig_name" : ["pastbotm.art","^past_botm$","bot_solderpaste"], "tl_name" : "past_botm" },
+				{"orig_name" : ["^silk_bottom\\.art$","sleg\\.art","^silk_bot$","bot_silkscreen"], "tl_name" : "silk_bot" },
+				{"orig_name" : ["pastbotm\\.art","^past_botm$","bot_solderpaste"], "tl_name" : "past_botm" },
 				{"orig_name" : ["^nc_drill$","^drill$"], "tl_name" : "drill" },
-				{"orig_name" : "multipack.art", "tl_name" : "array" },
+				{"orig_name" : "multipack\\.art", "tl_name" : "array" },
 				{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
 				{"orig_name" : ["outline.art","^outline$"], "tl_name" : "outline" },
 				{"orig_name" : ["fab.art","fab"], "tl_name" : "fab" },
@@ -802,22 +802,22 @@
 				}
 			],
 			"tl_name": [
-				{"orig_name" : ["SoldPasteTop\.ger","past_top"], "tl_name" : "past_top" },
-				{"orig_name" : ["SoldPasteBot\.ger","past_botm"], "tl_name" : "past_botm" },
-				{"orig_name" : ["^smt\.art$","\.ssa$","SilkScrnTop\.ger","silk_top"], "tl_name" : "silk_top" },
-				{"orig_name" : ["^smb\.art$","\.ssb$","SilkScrnBot\.ger","silk_bot"], "tl_name" : "silk_bot" },
-				{"orig_name" : ["\.sma$","SoldMask1Top\.ger","sm_top"], "tl_name" : "sm_top" },
-				{"orig_name" : ["\.smb$","SoldMask1Bot\.ger","sm_bot"], "tl_name" : "sm_botm" },
+				{"orig_name" : ["^pmt\\.art$","SoldPasteTop\\.ger","past_top"], "tl_name" : "past_top" },
+				{"orig_name" : ["^pmb\\.art$","SoldPasteBot\\.ger","past_botm"], "tl_name" : "past_botm" },
+				{"orig_name" : ["^sst\\.art$","\\.ssa$","SilkScrnTop\\.ger","silk_top"], "tl_name" : "silk_top" },
+				{"orig_name" : ["^ssb\\.art$","\\.ssb$","SilkScrnBot\\.ger","silk_bot"], "tl_name" : "silk_bot" },
+				{"orig_name" : ["^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" },
+				{"orig_name" : ["^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" },
 				{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
-				{"orig_name" : ["^s(\\d+)\.art$","\.l(\\d+)$","Copper(\\d+)\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"},
-				{"orig_name" : ["^bottom$","^bottom.art$"], "tl_name" : "bottom" },
-				{"orig_name" : ["\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
-				{"orig_name" : ["ThruHolePlated_(\\d+)_(\\d+)\.ncd$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
-				{"orig_name" : ["ThruHoleNonPlated\.ncd$","^drill$"], "tl_name" : "drill" },
+				{"orig_name" : ["^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
+				{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
+				{"orig_name" : ["ThruHolePlated_(\\d+)_(\\d+)\\.ncd$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
+				{"orig_name" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
 				{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
 				{"orig_name" : "fab.art", "tl_name" : "fab.art" },
 				{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
-				{"orig_name" : ["PnlContourNonPlated\.ger","^outline"], "tl_name" : "outline" },
+				{"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
 				{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
 				{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
 			]
@@ -859,22 +859,24 @@
 				}
 			],
 			"tl_name": [
-				{"orig_name" : ["assytop.art","past_top"], "tl_name" : "past_top" },
-				{"orig_name" : ["assybot.art","past_botm"], "tl_name" : "past_botm" },
-				{"orig_name" : ["pleg.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
-				{"orig_name" : ["sleg.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
-				{"orig_name" : ["ssm.art","sm_top"], "tl_name" : "sm_top" },
-				{"orig_name" : ["psm.art","sm_bot"], "tl_name" : "sm_botm" },
-				{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
-				{"orig_name" : ["^0(\\d+).*ccp_ms","^s(\\d+)\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
-				{"orig_name" : ["^bottom$","^bottom.art$"], "tl_name" : "bottom" },
-				{"orig_name" : ["-(\\d+)-(\\d+)\.drl$","(\\d+)-(\\d+)-laser\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
+				{"orig_name" : ["solderpastetop","past_top"], "tl_name" : "past_top" },
+				{"orig_name" : ["solderpastebottom","past_botm"], "tl_name" : "past_botm" },
+				{"orig_name" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
+				{"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
+				{"orig_name" : ["soldermasktop","sm_top"], "tl_name" : "sm_top" },
+				{"orig_name" : ["soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" },
+				{"orig_name" : ["^top$","layertop"], "tl_name" : "top" },
+				{"orig_name" : ["layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
+				{"orig_name" : ["^bottom$","layerbottom"], "tl_name" : "bottom" },
+				{"orig_name" : ["-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
 				{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
 				{"orig_name" : "fab.art", "tl_name" : "fab.art" },
-				{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
+				{"orig_name" : ["pcb-set","^array$"], "tl_name" : "array" },
 				{"orig_name" : ["^outline"], "tl_name" : "outline" },
-				{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
-				{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
+				{"orig_name" : ["au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" },
+				{"orig_name" : ["au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" },
+				{"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" },
+				{"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" },
 			]
 		}
 	},
@@ -895,6 +897,8 @@
 		{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
 		{"tl_name":"outline","new_name":"outline" ,"attr":{"context":"board","type":"rout"}},
 		{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
+		{"tl_name":"cavity_top","new_name":"cavity_top" ,"attr":{"context":"misc"}},
+		{"tl_name":"cavity_bot","new_name":"cavity_bot" ,"attr":{"context":"misc"}},
 		{"tl_name":"fab.art","new_name":"fab.art" ,"attr":{"context":"misc"}}
 	],
 	"delSameJob": "yes"