{"id":4575,"date":"2025-12-19T07:11:30","date_gmt":"2025-12-19T07:11:30","guid":{"rendered":"https:\/\/flj-pcb.com\/?p=4575"},"modified":"2025-12-19T08:07:37","modified_gmt":"2025-12-19T08:07:37","slug":"about-pcb-drill-compensation-simple-english","status":"publish","type":"post","link":"https:\/\/flj-pcb.com\/fi\/about-pcb-drill-compensation-simple-english\/","title":{"rendered":"Tietoja PCB Drill Compensation -j\u00e4rjestelm\u00e4st\u00e4"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"4575\" class=\"elementor elementor-4575\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-733c0b06 e-flex e-con-boxed e-con e-parent\" data-id=\"733c0b06\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6269846d elementor-widget elementor-widget-text-editor\" data-id=\"6269846d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"49\" data-end=\"461\">Suuria yksil\u00f6it\u00e4 ei ole olemassa, vain suuria tiimej\u00e4. Kun tiimi ty\u00f6skentelee yhdess\u00e4, ensimm\u00e4isen vaiheen PCB CAM -automaatioprojekti on tarkoitettu <strong data-start=\"178\" data-end=\"194\">nettok\u00e4sittely<\/strong> ja <strong data-start=\"199\" data-end=\"217\">poran k\u00e4sittely<\/strong> on tehty. Seuraavaksi voimme siirty\u00e4 piirilevyn s\u00e4\u00e4nt\u00f6moottoriin. T\u00e4ss\u00e4 puhun porakompensaatiosta piirilevytekniikassa. Piirilevytekniikan kehitt\u00e4j\u00e4n\u00e4 sinun pit\u00e4isi tiet\u00e4\u00e4, mik\u00e4 se on ja miksi se toimii. Jaan alla keskeiset kohdat porauksen kompensoinnista.<\/p>\n<hr data-start=\"463\" data-end=\"466\" \/>\n<h2 data-start=\"468\" data-end=\"507\">1. Miksi kompensoimme porakokoja?<\/h2>\n<p data-start=\"509\" data-end=\"870\">Asiakkaan antamien PCB-tiedostojen reik\u00e4koot tarkoittavat yleens\u00e4 seuraavaa <em data-start=\"577\" data-end=\"584\">lopullinen<\/em> rei\u00e4n koko. Piirilevyjen valmistuksen aikana reikien sis\u00e4puolella on kupari (tai rei\u00e4t saavat pintak\u00e4sittelyn, kuten HASL, ENIG, OSP jne.). T\u00e4m\u00e4 pienent\u00e4\u00e4 reik\u00e4\u00e4. Jotta varmistetaan, ett\u00e4 rei\u00e4n lopullinen koko vastaa vaatimusta, CAM-vaiheessa korjataan porakoko. T\u00e4m\u00e4 on poran kompensointi.<\/p>\n<p data-start=\"872\" data-end=\"1171\"><strong data-start=\"872\" data-end=\"889\">Todellinen esimerkki:<\/strong><br data-start=\"889\" data-end=\"892\" \/>Lopullinen reik\u00e4koko: <strong data-start=\"909\" data-end=\"920\">1.00 mm<\/strong>. Pintak\u00e4sittely: <strong data-start=\"938\" data-end=\"946\">ENIG<\/strong> (nikkelin paksuus 2,54 \u00b5m, kullan paksuus 0,0254 \u00b5m). Noudatetaan IPC-luokkaa II, ja keskim\u00e4\u00e4r\u00e4inen pinnoitetun kuparin paksuus on seuraava <strong data-start=\"1064\" data-end=\"1073\">20 \u00b5m<\/strong>. Jos k\u00e4yt\u00e4mme <strong data-start=\"1085\" data-end=\"1096\">0,10 mm<\/strong> korvausarvona, CAM-ryhm\u00e4 valitsee korvausarvoksi <strong data-start=\"1149\" data-end=\"1160\">1,10 mm<\/strong> poranter\u00e4.<\/p>\n<p data-start=\"872\" data-end=\"1171\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-4578\" src=\"https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/Real-example.webp\" alt=\"Real example\" width=\"336\" height=\"297\" srcset=\"https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/Real-example.webp 336w, https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/Real-example-300x265.webp 300w, https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/Real-example-14x12.webp 14w\" sizes=\"(max-width: 336px) 100vw, 336px\" \/><\/p>\n<hr data-start=\"1173\" data-end=\"1176\" \/>\n<h2 data-start=\"1178\" data-end=\"1216\">2. Miten teemme porauskorvauksen?<\/h2>\n<p data-start=\"1218\" data-end=\"1445\">Tee ensin selv\u00e4ksi, mitk\u00e4 ovat porauskorvauksen kolme keskeist\u00e4 parametria:<br data-start=\"1288\" data-end=\"1291\" \/><strong data-start=\"1291\" data-end=\"1298\">(1)<\/strong> Poranter\u00e4n lis\u00e4ys,<br data-start=\"1319\" data-end=\"1322\" \/><strong data-start=\"1322\" data-end=\"1329\">(2)<\/strong> Korvausarvo,<br data-start=\"1349\" data-end=\"1352\" \/><strong data-start=\"1352\" data-end=\"1359\">(3)<\/strong> Step-up-kynnysarvo (ennakkoarvo).<br data-start=\"1394\" data-end=\"1397\" \/>N\u00e4m\u00e4 kolme m\u00e4\u00e4r\u00e4\u00e4v\u00e4t, miten korvausta sovelletaan.<\/p>\n<h3 data-start=\"1447\" data-end=\"1475\">1) Poranter\u00e4n lis\u00e4ys<\/h3>\n<p data-start=\"1476\" data-end=\"1773\">T\u00e4m\u00e4 riippuu poranterist\u00e4, joita yritys ostaa. Alalla yleisesti k\u00e4ytetty lis\u00e4ys on <strong data-start=\"1558\" data-end=\"1567\">50 \u00b5m<\/strong>. Tyypilliset porakoot vaihtelevat v\u00e4lill\u00e4 <strong data-start=\"1600\" data-end=\"1611\">0,10 mm<\/strong> osoitteeseen <strong data-start=\"1615\" data-end=\"1626\">6,35 mm<\/strong>. Tavallinen pienin poranterien v\u00e4linen askel on <strong data-start=\"1674\" data-end=\"1685\">0,05 mm<\/strong>. Joten porauskirjastossa on kokoja kuten <strong data-start=\"1723\" data-end=\"1761\">0,10 mm, 0,15 mm, 0,20 mm, 0,25 mm.<\/strong>, ja niin edelleen.<\/p>\n<h3 data-start=\"1775\" data-end=\"1802\">2) Korvausarvo<\/h3>\n<p data-start=\"1803\" data-end=\"1952\">Prosessiryhm\u00e4 asettaa korvauss\u00e4\u00e4nn\u00f6t tehtaan testitulosten perusteella. Korvausarvot eiv\u00e4t juuri vaihtele eri toimialoilla. Yhteiset s\u00e4\u00e4nn\u00f6t:<\/p>\n<ul data-start=\"1953\" data-end=\"2098\">\n<li data-start=\"1953\" data-end=\"2014\">\n<p data-start=\"1955\" data-end=\"2014\"><strong data-start=\"1955\" data-end=\"1975\">HASL-levyt<\/strong> (spray-purkki): <strong data-start=\"1989\" data-end=\"2011\">kompensoi 0,15 mm<\/strong>.<\/p>\n<\/li>\n<li data-start=\"2015\" data-end=\"2098\">\n<p data-start=\"2017\" data-end=\"2098\"><strong data-start=\"2017\" data-end=\"2040\">Levyt ilman HASL:\u00e4\u00e4<\/strong> (ENIG, upotustina, OSP jne.): <strong data-start=\"2075\" data-end=\"2097\">kompensoi 0,10 mm<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"2100\" data-end=\"2142\">3) Step-up-kynnysarvo (ennakkoarvo)<\/h3>\n<p data-start=\"2143\" data-end=\"2403\">Prosessiryhm\u00e4 m\u00e4\u00e4ritt\u00e4\u00e4 my\u00f6s strategian poranter\u00e4n valintaa varten, joka muistuttaa py\u00f6ristyss\u00e4\u00e4nt\u00f6\u00e4. Esimerkiksi kun lis\u00e4ys on <strong data-start=\"2273\" data-end=\"2282\">20 \u00b5m<\/strong>, jos j\u00e4\u00e4nn\u00f6s, joka j\u00e4\u00e4 j\u00e4ljelle jakamalla lis\u00e4yksell\u00e4, on seuraava <strong data-start=\"2336\" data-end=\"2347\">\u2265 20 \u00b5m<\/strong>, py\u00f6ristet\u00e4\u00e4n 50 \u00b5m yl\u00f6sp\u00e4in, muuten s\u00e4ilytet\u00e4\u00e4n pienempi koko.<\/p>\n<p data-start=\"2405\" data-end=\"2737\"><strong data-start=\"2405\" data-end=\"2417\">Esimerkki:<\/strong><br data-start=\"2417\" data-end=\"2420\" \/>Lopullinen reik\u00e4koko = <strong data-start=\"2438\" data-end=\"2450\">1,025 mm<\/strong>, korvaus = <strong data-start=\"2467\" data-end=\"2478\">0,10 mm<\/strong>, joten kompensoitu koko = <strong data-start=\"2502\" data-end=\"2514\">1,125 mm<\/strong>. Mutta ei ole mit\u00e4\u00e4n <strong data-start=\"2532\" data-end=\"2544\">1,125 mm<\/strong> porata kirjastossa. K\u00e4yt\u00e4 step-up-s\u00e4\u00e4nt\u00f6\u00e4. J\u00e4ljelle j\u00e4\u00e4v\u00e4 1,125 mm verrattuna 0,05 mm:n askeleeseen. <strong data-start=\"2652\" data-end=\"2661\">25 \u00b5m<\/strong>. Koska <strong data-start=\"2669\" data-end=\"2686\">25 \u00b5m &gt; 20 \u00b5m<\/strong>, py\u00f6ristet\u00e4\u00e4n 50 \u00b5m:ll\u00e4 yl\u00f6sp\u00e4in ja valitaan a <strong data-start=\"2719\" data-end=\"2730\">1,15 mm<\/strong> pora.<\/p>\n<hr data-start=\"2739\" data-end=\"2742\" \/>\n<h3 data-start=\"2744\" data-end=\"2782\">Esimerkkej\u00e4 todellisista porauskorvauksista<\/h3>\n<p data-start=\"2784\" data-end=\"2850\">Oletetaan: porauskasvu = <strong data-start=\"2810\" data-end=\"2819\">50 \u00b5m<\/strong>, nousukynnys = <strong data-start=\"2841\" data-end=\"2850\">20 \u00b5m<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"2852\" data-end=\"3097\">\n<thead data-start=\"2852\" data-end=\"2947\">\n<tr data-start=\"2852\" data-end=\"2947\">\n<th data-start=\"2852\" data-end=\"2868\" data-col-size=\"sm\">Alkuper\u00e4inen reik\u00e4<\/th>\n<th data-start=\"2868\" data-end=\"2883\" data-col-size=\"sm\">Korvaus<\/th>\n<th data-start=\"2883\" data-end=\"2904\" data-col-size=\"sm\">Korvauksen j\u00e4lkeen<\/th>\n<th data-start=\"2904\" data-end=\"2919\" data-col-size=\"sm\">Kokonaislukuosa<\/th>\n<th data-start=\"2919\" data-end=\"2931\" data-col-size=\"sm\">J\u00e4\u00e4nn\u00f6s<\/th>\n<th data-start=\"2931\" data-end=\"2947\" data-col-size=\"sm\">Valittu pora<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"2980\" data-end=\"3097\">\n<tr data-start=\"2980\" data-end=\"3038\">\n<td data-start=\"2980\" data-end=\"2991\" data-col-size=\"sm\">1,025 mm<\/td>\n<td data-start=\"2991\" data-end=\"2998\" data-col-size=\"sm\">0.10<\/td>\n<td data-start=\"2998\" data-end=\"3009\" data-col-size=\"sm\">1,125 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"3009\" data-end=\"3016\">1.10<\/td>\n<td data-col-size=\"sm\" data-start=\"3016\" data-end=\"3027\">0,025 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"3027\" data-end=\"3038\">1,15 mm<\/td>\n<\/tr>\n<tr data-start=\"3039\" data-end=\"3097\">\n<td data-start=\"3039\" data-end=\"3050\" data-col-size=\"sm\">1,016 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"3050\" data-end=\"3057\">0.10<\/td>\n<td data-col-size=\"sm\" data-start=\"3057\" data-end=\"3068\">1,116 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"3068\" data-end=\"3075\">1.10<\/td>\n<td data-col-size=\"sm\" data-start=\"3075\" data-end=\"3086\">0,016 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"3086\" data-end=\"3097\">1,10 mm<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4 data-start=\"3099\" data-end=\"3140\">Miten valittu porakoko lasketaan<\/h4>\n<p data-start=\"3141\" data-end=\"3241\">Jaa kompensoitu reik\u00e4koko kokonaislukuosaan ja j\u00e4\u00e4nn\u00f6sosaan poran inkrementin avulla:<\/p>\n<p data-start=\"3243\" data-end=\"3396\">Ota <strong data-start=\"3248\" data-end=\"3260\">1,125 mm<\/strong> esimerkkin\u00e4:<br data-start=\"3275\" data-end=\"3278\" \/>1,125 \/ 0,05 = 22,5 \u2192 lattia 22 \u2192 kokonaislukuosa = 22 \u00d7 0,05 = <strong data-start=\"3341\" data-end=\"3352\">1,10 mm<\/strong>.<br data-start=\"3353\" data-end=\"3356\" \/>J\u00e4\u00e4nn\u00f6s = 1,125 % 0,05 = <strong data-start=\"3383\" data-end=\"3395\">0,025 mm<\/strong>.<\/p>\n<p data-start=\"3398\" data-end=\"3475\">Sen j\u00e4lkeen verrataan j\u00e4\u00e4nn\u00f6sosaa step-up-kynnysarvoon (esimerkiksi 20 \u00b5m):<\/p>\n<ul data-start=\"3476\" data-end=\"3607\">\n<li data-start=\"3476\" data-end=\"3542\">\n<p data-start=\"3478\" data-end=\"3542\">Jos j\u00e4\u00e4nn\u00f6s &gt; kynnysarvo, porakoko = kokonaislukuosa + 0,05 mm.<\/p>\n<\/li>\n<li data-start=\"3543\" data-end=\"3607\">\n<p data-start=\"3545\" data-end=\"3607\">Jos j\u00e4\u00e4nn\u00f6s \u2264 kynnysarvo, porakoko = kokonaislukuosa + 0,00 mm.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"3609\" data-end=\"3612\" \/>\n<h3 data-start=\"3614\" data-end=\"3653\">Yhteenveto step-up-kynnysarvosta<\/h3>\n<p data-start=\"3654\" data-end=\"3897\">Kun poran lis\u00e4ys on <strong data-start=\"3682\" data-end=\"3691\">50 \u00b5m<\/strong>, step-up-kynnysarvo on kriittinen. Se suorittaa kompensoidun porakoon toisen korjauksen. Se p\u00e4\u00e4tt\u00e4\u00e4, \u201cstep up\u201d vai \u201cstay\u201d. T\u00e4m\u00e4n kynnysarvon muuttaminen muuttaa suoraan valittua porakokoa.<\/p>\n<p data-start=\"3899\" data-end=\"3943\"><strong data-start=\"3899\" data-end=\"3943\">Lis\u00e4\u00e4 esimerkkej\u00e4 (porausaste = 50 \u00b5m):<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"3945\" data-end=\"4209\">\n<thead data-start=\"3945\" data-end=\"4041\">\n<tr data-start=\"3945\" data-end=\"4041\">\n<th data-start=\"3945\" data-end=\"3961\" data-col-size=\"sm\">Alkuper\u00e4inen reik\u00e4<\/th>\n<th data-start=\"3961\" data-end=\"3976\" data-col-size=\"sm\">Korvaus<\/th>\n<th data-start=\"3976\" data-end=\"3990\" data-col-size=\"sm\">Kun comp.<\/th>\n<th data-start=\"3990\" data-end=\"4000\" data-col-size=\"sm\">Kokonaisluku<\/th>\n<th data-start=\"4000\" data-end=\"4012\" data-col-size=\"sm\">J\u00e4\u00e4nn\u00f6s<\/th>\n<th data-start=\"4012\" data-end=\"4032\" data-col-size=\"sm\">Step-up-kynnysarvo<\/th>\n<th data-start=\"4032\" data-end=\"4041\" data-col-size=\"sm\">Pora<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"4079\" data-end=\"4209\">\n<tr data-start=\"4079\" data-end=\"4143\">\n<td data-start=\"4079\" data-end=\"4090\" data-col-size=\"sm\">1,022 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4090\" data-end=\"4096\">0.1<\/td>\n<td data-col-size=\"sm\" data-start=\"4096\" data-end=\"4107\">1,122 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4107\" data-end=\"4114\">1.10<\/td>\n<td data-col-size=\"sm\" data-start=\"4114\" data-end=\"4125\">0,022 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4125\" data-end=\"4132\">0.02<\/td>\n<td data-col-size=\"sm\" data-start=\"4132\" data-end=\"4143\">1,15 mm<\/td>\n<\/tr>\n<tr data-start=\"4144\" data-end=\"4209\">\n<td data-start=\"4144\" data-end=\"4155\" data-col-size=\"sm\">1,022 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4155\" data-end=\"4161\">0.1<\/td>\n<td data-col-size=\"sm\" data-start=\"4161\" data-end=\"4172\">1,122 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4172\" data-end=\"4179\">1.10<\/td>\n<td data-col-size=\"sm\" data-start=\"4179\" data-end=\"4190\">0,022 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"4190\" data-end=\"4198\">0.025<\/td>\n<td data-col-size=\"sm\" data-start=\"4198\" data-end=\"4209\">1,10 mm<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr data-start=\"4211\" data-end=\"4214\" \/>\n<h3 data-start=\"4216\" data-end=\"4266\">Henkil\u00f6kohtainen n\u00e4kemys step-up-kynnyksen asettamisesta<\/h3>\n<p data-start=\"4267\" data-end=\"4575\"><strong data-start=\"4267\" data-end=\"4285\">Hy\u00f6dyt ja haitat:<\/strong> Jos lopullinen reik\u00e4 on kompensoinnin j\u00e4lkeen hieman suurempi, osa voidaan ainakin asettaa paikalleen. Jos reik\u00e4 on liian pieni, osaa ei voida asettaa. Asetamme siis yleens\u00e4 korotuskynnyksen arvoksi <strong data-start=\"4477\" data-end=\"4486\">20 \u00b5m<\/strong> sen sijaan, ett\u00e4 <strong data-start=\"4498\" data-end=\"4507\">25 \u00b5m<\/strong>. Tarkan valinnan on vastattava kutakin prosessia ja korvausarvoa.<\/p>\n<p data-start=\"4577\" data-end=\"4862\"><strong data-start=\"4577\" data-end=\"4614\">Yhdistettyn\u00e4 korvausarvoon:<\/strong> HASL-levyjen osalta, joissa korvaus on <strong data-start=\"4658\" data-end=\"4669\">0,15 mm<\/strong>, \u201cylikompensoit\u201d jo hieman ja lopulliset rei\u00e4t ovat yleens\u00e4 hieman suuria. T\u00e4ss\u00e4 tapauksessa step-up-kynnysarvo on <strong data-start=\"4791\" data-end=\"4800\">25 \u00b5m<\/strong> voi my\u00f6s toimia. K\u00e4yt\u00e4 poraa valitessasi \u201cl\u00e4himm\u00e4n\u201d s\u00e4\u00e4nt\u00f6\u00e4.<\/p>\n<hr data-start=\"4864\" data-end=\"4867\" \/>\n<h2 data-start=\"4869\" data-end=\"4943\">3. Miten varmistetaan, ett\u00e4 rei\u00e4n lopullinen koko vastaa vaatimuksia kompensoinnin j\u00e4lkeen?<\/h2>\n<h3 data-start=\"4945\" data-end=\"4983\">Menetelm\u00e4 1: Osta erikoisporanteri\u00e4<\/h3>\n<p data-start=\"4984\" data-end=\"5207\">Poran vakiolis\u00e4ys on <strong data-start=\"5012\" data-end=\"5021\">50 \u00b5m<\/strong> (0,05 mm:n askelin, kuten 1,00, 1,05, 1,10, 1,15 mm). Kun PTH-toleranssi on \u00b13 millimetri\u00e4, 50 \u00b5m:n porasarja voi kattaa toleranssin. Jos toleranssi on t\u00e4t\u00e4 pienempi, on k\u00e4ytett\u00e4v\u00e4 erikoisporanteri\u00e4.<\/p>\n<p data-start=\"5209\" data-end=\"5352\"><strong data-start=\"5209\" data-end=\"5222\">Esimerkki 1<\/strong> - Vertaa 50 \u00b5m:n ja 25 \u00b5m:n askelia:<br data-start=\"5259\" data-end=\"5262\" \/>Alkuper\u00e4inen reik\u00e4 = <strong data-start=\"5278\" data-end=\"5290\">0,922 mm<\/strong>, korvaus = <strong data-start=\"5307\" data-end=\"5318\">0,10 mm<\/strong>, kompensoitu koko = <strong data-start=\"5339\" data-end=\"5351\">1,022 mm<\/strong>.<\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"5354\" data-end=\"5545\">\n<thead data-start=\"5354\" data-end=\"5422\">\n<tr data-start=\"5354\" data-end=\"5422\">\n<th data-start=\"5354\" data-end=\"5365\" data-col-size=\"sm\">Alkuper\u00e4inen<\/th>\n<th data-start=\"5365\" data-end=\"5380\" data-col-size=\"sm\">Korvaus<\/th>\n<th data-start=\"5380\" data-end=\"5394\" data-col-size=\"sm\">Korvattu<\/th>\n<th data-start=\"5394\" data-end=\"5406\" data-col-size=\"sm\">Lis\u00e4ys<\/th>\n<th data-start=\"5406\" data-end=\"5422\" data-col-size=\"sm\">Valittu pora<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"5450\" data-end=\"5545\">\n<tr data-start=\"5450\" data-end=\"5496\">\n<td data-start=\"5450\" data-end=\"5458\" data-col-size=\"sm\">0.922<\/td>\n<td data-col-size=\"sm\" data-start=\"5458\" data-end=\"5465\">0.10<\/td>\n<td data-col-size=\"sm\" data-start=\"5465\" data-end=\"5473\">1.022<\/td>\n<td data-col-size=\"sm\" data-start=\"5473\" data-end=\"5488\">0,05 (50 \u00b5m)<\/td>\n<td data-col-size=\"sm\" data-start=\"5488\" data-end=\"5496\">1.05<\/td>\n<\/tr>\n<tr data-start=\"5497\" data-end=\"5545\">\n<td data-start=\"5497\" data-end=\"5505\" data-col-size=\"sm\">0.922<\/td>\n<td data-start=\"5505\" data-end=\"5512\" data-col-size=\"sm\">0.10<\/td>\n<td data-col-size=\"sm\" data-start=\"5512\" data-end=\"5520\">1.022<\/td>\n<td data-col-size=\"sm\" data-start=\"5520\" data-end=\"5536\">0,025 (25 \u00b5m)<\/td>\n<td data-col-size=\"sm\" data-start=\"5536\" data-end=\"5545\">1.025<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p data-start=\"5547\" data-end=\"5689\">Ero: 1,050 - 1,022 = 0,028 mm; 1,025 - 1,022 = 0,003 mm. Pienempi ero on parempi, joten <strong data-start=\"5648\" data-end=\"5660\">1,025 mm<\/strong> (25 \u00b5m:n porrastus) on parempi.<\/p>\n<p data-start=\"5691\" data-end=\"5818\"><strong data-start=\"5691\" data-end=\"5704\">Esimerkki 2<\/strong> - 50 \u00b5m vs. erikoispora:<br data-start=\"5730\" data-end=\"5733\" \/>Alkuper\u00e4inen reik\u00e4 = <strong data-start=\"5749\" data-end=\"5761\">0,611 mm<\/strong>, korvaus = <strong data-start=\"5778\" data-end=\"5789\">0,10 mm<\/strong>, kompensoitu = <strong data-start=\"5805\" data-end=\"5817\">0,711 mm<\/strong>.<\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"5820\" data-end=\"6018\">\n<thead data-start=\"5820\" data-end=\"5895\">\n<tr data-start=\"5820\" data-end=\"5895\">\n<th data-start=\"5820\" data-end=\"5831\" data-col-size=\"sm\">Alkuper\u00e4inen<\/th>\n<th data-start=\"5831\" data-end=\"5846\" data-col-size=\"sm\">Korvaus<\/th>\n<th data-start=\"5846\" data-end=\"5860\" data-col-size=\"sm\">Korvattu<\/th>\n<th data-start=\"5860\" data-end=\"5879\" data-col-size=\"sm\">Lis\u00e4ys \/ tyyppi<\/th>\n<th data-start=\"5879\" data-end=\"5895\" data-col-size=\"sm\">Valittu pora<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"5923\" data-end=\"6018\">\n<tr data-start=\"5923\" data-end=\"5969\">\n<td data-start=\"5923\" data-end=\"5931\" data-col-size=\"sm\">0.611<\/td>\n<td data-col-size=\"sm\" data-start=\"5931\" data-end=\"5938\">0.10<\/td>\n<td data-col-size=\"sm\" data-start=\"5938\" data-end=\"5946\">0.711<\/td>\n<td data-col-size=\"sm\" data-start=\"5946\" data-end=\"5961\">0,05 (50 \u00b5m)<\/td>\n<td data-col-size=\"sm\" data-start=\"5961\" data-end=\"5969\">0.70<\/td>\n<\/tr>\n<tr data-start=\"5970\" data-end=\"6018\">\n<td data-start=\"5970\" data-end=\"5978\" data-col-size=\"sm\">0.611<\/td>\n<td data-col-size=\"sm\" data-start=\"5978\" data-end=\"5985\">0.10<\/td>\n<td data-col-size=\"sm\" data-start=\"5985\" data-end=\"5993\">0.711<\/td>\n<td data-col-size=\"sm\" data-start=\"5993\" data-end=\"6009\">Erikoispora<\/td>\n<td data-col-size=\"sm\" data-start=\"6009\" data-end=\"6018\">0.711<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p data-start=\"6020\" data-end=\"6161\">Ero: 0,700 - 0,711 = -0,011 mm; 0,711 - 0,711 = 0,000 mm. Pienempi ero on parempi. Joten <strong data-start=\"6126\" data-end=\"6152\">0,711 mm erikoispora<\/strong> on paras.<\/p>\n<h3 data-start=\"6163\" data-end=\"6206\">Menetelm\u00e4 2: Parannetaan prosessia ja laitteita<\/h3>\n<ul data-start=\"6207\" data-end=\"6752\">\n<li data-start=\"6207\" data-end=\"6296\">\n<p data-start=\"6209\" data-end=\"6296\">Lis\u00e4\u00e4 toinen levyn pinnoitusvaihe kuviojakaumasta johtuvan ep\u00e4tasaisen paksuuden v\u00e4hent\u00e4miseksi.<\/p>\n<\/li>\n<li data-start=\"6297\" data-end=\"6395\">\n<p data-start=\"6299\" data-end=\"6395\">K\u00e4yt\u00e4 negatiivista valokuvaa suorasy\u00f6vytyksell\u00e4 ja levyt\u00e4 koko levy ep\u00e4tasaisen kuparin paksuuden v\u00e4hent\u00e4miseksi.<\/p>\n<\/li>\n<li data-start=\"6396\" data-end=\"6538\">\n<p data-start=\"6398\" data-end=\"6538\">Pienenn\u00e4 virrantiheytt\u00e4 (tyypillisesti 19 ASF); hieman pienempi virrantiheys voi parantaa pinnoituksen tasaisuutta, mutta pident\u00e4\u00e4 pinnoitusaikaa.<\/p>\n<\/li>\n<li data-start=\"6539\" data-end=\"6752\">\n<p data-start=\"6541\" data-end=\"6752\">P\u00e4ivit\u00e4 vaakasuoraan pinnoituslinjaan. Pystysuorat pinnoituslinjat antavat usein paksumman kuparin rei\u00e4n reunaan ja ohuemman kuparin rei\u00e4n keskelle, kun reikien kuvasuhde on suuri. Vaakasuora linja voi v\u00e4hent\u00e4\u00e4 t\u00e4t\u00e4 ongelmaa.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"6754\" data-end=\"6790\">Menetelm\u00e4 3: CAM-strategioiden parantaminen<\/h3>\n<ul data-start=\"6791\" data-end=\"7885\">\n<li data-start=\"6791\" data-end=\"7019\">\n<p data-start=\"6793\" data-end=\"7019\">Eristetyill\u00e4 kuparialueilla oleviin reikiin on sovellettava yhden lis\u00e4askeleen kompensaatiota. Eristetyill\u00e4 alueilla on v\u00e4hemm\u00e4n kuparia, joten pinnoituksen aikana niiden paikallinen virrantiheys on suurempi ja kuparin paksuus suurempi; ylim\u00e4\u00e4r\u00e4inen kompensointi kompensoi t\u00e4t\u00e4.<\/p>\n<\/li>\n<li data-start=\"7020\" data-end=\"7361\">\n<p data-start=\"7022\" data-end=\"7361\">Jos mallissa on tiheit\u00e4 j\u00e4lki\u00e4 toisella puolella ja harvoja toisella puolella (esimerkiksi virtalevy), aseta harva puoli sis\u00e4\u00e4np\u00e4in ja tihe\u00e4 puoli ulosp\u00e4in ja k\u00e4yt\u00e4 k\u00e4\u00e4nteist\u00e4 panelointia. Paneelipinnoituksen aikana levyn reunan l\u00e4hell\u00e4 olevat alueet saavat suuremman virrantiheyden ja paksumman pinnoituksen. K\u00e4\u00e4nteinen panelointi auttaa tasapainottamaan pinnoitusjakaumaa.<\/p>\n<\/li>\n<li data-start=\"7362\" data-end=\"7617\">\n<p data-start=\"7364\" data-end=\"7617\">Kun kuparipinta-alat ylh\u00e4\u00e4ll\u00e4 ja alhaalla eroavat paljon toisistaan, k\u00e4yt\u00e4 positiivista\/negatiivista (yin-yang) panelointia. Ep\u00e4tasainen kuparipinta-ala aiheuttaa \u201ckellonsuu\u201d-l\u00e4pivientej\u00e4; mit\u00e4 paksumpi levy ja mit\u00e4 enemm\u00e4n kuparia, sit\u00e4 pahempi vaikutus; yin-yang-paneelointi auttaa tasapainottamaan kuparin jakautumista.<\/p>\n<\/li>\n<li data-start=\"7618\" data-end=\"7885\">\n<p data-start=\"7620\" data-end=\"7885\">Jos eristetyn alueen rei\u00e4t ovat l\u00e4hell\u00e4 levyn reunaa tai aukkoja, lis\u00e4\u00e4 kuparisia \u201cpoiminta\u201d-alueita tai kuparisia tyynyj\u00e4 reunan tai aukon l\u00e4helle. Eristetyt rei\u00e4t voivat saada liikaa pinnoituspaksuutta ja muuttua liian pieniksi; ylim\u00e4\u00e4r\u00e4inen kupari niiden l\u00e4hell\u00e4 v\u00e4hent\u00e4\u00e4 paikallista virrantiheytt\u00e4 ja tasapainottaa pinnoitusta.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"7887\" data-end=\"7890\" \/>\n<h2 data-start=\"7892\" data-end=\"7952\">4. Kuinka paljon korvausta tarvitaan ja miten se saadaan?<\/h2>\n<p data-start=\"7954\" data-end=\"8087\">Kompensaatioarvot saadaan prosessitesteist\u00e4. Alla on yksi sarja mitattuja reik\u00e4koon muutoksia eri vaiheiden j\u00e4lkeen (tiedot raportista):<\/p>\n<p data-start=\"8089\" data-end=\"8212\"><strong data-start=\"8089\" data-end=\"8106\">Prosessin kulku:<\/strong> mekaaninen poraus \u2192 upotuskupari \u2192 galvanointi \u2192 kuvionsiirto \u2192 sy\u00f6vytys \u2192 AOI \u2192 m\u00e4rk\u00e4kalvo \u2192 HASL<\/p>\n<p data-start=\"8214\" data-end=\"8239\"><strong data-start=\"8214\" data-end=\"8237\">Prosessiparametrit:<\/strong><\/p>\n<ul data-start=\"8240\" data-end=\"8515\">\n<li data-start=\"8240\" data-end=\"8330\">\n<p data-start=\"8242\" data-end=\"8330\">Porakone: poranter\u00e4n koko 0,95 mm, teroitus\/hionta 3 kertaa, porauskorjaus 0,15 mm;<\/p>\n<\/li>\n<li data-start=\"8331\" data-end=\"8386\">\n<p data-start=\"8333\" data-end=\"8386\">Pinnoitus: kuparin paksuus \u2265 18 \u00b5m, keskim\u00e4\u00e4rin \u2265 20 \u00b5m;<\/p>\n<\/li>\n<li data-start=\"8387\" data-end=\"8456\">\n<p data-start=\"8389\" data-end=\"8456\">HASL: lopullinen reik\u00e4vaatimus 0,80 mm, toleranssi \u00b10,08 mm (3 mil);<\/p>\n<\/li>\n<li data-start=\"8457\" data-end=\"8515\">\n<p data-start=\"8459\" data-end=\"8515\">Testi: 10 levy\u00e4, kulmat leikattu, levyn paksuus 2,0 mm.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"8517\" data-end=\"8546\">Rei\u00e4n koko muuttuu vaiheittain<\/h3>\n<p data-start=\"8548\" data-end=\"8593\"><strong data-start=\"8548\" data-end=\"8569\">1) Porauksen j\u00e4lkeen<\/strong> - mitatut reik\u00e4koot<\/p>\n<ul data-start=\"8594\" data-end=\"8795\">\n<li data-start=\"8594\" data-end=\"8795\">\n<p data-start=\"8596\" data-end=\"8795\">Yhteens\u00e4 1920 testattua reik\u00e4\u00e4 (10 paneelia, 384 reik\u00e4\u00e4 kukin). N\u00e4yte: 200 reik\u00e4\u00e4 (20 reik\u00e4\u00e4 paneelia kohti). Reikien vaihteluv\u00e4li: <strong data-start=\"8695\" data-end=\"8711\">0,93-0,94 mm<\/strong>, keskiarvo <strong data-start=\"8721\" data-end=\"8733\">0,931 mm<\/strong>.<br data-start=\"8734\" data-end=\"8737\" \/>(Sitten pitk\u00e4 luettelo otosarvoja, useimmiten 0,93 tai 0,94.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"8797\" data-end=\"8848\"><strong data-start=\"8797\" data-end=\"8846\">2) Kuvioidun pinnoituksen j\u00e4lkeen - kuparin paksuus<\/strong><\/p>\n<ul data-start=\"8849\" data-end=\"8999\">\n<li data-start=\"8849\" data-end=\"8999\">\n<p data-start=\"8851\" data-end=\"8999\">Testaa kutakin paneelia kohti 10 reik\u00e4\u00e4. Kuparin paksuusalue <strong data-start=\"8905\" data-end=\"8917\">18-31 \u00b5m<\/strong>, kokous \u226518 \u00b5m ja keskiarvo \u226520 \u00b5m.<br data-start=\"8953\" data-end=\"8956\" \/>(Sitten monet kuparin paksuuden n\u00e4ytearvot.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"9001\" data-end=\"9045\"><strong data-start=\"9001\" data-end=\"9043\">3) Kuvioidun pinnoituksen j\u00e4lkeen - reik\u00e4koko<\/strong><\/p>\n<ul data-start=\"9046\" data-end=\"9176\">\n<li data-start=\"9046\" data-end=\"9176\">\n<p data-start=\"9048\" data-end=\"9176\">Yhteens\u00e4 1920 reik\u00e4\u00e4, n\u00e4yte 200. Reikien lukum\u00e4\u00e4r\u00e4: <strong data-start=\"9090\" data-end=\"9106\">0,84-0,88 mm<\/strong>, keskiarvo <strong data-start=\"9116\" data-end=\"9128\">0,858 mm<\/strong>.<br data-start=\"9129\" data-end=\"9132\" \/>(Sitten useita n\u00e4ytearvoja, enimm\u00e4kseen 0,85-0,88.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"9178\" data-end=\"9209\"><strong data-start=\"9178\" data-end=\"9195\">4) HASL:n j\u00e4lkeen<\/strong> - rei\u00e4n koko<\/p>\n<ul data-start=\"9210\" data-end=\"9322\">\n<li data-start=\"9210\" data-end=\"9322\">\n<p data-start=\"9212\" data-end=\"9322\">Yhteens\u00e4 1920 reik\u00e4\u00e4, n\u00e4yte 200. Reikien lukum\u00e4\u00e4r\u00e4: <strong data-start=\"9254\" data-end=\"9270\">0,82-0,86 mm<\/strong>, keskiarvo <strong data-start=\"9280\" data-end=\"9292\">0,836 mm<\/strong>.<br data-start=\"9293\" data-end=\"9296\" \/>(Sitten monia n\u00e4ytearvoja.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"9324\" data-end=\"9340\"><strong data-start=\"9324\" data-end=\"9340\">Testiyhteenveto<\/strong><\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"9342\" data-end=\"9531\">\n<thead data-start=\"9342\" data-end=\"9378\">\n<tr data-start=\"9342\" data-end=\"9378\">\n<th data-start=\"9342\" data-end=\"9349\" data-col-size=\"sm\">Vaihe<\/th>\n<th data-start=\"9349\" data-end=\"9362\" data-col-size=\"sm\">Reik\u00e4alue<\/th>\n<th data-start=\"9362\" data-end=\"9378\" data-col-size=\"sm\">Keskim\u00e4\u00e4r\u00e4inen reik\u00e4<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"9395\" data-end=\"9531\">\n<tr data-start=\"9395\" data-end=\"9439\">\n<td data-start=\"9395\" data-end=\"9412\" data-col-size=\"sm\">Porauksen j\u00e4lkeen<\/td>\n<td data-start=\"9412\" data-end=\"9427\" data-col-size=\"sm\">0,93-0,94 mm<\/td>\n<td data-start=\"9427\" data-end=\"9439\" data-col-size=\"sm\">0,931 mm<\/td>\n<\/tr>\n<tr data-start=\"9440\" data-end=\"9490\">\n<td data-start=\"9440\" data-end=\"9463\" data-col-size=\"sm\">Kuparipinnoituksen j\u00e4lkeen<\/td>\n<td data-col-size=\"sm\" data-start=\"9463\" data-end=\"9478\">0,84-0,88 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"9478\" data-end=\"9490\">0,858 mm<\/td>\n<\/tr>\n<tr data-start=\"9491\" data-end=\"9531\">\n<td data-start=\"9491\" data-end=\"9504\" data-col-size=\"sm\">HASL:n j\u00e4lkeen<\/td>\n<td data-col-size=\"sm\" data-start=\"9504\" data-end=\"9519\">0,82-0,86 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"9519\" data-end=\"9531\">0,836 mm<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p data-start=\"9533\" data-end=\"9723\"><strong data-start=\"9533\" data-end=\"9548\">Johtop\u00e4\u00e4t\u00f6kset:<\/strong> HASL-levyjen osalta porauskorvaus on <strong data-start=\"9591\" data-end=\"9602\">0,15 mm<\/strong> on \u201cylikompensaatiota\u201d ja aiheuttaa sen, ett\u00e4 lopulliset rei\u00e4t ovat suurempia. Paras kompensointiarvo t\u00e4ss\u00e4 testiss\u00e4 on <strong data-start=\"9710\" data-end=\"9722\">0,125 mm<\/strong>.<\/p>\n<hr data-start=\"9725\" data-end=\"9728\" \/>\n<h2>5. Porauskorvauskoodin t\u00e4yt\u00e4nt\u00f6\u00f6npano (s\u00e4\u00e4nn\u00f6t)<\/h2>\n<ol data-start=\"9784\" data-end=\"9817\">\n<li data-start=\"9784\" data-end=\"9817\">\n<p data-start=\"9787\" data-end=\"9817\">Korvauksia ja korotusta koskevat s\u00e4\u00e4nn\u00f6t<\/p>\n<\/li>\n<\/ol>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"9819\" data-end=\"10843\">\n<thead data-start=\"9819\" data-end=\"9968\">\n<tr data-start=\"9819\" data-end=\"9968\">\n<th data-start=\"9819\" data-end=\"9828\" data-col-size=\"sm\">Aspect<\/th>\n<th data-start=\"9828\" data-end=\"9844\" data-col-size=\"sm\">Valmis reik\u00e4<\/th>\n<th data-start=\"9844\" data-end=\"9861\" data-col-size=\"sm\">Pinnan viimeistely<\/th>\n<th data-start=\"9861\" data-end=\"9879\" data-col-size=\"sm\">Levyn paksuus<\/th>\n<th data-start=\"9879\" data-end=\"9899\" data-col-size=\"sm\">Step-up-kynnysarvo<\/th>\n<th data-start=\"9899\" data-end=\"9923\" data-col-size=\"sm\">Jos kuparin l\u00e4pivienti &lt; 26 \u00b5m<\/th>\n<th data-start=\"9923\" data-end=\"9934\" data-col-size=\"sm\">26-37 \u00b5m<\/th>\n<th data-start=\"9934\" data-end=\"9945\" data-col-size=\"sm\">37-47 \u00b5m<\/th>\n<th data-start=\"9945\" data-end=\"9956\" data-col-size=\"sm\">47-67 \u00b5m<\/th>\n<th data-start=\"9956\" data-end=\"9968\" data-col-size=\"sm\">67-86 \u00b5m<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"10018\" data-end=\"10843\">\n<tr data-start=\"10018\" data-end=\"10146\">\n<td data-start=\"10018\" data-end=\"10043\" data-col-size=\"sm\">paksuuden suhde &lt; 12:1<\/td>\n<td data-start=\"10043\" data-end=\"10055\" data-col-size=\"sm\">\u2264 1,90 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10055\" data-end=\"10084\">HASL (lyijytetty tai lyijyt\u00f6n)<\/td>\n<td data-col-size=\"sm\" data-start=\"10084\" data-end=\"10095\">\u2265 3,5 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10095\" data-end=\"10105\">0.01952<\/td>\n<td data-col-size=\"sm\" data-start=\"10105\" data-end=\"10113\">5 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10113\" data-end=\"10121\">6 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10121\" data-end=\"10129\">7 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10129\" data-end=\"10137\">8 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10137\" data-end=\"10146\">9 miljoonaa<\/td>\n<\/tr>\n<tr data-start=\"10147\" data-end=\"10285\">\n<td data-start=\"10147\" data-end=\"10172\" data-col-size=\"sm\">paksuuden suhde &lt; 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10172\" data-end=\"10184\">\u2264 1,90 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10184\" data-end=\"10213\">HASL (lyijytetty tai lyijyt\u00f6n)<\/td>\n<td data-col-size=\"sm\" data-start=\"10213\" data-end=\"10224\">&lt; 3.5 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10224\" data-end=\"10234\">0.01952<\/td>\n<td data-col-size=\"sm\" data-start=\"10234\" data-end=\"10244\">4.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10244\" data-end=\"10254\">5.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10254\" data-end=\"10264\">6.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10264\" data-end=\"10274\">7.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10274\" data-end=\"10285\">8.5 mil<\/td>\n<\/tr>\n<tr data-start=\"10286\" data-end=\"10395\">\n<td data-start=\"10286\" data-end=\"10311\" data-col-size=\"sm\">paksuuden suhde &lt; 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10311\" data-end=\"10323\">\u2264 1,90 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10323\" data-end=\"10340\">Other finishes<\/td>\n<td data-col-size=\"sm\" data-start=\"10340\" data-end=\"10344\">\/<\/td>\n<td data-col-size=\"sm\" data-start=\"10344\" data-end=\"10354\">0.01952<\/td>\n<td data-col-size=\"sm\" data-start=\"10354\" data-end=\"10362\">4 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10362\" data-end=\"10370\">5 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10370\" data-end=\"10378\">6 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10378\" data-end=\"10386\">7 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10386\" data-end=\"10395\">8 miljoonaa<\/td>\n<\/tr>\n<tr data-start=\"10396\" data-end=\"10504\">\n<td data-start=\"10396\" data-end=\"10421\" data-col-size=\"sm\">paksuuden suhde &lt; 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10421\" data-end=\"10433\">&gt; 1.90 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10433\" data-end=\"10440\">HASL<\/td>\n<td data-col-size=\"sm\" data-start=\"10440\" data-end=\"10444\">\/<\/td>\n<td data-col-size=\"sm\" data-start=\"10444\" data-end=\"10453\">0.0246<\/td>\n<td data-col-size=\"sm\" data-start=\"10453\" data-end=\"10463\">5.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10463\" data-end=\"10473\">6.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10473\" data-end=\"10483\">7.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10483\" data-end=\"10493\">8.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10493\" data-end=\"10504\">9.5 mil<\/td>\n<\/tr>\n<tr data-start=\"10505\" data-end=\"10624\">\n<td data-start=\"10505\" data-end=\"10530\" data-col-size=\"sm\">paksuuden suhde &lt; 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10530\" data-end=\"10542\">&gt; 1.90 mm<\/td>\n<td data-col-size=\"sm\" data-start=\"10542\" data-end=\"10559\">Other finishes<\/td>\n<td data-col-size=\"sm\" data-start=\"10559\" data-end=\"10563\">\/<\/td>\n<td data-col-size=\"sm\" data-start=\"10563\" data-end=\"10573\">0.01952<\/td>\n<td data-col-size=\"sm\" data-start=\"10573\" data-end=\"10583\">4.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10583\" data-end=\"10593\">5.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10593\" data-end=\"10603\">6.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10603\" data-end=\"10613\">7.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10613\" data-end=\"10624\">8.5 mil<\/td>\n<\/tr>\n<tr data-start=\"10625\" data-end=\"10733\">\n<td data-start=\"10625\" data-end=\"10650\" data-col-size=\"sm\">thickness ratio \u2265 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10650\" data-end=\"10662\">all holes<\/td>\n<td data-col-size=\"sm\" data-start=\"10662\" data-end=\"10669\">HASL<\/td>\n<td data-col-size=\"sm\" data-start=\"10669\" data-end=\"10673\">\/<\/td>\n<td data-col-size=\"sm\" data-start=\"10673\" data-end=\"10682\">0.0246<\/td>\n<td data-col-size=\"sm\" data-start=\"10682\" data-end=\"10692\">5.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10692\" data-end=\"10702\">6.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10702\" data-end=\"10712\">7.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10712\" data-end=\"10722\">8.5 mil<\/td>\n<td data-col-size=\"sm\" data-start=\"10722\" data-end=\"10733\">9.5 mil<\/td>\n<\/tr>\n<tr data-start=\"10734\" data-end=\"10843\">\n<td data-start=\"10734\" data-end=\"10759\" data-col-size=\"sm\">thickness ratio \u2265 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10759\" data-end=\"10771\">all holes<\/td>\n<td data-col-size=\"sm\" data-start=\"10771\" data-end=\"10788\">Other finishes<\/td>\n<td data-col-size=\"sm\" data-start=\"10788\" data-end=\"10792\">\/<\/td>\n<td data-col-size=\"sm\" data-start=\"10792\" data-end=\"10802\">0.01952<\/td>\n<td data-col-size=\"sm\" data-start=\"10802\" data-end=\"10810\">5 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10810\" data-end=\"10818\">6 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10818\" data-end=\"10826\">7 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10826\" data-end=\"10834\">8 miljoonaa<\/td>\n<td data-col-size=\"sm\" data-start=\"10834\" data-end=\"10843\">9 miljoonaa<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ol start=\"2\" data-start=\"10845\" data-end=\"10953\">\n<li data-start=\"10845\" data-end=\"10953\">\n<p data-start=\"10848\" data-end=\"10953\">Special drill sizes (if tolerance &lt; 3 mil, use special drills or 25 \u00b5m increment, use nearest drill rule)<\/p>\n<\/li>\n<\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7e142f elementor-widget elementor-widget-code-highlight\" data-id=\"f7e142f\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-aspnet line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-aspnet\">\n\t\t\t\t\t<xmp>List<double> ContainDrillToolList = new List<double>();\r\nContainDrillToolList.AddRange(new double[] { 610, 635, 711, 838, 914, 1016, 1320, 3120 });<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec5424b elementor-widget elementor-widget-text-editor\" data-id=\"ec5424b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>3. Drill Compensation Code<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3dfeb51 elementor-widget elementor-widget-code-highlight\" data-id=\"3dfeb51\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/\/\/<summary>\r\n\/\/\/ Calculate the drill bit diameter based on drill compensation parameters\r\n\/\/\/<\/summary>\r\n\/\/\/<param name=\"ToolInfo\">Drill tool basic information<\/param>\r\n\/\/\/<param name=\"UpParam\">Drill compensation parameters<\/param>\r\n\/\/\/<param name=\"ContainDrillToolList\">Special drill bit diameter list<\/param>\r\n\/\/\/<returns>Return 1 if calculation is successful<\/returns>\r\npublic static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List<double> ContainDrillToolList)\r\n{\r\n    if (ContainDrillToolList == null) ContainDrillToolList = new List<double>();\r\n    gToolUpParamHole UpParamHole = new G_Helper.gToolUpParamHole();\r\n    switch (ToolInfo.type)\r\n    {\r\n        case \"via\":\r\n            UpParamHole = UpParam.Via;\r\n            break;\r\n        case \"plate\":\r\n            UpParamHole = UpParam.Pth;\r\n            break;\r\n        case \"nplate\":\r\n            UpParamHole = UpParam.Npth;\r\n            break;\r\n    }\r\n    ToolInfo.max_tol = Math.Round(UpParamHole.Max_Tol, 0);\r\n    ToolInfo.min_tol = Math.Round(UpParamHole.Min_Tol, 0);\r\n    if (ToolInfo.finish_size < 50)\r\n    {\r\n        ToolInfo.finish_size = ToolInfo.drill_size;\r\n    }\r\n    double DrillSlotLevel = (ToolInfo.shape == \"slot\") ? UpParam.SlotLevel : UpParam.DrillLevel;  \/\/Drill step interval: Round holes have two levels (25\/50\u03bcm), slot holes have one level (50\u03bcm)\r\n    double UpLevel;\r\n    if (UpParam.DrillLevel > 49) \/\/When the step interval is 50\u03bcm, do not use special drill bits\r\n    {\r\n        ContainDrillToolList = new List<double>();\r\n        UpLevel = UpParamHole.UpLevel;\r\n    }\r\n    else\r\n    {\r\n        UpLevel = UpParam.DrillLevel * 0.5;   \/\/Select drill bit by half of the step interval\r\n    }\r\n\r\n    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \/\/Average the upper and lower tolerance\r\n    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) \/ DrillSlotLevel)); \/\/Drill step count\r\n    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; \/\/Round down to the nearest drill step\r\n    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;\/\/Remainder of drill size after step division\r\n    double DrillsizeLevel = (DrillsizeFloat > UpLevel) ? DrillSlotLevel : 0;\/\/Determine whether to round up the remainder\r\n\r\n    \/\/Check if special drill bits are included\r\n    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt => (int)(Math.Floor(tt \/ DrillSlotLevel)) == DrillLevelCount);\r\n    if (ContainDrillIndex > -1)\r\n    {\r\n        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;\/\/Remainder of special drill bit size after step division\r\n        if (DrillsizeFloat > UpLevel) \/\/ e.g. 38 > 20\r\n        {\r\n            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel);   \/\/e.g. 40-50\r\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \/\/e.g. 40-38\r\n            DrillsizeLevel = (diff1 < diff2) ? DrillSlotLevel : ContainDrillFloat;\r\n        }\r\n        else \/\/if (ContainDrillFloat < UpLevel)\r\n        {\r\n            double diff1 = Math.Abs(DrillsizeFloat - 0);  \/\/e.g. 12-0\r\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \/\/e.g. 12-16\r\n            DrillsizeLevel = (diff1 < diff2) ? 0 : ContainDrillFloat;\r\n        }\r\n    }\r\n    ToolInfo.drill_size = DrillsizeInt + DrillsizeLevel;\r\n\r\n    double DiffDrillSizeUp = ToolInfo.drill_size - ToolInfo.finish_size;\r\n    if (ToolInfo.shape == \"slot\") \/\/ Slot length compensation\r\n    {\r\n        if (UpParam.isSlotUpLevel) \/\/Whether to round the slot length to step interval\r\n        {\r\n            Drillfinish_size = ToolInfo.slot_len + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \/\/Average the upper and lower tolerance\r\n            DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) \/ DrillSlotLevel)); \/\/ Drill step count\r\n            DrillsizeInt = DrillLevelCount * DrillSlotLevel; \/\/Round down to the nearest drill step (50\u03bcm)\r\n            DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) % DrillSlotLevel;\/\/Remainder of slot length after step division\r\n            DrillsizeLevel = (DrillsizeFloat > UpParamHole.UpLevel) ? DrillSlotLevel : 0;\/\/Determine whether to round up the remainder\r\n            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;\r\n        }\r\n        else\r\n        {\r\n            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) \/ 10) * 10; \/\/ Round down to the nearest 10\u03bcm\r\n            ToolInfo.slot_len = DrillsizeInt;\r\n        }\r\n        ToolInfo.drill_size += UpParam.SlotEndNumber;  \/\/ Add suffix number for slot drill bit segmentation\r\n    }\r\n    ToolInfo.bit = Math.Round((ToolInfo.drill_size * 0.001), 3).ToString();\r\n    return 1;\r\n}\r\n\r\npublic class gToolUpParam\r\n{\r\n    \/\/\/ <summary>\r\n    \/\/\/ Compensation parameters for VIA holes (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Compensation parameters for PTH (Plated Through Hole) (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Compensation parameters for NPTH (Non-Plated Through Hole) (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Step interval for round drill holes (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double DrillLevel { get; set; } = 50;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Step interval for slot drill holes (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double SlotLevel { get; set; } = 50;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Suffix number for slot drill bit segmentation\r\n    \/\/\/ <\/summary>\r\n    public int SlotEndNumber { get; set; } = 0;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Additional compensation value for slot length (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double SlotLengthUp { get; set; } = 0;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Whether to round the slot length to step interval\r\n    \/\/\/ <\/summary>\r\n    public bool isSlotUpLevel { get; set; } = false;\r\n}\r\n\r\npublic class gToolUpParamHole\r\n{\r\n    \/\/\/ <summary>\r\n    \/\/\/ Compensation value (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double UpVal { get; set; } = 100;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Step interval threshold for rounding up (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double UpLevel { get; set; } = 25;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Upper tolerance (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double Max_Tol { get; set; } = 76;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Lower tolerance (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double Min_Tol { get; set; } = 76;\r\n}\r\n\r\n\/\/\/<summary>\r\n\/\/\/ Mod_tool: Drill tool attribute model\r\n\/\/\/<\/summary>\r\npublic class Mod_tool\r\n{\r\n    public int num { get; set; }\r\n    public string type { get; set; } \/\/ Hole type: via\/plate(nplate)\r\n    public string shape { get; set; } \/\/ Hole shape: round\/slot\r\n    public double finish_size { get; set; } \/\/ Finished hole size (in \u03bcm)\r\n    public double drill_size { get; set; } \/\/ Drill bit size (in \u03bcm)\r\n    public double max_tol { get; set; } \/\/ Upper tolerance (in \u03bcm)\r\n    public double min_tol { get; set; } \/\/ Lower tolerance (in \u03bcm)\r\n    public double slot_len { get; set; } \/\/ Slot length (in \u03bcm)\r\n    public string bit { get; set; } \/\/ Drill bit size (in mm, formatted string)\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-578eb26 elementor-widget elementor-widget-text-editor\" data-id=\"578eb26\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 data-start=\"10960\" data-end=\"11017\">6. Why does board thickness affect drill compensation?<\/h2>\n<p data-start=\"11019\" data-end=\"11464\">I did not understand this at first either. The main reason is the high <strong data-start=\"11090\" data-end=\"11121\">thickness-to-diameter ratio<\/strong> (board thickness divided by hole diameter). A high ratio makes the copper at the hole center thinner and the copper at the hole edge thicker. To compute the thickness-to-diameter ratio you need the board thickness value. So board thickness enters the drill compensation rules. For high thickness-to-diameter holes, the compensation is larger.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>There are no great individuals, only great teams. With the team working together, the first-stage PCB CAM automation project for [&hellip;]<\/p>","protected":false},"author":1,"featured_media":4584,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"spectra_custom_meta":{"_edit_lock":["1766131812:1"],"rank_math_internal_links_processed":["1"],"rank_math_seo_score":["15"],"_uag_custom_page_level_css":[""],"site-sidebar-layout":["default"],"site-content-layout":[""],"ast-site-content-layout":["default"],"site-content-style":["default"],"site-sidebar-style":["default"],"ast-global-header-display":[""],"ast-banner-title-visibility":[""],"ast-main-header-display":[""],"ast-hfb-above-header-display":[""],"ast-hfb-below-header-display":[""],"ast-hfb-mobile-header-display":[""],"ast-breadcrumbs-content":[""],"ast-featured-img":[""],"footer-sml-layout":[""],"theme-transparent-header-meta":[""],"adv-header-id-meta":[""],"stick-header-meta":[""],"header-above-stick-meta":[""],"header-main-stick-meta":[""],"header-below-stick-meta":[""],"astra-migrate-meta-layouts":["default"],"ast-page-background-enabled":["default"],"ast-page-background-meta":["a:3:{s:7:\"desktop\";a:12:{s:16:\"background-color\";s:25:\"var(--ast-global-color-5)\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}s:6:\"tablet\";a:12:{s:16:\"background-color\";s:0:\"\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}s:6:\"mobile\";a:12:{s:16:\"background-color\";s:0:\"\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}}"],"ast-content-background-meta":["a:3:{s:7:\"desktop\";a:12:{s:16:\"background-color\";s:25:\"var(--ast-global-color-4)\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}s:6:\"tablet\";a:12:{s:16:\"background-color\";s:25:\"var(--ast-global-color-4)\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}s:6:\"mobile\";a:12:{s:16:\"background-color\";s:25:\"var(--ast-global-color-4)\";s:16:\"background-image\";s:0:\"\";s:17:\"background-repeat\";s:6:\"repeat\";s:19:\"background-position\";s:13:\"center center\";s:15:\"background-size\";s:4:\"auto\";s:21:\"background-attachment\";s:6:\"scroll\";s:15:\"background-type\";s:0:\"\";s:16:\"background-media\";s:0:\"\";s:12:\"overlay-type\";s:0:\"\";s:13:\"overlay-color\";s:0:\"\";s:15:\"overlay-opacity\";s:0:\"\";s:16:\"overlay-gradient\";s:0:\"\";}}"],"footnotes":[""],"_elementor_edit_mode":["builder"],"_elementor_template_type":["wp-post"],"_elementor_data":["[{\"id\":\"733c0b06\",\"elType\":\"container\",\"settings\":{\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"7b990e0\"}]},\"elements\":[{\"id\":\"6269846d\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p data-start=\\\"49\\\" data-end=\\\"461\\\">There are no great individuals, only great teams. With the team working together, the first-stage PCB CAM automation project for <strong data-start=\\\"178\\\" data-end=\\\"194\\\">net handling<\\\/strong> and <strong data-start=\\\"199\\\" data-end=\\\"217\\\">drill handling<\\\/strong> is done. Next, we can move on to the PCB rules engine. Here I talk about drill compensation in PCB engineering. As a PCB engineering developer, you should know what it is and why it works. I share the key points about drill compensation below.<\\\/p>\\n<hr data-start=\\\"463\\\" data-end=\\\"466\\\" \\\/>\\n<h2 data-start=\\\"468\\\" data-end=\\\"507\\\">1. Why do we compensate drill sizes?<\\\/h2>\\n<p data-start=\\\"509\\\" data-end=\\\"870\\\">The hole sizes in the PCB files the customer gives usually mean the <em data-start=\\\"577\\\" data-end=\\\"584\\\">final<\\\/em> hole size. During PCB production, copper is plated inside the holes (or the holes get a surface finish such as HASL, ENIG, OSP, etc.). This makes the hole smaller. To make sure the final hole size meets the requirement, the CAM step corrects the drill size. This is drill compensation.<\\\/p>\\n<p data-start=\\\"872\\\" data-end=\\\"1171\\\"><strong data-start=\\\"872\\\" data-end=\\\"889\\\">Real example:<\\\/strong><br data-start=\\\"889\\\" data-end=\\\"892\\\" \\\/>Final hole size: <strong data-start=\\\"909\\\" data-end=\\\"920\\\">1.00 mm<\\\/strong>. Surface finish: <strong data-start=\\\"938\\\" data-end=\\\"946\\\">ENIG<\\\/strong> (nickel thickness 2.54 \\u00b5m, gold thickness 0.0254 \\u00b5m). Follow IPC Class II and the average plated copper thickness is <strong data-start=\\\"1064\\\" data-end=\\\"1073\\\">20 \\u00b5m<\\\/strong>. If we use <strong data-start=\\\"1085\\\" data-end=\\\"1096\\\">0.10 mm<\\\/strong> as the compensation value, the CAM team will pick a <strong data-start=\\\"1149\\\" data-end=\\\"1160\\\">1.10 mm<\\\/strong> drill bit.<\\\/p>\\n<p data-start=\\\"872\\\" data-end=\\\"1171\\\"><img class=\\\"alignnone size-full wp-image-4578\\\" src=\\\"https:\\\/\\\/flj-pcb.com\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Real-example.webp\\\" alt=\\\"Real example\\\" width=\\\"336\\\" height=\\\"297\\\" \\\/><\\\/p>\\n<hr data-start=\\\"1173\\\" data-end=\\\"1176\\\" \\\/>\\n<h2 data-start=\\\"1178\\\" data-end=\\\"1216\\\">2. How do we do drill compensation?<\\\/h2>\\n<p data-start=\\\"1218\\\" data-end=\\\"1445\\\">First, be clear about the three key parameters for drill compensation:<br data-start=\\\"1288\\\" data-end=\\\"1291\\\" \\\/><strong data-start=\\\"1291\\\" data-end=\\\"1298\\\">(1)<\\\/strong> Drill bit increment,<br data-start=\\\"1319\\\" data-end=\\\"1322\\\" \\\/><strong data-start=\\\"1322\\\" data-end=\\\"1329\\\">(2)<\\\/strong> Compensation value,<br data-start=\\\"1349\\\" data-end=\\\"1352\\\" \\\/><strong data-start=\\\"1352\\\" data-end=\\\"1359\\\">(3)<\\\/strong> Step-up threshold (advance value).<br data-start=\\\"1394\\\" data-end=\\\"1397\\\" \\\/>These three determine how to apply compensation.<\\\/p>\\n<h3 data-start=\\\"1447\\\" data-end=\\\"1475\\\">1) Drill bit increment<\\\/h3>\\n<p data-start=\\\"1476\\\" data-end=\\\"1773\\\">This depends on the drill bits the company buys. The industry common increment is <strong data-start=\\\"1558\\\" data-end=\\\"1567\\\">50 \\u00b5m<\\\/strong>. Typical drill sizes range from <strong data-start=\\\"1600\\\" data-end=\\\"1611\\\">0.10 mm<\\\/strong> to <strong data-start=\\\"1615\\\" data-end=\\\"1626\\\">6.35 mm<\\\/strong>. The usual smallest step between drill bits is <strong data-start=\\\"1674\\\" data-end=\\\"1685\\\">0.05 mm<\\\/strong>. So the drill library has sizes like <strong data-start=\\\"1723\\\" data-end=\\\"1761\\\">0.10 mm, 0.15 mm, 0.20 mm, 0.25 mm<\\\/strong>, and so on.<\\\/p>\\n<h3 data-start=\\\"1775\\\" data-end=\\\"1802\\\">2) Compensation value<\\\/h3>\\n<p data-start=\\\"1803\\\" data-end=\\\"1952\\\">The process team sets the compensation rules based on factory test results. Compensation values do not vary much across the industry. Common rules:<\\\/p>\\n<ul data-start=\\\"1953\\\" data-end=\\\"2098\\\">\\n<li data-start=\\\"1953\\\" data-end=\\\"2014\\\">\\n<p data-start=\\\"1955\\\" data-end=\\\"2014\\\"><strong data-start=\\\"1955\\\" data-end=\\\"1975\\\">Boards with HASL<\\\/strong> (spray tin): <strong data-start=\\\"1989\\\" data-end=\\\"2011\\\">compensate 0.15 mm<\\\/strong>.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"2015\\\" data-end=\\\"2098\\\">\\n<p data-start=\\\"2017\\\" data-end=\\\"2098\\\"><strong data-start=\\\"2017\\\" data-end=\\\"2040\\\">Boards without HASL<\\\/strong> (ENIG, immersion tin, OSP, etc.): <strong data-start=\\\"2075\\\" data-end=\\\"2097\\\">compensate 0.10 mm<\\\/strong>.<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<h3 data-start=\\\"2100\\\" data-end=\\\"2142\\\">3) Step-up threshold (advance value)<\\\/h3>\\n<p data-start=\\\"2143\\\" data-end=\\\"2403\\\">The process team also sets the strategy for picking the drill bit, similar to a rounding rule. For example, when the increment is <strong data-start=\\\"2273\\\" data-end=\\\"2282\\\">20 \\u00b5m<\\\/strong>, if the remainder after dividing by the increment is <strong data-start=\\\"2336\\\" data-end=\\\"2347\\\">\\u2265 20 \\u00b5m<\\\/strong>, you round up 50 \\u00b5m; otherwise you keep the lower size.<\\\/p>\\n<p data-start=\\\"2405\\\" data-end=\\\"2737\\\"><strong data-start=\\\"2405\\\" data-end=\\\"2417\\\">Example:<\\\/strong><br data-start=\\\"2417\\\" data-end=\\\"2420\\\" \\\/>Final hole size = <strong data-start=\\\"2438\\\" data-end=\\\"2450\\\">1.025 mm<\\\/strong>, compensation = <strong data-start=\\\"2467\\\" data-end=\\\"2478\\\">0.10 mm<\\\/strong>, so compensated size = <strong data-start=\\\"2502\\\" data-end=\\\"2514\\\">1.125 mm<\\\/strong>. But there is no <strong data-start=\\\"2532\\\" data-end=\\\"2544\\\">1.125 mm<\\\/strong> drill in the library. Use the step-up rule. The remainder of 1.125 mm when compared to the 0.05 mm step is <strong data-start=\\\"2652\\\" data-end=\\\"2661\\\">25 \\u00b5m<\\\/strong>. Since <strong data-start=\\\"2669\\\" data-end=\\\"2686\\\">25 \\u00b5m &gt; 20 \\u00b5m<\\\/strong>, round up by 50 \\u00b5m and choose a <strong data-start=\\\"2719\\\" data-end=\\\"2730\\\">1.15 mm<\\\/strong> drill.<\\\/p>\\n<hr data-start=\\\"2739\\\" data-end=\\\"2742\\\" \\\/>\\n<h3 data-start=\\\"2744\\\" data-end=\\\"2782\\\">Actual drill compensation examples<\\\/h3>\\n<p data-start=\\\"2784\\\" data-end=\\\"2850\\\">Assume: drill increment = <strong data-start=\\\"2810\\\" data-end=\\\"2819\\\">50 \\u00b5m<\\\/strong>, step-up threshold = <strong data-start=\\\"2841\\\" data-end=\\\"2850\\\">20 \\u00b5m<\\\/strong><\\\/p>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"2852\\\" data-end=\\\"3097\\\">\\n<thead data-start=\\\"2852\\\" data-end=\\\"2947\\\">\\n<tr data-start=\\\"2852\\\" data-end=\\\"2947\\\">\\n<th data-start=\\\"2852\\\" data-end=\\\"2868\\\" data-col-size=\\\"sm\\\">Original hole<\\\/th>\\n<th data-start=\\\"2868\\\" data-end=\\\"2883\\\" data-col-size=\\\"sm\\\">Compensation<\\\/th>\\n<th data-start=\\\"2883\\\" data-end=\\\"2904\\\" data-col-size=\\\"sm\\\">After compensation<\\\/th>\\n<th data-start=\\\"2904\\\" data-end=\\\"2919\\\" data-col-size=\\\"sm\\\">Integer part<\\\/th>\\n<th data-start=\\\"2919\\\" data-end=\\\"2931\\\" data-col-size=\\\"sm\\\">Remainder<\\\/th>\\n<th data-start=\\\"2931\\\" data-end=\\\"2947\\\" data-col-size=\\\"sm\\\">Drill chosen<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"2980\\\" data-end=\\\"3097\\\">\\n<tr data-start=\\\"2980\\\" data-end=\\\"3038\\\">\\n<td data-start=\\\"2980\\\" data-end=\\\"2991\\\" data-col-size=\\\"sm\\\">1.025 mm<\\\/td>\\n<td data-start=\\\"2991\\\" data-end=\\\"2998\\\" data-col-size=\\\"sm\\\">0.10<\\\/td>\\n<td data-start=\\\"2998\\\" data-end=\\\"3009\\\" data-col-size=\\\"sm\\\">1.125 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3009\\\" data-end=\\\"3016\\\">1.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3016\\\" data-end=\\\"3027\\\">0.025 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3027\\\" data-end=\\\"3038\\\">1.15 mm<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"3039\\\" data-end=\\\"3097\\\">\\n<td data-start=\\\"3039\\\" data-end=\\\"3050\\\" data-col-size=\\\"sm\\\">1.016 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3050\\\" data-end=\\\"3057\\\">0.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3057\\\" data-end=\\\"3068\\\">1.116 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3068\\\" data-end=\\\"3075\\\">1.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3075\\\" data-end=\\\"3086\\\">0.016 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"3086\\\" data-end=\\\"3097\\\">1.10 mm<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<h4 data-start=\\\"3099\\\" data-end=\\\"3140\\\">How to compute the chosen drill size<\\\/h4>\\n<p data-start=\\\"3141\\\" data-end=\\\"3241\\\">Break the compensated hole size into an integer part and a remainder part using the drill increment:<\\\/p>\\n<p data-start=\\\"3243\\\" data-end=\\\"3396\\\">Take <strong data-start=\\\"3248\\\" data-end=\\\"3260\\\">1.125 mm<\\\/strong> as an example:<br data-start=\\\"3275\\\" data-end=\\\"3278\\\" \\\/>1.125 \\\/ 0.05 = 22.5 \\u2192 floor to 22 \\u2192 integer part = 22 \\u00d7 0.05 = <strong data-start=\\\"3341\\\" data-end=\\\"3352\\\">1.10 mm<\\\/strong>.<br data-start=\\\"3353\\\" data-end=\\\"3356\\\" \\\/>Remainder = 1.125 % 0.05 = <strong data-start=\\\"3383\\\" data-end=\\\"3395\\\">0.025 mm<\\\/strong>.<\\\/p>\\n<p data-start=\\\"3398\\\" data-end=\\\"3475\\\">Then compare the remainder with the step-up threshold (for example, 20 \\u00b5m):<\\\/p>\\n<ul data-start=\\\"3476\\\" data-end=\\\"3607\\\">\\n<li data-start=\\\"3476\\\" data-end=\\\"3542\\\">\\n<p data-start=\\\"3478\\\" data-end=\\\"3542\\\">If remainder &gt; threshold, drill size = integer part + 0.05 mm.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"3543\\\" data-end=\\\"3607\\\">\\n<p data-start=\\\"3545\\\" data-end=\\\"3607\\\">If remainder \\u2264 threshold, drill size = integer part + 0.00 mm.<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<hr data-start=\\\"3609\\\" data-end=\\\"3612\\\" \\\/>\\n<h3 data-start=\\\"3614\\\" data-end=\\\"3653\\\">Summary about the step-up threshold<\\\/h3>\\n<p data-start=\\\"3654\\\" data-end=\\\"3897\\\">When the drill increment is <strong data-start=\\\"3682\\\" data-end=\\\"3691\\\">50 \\u00b5m<\\\/strong>, the step-up threshold is critical. It performs a second correction of the compensated drill size. It decides whether to \\u201cstep up\\u201d or \\u201cstay.\\u201d Changing this threshold directly changes the chosen drill size.<\\\/p>\\n<p data-start=\\\"3899\\\" data-end=\\\"3943\\\"><strong data-start=\\\"3899\\\" data-end=\\\"3943\\\">More examples (drill increment = 50 \\u00b5m):<\\\/strong><\\\/p>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"3945\\\" data-end=\\\"4209\\\">\\n<thead data-start=\\\"3945\\\" data-end=\\\"4041\\\">\\n<tr data-start=\\\"3945\\\" data-end=\\\"4041\\\">\\n<th data-start=\\\"3945\\\" data-end=\\\"3961\\\" data-col-size=\\\"sm\\\">Original hole<\\\/th>\\n<th data-start=\\\"3961\\\" data-end=\\\"3976\\\" data-col-size=\\\"sm\\\">Compensation<\\\/th>\\n<th data-start=\\\"3976\\\" data-end=\\\"3990\\\" data-col-size=\\\"sm\\\">After comp.<\\\/th>\\n<th data-start=\\\"3990\\\" data-end=\\\"4000\\\" data-col-size=\\\"sm\\\">Integer<\\\/th>\\n<th data-start=\\\"4000\\\" data-end=\\\"4012\\\" data-col-size=\\\"sm\\\">Remainder<\\\/th>\\n<th data-start=\\\"4012\\\" data-end=\\\"4032\\\" data-col-size=\\\"sm\\\">Step-up threshold<\\\/th>\\n<th data-start=\\\"4032\\\" data-end=\\\"4041\\\" data-col-size=\\\"sm\\\">Drill<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"4079\\\" data-end=\\\"4209\\\">\\n<tr data-start=\\\"4079\\\" data-end=\\\"4143\\\">\\n<td data-start=\\\"4079\\\" data-end=\\\"4090\\\" data-col-size=\\\"sm\\\">1.022 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4090\\\" data-end=\\\"4096\\\">0.1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4096\\\" data-end=\\\"4107\\\">1.122 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4107\\\" data-end=\\\"4114\\\">1.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4114\\\" data-end=\\\"4125\\\">0.022 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4125\\\" data-end=\\\"4132\\\">0.02<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4132\\\" data-end=\\\"4143\\\">1.15 mm<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"4144\\\" data-end=\\\"4209\\\">\\n<td data-start=\\\"4144\\\" data-end=\\\"4155\\\" data-col-size=\\\"sm\\\">1.022 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4155\\\" data-end=\\\"4161\\\">0.1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4161\\\" data-end=\\\"4172\\\">1.122 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4172\\\" data-end=\\\"4179\\\">1.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4179\\\" data-end=\\\"4190\\\">0.022 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4190\\\" data-end=\\\"4198\\\">0.025<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"4198\\\" data-end=\\\"4209\\\">1.10 mm<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<hr data-start=\\\"4211\\\" data-end=\\\"4214\\\" \\\/>\\n<h3 data-start=\\\"4216\\\" data-end=\\\"4266\\\">Personal view on setting the step-up threshold<\\\/h3>\\n<p data-start=\\\"4267\\\" data-end=\\\"4575\\\"><strong data-start=\\\"4267\\\" data-end=\\\"4285\\\">Pros and cons:<\\\/strong> After compensation, if the final hole is a little larger, at least the part can be inserted. If the hole is too small, the part cannot be inserted. So we usually set the step-up threshold to <strong data-start=\\\"4477\\\" data-end=\\\"4486\\\">20 \\u00b5m<\\\/strong> instead of <strong data-start=\\\"4498\\\" data-end=\\\"4507\\\">25 \\u00b5m<\\\/strong>. The exact choice should match each process and compensation value.<\\\/p>\\n<p data-start=\\\"4577\\\" data-end=\\\"4862\\\"><strong data-start=\\\"4577\\\" data-end=\\\"4614\\\">Combined with compensation value:<\\\/strong> For boards with HASL where compensation is <strong data-start=\\\"4658\\\" data-end=\\\"4669\\\">0.15 mm<\\\/strong>, you already \\u201cover-compensate\\u201d a bit and the final holes tend to be slightly large. In that case, a step-up threshold of <strong data-start=\\\"4791\\\" data-end=\\\"4800\\\">25 \\u00b5m<\\\/strong> can also work. Use the \\u201cnearest\\u201d rule when picking the drill.<\\\/p>\\n<hr data-start=\\\"4864\\\" data-end=\\\"4867\\\" \\\/>\\n<h2 data-start=\\\"4869\\\" data-end=\\\"4943\\\">3. How to ensure final hole size meets requirements after compensation?<\\\/h2>\\n<h3 data-start=\\\"4945\\\" data-end=\\\"4983\\\">Method 1: Buy special drill bits<\\\/h3>\\n<p data-start=\\\"4984\\\" data-end=\\\"5207\\\">Standard drill increment is <strong data-start=\\\"5012\\\" data-end=\\\"5021\\\">50 \\u00b5m<\\\/strong> (0.05 mm steps like 1.00, 1.05, 1.10, 1.15 mm). With a PTH tolerance of \\u00b13 mil, a 50 \\u00b5m drill set can cover the tolerance. If the tolerance is smaller than that, use special drill bits.<\\\/p>\\n<p data-start=\\\"5209\\\" data-end=\\\"5352\\\"><strong data-start=\\\"5209\\\" data-end=\\\"5222\\\">Example 1<\\\/strong> \\u2014 Compare 50 \\u00b5m vs 25 \\u00b5m increments:<br data-start=\\\"5259\\\" data-end=\\\"5262\\\" \\\/>Original hole = <strong data-start=\\\"5278\\\" data-end=\\\"5290\\\">0.922 mm<\\\/strong>, compensation = <strong data-start=\\\"5307\\\" data-end=\\\"5318\\\">0.10 mm<\\\/strong>, compensated size = <strong data-start=\\\"5339\\\" data-end=\\\"5351\\\">1.022 mm<\\\/strong>.<\\\/p>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"5354\\\" data-end=\\\"5545\\\">\\n<thead data-start=\\\"5354\\\" data-end=\\\"5422\\\">\\n<tr data-start=\\\"5354\\\" data-end=\\\"5422\\\">\\n<th data-start=\\\"5354\\\" data-end=\\\"5365\\\" data-col-size=\\\"sm\\\">Original<\\\/th>\\n<th data-start=\\\"5365\\\" data-end=\\\"5380\\\" data-col-size=\\\"sm\\\">Compensation<\\\/th>\\n<th data-start=\\\"5380\\\" data-end=\\\"5394\\\" data-col-size=\\\"sm\\\">Compensated<\\\/th>\\n<th data-start=\\\"5394\\\" data-end=\\\"5406\\\" data-col-size=\\\"sm\\\">Increment<\\\/th>\\n<th data-start=\\\"5406\\\" data-end=\\\"5422\\\" data-col-size=\\\"sm\\\">Drill chosen<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"5450\\\" data-end=\\\"5545\\\">\\n<tr data-start=\\\"5450\\\" data-end=\\\"5496\\\">\\n<td data-start=\\\"5450\\\" data-end=\\\"5458\\\" data-col-size=\\\"sm\\\">0.922<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5458\\\" data-end=\\\"5465\\\">0.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5465\\\" data-end=\\\"5473\\\">1.022<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5473\\\" data-end=\\\"5488\\\">0.05 (50 \\u00b5m)<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5488\\\" data-end=\\\"5496\\\">1.05<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"5497\\\" data-end=\\\"5545\\\">\\n<td data-start=\\\"5497\\\" data-end=\\\"5505\\\" data-col-size=\\\"sm\\\">0.922<\\\/td>\\n<td data-start=\\\"5505\\\" data-end=\\\"5512\\\" data-col-size=\\\"sm\\\">0.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5512\\\" data-end=\\\"5520\\\">1.022<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5520\\\" data-end=\\\"5536\\\">0.025 (25 \\u00b5m)<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5536\\\" data-end=\\\"5545\\\">1.025<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<p data-start=\\\"5547\\\" data-end=\\\"5689\\\">Difference: 1.050 \\u2212 1.022 = 0.028 mm; 1.025 \\u2212 1.022 = 0.003 mm. The smaller difference is better, so <strong data-start=\\\"5648\\\" data-end=\\\"5660\\\">1.025 mm<\\\/strong> (25 \\u00b5m increment) is better.<\\\/p>\\n<p data-start=\\\"5691\\\" data-end=\\\"5818\\\"><strong data-start=\\\"5691\\\" data-end=\\\"5704\\\">Example 2<\\\/strong> \\u2014 50 \\u00b5m vs special drill:<br data-start=\\\"5730\\\" data-end=\\\"5733\\\" \\\/>Original hole = <strong data-start=\\\"5749\\\" data-end=\\\"5761\\\">0.611 mm<\\\/strong>, compensation = <strong data-start=\\\"5778\\\" data-end=\\\"5789\\\">0.10 mm<\\\/strong>, compensated = <strong data-start=\\\"5805\\\" data-end=\\\"5817\\\">0.711 mm<\\\/strong>.<\\\/p>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"5820\\\" data-end=\\\"6018\\\">\\n<thead data-start=\\\"5820\\\" data-end=\\\"5895\\\">\\n<tr data-start=\\\"5820\\\" data-end=\\\"5895\\\">\\n<th data-start=\\\"5820\\\" data-end=\\\"5831\\\" data-col-size=\\\"sm\\\">Original<\\\/th>\\n<th data-start=\\\"5831\\\" data-end=\\\"5846\\\" data-col-size=\\\"sm\\\">Compensation<\\\/th>\\n<th data-start=\\\"5846\\\" data-end=\\\"5860\\\" data-col-size=\\\"sm\\\">Compensated<\\\/th>\\n<th data-start=\\\"5860\\\" data-end=\\\"5879\\\" data-col-size=\\\"sm\\\">Increment \\\/ Type<\\\/th>\\n<th data-start=\\\"5879\\\" data-end=\\\"5895\\\" data-col-size=\\\"sm\\\">Drill chosen<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"5923\\\" data-end=\\\"6018\\\">\\n<tr data-start=\\\"5923\\\" data-end=\\\"5969\\\">\\n<td data-start=\\\"5923\\\" data-end=\\\"5931\\\" data-col-size=\\\"sm\\\">0.611<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5931\\\" data-end=\\\"5938\\\">0.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5938\\\" data-end=\\\"5946\\\">0.711<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5946\\\" data-end=\\\"5961\\\">0.05 (50 \\u00b5m)<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5961\\\" data-end=\\\"5969\\\">0.70<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"5970\\\" data-end=\\\"6018\\\">\\n<td data-start=\\\"5970\\\" data-end=\\\"5978\\\" data-col-size=\\\"sm\\\">0.611<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5978\\\" data-end=\\\"5985\\\">0.10<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5985\\\" data-end=\\\"5993\\\">0.711<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"5993\\\" data-end=\\\"6009\\\">Special drill<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"6009\\\" data-end=\\\"6018\\\">0.711<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<p data-start=\\\"6020\\\" data-end=\\\"6161\\\">Difference: 0.700 \\u2212 0.711 = \\u22120.011 mm; 0.711 \\u2212 0.711 = 0.000 mm. The smaller difference is better. So the <strong data-start=\\\"6126\\\" data-end=\\\"6152\\\">0.711 mm special drill<\\\/strong> is best.<\\\/p>\\n<h3 data-start=\\\"6163\\\" data-end=\\\"6206\\\">Method 2: Improve process and equipment<\\\/h3>\\n<ul data-start=\\\"6207\\\" data-end=\\\"6752\\\">\\n<li data-start=\\\"6207\\\" data-end=\\\"6296\\\">\\n<p data-start=\\\"6209\\\" data-end=\\\"6296\\\">Add a second board plating step to reduce uneven thickness from pattern distribution.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"6297\\\" data-end=\\\"6395\\\">\\n<p data-start=\\\"6299\\\" data-end=\\\"6395\\\">Use negative photo direct-etching and plate the whole board to reduce uneven copper thickness.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"6396\\\" data-end=\\\"6538\\\">\\n<p data-start=\\\"6398\\\" data-end=\\\"6538\\\">Lower the current density (typical is 19 ASF); slightly lower current density can improve plating uniformity but will extend plating time.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"6539\\\" data-end=\\\"6752\\\">\\n<p data-start=\\\"6541\\\" data-end=\\\"6752\\\">Upgrade to a horizontal plating line. Vertical plating lines often give thicker copper at the hole edge and thinner copper at the hole center for high aspect-ratio holes. A horizontal line can reduce that issue.<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<h3 data-start=\\\"6754\\\" data-end=\\\"6790\\\">Method 3: Improve CAM strategies<\\\/h3>\\n<ul data-start=\\\"6791\\\" data-end=\\\"7885\\\">\\n<li data-start=\\\"6791\\\" data-end=\\\"7019\\\">\\n<p data-start=\\\"6793\\\" data-end=\\\"7019\\\">For holes in isolated copper areas, apply one extra increment compensation. Isolated areas have less copper, so during plating they get higher local current density and more copper thickness; extra compensation offsets that.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"7020\\\" data-end=\\\"7361\\\">\\n<p data-start=\\\"7022\\\" data-end=\\\"7361\\\">For designs with dense traces on one side and sparse on the other (for example, a power board), place the sparse side inward and the dense side outward, and use reversed panelization. During panel plating, areas near the board edge get higher current density and thicker plating. Reversed panelization helps balance plating distribution.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"7362\\\" data-end=\\\"7617\\\">\\n<p data-start=\\\"7364\\\" data-end=\\\"7617\\\">When TOP and BOTTOM copper area differ a lot, use positive\\\/negative (yin-yang) paneling. Uneven copper area causes \\u201cbell-mouth\\u201d vias; the thicker the board and the more copper, the worse the effect; yin-yang paneling helps balance copper distribution.<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"7618\\\" data-end=\\\"7885\\\">\\n<p data-start=\\\"7620\\\" data-end=\\\"7885\\\">For isolated-area holes near the board edge or slots, add copper \\u201cpick-up\\u201d areas or copper pads near the edge or slot. Isolated holes can get too much plating thickness and become too small; extra copper near them reduces local current density and balances plating.<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<hr data-start=\\\"7887\\\" data-end=\\\"7890\\\" \\\/>\\n<h2 data-start=\\\"7892\\\" data-end=\\\"7952\\\">4. How much compensation is needed and how is it derived?<\\\/h2>\\n<p data-start=\\\"7954\\\" data-end=\\\"8087\\\">Compensation values come from process tests. Below is one set of measured hole size changes after various steps (data from a report):<\\\/p>\\n<p data-start=\\\"8089\\\" data-end=\\\"8212\\\"><strong data-start=\\\"8089\\\" data-end=\\\"8106\\\">Process flow:<\\\/strong> mechanical drilling \\u2192 immersion copper \\u2192 electroplating \\u2192 pattern transfer \\u2192 etch \\u2192 AOI \\u2192 wet film \\u2192 HASL<\\\/p>\\n<p data-start=\\\"8214\\\" data-end=\\\"8239\\\"><strong data-start=\\\"8214\\\" data-end=\\\"8237\\\">Process parameters:<\\\/strong><\\\/p>\\n<ul data-start=\\\"8240\\\" data-end=\\\"8515\\\">\\n<li data-start=\\\"8240\\\" data-end=\\\"8330\\\">\\n<p data-start=\\\"8242\\\" data-end=\\\"8330\\\">Drill: drill bit size 0.95 mm, re-sharpen\\\/regrind 3 times, drill compensation 0.15 mm;<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"8331\\\" data-end=\\\"8386\\\">\\n<p data-start=\\\"8333\\\" data-end=\\\"8386\\\">Plating: copper thickness \\u2265 18 \\u00b5m, average \\u2265 20 \\u00b5m;<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"8387\\\" data-end=\\\"8456\\\">\\n<p data-start=\\\"8389\\\" data-end=\\\"8456\\\">HASL: final hole requirement 0.80 mm, tolerance \\u00b10.08 mm (3 mil);<\\\/p>\\n<\\\/li>\\n<li data-start=\\\"8457\\\" data-end=\\\"8515\\\">\\n<p data-start=\\\"8459\\\" data-end=\\\"8515\\\">Test: 10 panels, corner trimmed, board thickness 2.0 mm.<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<h3 data-start=\\\"8517\\\" data-end=\\\"8546\\\">Hole size changes by step<\\\/h3>\\n<p data-start=\\\"8548\\\" data-end=\\\"8593\\\"><strong data-start=\\\"8548\\\" data-end=\\\"8569\\\">1) After drilling<\\\/strong> \\u2014 hole sizes measured<\\\/p>\\n<ul data-start=\\\"8594\\\" data-end=\\\"8795\\\">\\n<li data-start=\\\"8594\\\" data-end=\\\"8795\\\">\\n<p data-start=\\\"8596\\\" data-end=\\\"8795\\\">Total 1920 holes tested (10 panels, 384 holes each). Sample: 200 holes (20 per panel). Hole range: <strong data-start=\\\"8695\\\" data-end=\\\"8711\\\">0.93\\u20130.94 mm<\\\/strong>, average <strong data-start=\\\"8721\\\" data-end=\\\"8733\\\">0.931 mm<\\\/strong>.<br data-start=\\\"8734\\\" data-end=\\\"8737\\\" \\\/>(Then a long list of sampled values, mostly 0.93 or 0.94.)<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<p data-start=\\\"8797\\\" data-end=\\\"8848\\\"><strong data-start=\\\"8797\\\" data-end=\\\"8846\\\">2) After patterned plating \\u2014 copper thickness<\\\/strong><\\\/p>\\n<ul data-start=\\\"8849\\\" data-end=\\\"8999\\\">\\n<li data-start=\\\"8849\\\" data-end=\\\"8999\\\">\\n<p data-start=\\\"8851\\\" data-end=\\\"8999\\\">For each panel, test 10 holes. Copper thickness range <strong data-start=\\\"8905\\\" data-end=\\\"8917\\\">18\\u201331 \\u00b5m<\\\/strong>, meeting \\u226518 \\u00b5m and average \\u226520 \\u00b5m.<br data-start=\\\"8953\\\" data-end=\\\"8956\\\" \\\/>(Then many sample copper thickness values.)<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<p data-start=\\\"9001\\\" data-end=\\\"9045\\\"><strong data-start=\\\"9001\\\" data-end=\\\"9043\\\">3) After patterned plating \\u2014 hole size<\\\/strong><\\\/p>\\n<ul data-start=\\\"9046\\\" data-end=\\\"9176\\\">\\n<li data-start=\\\"9046\\\" data-end=\\\"9176\\\">\\n<p data-start=\\\"9048\\\" data-end=\\\"9176\\\">Total 1920 holes, sample 200. Hole range: <strong data-start=\\\"9090\\\" data-end=\\\"9106\\\">0.84\\u20130.88 mm<\\\/strong>, average <strong data-start=\\\"9116\\\" data-end=\\\"9128\\\">0.858 mm<\\\/strong>.<br data-start=\\\"9129\\\" data-end=\\\"9132\\\" \\\/>(Then many sample values, mostly 0.85\\u20130.88.)<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<p data-start=\\\"9178\\\" data-end=\\\"9209\\\"><strong data-start=\\\"9178\\\" data-end=\\\"9195\\\">4) After HASL<\\\/strong> \\u2014 hole size<\\\/p>\\n<ul data-start=\\\"9210\\\" data-end=\\\"9322\\\">\\n<li data-start=\\\"9210\\\" data-end=\\\"9322\\\">\\n<p data-start=\\\"9212\\\" data-end=\\\"9322\\\">Total 1920 holes, sample 200. Hole range: <strong data-start=\\\"9254\\\" data-end=\\\"9270\\\">0.82\\u20130.86 mm<\\\/strong>, average <strong data-start=\\\"9280\\\" data-end=\\\"9292\\\">0.836 mm<\\\/strong>.<br data-start=\\\"9293\\\" data-end=\\\"9296\\\" \\\/>(Then many sample values.)<\\\/p>\\n<\\\/li>\\n<\\\/ul>\\n<p data-start=\\\"9324\\\" data-end=\\\"9340\\\"><strong data-start=\\\"9324\\\" data-end=\\\"9340\\\">Test summary<\\\/strong><\\\/p>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"9342\\\" data-end=\\\"9531\\\">\\n<thead data-start=\\\"9342\\\" data-end=\\\"9378\\\">\\n<tr data-start=\\\"9342\\\" data-end=\\\"9378\\\">\\n<th data-start=\\\"9342\\\" data-end=\\\"9349\\\" data-col-size=\\\"sm\\\">Step<\\\/th>\\n<th data-start=\\\"9349\\\" data-end=\\\"9362\\\" data-col-size=\\\"sm\\\">Hole range<\\\/th>\\n<th data-start=\\\"9362\\\" data-end=\\\"9378\\\" data-col-size=\\\"sm\\\">Average hole<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"9395\\\" data-end=\\\"9531\\\">\\n<tr data-start=\\\"9395\\\" data-end=\\\"9439\\\">\\n<td data-start=\\\"9395\\\" data-end=\\\"9412\\\" data-col-size=\\\"sm\\\">After drilling<\\\/td>\\n<td data-start=\\\"9412\\\" data-end=\\\"9427\\\" data-col-size=\\\"sm\\\">0.93\\u20130.94 mm<\\\/td>\\n<td data-start=\\\"9427\\\" data-end=\\\"9439\\\" data-col-size=\\\"sm\\\">0.931 mm<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"9440\\\" data-end=\\\"9490\\\">\\n<td data-start=\\\"9440\\\" data-end=\\\"9463\\\" data-col-size=\\\"sm\\\">After copper plating<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"9463\\\" data-end=\\\"9478\\\">0.84\\u20130.88 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"9478\\\" data-end=\\\"9490\\\">0.858 mm<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"9491\\\" data-end=\\\"9531\\\">\\n<td data-start=\\\"9491\\\" data-end=\\\"9504\\\" data-col-size=\\\"sm\\\">After HASL<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"9504\\\" data-end=\\\"9519\\\">0.82\\u20130.86 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"9519\\\" data-end=\\\"9531\\\">0.836 mm<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<p data-start=\\\"9533\\\" data-end=\\\"9723\\\"><strong data-start=\\\"9533\\\" data-end=\\\"9548\\\">Conclusion:<\\\/strong> For HASL boards the drill compensation of <strong data-start=\\\"9591\\\" data-end=\\\"9602\\\">0.15 mm<\\\/strong> is an \\u201cover-compensation\\u201d and causes final holes to be larger. The best compensation value in this test is <strong data-start=\\\"9710\\\" data-end=\\\"9722\\\">0.125 mm<\\\/strong>.<\\\/p>\\n<hr data-start=\\\"9725\\\" data-end=\\\"9728\\\" \\\/>\\n<h2>5. Drill compensation code implementation (rules)<\\\/h2>\\n<ol data-start=\\\"9784\\\" data-end=\\\"9817\\\">\\n<li data-start=\\\"9784\\\" data-end=\\\"9817\\\">\\n<p data-start=\\\"9787\\\" data-end=\\\"9817\\\">Compensation and step-up rules<\\\/p>\\n<\\\/li>\\n<\\\/ol>\\n<div class=\\\"TyagGW_tableContainer\\\">\\n<div class=\\\"group TyagGW_tableWrapper flex w-fit flex-col-reverse\\\" tabindex=\\\"-1\\\">\\n<table class=\\\"w-fit min-w-(--thread-content-width)\\\" data-start=\\\"9819\\\" data-end=\\\"10843\\\">\\n<thead data-start=\\\"9819\\\" data-end=\\\"9968\\\">\\n<tr data-start=\\\"9819\\\" data-end=\\\"9968\\\">\\n<th data-start=\\\"9819\\\" data-end=\\\"9828\\\" data-col-size=\\\"sm\\\">Aspect<\\\/th>\\n<th data-start=\\\"9828\\\" data-end=\\\"9844\\\" data-col-size=\\\"sm\\\">Finished hole<\\\/th>\\n<th data-start=\\\"9844\\\" data-end=\\\"9861\\\" data-col-size=\\\"sm\\\">Surface finish<\\\/th>\\n<th data-start=\\\"9861\\\" data-end=\\\"9879\\\" data-col-size=\\\"sm\\\">Board thickness<\\\/th>\\n<th data-start=\\\"9879\\\" data-end=\\\"9899\\\" data-col-size=\\\"sm\\\">Step-up threshold<\\\/th>\\n<th data-start=\\\"9899\\\" data-end=\\\"9923\\\" data-col-size=\\\"sm\\\">If via copper &lt; 26 \\u00b5m<\\\/th>\\n<th data-start=\\\"9923\\\" data-end=\\\"9934\\\" data-col-size=\\\"sm\\\">26\\u201337 \\u00b5m<\\\/th>\\n<th data-start=\\\"9934\\\" data-end=\\\"9945\\\" data-col-size=\\\"sm\\\">37\\u201347 \\u00b5m<\\\/th>\\n<th data-start=\\\"9945\\\" data-end=\\\"9956\\\" data-col-size=\\\"sm\\\">47\\u201367 \\u00b5m<\\\/th>\\n<th data-start=\\\"9956\\\" data-end=\\\"9968\\\" data-col-size=\\\"sm\\\">67\\u201386 \\u00b5m<\\\/th>\\n<\\\/tr>\\n<\\\/thead>\\n<tbody data-start=\\\"10018\\\" data-end=\\\"10843\\\">\\n<tr data-start=\\\"10018\\\" data-end=\\\"10146\\\">\\n<td data-start=\\\"10018\\\" data-end=\\\"10043\\\" data-col-size=\\\"sm\\\">thickness ratio &lt; 12:1<\\\/td>\\n<td data-start=\\\"10043\\\" data-end=\\\"10055\\\" data-col-size=\\\"sm\\\">\\u2264 1.90 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10055\\\" data-end=\\\"10084\\\">HASL (leaded or lead-free)<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10084\\\" data-end=\\\"10095\\\">\\u2265 3.5 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10095\\\" data-end=\\\"10105\\\">0.01952<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10105\\\" data-end=\\\"10113\\\">5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10113\\\" data-end=\\\"10121\\\">6 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10121\\\" data-end=\\\"10129\\\">7 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10129\\\" data-end=\\\"10137\\\">8 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10137\\\" data-end=\\\"10146\\\">9 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10147\\\" data-end=\\\"10285\\\">\\n<td data-start=\\\"10147\\\" data-end=\\\"10172\\\" data-col-size=\\\"sm\\\">thickness ratio &lt; 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10172\\\" data-end=\\\"10184\\\">\\u2264 1.90 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10184\\\" data-end=\\\"10213\\\">HASL (leaded or lead-free)<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10213\\\" data-end=\\\"10224\\\">&lt; 3.5 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10224\\\" data-end=\\\"10234\\\">0.01952<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10234\\\" data-end=\\\"10244\\\">4.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10244\\\" data-end=\\\"10254\\\">5.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10254\\\" data-end=\\\"10264\\\">6.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10264\\\" data-end=\\\"10274\\\">7.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10274\\\" data-end=\\\"10285\\\">8.5 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10286\\\" data-end=\\\"10395\\\">\\n<td data-start=\\\"10286\\\" data-end=\\\"10311\\\" data-col-size=\\\"sm\\\">thickness ratio &lt; 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10311\\\" data-end=\\\"10323\\\">\\u2264 1.90 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10323\\\" data-end=\\\"10340\\\">Other finishes<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10340\\\" data-end=\\\"10344\\\">\\\/<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10344\\\" data-end=\\\"10354\\\">0.01952<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10354\\\" data-end=\\\"10362\\\">4 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10362\\\" data-end=\\\"10370\\\">5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10370\\\" data-end=\\\"10378\\\">6 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10378\\\" data-end=\\\"10386\\\">7 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10386\\\" data-end=\\\"10395\\\">8 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10396\\\" data-end=\\\"10504\\\">\\n<td data-start=\\\"10396\\\" data-end=\\\"10421\\\" data-col-size=\\\"sm\\\">thickness ratio &lt; 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10421\\\" data-end=\\\"10433\\\">&gt; 1.90 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10433\\\" data-end=\\\"10440\\\">HASL<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10440\\\" data-end=\\\"10444\\\">\\\/<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10444\\\" data-end=\\\"10453\\\">0.0246<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10453\\\" data-end=\\\"10463\\\">5.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10463\\\" data-end=\\\"10473\\\">6.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10473\\\" data-end=\\\"10483\\\">7.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10483\\\" data-end=\\\"10493\\\">8.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10493\\\" data-end=\\\"10504\\\">9.5 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10505\\\" data-end=\\\"10624\\\">\\n<td data-start=\\\"10505\\\" data-end=\\\"10530\\\" data-col-size=\\\"sm\\\">thickness ratio &lt; 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10530\\\" data-end=\\\"10542\\\">&gt; 1.90 mm<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10542\\\" data-end=\\\"10559\\\">Other finishes<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10559\\\" data-end=\\\"10563\\\">\\\/<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10563\\\" data-end=\\\"10573\\\">0.01952<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10573\\\" data-end=\\\"10583\\\">4.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10583\\\" data-end=\\\"10593\\\">5.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10593\\\" data-end=\\\"10603\\\">6.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10603\\\" data-end=\\\"10613\\\">7.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10613\\\" data-end=\\\"10624\\\">8.5 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10625\\\" data-end=\\\"10733\\\">\\n<td data-start=\\\"10625\\\" data-end=\\\"10650\\\" data-col-size=\\\"sm\\\">thickness ratio \\u2265 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10650\\\" data-end=\\\"10662\\\">all holes<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10662\\\" data-end=\\\"10669\\\">HASL<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10669\\\" data-end=\\\"10673\\\">\\\/<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10673\\\" data-end=\\\"10682\\\">0.0246<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10682\\\" data-end=\\\"10692\\\">5.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10692\\\" data-end=\\\"10702\\\">6.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10702\\\" data-end=\\\"10712\\\">7.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10712\\\" data-end=\\\"10722\\\">8.5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10722\\\" data-end=\\\"10733\\\">9.5 mil<\\\/td>\\n<\\\/tr>\\n<tr data-start=\\\"10734\\\" data-end=\\\"10843\\\">\\n<td data-start=\\\"10734\\\" data-end=\\\"10759\\\" data-col-size=\\\"sm\\\">thickness ratio \\u2265 12:1<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10759\\\" data-end=\\\"10771\\\">all holes<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10771\\\" data-end=\\\"10788\\\">Other finishes<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10788\\\" data-end=\\\"10792\\\">\\\/<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10792\\\" data-end=\\\"10802\\\">0.01952<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10802\\\" data-end=\\\"10810\\\">5 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10810\\\" data-end=\\\"10818\\\">6 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10818\\\" data-end=\\\"10826\\\">7 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10826\\\" data-end=\\\"10834\\\">8 mil<\\\/td>\\n<td data-col-size=\\\"sm\\\" data-start=\\\"10834\\\" data-end=\\\"10843\\\">9 mil<\\\/td>\\n<\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<\\\/div>\\n<ol start=\\\"2\\\" data-start=\\\"10845\\\" data-end=\\\"10953\\\">\\n<li data-start=\\\"10845\\\" data-end=\\\"10953\\\">\\n<p data-start=\\\"10848\\\" data-end=\\\"10953\\\">Special drill sizes (if tolerance &lt; 3 mil, use special drills or 25 \\u00b5m increment, use nearest drill rule)<\\\/p>\\n<\\\/li>\\n<\\\/ol>\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"a4fd860\"}]},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"f7e142f\",\"elType\":\"widget\",\"settings\":{\"language\":\"aspnet\",\"code\":\"List<double> ContainDrillToolList = new List<double>();\\r\\nContainDrillToolList.AddRange(new double[] { 610, 635, 711, 838, 914, 1016, 1320, 3120 });\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"e63c3e6\"}]},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"ec5424b\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<p>3. Drill Compensation Code<\\\/p>\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"17c7393\"}]},\"elements\":[],\"widgetType\":\"text-editor\"},{\"id\":\"3dfeb51\",\"elType\":\"widget\",\"settings\":{\"language\":\"csharp\",\"code\":\"\\\/\\\/\\\/<summary>\\r\\n\\\/\\\/\\\/ Calculate the drill bit diameter based on drill compensation parameters\\r\\n\\\/\\\/\\\/<\\\/summary>\\r\\n\\\/\\\/\\\/<param name=\\\"ToolInfo\\\">Drill tool basic information<\\\/param>\\r\\n\\\/\\\/\\\/<param name=\\\"UpParam\\\">Drill compensation parameters<\\\/param>\\r\\n\\\/\\\/\\\/<param name=\\\"ContainDrillToolList\\\">Special drill bit diameter list<\\\/param>\\r\\n\\\/\\\/\\\/<returns>Return 1 if calculation is successful<\\\/returns>\\r\\npublic static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List<double> ContainDrillToolList)\\r\\n{\\r\\n    if (ContainDrillToolList == null) ContainDrillToolList = new List<double>();\\r\\n    gToolUpParamHole UpParamHole = new G_Helper.gToolUpParamHole();\\r\\n    switch (ToolInfo.type)\\r\\n    {\\r\\n        case \\\"via\\\":\\r\\n            UpParamHole = UpParam.Via;\\r\\n            break;\\r\\n        case \\\"plate\\\":\\r\\n            UpParamHole = UpParam.Pth;\\r\\n            break;\\r\\n        case \\\"nplate\\\":\\r\\n            UpParamHole = UpParam.Npth;\\r\\n            break;\\r\\n    }\\r\\n    ToolInfo.max_tol = Math.Round(UpParamHole.Max_Tol, 0);\\r\\n    ToolInfo.min_tol = Math.Round(UpParamHole.Min_Tol, 0);\\r\\n    if (ToolInfo.finish_size < 50)\\r\\n    {\\r\\n        ToolInfo.finish_size = ToolInfo.drill_size;\\r\\n    }\\r\\n    double DrillSlotLevel = (ToolInfo.shape == \\\"slot\\\") ? UpParam.SlotLevel : UpParam.DrillLevel;  \\\/\\\/Drill step interval: Round holes have two levels (25\\\/50\\u03bcm), slot holes have one level (50\\u03bcm)\\r\\n    double UpLevel;\\r\\n    if (UpParam.DrillLevel > 49) \\\/\\\/When the step interval is 50\\u03bcm, do not use special drill bits\\r\\n    {\\r\\n        ContainDrillToolList = new List<double>();\\r\\n        UpLevel = UpParamHole.UpLevel;\\r\\n    }\\r\\n    else\\r\\n    {\\r\\n        UpLevel = UpParam.DrillLevel * 0.5;   \\\/\\\/Select drill bit by half of the step interval\\r\\n    }\\r\\n\\r\\n    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \\\/\\\/Average the upper and lower tolerance\\r\\n    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) \\\/ DrillSlotLevel)); \\\/\\\/Drill step count\\r\\n    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; \\\/\\\/Round down to the nearest drill step\\r\\n    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;\\\/\\\/Remainder of drill size after step division\\r\\n    double DrillsizeLevel = (DrillsizeFloat > UpLevel) ? DrillSlotLevel : 0;\\\/\\\/Determine whether to round up the remainder\\r\\n\\r\\n    \\\/\\\/Check if special drill bits are included\\r\\n    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt => (int)(Math.Floor(tt \\\/ DrillSlotLevel)) == DrillLevelCount);\\r\\n    if (ContainDrillIndex > -1)\\r\\n    {\\r\\n        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;\\\/\\\/Remainder of special drill bit size after step division\\r\\n        if (DrillsizeFloat > UpLevel) \\\/\\\/ e.g. 38 > 20\\r\\n        {\\r\\n            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel);   \\\/\\\/e.g. 40-50\\r\\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \\\/\\\/e.g. 40-38\\r\\n            DrillsizeLevel = (diff1 < diff2) ? DrillSlotLevel : ContainDrillFloat;\\r\\n        }\\r\\n        else \\\/\\\/if (ContainDrillFloat < UpLevel)\\r\\n        {\\r\\n            double diff1 = Math.Abs(DrillsizeFloat - 0);  \\\/\\\/e.g. 12-0\\r\\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \\\/\\\/e.g. 12-16\\r\\n            DrillsizeLevel = (diff1 < diff2) ? 0 : ContainDrillFloat;\\r\\n        }\\r\\n    }\\r\\n    ToolInfo.drill_size = DrillsizeInt + DrillsizeLevel;\\r\\n\\r\\n    double DiffDrillSizeUp = ToolInfo.drill_size - ToolInfo.finish_size;\\r\\n    if (ToolInfo.shape == \\\"slot\\\") \\\/\\\/ Slot length compensation\\r\\n    {\\r\\n        if (UpParam.isSlotUpLevel) \\\/\\\/Whether to round the slot length to step interval\\r\\n        {\\r\\n            Drillfinish_size = ToolInfo.slot_len + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \\\/\\\/Average the upper and lower tolerance\\r\\n            DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) \\\/ DrillSlotLevel)); \\\/\\\/ Drill step count\\r\\n            DrillsizeInt = DrillLevelCount * DrillSlotLevel; \\\/\\\/Round down to the nearest drill step (50\\u03bcm)\\r\\n            DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) % DrillSlotLevel;\\\/\\\/Remainder of slot length after step division\\r\\n            DrillsizeLevel = (DrillsizeFloat > UpParamHole.UpLevel) ? DrillSlotLevel : 0;\\\/\\\/Determine whether to round up the remainder\\r\\n            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) \\\/ 10) * 10; \\\/\\\/ Round down to the nearest 10\\u03bcm\\r\\n            ToolInfo.slot_len = DrillsizeInt;\\r\\n        }\\r\\n        ToolInfo.drill_size += UpParam.SlotEndNumber;  \\\/\\\/ Add suffix number for slot drill bit segmentation\\r\\n    }\\r\\n    ToolInfo.bit = Math.Round((ToolInfo.drill_size * 0.001), 3).ToString();\\r\\n    return 1;\\r\\n}\\r\\n\\r\\npublic class gToolUpParam\\r\\n{\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for VIA holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for PTH (Plated Through Hole) (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for NPTH (Non-Plated Through Hole) (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval for round drill holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double DrillLevel { get; set; } = 50;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval for slot drill holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double SlotLevel { get; set; } = 50;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Suffix number for slot drill bit segmentation\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public int SlotEndNumber { get; set; } = 0;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Additional compensation value for slot length (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double SlotLengthUp { get; set; } = 0;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Whether to round the slot length to step interval\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public bool isSlotUpLevel { get; set; } = false;\\r\\n}\\r\\n\\r\\npublic class gToolUpParamHole\\r\\n{\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation value (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double UpVal { get; set; } = 100;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval threshold for rounding up (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double UpLevel { get; set; } = 25;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Upper tolerance (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double Max_Tol { get; set; } = 76;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Lower tolerance (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double Min_Tol { get; set; } = 76;\\r\\n}\\r\\n\\r\\n\\\/\\\/\\\/<summary>\\r\\n\\\/\\\/\\\/ Mod_tool: Drill tool attribute model\\r\\n\\\/\\\/\\\/<\\\/summary>\\r\\npublic class Mod_tool\\r\\n{\\r\\n    public int num { get; set; }\\r\\n    public string type { get; set; } \\\/\\\/ Hole type: via\\\/plate(nplate)\\r\\n    public string shape { get; set; } \\\/\\\/ Hole shape: round\\\/slot\\r\\n    public double finish_size { get; set; } \\\/\\\/ Finished hole size (in \\u03bcm)\\r\\n    public double drill_size { get; set; } \\\/\\\/ Drill bit size (in \\u03bcm)\\r\\n    public double max_tol { get; set; } \\\/\\\/ Upper tolerance (in \\u03bcm)\\r\\n    public double min_tol { get; set; } \\\/\\\/ Lower tolerance (in \\u03bcm)\\r\\n    public double slot_len { get; set; } \\\/\\\/ Slot length (in \\u03bcm)\\r\\n    public string bit { get; set; } \\\/\\\/ Drill bit size (in mm, formatted string)\\r\\n}\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"771dd1c\"}]},\"elements\":[],\"widgetType\":\"code-highlight\"},{\"id\":\"578eb26\",\"elType\":\"widget\",\"settings\":{\"editor\":\"<h2 data-start=\\\"10960\\\" data-end=\\\"11017\\\">6. Why does board thickness affect drill compensation?<\\\/h2>\\n<p data-start=\\\"11019\\\" data-end=\\\"11464\\\">I did not understand this at first either. The main reason is the high <strong data-start=\\\"11090\\\" data-end=\\\"11121\\\">thickness-to-diameter ratio<\\\/strong> (board thickness divided by hole diameter). A high ratio makes the copper at the hole center thinner and the copper at the hole edge thicker. To compute the thickness-to-diameter ratio you need the board thickness value. So board thickness enters the drill compensation rules. For high thickness-to-diameter holes, the compensation is larger.<\\\/p>\",\"display_condition_list\":[{\"display_condition_login_status\":\"subscriber\",\"_id\":\"715c69a\"}]},\"elements\":[],\"widgetType\":\"text-editor\"}],\"isInner\":false}]"],"_elementor_conditions":["a:0:{}"],"_edit_last":["1"],"_wp_page_template":["default"],"_elementor_version":["3.33.4"],"_elementor_pro_version":["3.31.2"],"_elementor_page_settings":["a:0:{}"],"rank_math_og_content_image":["a:2:{s:5:\"check\";s:32:\"ecdd2e25359dae372358174e8b65526d\";s:6:\"images\";a:1:{i:0;i:4578;}}"],"rank_math_primary_category":["1"],"site-post-title":[""],"_thumbnail_id":["4584"],"_uag_page_assets":["a:9:{s:3:\"css\";s:30185:\".uag-blocks-common-selector{z-index:var(--z-index-desktop) !important}@media (max-width: 976px){.uag-blocks-common-selector{z-index:var(--z-index-tablet) !important}}@media (max-width: 767px){.uag-blocks-common-selector{z-index:var(--z-index-mobile) !important}}\n.uagb-social-share__outer-wrap,.uagb-social-share__wrap{display:flex;align-items:center;justify-content:center}.uagb-social-share__layout-vertical.uagb-social-share__outer-wrap,.uagb-social-share__layout-vertical .uagb-social-share__wrap{flex-direction:column}.uagb-social-share__layout-vertical .wp-block-uagb-social-share-child.uagb-ss-repeater.uagb-ss__wrapper:first-child{margin-top:0 !important}.uagb-social-share__layout-vertical .wp-block-uagb-social-share-child.uagb-ss-repeater.uagb-ss__wrapper:last-child{margin-bottom:0 !important}.uagb-social-share__outer-wrap a.uagb-button__link:focus{box-shadow:none}.uagb-social-share__outer-wrap .uagb-ss__wrapper{padding:0;margin-left:5px;margin-right:5px;transition:all 0.2s;display:inline-flex;text-align:center}.uagb-social-share__outer-wrap .uagb-ss__source-wrap{display:inline-block}.uagb-social-share__outer-wrap .uagb-ss__link{color:#3a3a3a;display:inline-table;line-height:0;cursor:pointer}.uagb-social-share__outer-wrap .uagb-ss__source-icon{font-size:40px;width:40px;height:40px}.uagb-social-share__outer-wrap .uagb-ss__source-image{width:40px}@media (max-width: 976px){.uagb-social-share__layout-horizontal .uagb-ss__wrapper{margin-left:0;margin-right:0}}.uagb-social-share__layout-horizontal .wp-block-uagb-social-share-child.uagb-ss-repeater.uagb-ss__wrapper:first-child{margin-left:0 !important}.uagb-social-share__layout-horizontal .wp-block-uagb-social-share-child.uagb-ss-repeater.uagb-ss__wrapper:last-child{margin-right:0 !important}\n.wp-block-uagb-social-share .uagb-social-share__wrapper{text-decoration:none}.uagb-social-share__wrapper{box-shadow:none}.uagb-social-share__outer-wrap:not(.uagb-social-share__no-label) .uagb-social-share__source-wrap{margin-right:15px}.uagb-social-share__outer-wrap.uagb-social-share__icon-at-top .uagb-social-share__source-wrap{-ms-flex-item-align:flex-start;align-self:flex-start;margin-top:5px}\n.uagb-block-015f0124 .uagb-ss-repeater span.uagb-ss__link{color: #3a3a3a;}.uagb-block-015f0124 .uagb-ss-repeater a.uagb-ss__link{color: #3a3a3a;}.uagb-block-015f0124 .uagb-ss-repeater span.uagb-ss__link svg{fill: #3a3a3a;}.uagb-block-015f0124 .uagb-ss-repeater a.uagb-ss__link svg{fill: #3a3a3a;}.uagb-block-015f0124.uagb-social-share__layout-vertical .uagb-ss__wrapper{margin-left: 0;margin-right: 0;margin-top: 5px;margin-bottom: 5px;}.uagb-block-015f0124.uagb-social-share__layout-vertical .uagb-ss__link{padding: 10px;}.uagb-block-015f0124.uagb-social-share__layout-horizontal .uagb-ss__link{padding: 10px;}.uagb-block-015f0124.uagb-social-share__layout-horizontal .uagb-ss__wrapper{margin-left: 5px;margin-right: 5px;}.uagb-block-015f0124 .wp-block-uagb-social-share-child {border-radius: 0px;}.uagb-block-015f0124 .uagb-ss__source-wrap{width: 30px;}.uagb-block-015f0124 .uagb-ss__source-wrap svg{width: 30px;height: 30px;}.uagb-block-015f0124 .uagb-ss__source-image{width: 30px;}.uagb-block-015f0124 .uagb-ss__source-icon{width: 30px;height: 30px;font-size: 30px;}.uagb-block-015f0124.uagb-social-share__outer-wrap{justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;}.uagb-block-44317091.uagb-ss-repeater span.uagb-ss__link{color: #3b5998;}.uagb-block-44317091.uagb-ss-repeater a.uagb-ss__link{color: #3b5998;}.uagb-block-44317091.uagb-ss-repeater span.uagb-ss__link svg{fill: #3b5998;}.uagb-block-44317091.uagb-ss-repeater a.uagb-ss__link svg{fill: #3b5998;}.uagb-block-df693e43.uagb-ss-repeater span.uagb-ss__link{color: #55acee;}.uagb-block-df693e43.uagb-ss-repeater a.uagb-ss__link{color: #55acee;}.uagb-block-df693e43.uagb-ss-repeater span.uagb-ss__link svg{fill: #55acee;}.uagb-block-df693e43.uagb-ss-repeater a.uagb-ss__link svg{fill: #55acee;}.uagb-block-e0123642.uagb-ss-repeater span.uagb-ss__link{color: #bd081c;}.uagb-block-e0123642.uagb-ss-repeater a.uagb-ss__link{color: #bd081c;}.uagb-block-e0123642.uagb-ss-repeater span.uagb-ss__link svg{fill: #bd081c;}.uagb-block-e0123642.uagb-ss-repeater a.uagb-ss__link svg{fill: #bd081c;}.uagb-block-23521e42.uagb-ss-repeater span.uagb-ss__link{color: #0077b5;}.uagb-block-23521e42.uagb-ss-repeater a.uagb-ss__link{color: #0077b5;}.uagb-block-23521e42.uagb-ss-repeater span.uagb-ss__link svg{fill: #0077b5;}.uagb-block-23521e42.uagb-ss-repeater a.uagb-ss__link svg{fill: #0077b5;}@media only screen and (max-width: 976px) {.uagb-block-015f0124.uagb-social-share__layout-vertical .uagb-ss__wrapper{margin-left: 0;margin-right: 0;margin-top: 5px;margin-bottom: 5px;}.uagb-block-015f0124.uagb-social-share__layout-horizontal .uagb-ss__wrapper{margin-left: 5px;margin-right: 5px;}.uagb-block-015f0124.uagb-social-share__outer-wrap{justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;}}@media only screen and (max-width: 767px) {.uagb-block-015f0124.uagb-social-share__layout-vertical .uagb-ss__wrapper{margin-left: 0;margin-right: 0;margin-top: 5px;margin-bottom: 5px;}.uagb-block-015f0124.uagb-social-share__layout-horizontal .uagb-ss__wrapper{margin-left: 5px;margin-right: 5px;}.uagb-block-015f0124.uagb-social-share__outer-wrap{justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: center;-ms-flex-align: center;align-items: center;}}.uagb-cta__outer-wrap .uagb-cta__content,.uagb-cta__outer-wrap a.uagb-cta__block-link span,.uagb-cta__outer-wrap .uagb-cta__content-right .uagb-cta__button-wrapper,.uagb-cta__outer-wrap .uagb-cta-typeof-button,.uagb-cta__outer-wrap .uagb-cta__content-right .uagb-cta__block-link,.uagb-cta__outer-wrap .uagb-cta-with-svg{display:inline-block}.uagb-cta__outer-wrap{display:flex;justify-content:space-between}.wp-block-uagb-call-to-action .uagb-cta__buttons{display:inline-flex}.wp-block-uagb-call-to-action .wp-block-button__link,.wp-block-uagb-call-to-action .ast-outline-button{fill:currentColor;justify-content:center}.uagb-cta__button-link-wrapper,.uagb-cta-second__button{display:inline-flex;align-items:center;word-break:keep-all;width:100%}.uagb-cta__title{padding:0;margin:0;display:block}.uagb-cta__content-right .uagb-cta__button-wrapper{float:right}.uagb-cta__link-wrapper.uagb-cta__block-link-style:empty{display:none}a.uagb-cta__block-link,.entry .entry-content a.uagb-cta__block-link,a.uagb-cta__block-link-wrap,.entry .entry-content a.uagb-cta__block-link-wrap{text-decoration:none}a.uagb-cta__block-link:hover,.entry .entry-content a.uagb-cta__block-link:hover,a.uagb-cta__block-link-wrap:hover,.entry .entry-content a.uagb-cta__block-link-wrap:hover .entry .entry-content a.uagb-cta__block-link:hover{color:inherit}.uagb-cta__content-right{text-align:right;justify-content:flex-end}.uagb-cta__left-right-wrap{width:100%;word-break:break-word}.uagb-cta__icon-position-below-title .uagb-cta__left-right-wrap{display:block;min-width:100%;width:100%}.uagb-cta__icon-position-left .uagb-cta__left-right-wrap,.uagb-cta__icon-position-right .uagb-cta__left-right-wrap{display:flex}.uagb-cta__icon-position-right .uagb-cta__left-right-wrap{justify-content:flex-end}.uagb-cta__block-link-icon-after{margin-left:5px;margin-right:0}.uagb-cta__block-link-icon-before{margin-left:0;margin-right:5px}.uagb-cta__block-link-icon,.uagb-cta__block svg{transition:all 200ms linear}.uagb-cta__block{position:relative}.uagb-cta-typeof-button{line-height:1;text-align:center}.uagb-cta__content-right .uagb-cta__button-link-wrapper,.uagb-cta__content-right .uagb-cta-second__button .uagb-cta__content-right .uagb-cta__block-link,.uagb-cta__content-right.uagb-cta__button-valign-middle .uagb-cta__left-right-wrap{display:flex;align-items:center}.uagb-cta__content-right .uagb-cta__button-link-wrapper,.uagb-cta__content-right .uagb-cta-second__button .uagb-cta__content-right .uagb-cta__block-link{justify-content:center}.uagb-cta__link-wrapper a{box-shadow:none;text-decoration:none}.uagb-cta__block,.uagb-cta__content,.uagb-cta__left-right-wrap{z-index:1}.uagb-cta__block-link{cursor:pointer}.uagb-cta__content-right .uagb-cta__block-link{float:right;padding:10px 14px}a.uagb-cta__block-link-wrap{color:inherit}.uagb-cta__content p:empty{display:none}.uagb-cta__button-type-none .uagb-cta__content{width:100%}.uagb-cta-with-svg{height:14px;width:14px;line-height:14px;vertical-align:middle}.uagb-cta__block svg{display:block;height:inherit;width:inherit}.uagb-cta__button-link-wrapper svg{width:20px;height:20px}.uagb-cta__align-button-after{margin-left:5px}.uagb-cta__align-button-before{margin-right:5px}.uagb-cta__block-link i{font-style:normal}a.uagb-cta__link-to-all{position:absolute;top:0;left:0;width:100%;height:100%;z-index:11}.wp-block-uagb-call-to-action{position:relative}.wp-block-uagb-call-to-action a.uagb-cta__link-to-all{position:absolute;top:0;left:0;width:100%;height:100%;z-index:11}@media only screen and (max-width: 976px){.uagb-cta__content-stacked-tablet,.uagb-cta__content-stacked-tablet .uagb-cta__left-right-wrap{flex-direction:column;text-align:center}.uagb-cta__content-stacked-tablet.uagb-cta__content-right .uagb-cta__button-wrapper{float:none;margin:0 auto}.uagb-cta__content-stacked-tablet .uagb-cta__left-right-wrap .uagb-cta__content{margin-left:0;margin-right:0}.uagb-cta__content-stacked-tablet.uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__content,.uagb-cta__content-stacked-tablet.uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__link-wrapper{width:100% !important}}@media screen and (max-width: 767px){.uagb-cta__content-stacked-mobile,.uagb-cta__content-stacked-mobile .uagb-cta__left-right-wrap{flex-direction:column;text-align:center}.uagb-cta__content-stacked-mobile.uagb-cta__content-right .uagb-cta__button-wrapper{float:none;margin:0 auto}.uagb-cta__content-stacked-mobile .uagb-cta__left-right-wrap .uagb-cta__content{margin-left:0;margin-right:0}.uagb-cta__content-stacked-mobile.uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__content,.uagb-cta__content-stacked-mobile.uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__link-wrapper{width:100% !important}}.uagb-cta__desc p:last-child{margin-bottom:0}\n#uagb-cta-block-.wp-block-uagb-call-to-action .uagb-cta__title{margin-bottom: 10px;}#uagb-cta-block-.wp-block-uagb-call-to-action .uagb-cta__desc{margin-bottom: 10px;}#uagb-cta-block- .uagb-cta__align-button-after{margin-left: 10px;}#uagb-cta-block- .uagb-cta__align-button-before{margin-right: 10px;}#uagb-cta-block-.wp-block-uagb-call-to-action a.uagb-cta__button-link-wrapper > svg{margin-left: 10px;}#uagb-cta-block-.wp-block-uagb-call-to-action a.uagb-cta-second__button > svg{margin-left: 10px;font-size: 14px;width: 14px;height: 14px;line-height: 14px;}#uagb-cta-block- .uagb-cta__content-wrap{text-align: left;}#uagb-cta-block- .uagb-cta__wrap{width: 70%;text-align: left;}#uagb-cta-block-.wp-block-uagb-call-to-action{text-align: left;}#uagb-cta-block- .uagb-cta__left-right-wrap .uagb-cta__content{margin-left: 0px;}#uagb-cta-block- .uagb-cta__buttons{column-gap: 15px;}#uagb-cta-block-.wp-block-uagb-call-to-action {display: flex;justify-content: space-between;}#uagb-cta-block- .uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__content{width: 70%;}#uagb-cta-block- .uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__link-wrapper{width: 30%;}#uagb-cta-block-.wp-block-uagb-call-to-action a.uagb-cta__button-link-wrapper {align-self: center;height: fit-content;margin-left: auto;}#uagb-cta-block-.wp-block-uagb-call-to-action  {flex-direction: row;align-items: center;}#uagb-cta-block-.wp-block-uagb-call-to-action.wp-block-button a.uagb-cta-second__button{align-self: center;height: fit-content;}#uagb-cta-block-.wp-block-uagb-call-to-action.wp-block-button a.uagb-cta-second__button:hover{background-color: !important;}#uagb-cta-block-.wp-block-uagb-call-to-action.wp-block-button a.uagb-cta-second__button:focus{background-color: !important;}#uagb-cta-block- .uagb-cta__button-wrapper a.uagb-cta-typeof-button{color: #333;border-style: solid;}#uagb-cta-block-.wp-block-uagb-call-to-action.wp-block-button .uagb-cta__buttons a.uagb-cta__button-link-wrapper.wp-block-button__link{border-style: solid;}#uagb-cta-block-.wp-block-uagb-call-to-action a.uagb-cta-second__button{text-transform: normal;text-decoration: none;font-size: 14px;}@media only screen and (max-width: 976px) {#uagb-cta-block-.wp-block-uagb-call-to-action.uagb-cta__content-stacked-tablet {display: inherit;}#uagb-cta-block-.uagb-cta__content-stacked-tablet .uagb-cta__wrap{width: 100%;}#uagb-cta-block- .uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__link-wrapper{width: 30%;}#uagb-cta-block- .uagb-cta__wrap{text-align: center;}#uagb-cta-block-.wp-block-uagb-call-to-action {flex-direction: column;align-items: center;}}@media only screen and (max-width: 767px) {#uagb-cta-block-.wp-block-uagb-call-to-action.uagb-cta__content-stacked-mobile {display: inherit;}#uagb-cta-block-.uagb-cta__content-stacked-mobile .uagb-cta__wrap{width: 100%;}#uagb-cta-block- .uagb-cta__buttons{justify-content: center;}#uagb-cta-block- .uagb-cta__content-right .uagb-cta__left-right-wrap .uagb-cta__link-wrapper{width: 30%;}#uagb-cta-block- .uagb-cta__wrap{text-align: center;}#uagb-cta-block-.wp-block-uagb-call-to-action {flex-direction: column;align-items: center;}}.uagb-icon-list__wrap{display:flex;align-items:flex-start;justify-content:flex-start}.wp-block-uagb-icon-list-child{padding:0;transition:all 0.2s;display:inline-flex;color:#3a3a3a;align-items:center;text-decoration:none;box-shadow:none}.wp-block-uagb-icon-list-child span.uagb-icon-list__source-wrap{display:block;align-items:center}.uagb-icon-list__source-wrap svg{display:block}.uagb-icon-list__source-image{width:40px}.uagb-icon-list__outer-wrap .uagb-icon-list__content-wrap{color:#3a3a3a;display:flex;align-items:center}\n.wp-block-uagb-icon-list-child{position:relative}.wp-block-uagb-icon-list-child>a{position:absolute;top:0;left:0;width:100%;height:100%}img.uagb-icon-list__source-image{max-width:unset}.wp-block-uagb-icon-list-child .uagb-icon-list__label{word-break:break-word}\n.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{padding: 0px;border-radius: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__label{text-decoration: !important;line-height: em;}.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: flex-start;-ms-flex-align: flex-start;align-items: flex-start;}.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__label{text-align: left;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child{text-decoration: !important;line-height: em;}.wp-block-uagb-icon-list.uagb-block-f606f41a.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__source-wrap{margin-right: 15px;}.uagb-block-ddf54d80.wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-ddf54d80.wp-block-uagb-icon-list-child:hover .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-b45e4180.wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-b45e4180.wp-block-uagb-icon-list-child:hover .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-6962245c.wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}.uagb-block-6962245c.wp-block-uagb-icon-list-child:hover .uagb-icon-list__source-wrap{background:  !important;border-color:  !important;}@media only screen and (max-width: 976px) {.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap {padding: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: flex-start;-ms-flex-align: flex-start;align-items: flex-start;}.wp-block-uagb-icon-list.uagb-block-f606f41a.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}}@media only screen and (max-width: 767px) {.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__source-image{width: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap svg{width: 16px;height: 16px;font-size: 16px;}.wp-block-uagb-icon-list.uagb-block-f606f41a .wp-block-uagb-icon-list-child .uagb-icon-list__source-wrap{padding: 0px;border-width: 0px;align-self: center;}.wp-block-uagb-icon-list.uagb-block-f606f41a .uagb-icon-list__wrap{display: flex;flex-direction: column;justify-content: center;-webkit-box-pack: center;-ms-flex-pack: center;-webkit-box-align: flex-start;-ms-flex-align: flex-start;align-items: flex-start;}.wp-block-uagb-icon-list.uagb-block-f606f41a.wp-block-uagb-icon-list .wp-block-uagb-icon-list-child{margin-left: 0;margin-right: 0;margin-bottom: 10px;}}.wp-block-uagb-container{display:flex;position:relative;box-sizing:border-box;transition-property:box-shadow;transition-duration:0.2s;transition-timing-function:ease}.wp-block-uagb-container .spectra-container-link-overlay{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10}.wp-block-uagb-container.uagb-is-root-container{margin-left:auto;margin-right:auto}.wp-block-uagb-container.alignfull.uagb-is-root-container .uagb-container-inner-blocks-wrap{display:flex;position:relative;box-sizing:border-box;margin-left:auto !important;margin-right:auto !important}.wp-block-uagb-container .wp-block-uagb-blockquote,.wp-block-uagb-container .wp-block-spectra-pro-login,.wp-block-uagb-container .wp-block-spectra-pro-register{margin:unset}.wp-block-uagb-container .uagb-container__video-wrap{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.wp-block-uagb-container .uagb-container__video-wrap video{max-width:100%;width:100%;height:100%;margin:0;line-height:1;border:none;display:inline-block;vertical-align:baseline;-o-object-fit:cover;object-fit:cover;background-size:cover}.wp-block-uagb-container.uagb-layout-grid{display:grid;width:100%}.wp-block-uagb-container.uagb-layout-grid>.uagb-container-inner-blocks-wrap{display:inherit;width:inherit}.wp-block-uagb-container.uagb-layout-grid>.uagb-container-inner-blocks-wrap>.wp-block-uagb-container{max-width:unset !important;width:unset !important}.wp-block-uagb-container.uagb-layout-grid>.wp-block-uagb-container{max-width:unset !important;width:unset !important}.wp-block-uagb-container.uagb-layout-grid.uagb-is-root-container{margin-left:auto;margin-right:auto}.wp-block-uagb-container.uagb-layout-grid.uagb-is-root-container>.wp-block-uagb-container{max-width:unset !important;width:unset !important}.wp-block-uagb-container.uagb-layout-grid.alignwide.uagb-is-root-container{margin-left:auto;margin-right:auto}.wp-block-uagb-container.uagb-layout-grid.alignfull.uagb-is-root-container .uagb-container-inner-blocks-wrap{display:inherit;position:relative;box-sizing:border-box;margin-left:auto !important;margin-right:auto !important}body .wp-block-uagb-container>.uagb-container-inner-blocks-wrap>*:not(.wp-block-uagb-container):not(.wp-block-uagb-column):not(.wp-block-uagb-container):not(.wp-block-uagb-section):not(.uagb-container__shape):not(.uagb-container__video-wrap):not(.wp-block-spectra-pro-register):not(.wp-block-spectra-pro-login):not(.uagb-slider-container):not(.spectra-image-gallery__control-lightbox):not(.wp-block-uagb-info-box),body .wp-block-uagb-container>.uagb-container-inner-blocks-wrap,body .wp-block-uagb-container>*:not(.wp-block-uagb-container):not(.wp-block-uagb-column):not(.wp-block-uagb-container):not(.wp-block-uagb-section):not(.uagb-container__shape):not(.uagb-container__video-wrap):not(.wp-block-spectra-pro-register):not(.wp-block-spectra-pro-login):not(.uagb-slider-container):not(.spectra-container-link-overlay):not(.spectra-image-gallery__control-lightbox):not(.wp-block-uagb-lottie):not(.uagb-faq__outer-wrap){min-width:unset !important;width:100%;position:relative}body .ast-container .wp-block-uagb-container>.uagb-container-inner-blocks-wrap>.wp-block-uagb-container>ul,body .ast-container .wp-block-uagb-container>.uagb-container-inner-blocks-wrap>.wp-block-uagb-container ol,body .ast-container .wp-block-uagb-container>.uagb-container-inner-blocks-wrap>ul,body .ast-container .wp-block-uagb-container>.uagb-container-inner-blocks-wrap ol{max-width:-webkit-fill-available;margin-block-start:0;margin-block-end:0;margin-left:20px}.ast-plain-container .editor-styles-wrapper .block-editor-block-list__layout.is-root-container .uagb-is-root-container.wp-block-uagb-container.alignwide{margin-left:auto;margin-right:auto}.uagb-container__shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.uagb-container__shape-top{top:-3px}.uagb-container__shape-bottom{bottom:-3px}.uagb-container__shape.uagb-container__invert.uagb-container__shape-bottom,.uagb-container__shape.uagb-container__invert.uagb-container__shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.uagb-container__shape.uagb-container__shape-flip svg{transform:translateX(-50%) rotateY(180deg)}.uagb-container__shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.uagb-container__shape .uagb-container__shape-fill{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}.uagb-container__shape.uagb-container__shape-above-content{z-index:9;pointer-events:none}.nv-single-page-wrap .nv-content-wrap.entry-content .wp-block-uagb-container.alignfull{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}@media only screen and (max-width: 767px){.wp-block-uagb-container .wp-block-uagb-advanced-heading{width:-webkit-fill-available}}.wp-block-uagb-image--align-none{justify-content:center}\n.wp-block-uagb-container.uagb-block-845e6da6 .uagb-container__shape-top svg{width: calc( 100% + 1.3px );}.wp-block-uagb-container.uagb-block-845e6da6 .uagb-container__shape.uagb-container__shape-top .uagb-container__shape-fill{fill: rgba(51,51,51,1);}.wp-block-uagb-container.uagb-block-845e6da6 .uagb-container__shape-bottom svg{width: calc( 100% + 1.3px );}.wp-block-uagb-container.uagb-block-845e6da6 .uagb-container__shape.uagb-container__shape-bottom .uagb-container__shape-fill{fill: rgba(51,51,51,1);}.wp-block-uagb-container.uagb-block-845e6da6 .uagb-container__video-wrap video{opacity: 1;}.wp-block-uagb-container.uagb-is-root-container .uagb-block-845e6da6{max-width: 100%;width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-845e6da6 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 1200px);max-width: var(--inner-content-custom-width);width: 100%;flex-direction: column;align-items: center;justify-content: center;flex-wrap: nowrap;row-gap: 20px;column-gap: 20px;}.wp-block-uagb-container.uagb-block-845e6da6{box-shadow: 0px 0px   #00000070 ;padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;overflow: visible;order: initial;border-color: inherit;row-gap: 20px;column-gap: 20px;}@media only screen and (max-width: 976px) {.wp-block-uagb-container.uagb-is-root-container .uagb-block-845e6da6{width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-845e6da6 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 1024px);max-width: var(--inner-content-custom-width);width: 100%;}.wp-block-uagb-container.uagb-block-845e6da6{padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;order: initial;}}@media only screen and (max-width: 767px) {.wp-block-uagb-container.uagb-is-root-container .uagb-block-845e6da6{max-width: 100%;width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-845e6da6 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 767px);max-width: var(--inner-content-custom-width);width: 100%;flex-wrap: wrap;}.wp-block-uagb-container.uagb-block-845e6da6{padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;order: initial;}}.wp-block-uagb-icon svg{width:30px}.uagb-icon-wrapper .uagb-svg-wrapper{transition:box-shadow 0.2s ease}\n .uagb-block-2b67c985.uagb-icon-wrapper{text-align: center;} .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper a{display: contents;} .uagb-block-2b67c985.uagb-icon-wrapper svg{width: 40px;height: 40px;transform: rotate(0deg);box-sizing: content-box;fill: #333;filter: drop-shadow( 0px 0px 0px #00000070 );} .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;padding-top: 5px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;border-style: default;box-shadow: 0px 0px 0 #00000070 ;} .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper:hover{box-shadow: 0px 0px 0 #00000070 ;} .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper:focus-visible{box-shadow: 0px 0px 0 #00000070 ;}@media only screen and (max-width: 976px) { .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;}}@media only screen and (max-width: 767px) { .uagb-block-2b67c985.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;}} .uagb-block-3c223d05.uagb-icon-wrapper{text-align: center;} .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper a{display: contents;} .uagb-block-3c223d05.uagb-icon-wrapper svg{width: 40px;height: 40px;transform: rotate(0deg);box-sizing: content-box;fill: #333;filter: drop-shadow( 0px 0px 0px #00000070 );} .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;padding-top: 5px;padding-right: 5px;padding-bottom: 5px;padding-left: 5px;border-style: default;box-shadow: 0px 0px 0 #00000070 ;} .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper:hover{box-shadow: 0px 0px 0 #00000070 ;} .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper:focus-visible{box-shadow: 0px 0px 0 #00000070 ;}@media only screen and (max-width: 976px) { .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;}}@media only screen and (max-width: 767px) { .uagb-block-3c223d05.uagb-icon-wrapper .uagb-svg-wrapper{display: inline-flex;}}.wp-block-uagb-container.uagb-block-e5b2e3b1 .uagb-container__shape-top svg{width: calc( 100% + 1.3px );}.wp-block-uagb-container.uagb-block-e5b2e3b1 .uagb-container__shape.uagb-container__shape-top .uagb-container__shape-fill{fill: rgba(51,51,51,1);}.wp-block-uagb-container.uagb-block-e5b2e3b1 .uagb-container__shape-bottom svg{width: calc( 100% + 1.3px );}.wp-block-uagb-container.uagb-block-e5b2e3b1 .uagb-container__shape.uagb-container__shape-bottom .uagb-container__shape-fill{fill: rgba(51,51,51,1);}.wp-block-uagb-container.uagb-block-e5b2e3b1 .uagb-container__video-wrap video{opacity: 1;}.wp-block-uagb-container.uagb-is-root-container .uagb-block-e5b2e3b1{max-width: 100%;width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-e5b2e3b1 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 1200px);max-width: var(--inner-content-custom-width);width: 100%;flex-direction: column;align-items: center;justify-content: center;flex-wrap: nowrap;row-gap: 20px;column-gap: 20px;}.wp-block-uagb-container.uagb-block-e5b2e3b1{box-shadow: 0px 0px   #00000070 ;padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;overflow: visible;order: initial;border-color: inherit;row-gap: 20px;column-gap: 20px;}@media only screen and (max-width: 976px) {.wp-block-uagb-container.uagb-is-root-container .uagb-block-e5b2e3b1{width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-e5b2e3b1 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 1024px);max-width: var(--inner-content-custom-width);width: 100%;}.wp-block-uagb-container.uagb-block-e5b2e3b1{padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;order: initial;}}@media only screen and (max-width: 767px) {.wp-block-uagb-container.uagb-is-root-container .uagb-block-e5b2e3b1{max-width: 100%;width: 100%;}.wp-block-uagb-container.uagb-is-root-container.alignfull.uagb-block-e5b2e3b1 > .uagb-container-inner-blocks-wrap{--inner-content-custom-width: min( 100%, 767px);max-width: var(--inner-content-custom-width);width: 100%;flex-wrap: wrap;}.wp-block-uagb-container.uagb-block-e5b2e3b1{padding-top: 10px;padding-bottom: 10px;padding-left: 10px;padding-right: 10px;margin-top:  !important;margin-bottom:  !important;order: initial;}}\";s:2:\"js\";s:2038:\"document.addEventListener(\"DOMContentLoaded\", function(){ var ssLinksParent = document.querySelector( '.uagb-block-015f0124' );\nssLinksParent?.addEventListener( 'keyup', function ( e ) {\nvar link = e.target.closest( '.uagb-ss__link' );\nif ( link && e.keyCode === 13 ) {\n\thandleSocialLinkClick( link );\n}\n});\n\nssLinksParent?.addEventListener( 'click', function ( e ) {\nvar link = e.target.closest( '.uagb-ss__link' );\nif ( link ) {\n\thandleSocialLinkClick( link );\n}\n});\n\nfunction handleSocialLinkClick( link ) {\nvar social_url = link.dataset.href;\nvar target = \"\";\nif ( social_url == \"mailto:?body=\" ) {\n\ttarget = \"_self\";\n}\nvar request_url = \"\";\nif ( social_url.indexOf(\"\/pin\/create\/link\/?url=\") !== -1 ) {\n\trequest_url = social_url + encodeURIComponent( window.location.href ) + \"&media=\" + 'https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed.webp';\n} else {\n\trequest_url = social_url + encodeURIComponent( window.location.href );\n}\nwindow.open( request_url, target );\n}\n\t\t\t\twindow.addEventListener( 'DOMContentLoaded', () => {\n\t\t\t\t\tconst blockScope = document.querySelector( '.uagb-block-2b67c985' );\n\t\t\t\t\tif ( ! blockScope ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst anchorElement = blockScope.querySelector('a');\n\t\t\t\t\tif (!anchorElement) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} \n\n\t\t\t\t\t \n\t\t\t\t\tblockScope.addEventListener('keydown', (event) => {\n\t\t\t\t\t\tif ( 13 === event.keyCode || 32 === event.keyCode ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\tanchorElement.click();\t\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\t\t\t\twindow.addEventListener( 'DOMContentLoaded', () => {\n\t\t\t\t\tconst blockScope = document.querySelector( '.uagb-block-3c223d05' );\n\t\t\t\t\tif ( ! blockScope ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst anchorElement = blockScope.querySelector('a');\n\t\t\t\t\tif (!anchorElement) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} \n\n\t\t\t\t\t \n\t\t\t\t\tblockScope.addEventListener('keydown', (event) => {\n\t\t\t\t\t\tif ( 13 === event.keyCode || 32 === event.keyCode ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\tanchorElement.click();\t\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t });\";s:18:\"current_block_list\";a:19:{i:0;s:11:\"core\/search\";i:1;s:10:\"core\/group\";i:2;s:12:\"core\/heading\";i:3;s:17:\"core\/latest-posts\";i:4;s:20:\"core\/latest-comments\";i:5;s:13:\"core\/archives\";i:6;s:15:\"core\/categories\";i:7;s:10:\"core\/image\";i:8;s:14:\"core\/paragraph\";i:9;s:10:\"core\/embed\";i:10;s:17:\"uagb\/social-share\";i:11;s:23:\"uagb\/social-share-child\";i:12;s:19:\"uagb\/call-to-action\";i:13;s:14:\"uagb\/icon-list\";i:14;s:20:\"uagb\/icon-list-child\";i:15;s:14:\"uagb\/container\";i:16;s:9:\"uagb\/icon\";i:17;s:17:\"core\/social-links\";i:18;s:16:\"core\/social-link\";}s:8:\"uag_flag\";b:1;s:11:\"uag_version\";s:10:\"1776063796\";s:6:\"gfonts\";a:0:{}s:10:\"gfonts_url\";s:0:\"\";s:12:\"gfonts_files\";a:0:{}s:14:\"uag_faq_layout\";b:0;}"],"_elementor_controls_usage":["a:3:{s:11:\"text-editor\";a:3:{s:5:\"count\";i:3;s:15:\"control_percent\";i:1;s:8:\"controls\";a:2:{s:7:\"content\";a:1:{s:14:\"section_editor\";a:1:{s:6:\"editor\";i:3;}}s:8:\"advanced\";a:1:{s:26:\"display_conditions_section\";a:1:{s:22:\"display_condition_list\";i:3;}}}}s:14:\"code-highlight\";a:3:{s:5:\"count\";i:2;s:15:\"control_percent\";i:1;s:8:\"controls\";a:2:{s:7:\"content\";a:1:{s:15:\"section_content\";a:2:{s:8:\"language\";i:2;s:4:\"code\";i:2;}}s:8:\"advanced\";a:1:{s:26:\"display_conditions_section\";a:1:{s:22:\"display_condition_list\";i:2;}}}}s:9:\"container\";a:3:{s:5:\"count\";i:1;s:15:\"control_percent\";i:0;s:8:\"controls\";a:1:{s:8:\"advanced\";a:1:{s:26:\"display_conditions_section\";a:1:{s:22:\"display_condition_list\";i:1;}}}}}"],"_elementor_page_assets":["a:2:{s:7:\"scripts\";a:7:{i:0;s:18:\"elementor-frontend\";i:1;s:12:\"prismjs_core\";i:2;s:14:\"prismjs_loader\";i:3;s:17:\"prismjs_normalize\";i:4;s:17:\"highlight_handler\";i:5;s:20:\"prismjs_line_numbers\";i:6;s:25:\"prismjs_copy_to_clipboard\";}s:6:\"styles\";a:1:{i:0;s:21:\"widget-code-highlight\";}}"],"_elementor_css":["a:6:{s:4:\"time\";i:1775559886;s:5:\"fonts\";a:0:{}s:5:\"icons\";a:0:{}s:20:\"dynamic_elements_ids\";a:0:{}s:6:\"status\";s:4:\"file\";i:0;s:0:\"\";}"],"_elementor_element_cache":["{\"timeout\":1776477036,\"value\":{\"content\":\"<div class=\\\"elementor-element elementor-element-733c0b06 e-flex e-con-boxed e-con e-parent\\\" data-id=\\\"733c0b06\\\" data-element_type=\\\"container\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"e-con-inner\\\">\\n\\t\\t[elementor-element k=\\\"0e46bd9387093ca73b9000e38f18cce4\\\" data=\\\"eyJpZCI6IjYyNjk4NDZkIiwiZWxUeXBlIjoid2lkZ2V0Iiwic2V0dGluZ3MiOnsiZWRpdG9yIjoiPHAgZGF0YS1zdGFydD1cIjQ5XCIgZGF0YS1lbmQ9XCI0NjFcIj5UaGVyZSBhcmUgbm8gZ3JlYXQgaW5kaXZpZHVhbHMsIG9ubHkgZ3JlYXQgdGVhbXMuIFdpdGggdGhlIHRlYW0gd29ya2luZyB0b2dldGhlciwgdGhlIGZpcnN0LXN0YWdlIFBDQiBDQU0gYXV0b21hdGlvbiBwcm9qZWN0IGZvciA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIxNzhcIiBkYXRhLWVuZD1cIjE5NFwiPm5ldCBoYW5kbGluZzxcL3N0cm9uZz4gYW5kIDxzdHJvbmcgZGF0YS1zdGFydD1cIjE5OVwiIGRhdGEtZW5kPVwiMjE3XCI+ZHJpbGwgaGFuZGxpbmc8XC9zdHJvbmc+IGlzIGRvbmUuIE5leHQsIHdlIGNhbiBtb3ZlIG9uIHRvIHRoZSBQQ0IgcnVsZXMgZW5naW5lLiBIZXJlIEkgdGFsayBhYm91dCBkcmlsbCBjb21wZW5zYXRpb24gaW4gUENCIGVuZ2luZWVyaW5nLiBBcyBhIFBDQiBlbmdpbmVlcmluZyBkZXZlbG9wZXIsIHlvdSBzaG91bGQga25vdyB3aGF0IGl0IGlzIGFuZCB3aHkgaXQgd29ya3MuIEkgc2hhcmUgdGhlIGtleSBwb2ludHMgYWJvdXQgZHJpbGwgY29tcGVuc2F0aW9uIGJlbG93LjxcL3A+XG48aHIgZGF0YS1zdGFydD1cIjQ2M1wiIGRhdGEtZW5kPVwiNDY2XCIgXC8+XG48aDIgZGF0YS1zdGFydD1cIjQ2OFwiIGRhdGEtZW5kPVwiNTA3XCI+MS4gV2h5IGRvIHdlIGNvbXBlbnNhdGUgZHJpbGwgc2l6ZXM\\\/PFwvaDI+XG48cCBkYXRhLXN0YXJ0PVwiNTA5XCIgZGF0YS1lbmQ9XCI4NzBcIj5UaGUgaG9sZSBzaXplcyBpbiB0aGUgUENCIGZpbGVzIHRoZSBjdXN0b21lciBnaXZlcyB1c3VhbGx5IG1lYW4gdGhlIDxlbSBkYXRhLXN0YXJ0PVwiNTc3XCIgZGF0YS1lbmQ9XCI1ODRcIj5maW5hbDxcL2VtPiBob2xlIHNpemUuIER1cmluZyBQQ0IgcHJvZHVjdGlvbiwgY29wcGVyIGlzIHBsYXRlZCBpbnNpZGUgdGhlIGhvbGVzIChvciB0aGUgaG9sZXMgZ2V0IGEgc3VyZmFjZSBmaW5pc2ggc3VjaCBhcyBIQVNMLCBFTklHLCBPU1AsIGV0Yy4pLiBUaGlzIG1ha2VzIHRoZSBob2xlIHNtYWxsZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZmluYWwgaG9sZSBzaXplIG1lZXRzIHRoZSByZXF1aXJlbWVudCwgdGhlIENBTSBzdGVwIGNvcnJlY3RzIHRoZSBkcmlsbCBzaXplLiBUaGlzIGlzIGRyaWxsIGNvbXBlbnNhdGlvbi48XC9wPlxuPHAgZGF0YS1zdGFydD1cIjg3MlwiIGRhdGEtZW5kPVwiMTE3MVwiPjxzdHJvbmcgZGF0YS1zdGFydD1cIjg3MlwiIGRhdGEtZW5kPVwiODg5XCI+UmVhbCBleGFtcGxlOjxcL3N0cm9uZz48YnIgZGF0YS1zdGFydD1cIjg4OVwiIGRhdGEtZW5kPVwiODkyXCIgXC8+RmluYWwgaG9sZSBzaXplOiA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI5MDlcIiBkYXRhLWVuZD1cIjkyMFwiPjEuMDAgbW08XC9zdHJvbmc+LiBTdXJmYWNlIGZpbmlzaDogPHN0cm9uZyBkYXRhLXN0YXJ0PVwiOTM4XCIgZGF0YS1lbmQ9XCI5NDZcIj5FTklHPFwvc3Ryb25nPiAobmlja2VsIHRoaWNrbmVzcyAyLjU0IFx1MDBiNW0sIGdvbGQgdGhpY2tuZXNzIDAuMDI1NCBcdTAwYjVtKS4gRm9sbG93IElQQyBDbGFzcyBJSSBhbmQgdGhlIGF2ZXJhZ2UgcGxhdGVkIGNvcHBlciB0aGlja25lc3MgaXMgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTA2NFwiIGRhdGEtZW5kPVwiMTA3M1wiPjIwIFx1MDBiNW08XC9zdHJvbmc+LiBJZiB3ZSB1c2UgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTA4NVwiIGRhdGEtZW5kPVwiMTA5NlwiPjAuMTAgbW08XC9zdHJvbmc+IGFzIHRoZSBjb21wZW5zYXRpb24gdmFsdWUsIHRoZSBDQU0gdGVhbSB3aWxsIHBpY2sgYSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIxMTQ5XCIgZGF0YS1lbmQ9XCIxMTYwXCI+MS4xMCBtbTxcL3N0cm9uZz4gZHJpbGwgYml0LjxcL3A+XG48cCBkYXRhLXN0YXJ0PVwiODcyXCIgZGF0YS1lbmQ9XCIxMTcxXCI+PGltZyBjbGFzcz1cImFsaWdubm9uZSBzaXplLWZ1bGwgd3AtaW1hZ2UtNDU3OFwiIHNyYz1cImh0dHBzOlwvXC9mbGotcGNiLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNVwvMTJcL1JlYWwtZXhhbXBsZS53ZWJwXCIgYWx0PVwiUmVhbCBleGFtcGxlXCIgd2lkdGg9XCIzMzZcIiBoZWlnaHQ9XCIyOTdcIiBcLz48XC9wPlxuPGhyIGRhdGEtc3RhcnQ9XCIxMTczXCIgZGF0YS1lbmQ9XCIxMTc2XCIgXC8+XG48aDIgZGF0YS1zdGFydD1cIjExNzhcIiBkYXRhLWVuZD1cIjEyMTZcIj4yLiBIb3cgZG8gd2UgZG8gZHJpbGwgY29tcGVuc2F0aW9uPzxcL2gyPlxuPHAgZGF0YS1zdGFydD1cIjEyMThcIiBkYXRhLWVuZD1cIjE0NDVcIj5GaXJzdCwgYmUgY2xlYXIgYWJvdXQgdGhlIHRocmVlIGtleSBwYXJhbWV0ZXJzIGZvciBkcmlsbCBjb21wZW5zYXRpb246PGJyIGRhdGEtc3RhcnQ9XCIxMjg4XCIgZGF0YS1lbmQ9XCIxMjkxXCIgXC8+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTI5MVwiIGRhdGEtZW5kPVwiMTI5OFwiPigxKTxcL3N0cm9uZz4gRHJpbGwgYml0IGluY3JlbWVudCw8YnIgZGF0YS1zdGFydD1cIjEzMTlcIiBkYXRhLWVuZD1cIjEzMjJcIiBcLz48c3Ryb25nIGRhdGEtc3RhcnQ9XCIxMzIyXCIgZGF0YS1lbmQ9XCIxMzI5XCI+KDIpPFwvc3Ryb25nPiBDb21wZW5zYXRpb24gdmFsdWUsPGJyIGRhdGEtc3RhcnQ9XCIxMzQ5XCIgZGF0YS1lbmQ9XCIxMzUyXCIgXC8+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTM1MlwiIGRhdGEtZW5kPVwiMTM1OVwiPigzKTxcL3N0cm9uZz4gU3RlcC11cCB0aHJlc2hvbGQgKGFkdmFuY2UgdmFsdWUpLjxiciBkYXRhLXN0YXJ0PVwiMTM5NFwiIGRhdGEtZW5kPVwiMTM5N1wiIFwvPlRoZXNlIHRocmVlIGRldGVybWluZSBob3cgdG8gYXBwbHkgY29tcGVuc2F0aW9uLjxcL3A+XG48aDMgZGF0YS1zdGFydD1cIjE0NDdcIiBkYXRhLWVuZD1cIjE0NzVcIj4xKSBEcmlsbCBiaXQgaW5jcmVtZW50PFwvaDM+XG48cCBkYXRhLXN0YXJ0PVwiMTQ3NlwiIGRhdGEtZW5kPVwiMTc3M1wiPlRoaXMgZGVwZW5kcyBvbiB0aGUgZHJpbGwgYml0cyB0aGUgY29tcGFueSBidXlzLiBUaGUgaW5kdXN0cnkgY29tbW9uIGluY3JlbWVudCBpcyA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIxNTU4XCIgZGF0YS1lbmQ9XCIxNTY3XCI+NTAgXHUwMGI1bTxcL3N0cm9uZz4uIFR5cGljYWwgZHJpbGwgc2l6ZXMgcmFuZ2UgZnJvbSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIxNjAwXCIgZGF0YS1lbmQ9XCIxNjExXCI+MC4xMCBtbTxcL3N0cm9uZz4gdG8gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTYxNVwiIGRhdGEtZW5kPVwiMTYyNlwiPjYuMzUgbW08XC9zdHJvbmc+LiBUaGUgdXN1YWwgc21hbGxlc3Qgc3RlcCBiZXR3ZWVuIGRyaWxsIGJpdHMgaXMgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTY3NFwiIGRhdGEtZW5kPVwiMTY4NVwiPjAuMDUgbW08XC9zdHJvbmc+LiBTbyB0aGUgZHJpbGwgbGlicmFyeSBoYXMgc2l6ZXMgbGlrZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIxNzIzXCIgZGF0YS1lbmQ9XCIxNzYxXCI+MC4xMCBtbSwgMC4xNSBtbSwgMC4yMCBtbSwgMC4yNSBtbTxcL3N0cm9uZz4sIGFuZCBzbyBvbi48XC9wPlxuPGgzIGRhdGEtc3RhcnQ9XCIxNzc1XCIgZGF0YS1lbmQ9XCIxODAyXCI+MikgQ29tcGVuc2F0aW9uIHZhbHVlPFwvaDM+XG48cCBkYXRhLXN0YXJ0PVwiMTgwM1wiIGRhdGEtZW5kPVwiMTk1MlwiPlRoZSBwcm9jZXNzIHRlYW0gc2V0cyB0aGUgY29tcGVuc2F0aW9uIHJ1bGVzIGJhc2VkIG9uIGZhY3RvcnkgdGVzdCByZXN1bHRzLiBDb21wZW5zYXRpb24gdmFsdWVzIGRvIG5vdCB2YXJ5IG11Y2ggYWNyb3NzIHRoZSBpbmR1c3RyeS4gQ29tbW9uIHJ1bGVzOjxcL3A+XG48dWwgZGF0YS1zdGFydD1cIjE5NTNcIiBkYXRhLWVuZD1cIjIwOThcIj5cbjxsaSBkYXRhLXN0YXJ0PVwiMTk1M1wiIGRhdGEtZW5kPVwiMjAxNFwiPlxuPHAgZGF0YS1zdGFydD1cIjE5NTVcIiBkYXRhLWVuZD1cIjIwMTRcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCIxOTU1XCIgZGF0YS1lbmQ9XCIxOTc1XCI+Qm9hcmRzIHdpdGggSEFTTDxcL3N0cm9uZz4gKHNwcmF5IHRpbik6IDxzdHJvbmcgZGF0YS1zdGFydD1cIjE5ODlcIiBkYXRhLWVuZD1cIjIwMTFcIj5jb21wZW5zYXRlIDAuMTUgbW08XC9zdHJvbmc+LjxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiMjAxNVwiIGRhdGEtZW5kPVwiMjA5OFwiPlxuPHAgZGF0YS1zdGFydD1cIjIwMTdcIiBkYXRhLWVuZD1cIjIwOThcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCIyMDE3XCIgZGF0YS1lbmQ9XCIyMDQwXCI+Qm9hcmRzIHdpdGhvdXQgSEFTTDxcL3N0cm9uZz4gKEVOSUcsIGltbWVyc2lvbiB0aW4sIE9TUCwgZXRjLik6IDxzdHJvbmcgZGF0YS1zdGFydD1cIjIwNzVcIiBkYXRhLWVuZD1cIjIwOTdcIj5jb21wZW5zYXRlIDAuMTAgbW08XC9zdHJvbmc+LjxcL3A+XG48XC9saT5cbjxcL3VsPlxuPGgzIGRhdGEtc3RhcnQ9XCIyMTAwXCIgZGF0YS1lbmQ9XCIyMTQyXCI+MykgU3RlcC11cCB0aHJlc2hvbGQgKGFkdmFuY2UgdmFsdWUpPFwvaDM+XG48cCBkYXRhLXN0YXJ0PVwiMjE0M1wiIGRhdGEtZW5kPVwiMjQwM1wiPlRoZSBwcm9jZXNzIHRlYW0gYWxzbyBzZXRzIHRoZSBzdHJhdGVneSBmb3IgcGlja2luZyB0aGUgZHJpbGwgYml0LCBzaW1pbGFyIHRvIGEgcm91bmRpbmcgcnVsZS4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIGluY3JlbWVudCBpcyA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyMjczXCIgZGF0YS1lbmQ9XCIyMjgyXCI+MjAgXHUwMGI1bTxcL3N0cm9uZz4sIGlmIHRoZSByZW1haW5kZXIgYWZ0ZXIgZGl2aWRpbmcgYnkgdGhlIGluY3JlbWVudCBpcyA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyMzM2XCIgZGF0YS1lbmQ9XCIyMzQ3XCI+XHUyMjY1IDIwIFx1MDBiNW08XC9zdHJvbmc+LCB5b3Ugcm91bmQgdXAgNTAgXHUwMGI1bTsgb3RoZXJ3aXNlIHlvdSBrZWVwIHRoZSBsb3dlciBzaXplLjxcL3A+XG48cCBkYXRhLXN0YXJ0PVwiMjQwNVwiIGRhdGEtZW5kPVwiMjczN1wiPjxzdHJvbmcgZGF0YS1zdGFydD1cIjI0MDVcIiBkYXRhLWVuZD1cIjI0MTdcIj5FeGFtcGxlOjxcL3N0cm9uZz48YnIgZGF0YS1zdGFydD1cIjI0MTdcIiBkYXRhLWVuZD1cIjI0MjBcIiBcLz5GaW5hbCBob2xlIHNpemUgPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyNDM4XCIgZGF0YS1lbmQ9XCIyNDUwXCI+MS4wMjUgbW08XC9zdHJvbmc+LCBjb21wZW5zYXRpb24gPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyNDY3XCIgZGF0YS1lbmQ9XCIyNDc4XCI+MC4xMCBtbTxcL3N0cm9uZz4sIHNvIGNvbXBlbnNhdGVkIHNpemUgPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyNTAyXCIgZGF0YS1lbmQ9XCIyNTE0XCI+MS4xMjUgbW08XC9zdHJvbmc+LiBCdXQgdGhlcmUgaXMgbm8gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMjUzMlwiIGRhdGEtZW5kPVwiMjU0NFwiPjEuMTI1IG1tPFwvc3Ryb25nPiBkcmlsbCBpbiB0aGUgbGlicmFyeS4gVXNlIHRoZSBzdGVwLXVwIHJ1bGUuIFRoZSByZW1haW5kZXIgb2YgMS4xMjUgbW0gd2hlbiBjb21wYXJlZCB0byB0aGUgMC4wNSBtbSBzdGVwIGlzIDxzdHJvbmcgZGF0YS1zdGFydD1cIjI2NTJcIiBkYXRhLWVuZD1cIjI2NjFcIj4yNSBcdTAwYjVtPFwvc3Ryb25nPi4gU2luY2UgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMjY2OVwiIGRhdGEtZW5kPVwiMjY4NlwiPjI1IFx1MDBiNW0gJmd0OyAyMCBcdTAwYjVtPFwvc3Ryb25nPiwgcm91bmQgdXAgYnkgNTAgXHUwMGI1bSBhbmQgY2hvb3NlIGEgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMjcxOVwiIGRhdGEtZW5kPVwiMjczMFwiPjEuMTUgbW08XC9zdHJvbmc+IGRyaWxsLjxcL3A+XG48aHIgZGF0YS1zdGFydD1cIjI3MzlcIiBkYXRhLWVuZD1cIjI3NDJcIiBcLz5cbjxoMyBkYXRhLXN0YXJ0PVwiMjc0NFwiIGRhdGEtZW5kPVwiMjc4MlwiPkFjdHVhbCBkcmlsbCBjb21wZW5zYXRpb24gZXhhbXBsZXM8XC9oMz5cbjxwIGRhdGEtc3RhcnQ9XCIyNzg0XCIgZGF0YS1lbmQ9XCIyODUwXCI+QXNzdW1lOiBkcmlsbCBpbmNyZW1lbnQgPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIyODEwXCIgZGF0YS1lbmQ9XCIyODE5XCI+NTAgXHUwMGI1bTxcL3N0cm9uZz4sIHN0ZXAtdXAgdGhyZXNob2xkID0gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMjg0MVwiIGRhdGEtZW5kPVwiMjg1MFwiPjIwIFx1MDBiNW08XC9zdHJvbmc+PFwvcD5cbjxkaXYgY2xhc3M9XCJUeWFnR1dfdGFibGVDb250YWluZXJcIj5cbjxkaXYgY2xhc3M9XCJncm91cCBUeWFnR1dfdGFibGVXcmFwcGVyIGZsZXggdy1maXQgZmxleC1jb2wtcmV2ZXJzZVwiIHRhYmluZGV4PVwiLTFcIj5cbjx0YWJsZSBjbGFzcz1cInctZml0IG1pbi13LSgtLXRocmVhZC1jb250ZW50LXdpZHRoKVwiIGRhdGEtc3RhcnQ9XCIyODUyXCIgZGF0YS1lbmQ9XCIzMDk3XCI+XG48dGhlYWQgZGF0YS1zdGFydD1cIjI4NTJcIiBkYXRhLWVuZD1cIjI5NDdcIj5cbjx0ciBkYXRhLXN0YXJ0PVwiMjg1MlwiIGRhdGEtZW5kPVwiMjk0N1wiPlxuPHRoIGRhdGEtc3RhcnQ9XCIyODUyXCIgZGF0YS1lbmQ9XCIyODY4XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+T3JpZ2luYWwgaG9sZTxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCIyODY4XCIgZGF0YS1lbmQ9XCIyODgzXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+Q29tcGVuc2F0aW9uPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjI4ODNcIiBkYXRhLWVuZD1cIjI5MDRcIiBkYXRhLWNvbC1zaXplPVwic21cIj5BZnRlciBjb21wZW5zYXRpb248XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiMjkwNFwiIGRhdGEtZW5kPVwiMjkxOVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkludGVnZXIgcGFydDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCIyOTE5XCIgZGF0YS1lbmQ9XCIyOTMxXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+UmVtYWluZGVyPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjI5MzFcIiBkYXRhLWVuZD1cIjI5NDdcIiBkYXRhLWNvbC1zaXplPVwic21cIj5EcmlsbCBjaG9zZW48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHkgZGF0YS1zdGFydD1cIjI5ODBcIiBkYXRhLWVuZD1cIjMwOTdcIj5cbjx0ciBkYXRhLXN0YXJ0PVwiMjk4MFwiIGRhdGEtZW5kPVwiMzAzOFwiPlxuPHRkIGRhdGEtc3RhcnQ9XCIyOTgwXCIgZGF0YS1lbmQ9XCIyOTkxXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+MS4wMjUgbW08XC90ZD5cbjx0ZCBkYXRhLXN0YXJ0PVwiMjk5MVwiIGRhdGEtZW5kPVwiMjk5OFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjAuMTA8XC90ZD5cbjx0ZCBkYXRhLXN0YXJ0PVwiMjk5OFwiIGRhdGEtZW5kPVwiMzAwOVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjEuMTI1IG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjMwMDlcIiBkYXRhLWVuZD1cIjMwMTZcIj4xLjEwPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjMwMTZcIiBkYXRhLWVuZD1cIjMwMjdcIj4wLjAyNSBtbTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIzMDI3XCIgZGF0YS1lbmQ9XCIzMDM4XCI+MS4xNSBtbTxcL3RkPlxuPFwvdHI+XG48dHIgZGF0YS1zdGFydD1cIjMwMzlcIiBkYXRhLWVuZD1cIjMwOTdcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiMzAzOVwiIGRhdGEtZW5kPVwiMzA1MFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjEuMDE2IG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjMwNTBcIiBkYXRhLWVuZD1cIjMwNTdcIj4wLjEwPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjMwNTdcIiBkYXRhLWVuZD1cIjMwNjhcIj4xLjExNiBtbTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIzMDY4XCIgZGF0YS1lbmQ9XCIzMDc1XCI+MS4xMDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIzMDc1XCIgZGF0YS1lbmQ9XCIzMDg2XCI+MC4wMTYgbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMzA4NlwiIGRhdGEtZW5kPVwiMzA5N1wiPjEuMTAgbW08XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT5cbjxcL2Rpdj5cbjxcL2Rpdj5cbjxoNCBkYXRhLXN0YXJ0PVwiMzA5OVwiIGRhdGEtZW5kPVwiMzE0MFwiPkhvdyB0byBjb21wdXRlIHRoZSBjaG9zZW4gZHJpbGwgc2l6ZTxcL2g0PlxuPHAgZGF0YS1zdGFydD1cIjMxNDFcIiBkYXRhLWVuZD1cIjMyNDFcIj5CcmVhayB0aGUgY29tcGVuc2F0ZWQgaG9sZSBzaXplIGludG8gYW4gaW50ZWdlciBwYXJ0IGFuZCBhIHJlbWFpbmRlciBwYXJ0IHVzaW5nIHRoZSBkcmlsbCBpbmNyZW1lbnQ6PFwvcD5cbjxwIGRhdGEtc3RhcnQ9XCIzMjQzXCIgZGF0YS1lbmQ9XCIzMzk2XCI+VGFrZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIzMjQ4XCIgZGF0YS1lbmQ9XCIzMjYwXCI+MS4xMjUgbW08XC9zdHJvbmc+IGFzIGFuIGV4YW1wbGU6PGJyIGRhdGEtc3RhcnQ9XCIzMjc1XCIgZGF0YS1lbmQ9XCIzMjc4XCIgXC8+MS4xMjUgXC8gMC4wNSA9IDIyLjUgXHUyMTkyIGZsb29yIHRvIDIyIFx1MjE5MiBpbnRlZ2VyIHBhcnQgPSAyMiBcdTAwZDcgMC4wNSA9IDxzdHJvbmcgZGF0YS1zdGFydD1cIjMzNDFcIiBkYXRhLWVuZD1cIjMzNTJcIj4xLjEwIG1tPFwvc3Ryb25nPi48YnIgZGF0YS1zdGFydD1cIjMzNTNcIiBkYXRhLWVuZD1cIjMzNTZcIiBcLz5SZW1haW5kZXIgPSAxLjEyNSAlIDAuMDUgPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCIzMzgzXCIgZGF0YS1lbmQ9XCIzMzk1XCI+MC4wMjUgbW08XC9zdHJvbmc+LjxcL3A+XG48cCBkYXRhLXN0YXJ0PVwiMzM5OFwiIGRhdGEtZW5kPVwiMzQ3NVwiPlRoZW4gY29tcGFyZSB0aGUgcmVtYWluZGVyIHdpdGggdGhlIHN0ZXAtdXAgdGhyZXNob2xkIChmb3IgZXhhbXBsZSwgMjAgXHUwMGI1bSk6PFwvcD5cbjx1bCBkYXRhLXN0YXJ0PVwiMzQ3NlwiIGRhdGEtZW5kPVwiMzYwN1wiPlxuPGxpIGRhdGEtc3RhcnQ9XCIzNDc2XCIgZGF0YS1lbmQ9XCIzNTQyXCI+XG48cCBkYXRhLXN0YXJ0PVwiMzQ3OFwiIGRhdGEtZW5kPVwiMzU0MlwiPklmIHJlbWFpbmRlciAmZ3Q7IHRocmVzaG9sZCwgZHJpbGwgc2l6ZSA9IGludGVnZXIgcGFydCArIDAuMDUgbW0uPFwvcD5cbjxcL2xpPlxuPGxpIGRhdGEtc3RhcnQ9XCIzNTQzXCIgZGF0YS1lbmQ9XCIzNjA3XCI+XG48cCBkYXRhLXN0YXJ0PVwiMzU0NVwiIGRhdGEtZW5kPVwiMzYwN1wiPklmIHJlbWFpbmRlciBcdTIyNjQgdGhyZXNob2xkLCBkcmlsbCBzaXplID0gaW50ZWdlciBwYXJ0ICsgMC4wMCBtbS48XC9wPlxuPFwvbGk+XG48XC91bD5cbjxociBkYXRhLXN0YXJ0PVwiMzYwOVwiIGRhdGEtZW5kPVwiMzYxMlwiIFwvPlxuPGgzIGRhdGEtc3RhcnQ9XCIzNjE0XCIgZGF0YS1lbmQ9XCIzNjUzXCI+U3VtbWFyeSBhYm91dCB0aGUgc3RlcC11cCB0aHJlc2hvbGQ8XC9oMz5cbjxwIGRhdGEtc3RhcnQ9XCIzNjU0XCIgZGF0YS1lbmQ9XCIzODk3XCI+V2hlbiB0aGUgZHJpbGwgaW5jcmVtZW50IGlzIDxzdHJvbmcgZGF0YS1zdGFydD1cIjM2ODJcIiBkYXRhLWVuZD1cIjM2OTFcIj41MCBcdTAwYjVtPFwvc3Ryb25nPiwgdGhlIHN0ZXAtdXAgdGhyZXNob2xkIGlzIGNyaXRpY2FsLiBJdCBwZXJmb3JtcyBhIHNlY29uZCBjb3JyZWN0aW9uIG9mIHRoZSBjb21wZW5zYXRlZCBkcmlsbCBzaXplLiBJdCBkZWNpZGVzIHdoZXRoZXIgdG8gXHUyMDFjc3RlcCB1cFx1MjAxZCBvciBcdTIwMWNzdGF5Llx1MjAxZCBDaGFuZ2luZyB0aGlzIHRocmVzaG9sZCBkaXJlY3RseSBjaGFuZ2VzIHRoZSBjaG9zZW4gZHJpbGwgc2l6ZS48XC9wPlxuPHAgZGF0YS1zdGFydD1cIjM4OTlcIiBkYXRhLWVuZD1cIjM5NDNcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCIzODk5XCIgZGF0YS1lbmQ9XCIzOTQzXCI+TW9yZSBleGFtcGxlcyAoZHJpbGwgaW5jcmVtZW50ID0gNTAgXHUwMGI1bSk6PFwvc3Ryb25nPjxcL3A+XG48ZGl2IGNsYXNzPVwiVHlhZ0dXX3RhYmxlQ29udGFpbmVyXCI+XG48ZGl2IGNsYXNzPVwiZ3JvdXAgVHlhZ0dXX3RhYmxlV3JhcHBlciBmbGV4IHctZml0IGZsZXgtY29sLXJldmVyc2VcIiB0YWJpbmRleD1cIi0xXCI+XG48dGFibGUgY2xhc3M9XCJ3LWZpdCBtaW4tdy0oLS10aHJlYWQtY29udGVudC13aWR0aClcIiBkYXRhLXN0YXJ0PVwiMzk0NVwiIGRhdGEtZW5kPVwiNDIwOVwiPlxuPHRoZWFkIGRhdGEtc3RhcnQ9XCIzOTQ1XCIgZGF0YS1lbmQ9XCI0MDQxXCI+XG48dHIgZGF0YS1zdGFydD1cIjM5NDVcIiBkYXRhLWVuZD1cIjQwNDFcIj5cbjx0aCBkYXRhLXN0YXJ0PVwiMzk0NVwiIGRhdGEtZW5kPVwiMzk2MVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPk9yaWdpbmFsIGhvbGU8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiMzk2MVwiIGRhdGEtZW5kPVwiMzk3NlwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkNvbXBlbnNhdGlvbjxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCIzOTc2XCIgZGF0YS1lbmQ9XCIzOTkwXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+QWZ0ZXIgY29tcC48XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiMzk5MFwiIGRhdGEtZW5kPVwiNDAwMFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkludGVnZXI8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiNDAwMFwiIGRhdGEtZW5kPVwiNDAxMlwiIGRhdGEtY29sLXNpemU9XCJzbVwiPlJlbWFpbmRlcjxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI0MDEyXCIgZGF0YS1lbmQ9XCI0MDMyXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+U3RlcC11cCB0aHJlc2hvbGQ8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiNDAzMlwiIGRhdGEtZW5kPVwiNDA0MVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkRyaWxsPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5IGRhdGEtc3RhcnQ9XCI0MDc5XCIgZGF0YS1lbmQ9XCI0MjA5XCI+XG48dHIgZGF0YS1zdGFydD1cIjQwNzlcIiBkYXRhLWVuZD1cIjQxNDNcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiNDA3OVwiIGRhdGEtZW5kPVwiNDA5MFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjEuMDIyIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQwOTBcIiBkYXRhLWVuZD1cIjQwOTZcIj4wLjE8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNDA5NlwiIGRhdGEtZW5kPVwiNDEwN1wiPjEuMTIyIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQxMDdcIiBkYXRhLWVuZD1cIjQxMTRcIj4xLjEwPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQxMTRcIiBkYXRhLWVuZD1cIjQxMjVcIj4wLjAyMiBtbTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI0MTI1XCIgZGF0YS1lbmQ9XCI0MTMyXCI+MC4wMjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI0MTMyXCIgZGF0YS1lbmQ9XCI0MTQzXCI+MS4xNSBtbTxcL3RkPlxuPFwvdHI+XG48dHIgZGF0YS1zdGFydD1cIjQxNDRcIiBkYXRhLWVuZD1cIjQyMDlcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiNDE0NFwiIGRhdGEtZW5kPVwiNDE1NVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjEuMDIyIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQxNTVcIiBkYXRhLWVuZD1cIjQxNjFcIj4wLjE8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNDE2MVwiIGRhdGEtZW5kPVwiNDE3MlwiPjEuMTIyIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQxNzJcIiBkYXRhLWVuZD1cIjQxNzlcIj4xLjEwPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjQxNzlcIiBkYXRhLWVuZD1cIjQxOTBcIj4wLjAyMiBtbTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI0MTkwXCIgZGF0YS1lbmQ9XCI0MTk4XCI+MC4wMjU8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNDE5OFwiIGRhdGEtZW5kPVwiNDIwOVwiPjEuMTAgbW08XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT5cbjxcL2Rpdj5cbjxcL2Rpdj5cbjxociBkYXRhLXN0YXJ0PVwiNDIxMVwiIGRhdGEtZW5kPVwiNDIxNFwiIFwvPlxuPGgzIGRhdGEtc3RhcnQ9XCI0MjE2XCIgZGF0YS1lbmQ9XCI0MjY2XCI+UGVyc29uYWwgdmlldyBvbiBzZXR0aW5nIHRoZSBzdGVwLXVwIHRocmVzaG9sZDxcL2gzPlxuPHAgZGF0YS1zdGFydD1cIjQyNjdcIiBkYXRhLWVuZD1cIjQ1NzVcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCI0MjY3XCIgZGF0YS1lbmQ9XCI0Mjg1XCI+UHJvcyBhbmQgY29uczo8XC9zdHJvbmc+IEFmdGVyIGNvbXBlbnNhdGlvbiwgaWYgdGhlIGZpbmFsIGhvbGUgaXMgYSBsaXR0bGUgbGFyZ2VyLCBhdCBsZWFzdCB0aGUgcGFydCBjYW4gYmUgaW5zZXJ0ZWQuIElmIHRoZSBob2xlIGlzIHRvbyBzbWFsbCwgdGhlIHBhcnQgY2Fubm90IGJlIGluc2VydGVkLiBTbyB3ZSB1c3VhbGx5IHNldCB0aGUgc3RlcC11cCB0aHJlc2hvbGQgdG8gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNDQ3N1wiIGRhdGEtZW5kPVwiNDQ4NlwiPjIwIFx1MDBiNW08XC9zdHJvbmc+IGluc3RlYWQgb2YgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNDQ5OFwiIGRhdGEtZW5kPVwiNDUwN1wiPjI1IFx1MDBiNW08XC9zdHJvbmc+LiBUaGUgZXhhY3QgY2hvaWNlIHNob3VsZCBtYXRjaCBlYWNoIHByb2Nlc3MgYW5kIGNvbXBlbnNhdGlvbiB2YWx1ZS48XC9wPlxuPHAgZGF0YS1zdGFydD1cIjQ1NzdcIiBkYXRhLWVuZD1cIjQ4NjJcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCI0NTc3XCIgZGF0YS1lbmQ9XCI0NjE0XCI+Q29tYmluZWQgd2l0aCBjb21wZW5zYXRpb24gdmFsdWU6PFwvc3Ryb25nPiBGb3IgYm9hcmRzIHdpdGggSEFTTCB3aGVyZSBjb21wZW5zYXRpb24gaXMgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNDY1OFwiIGRhdGEtZW5kPVwiNDY2OVwiPjAuMTUgbW08XC9zdHJvbmc+LCB5b3UgYWxyZWFkeSBcdTIwMWNvdmVyLWNvbXBlbnNhdGVcdTIwMWQgYSBiaXQgYW5kIHRoZSBmaW5hbCBob2xlcyB0ZW5kIHRvIGJlIHNsaWdodGx5IGxhcmdlLiBJbiB0aGF0IGNhc2UsIGEgc3RlcC11cCB0aHJlc2hvbGQgb2YgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNDc5MVwiIGRhdGEtZW5kPVwiNDgwMFwiPjI1IFx1MDBiNW08XC9zdHJvbmc+IGNhbiBhbHNvIHdvcmsuIFVzZSB0aGUgXHUyMDFjbmVhcmVzdFx1MjAxZCBydWxlIHdoZW4gcGlja2luZyB0aGUgZHJpbGwuPFwvcD5cbjxociBkYXRhLXN0YXJ0PVwiNDg2NFwiIGRhdGEtZW5kPVwiNDg2N1wiIFwvPlxuPGgyIGRhdGEtc3RhcnQ9XCI0ODY5XCIgZGF0YS1lbmQ9XCI0OTQzXCI+My4gSG93IHRvIGVuc3VyZSBmaW5hbCBob2xlIHNpemUgbWVldHMgcmVxdWlyZW1lbnRzIGFmdGVyIGNvbXBlbnNhdGlvbj88XC9oMj5cbjxoMyBkYXRhLXN0YXJ0PVwiNDk0NVwiIGRhdGEtZW5kPVwiNDk4M1wiPk1ldGhvZCAxOiBCdXkgc3BlY2lhbCBkcmlsbCBiaXRzPFwvaDM+XG48cCBkYXRhLXN0YXJ0PVwiNDk4NFwiIGRhdGEtZW5kPVwiNTIwN1wiPlN0YW5kYXJkIGRyaWxsIGluY3JlbWVudCBpcyA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI1MDEyXCIgZGF0YS1lbmQ9XCI1MDIxXCI+NTAgXHUwMGI1bTxcL3N0cm9uZz4gKDAuMDUgbW0gc3RlcHMgbGlrZSAxLjAwLCAxLjA1LCAxLjEwLCAxLjE1IG1tKS4gV2l0aCBhIFBUSCB0b2xlcmFuY2Ugb2YgXHUwMGIxMyBtaWwsIGEgNTAgXHUwMGI1bSBkcmlsbCBzZXQgY2FuIGNvdmVyIHRoZSB0b2xlcmFuY2UuIElmIHRoZSB0b2xlcmFuY2UgaXMgc21hbGxlciB0aGFuIHRoYXQsIHVzZSBzcGVjaWFsIGRyaWxsIGJpdHMuPFwvcD5cbjxwIGRhdGEtc3RhcnQ9XCI1MjA5XCIgZGF0YS1lbmQ9XCI1MzUyXCI+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiNTIwOVwiIGRhdGEtZW5kPVwiNTIyMlwiPkV4YW1wbGUgMTxcL3N0cm9uZz4gXHUyMDE0IENvbXBhcmUgNTAgXHUwMGI1bSB2cyAyNSBcdTAwYjVtIGluY3JlbWVudHM6PGJyIGRhdGEtc3RhcnQ9XCI1MjU5XCIgZGF0YS1lbmQ9XCI1MjYyXCIgXC8+T3JpZ2luYWwgaG9sZSA9IDxzdHJvbmcgZGF0YS1zdGFydD1cIjUyNzhcIiBkYXRhLWVuZD1cIjUyOTBcIj4wLjkyMiBtbTxcL3N0cm9uZz4sIGNvbXBlbnNhdGlvbiA9IDxzdHJvbmcgZGF0YS1zdGFydD1cIjUzMDdcIiBkYXRhLWVuZD1cIjUzMThcIj4wLjEwIG1tPFwvc3Ryb25nPiwgY29tcGVuc2F0ZWQgc2l6ZSA9IDxzdHJvbmcgZGF0YS1zdGFydD1cIjUzMzlcIiBkYXRhLWVuZD1cIjUzNTFcIj4xLjAyMiBtbTxcL3N0cm9uZz4uPFwvcD5cbjxkaXYgY2xhc3M9XCJUeWFnR1dfdGFibGVDb250YWluZXJcIj5cbjxkaXYgY2xhc3M9XCJncm91cCBUeWFnR1dfdGFibGVXcmFwcGVyIGZsZXggdy1maXQgZmxleC1jb2wtcmV2ZXJzZVwiIHRhYmluZGV4PVwiLTFcIj5cbjx0YWJsZSBjbGFzcz1cInctZml0IG1pbi13LSgtLXRocmVhZC1jb250ZW50LXdpZHRoKVwiIGRhdGEtc3RhcnQ9XCI1MzU0XCIgZGF0YS1lbmQ9XCI1NTQ1XCI+XG48dGhlYWQgZGF0YS1zdGFydD1cIjUzNTRcIiBkYXRhLWVuZD1cIjU0MjJcIj5cbjx0ciBkYXRhLXN0YXJ0PVwiNTM1NFwiIGRhdGEtZW5kPVwiNTQyMlwiPlxuPHRoIGRhdGEtc3RhcnQ9XCI1MzU0XCIgZGF0YS1lbmQ9XCI1MzY1XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+T3JpZ2luYWw8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiNTM2NVwiIGRhdGEtZW5kPVwiNTM4MFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkNvbXBlbnNhdGlvbjxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI1MzgwXCIgZGF0YS1lbmQ9XCI1Mzk0XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+Q29tcGVuc2F0ZWQ8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiNTM5NFwiIGRhdGEtZW5kPVwiNTQwNlwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkluY3JlbWVudDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI1NDA2XCIgZGF0YS1lbmQ9XCI1NDIyXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+RHJpbGwgY2hvc2VuPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5IGRhdGEtc3RhcnQ9XCI1NDUwXCIgZGF0YS1lbmQ9XCI1NTQ1XCI+XG48dHIgZGF0YS1zdGFydD1cIjU0NTBcIiBkYXRhLWVuZD1cIjU0OTZcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiNTQ1MFwiIGRhdGEtZW5kPVwiNTQ1OFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjAuOTIyPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjU0NThcIiBkYXRhLWVuZD1cIjU0NjVcIj4wLjEwPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjU0NjVcIiBkYXRhLWVuZD1cIjU0NzNcIj4xLjAyMjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI1NDczXCIgZGF0YS1lbmQ9XCI1NDg4XCI+MC4wNSAoNTAgXHUwMGI1bSk8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNTQ4OFwiIGRhdGEtZW5kPVwiNTQ5NlwiPjEuMDU8XC90ZD5cbjxcL3RyPlxuPHRyIGRhdGEtc3RhcnQ9XCI1NDk3XCIgZGF0YS1lbmQ9XCI1NTQ1XCI+XG48dGQgZGF0YS1zdGFydD1cIjU0OTdcIiBkYXRhLWVuZD1cIjU1MDVcIiBkYXRhLWNvbC1zaXplPVwic21cIj4wLjkyMjxcL3RkPlxuPHRkIGRhdGEtc3RhcnQ9XCI1NTA1XCIgZGF0YS1lbmQ9XCI1NTEyXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+MC4xMDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI1NTEyXCIgZGF0YS1lbmQ9XCI1NTIwXCI+MS4wMjI8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNTUyMFwiIGRhdGEtZW5kPVwiNTUzNlwiPjAuMDI1ICgyNSBcdTAwYjVtKTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI1NTM2XCIgZGF0YS1lbmQ9XCI1NTQ1XCI+MS4wMjU8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT5cbjxcL2Rpdj5cbjxcL2Rpdj5cbjxwIGRhdGEtc3RhcnQ9XCI1NTQ3XCIgZGF0YS1lbmQ9XCI1Njg5XCI+RGlmZmVyZW5jZTogMS4wNTAgXHUyMjEyIDEuMDIyID0gMC4wMjggbW07IDEuMDI1IFx1MjIxMiAxLjAyMiA9IDAuMDAzIG1tLiBUaGUgc21hbGxlciBkaWZmZXJlbmNlIGlzIGJldHRlciwgc28gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNTY0OFwiIGRhdGEtZW5kPVwiNTY2MFwiPjEuMDI1IG1tPFwvc3Ryb25nPiAoMjUgXHUwMGI1bSBpbmNyZW1lbnQpIGlzIGJldHRlci48XC9wPlxuPHAgZGF0YS1zdGFydD1cIjU2OTFcIiBkYXRhLWVuZD1cIjU4MThcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCI1NjkxXCIgZGF0YS1lbmQ9XCI1NzA0XCI+RXhhbXBsZSAyPFwvc3Ryb25nPiBcdTIwMTQgNTAgXHUwMGI1bSB2cyBzcGVjaWFsIGRyaWxsOjxiciBkYXRhLXN0YXJ0PVwiNTczMFwiIGRhdGEtZW5kPVwiNTczM1wiIFwvPk9yaWdpbmFsIGhvbGUgPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI1NzQ5XCIgZGF0YS1lbmQ9XCI1NzYxXCI+MC42MTEgbW08XC9zdHJvbmc+LCBjb21wZW5zYXRpb24gPSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI1Nzc4XCIgZGF0YS1lbmQ9XCI1Nzg5XCI+MC4xMCBtbTxcL3N0cm9uZz4sIGNvbXBlbnNhdGVkID0gPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNTgwNVwiIGRhdGEtZW5kPVwiNTgxN1wiPjAuNzExIG1tPFwvc3Ryb25nPi48XC9wPlxuPGRpdiBjbGFzcz1cIlR5YWdHV190YWJsZUNvbnRhaW5lclwiPlxuPGRpdiBjbGFzcz1cImdyb3VwIFR5YWdHV190YWJsZVdyYXBwZXIgZmxleCB3LWZpdCBmbGV4LWNvbC1yZXZlcnNlXCIgdGFiaW5kZXg9XCItMVwiPlxuPHRhYmxlIGNsYXNzPVwidy1maXQgbWluLXctKC0tdGhyZWFkLWNvbnRlbnQtd2lkdGgpXCIgZGF0YS1zdGFydD1cIjU4MjBcIiBkYXRhLWVuZD1cIjYwMThcIj5cbjx0aGVhZCBkYXRhLXN0YXJ0PVwiNTgyMFwiIGRhdGEtZW5kPVwiNTg5NVwiPlxuPHRyIGRhdGEtc3RhcnQ9XCI1ODIwXCIgZGF0YS1lbmQ9XCI1ODk1XCI+XG48dGggZGF0YS1zdGFydD1cIjU4MjBcIiBkYXRhLWVuZD1cIjU4MzFcIiBkYXRhLWNvbC1zaXplPVwic21cIj5PcmlnaW5hbDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI1ODMxXCIgZGF0YS1lbmQ9XCI1ODQ2XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+Q29tcGVuc2F0aW9uPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjU4NDZcIiBkYXRhLWVuZD1cIjU4NjBcIiBkYXRhLWNvbC1zaXplPVwic21cIj5Db21wZW5zYXRlZDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI1ODYwXCIgZGF0YS1lbmQ9XCI1ODc5XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+SW5jcmVtZW50IFwvIFR5cGU8XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiNTg3OVwiIGRhdGEtZW5kPVwiNTg5NVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkRyaWxsIGNob3NlbjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keSBkYXRhLXN0YXJ0PVwiNTkyM1wiIGRhdGEtZW5kPVwiNjAxOFwiPlxuPHRyIGRhdGEtc3RhcnQ9XCI1OTIzXCIgZGF0YS1lbmQ9XCI1OTY5XCI+XG48dGQgZGF0YS1zdGFydD1cIjU5MjNcIiBkYXRhLWVuZD1cIjU5MzFcIiBkYXRhLWNvbC1zaXplPVwic21cIj4wLjYxMTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI1OTMxXCIgZGF0YS1lbmQ9XCI1OTM4XCI+MC4xMDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI1OTM4XCIgZGF0YS1lbmQ9XCI1OTQ2XCI+MC43MTE8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNTk0NlwiIGRhdGEtZW5kPVwiNTk2MVwiPjAuMDUgKDUwIFx1MDBiNW0pPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjU5NjFcIiBkYXRhLWVuZD1cIjU5NjlcIj4wLjcwPFwvdGQ+XG48XC90cj5cbjx0ciBkYXRhLXN0YXJ0PVwiNTk3MFwiIGRhdGEtZW5kPVwiNjAxOFwiPlxuPHRkIGRhdGEtc3RhcnQ9XCI1OTcwXCIgZGF0YS1lbmQ9XCI1OTc4XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+MC42MTE8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNTk3OFwiIGRhdGEtZW5kPVwiNTk4NVwiPjAuMTA8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiNTk4NVwiIGRhdGEtZW5kPVwiNTk5M1wiPjAuNzExPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjU5OTNcIiBkYXRhLWVuZD1cIjYwMDlcIj5TcGVjaWFsIGRyaWxsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjYwMDlcIiBkYXRhLWVuZD1cIjYwMThcIj4wLjcxMTxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPlxuPFwvZGl2PlxuPFwvZGl2PlxuPHAgZGF0YS1zdGFydD1cIjYwMjBcIiBkYXRhLWVuZD1cIjYxNjFcIj5EaWZmZXJlbmNlOiAwLjcwMCBcdTIyMTIgMC43MTEgPSBcdTIyMTIwLjAxMSBtbTsgMC43MTEgXHUyMjEyIDAuNzExID0gMC4wMDAgbW0uIFRoZSBzbWFsbGVyIGRpZmZlcmVuY2UgaXMgYmV0dGVyLiBTbyB0aGUgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiNjEyNlwiIGRhdGEtZW5kPVwiNjE1MlwiPjAuNzExIG1tIHNwZWNpYWwgZHJpbGw8XC9zdHJvbmc+IGlzIGJlc3QuPFwvcD5cbjxoMyBkYXRhLXN0YXJ0PVwiNjE2M1wiIGRhdGEtZW5kPVwiNjIwNlwiPk1ldGhvZCAyOiBJbXByb3ZlIHByb2Nlc3MgYW5kIGVxdWlwbWVudDxcL2gzPlxuPHVsIGRhdGEtc3RhcnQ9XCI2MjA3XCIgZGF0YS1lbmQ9XCI2NzUyXCI+XG48bGkgZGF0YS1zdGFydD1cIjYyMDdcIiBkYXRhLWVuZD1cIjYyOTZcIj5cbjxwIGRhdGEtc3RhcnQ9XCI2MjA5XCIgZGF0YS1lbmQ9XCI2Mjk2XCI+QWRkIGEgc2Vjb25kIGJvYXJkIHBsYXRpbmcgc3RlcCB0byByZWR1Y2UgdW5ldmVuIHRoaWNrbmVzcyBmcm9tIHBhdHRlcm4gZGlzdHJpYnV0aW9uLjxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiNjI5N1wiIGRhdGEtZW5kPVwiNjM5NVwiPlxuPHAgZGF0YS1zdGFydD1cIjYyOTlcIiBkYXRhLWVuZD1cIjYzOTVcIj5Vc2UgbmVnYXRpdmUgcGhvdG8gZGlyZWN0LWV0Y2hpbmcgYW5kIHBsYXRlIHRoZSB3aG9sZSBib2FyZCB0byByZWR1Y2UgdW5ldmVuIGNvcHBlciB0aGlja25lc3MuPFwvcD5cbjxcL2xpPlxuPGxpIGRhdGEtc3RhcnQ9XCI2Mzk2XCIgZGF0YS1lbmQ9XCI2NTM4XCI+XG48cCBkYXRhLXN0YXJ0PVwiNjM5OFwiIGRhdGEtZW5kPVwiNjUzOFwiPkxvd2VyIHRoZSBjdXJyZW50IGRlbnNpdHkgKHR5cGljYWwgaXMgMTkgQVNGKTsgc2xpZ2h0bHkgbG93ZXIgY3VycmVudCBkZW5zaXR5IGNhbiBpbXByb3ZlIHBsYXRpbmcgdW5pZm9ybWl0eSBidXQgd2lsbCBleHRlbmQgcGxhdGluZyB0aW1lLjxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiNjUzOVwiIGRhdGEtZW5kPVwiNjc1MlwiPlxuPHAgZGF0YS1zdGFydD1cIjY1NDFcIiBkYXRhLWVuZD1cIjY3NTJcIj5VcGdyYWRlIHRvIGEgaG9yaXpvbnRhbCBwbGF0aW5nIGxpbmUuIFZlcnRpY2FsIHBsYXRpbmcgbGluZXMgb2Z0ZW4gZ2l2ZSB0aGlja2VyIGNvcHBlciBhdCB0aGUgaG9sZSBlZGdlIGFuZCB0aGlubmVyIGNvcHBlciBhdCB0aGUgaG9sZSBjZW50ZXIgZm9yIGhpZ2ggYXNwZWN0LXJhdGlvIGhvbGVzLiBBIGhvcml6b250YWwgbGluZSBjYW4gcmVkdWNlIHRoYXQgaXNzdWUuPFwvcD5cbjxcL2xpPlxuPFwvdWw+XG48aDMgZGF0YS1zdGFydD1cIjY3NTRcIiBkYXRhLWVuZD1cIjY3OTBcIj5NZXRob2QgMzogSW1wcm92ZSBDQU0gc3RyYXRlZ2llczxcL2gzPlxuPHVsIGRhdGEtc3RhcnQ9XCI2NzkxXCIgZGF0YS1lbmQ9XCI3ODg1XCI+XG48bGkgZGF0YS1zdGFydD1cIjY3OTFcIiBkYXRhLWVuZD1cIjcwMTlcIj5cbjxwIGRhdGEtc3RhcnQ9XCI2NzkzXCIgZGF0YS1lbmQ9XCI3MDE5XCI+Rm9yIGhvbGVzIGluIGlzb2xhdGVkIGNvcHBlciBhcmVhcywgYXBwbHkgb25lIGV4dHJhIGluY3JlbWVudCBjb21wZW5zYXRpb24uIElzb2xhdGVkIGFyZWFzIGhhdmUgbGVzcyBjb3BwZXIsIHNvIGR1cmluZyBwbGF0aW5nIHRoZXkgZ2V0IGhpZ2hlciBsb2NhbCBjdXJyZW50IGRlbnNpdHkgYW5kIG1vcmUgY29wcGVyIHRoaWNrbmVzczsgZXh0cmEgY29tcGVuc2F0aW9uIG9mZnNldHMgdGhhdC48XC9wPlxuPFwvbGk+XG48bGkgZGF0YS1zdGFydD1cIjcwMjBcIiBkYXRhLWVuZD1cIjczNjFcIj5cbjxwIGRhdGEtc3RhcnQ9XCI3MDIyXCIgZGF0YS1lbmQ9XCI3MzYxXCI+Rm9yIGRlc2lnbnMgd2l0aCBkZW5zZSB0cmFjZXMgb24gb25lIHNpZGUgYW5kIHNwYXJzZSBvbiB0aGUgb3RoZXIgKGZvciBleGFtcGxlLCBhIHBvd2VyIGJvYXJkKSwgcGxhY2UgdGhlIHNwYXJzZSBzaWRlIGlud2FyZCBhbmQgdGhlIGRlbnNlIHNpZGUgb3V0d2FyZCwgYW5kIHVzZSByZXZlcnNlZCBwYW5lbGl6YXRpb24uIER1cmluZyBwYW5lbCBwbGF0aW5nLCBhcmVhcyBuZWFyIHRoZSBib2FyZCBlZGdlIGdldCBoaWdoZXIgY3VycmVudCBkZW5zaXR5IGFuZCB0aGlja2VyIHBsYXRpbmcuIFJldmVyc2VkIHBhbmVsaXphdGlvbiBoZWxwcyBiYWxhbmNlIHBsYXRpbmcgZGlzdHJpYnV0aW9uLjxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiNzM2MlwiIGRhdGEtZW5kPVwiNzYxN1wiPlxuPHAgZGF0YS1zdGFydD1cIjczNjRcIiBkYXRhLWVuZD1cIjc2MTdcIj5XaGVuIFRPUCBhbmQgQk9UVE9NIGNvcHBlciBhcmVhIGRpZmZlciBhIGxvdCwgdXNlIHBvc2l0aXZlXC9uZWdhdGl2ZSAoeWluLXlhbmcpIHBhbmVsaW5nLiBVbmV2ZW4gY29wcGVyIGFyZWEgY2F1c2VzIFx1MjAxY2JlbGwtbW91dGhcdTIwMWQgdmlhczsgdGhlIHRoaWNrZXIgdGhlIGJvYXJkIGFuZCB0aGUgbW9yZSBjb3BwZXIsIHRoZSB3b3JzZSB0aGUgZWZmZWN0OyB5aW4teWFuZyBwYW5lbGluZyBoZWxwcyBiYWxhbmNlIGNvcHBlciBkaXN0cmlidXRpb24uPFwvcD5cbjxcL2xpPlxuPGxpIGRhdGEtc3RhcnQ9XCI3NjE4XCIgZGF0YS1lbmQ9XCI3ODg1XCI+XG48cCBkYXRhLXN0YXJ0PVwiNzYyMFwiIGRhdGEtZW5kPVwiNzg4NVwiPkZvciBpc29sYXRlZC1hcmVhIGhvbGVzIG5lYXIgdGhlIGJvYXJkIGVkZ2Ugb3Igc2xvdHMsIGFkZCBjb3BwZXIgXHUyMDFjcGljay11cFx1MjAxZCBhcmVhcyBvciBjb3BwZXIgcGFkcyBuZWFyIHRoZSBlZGdlIG9yIHNsb3QuIElzb2xhdGVkIGhvbGVzIGNhbiBnZXQgdG9vIG11Y2ggcGxhdGluZyB0aGlja25lc3MgYW5kIGJlY29tZSB0b28gc21hbGw7IGV4dHJhIGNvcHBlciBuZWFyIHRoZW0gcmVkdWNlcyBsb2NhbCBjdXJyZW50IGRlbnNpdHkgYW5kIGJhbGFuY2VzIHBsYXRpbmcuPFwvcD5cbjxcL2xpPlxuPFwvdWw+XG48aHIgZGF0YS1zdGFydD1cIjc4ODdcIiBkYXRhLWVuZD1cIjc4OTBcIiBcLz5cbjxoMiBkYXRhLXN0YXJ0PVwiNzg5MlwiIGRhdGEtZW5kPVwiNzk1MlwiPjQuIEhvdyBtdWNoIGNvbXBlbnNhdGlvbiBpcyBuZWVkZWQgYW5kIGhvdyBpcyBpdCBkZXJpdmVkPzxcL2gyPlxuPHAgZGF0YS1zdGFydD1cIjc5NTRcIiBkYXRhLWVuZD1cIjgwODdcIj5Db21wZW5zYXRpb24gdmFsdWVzIGNvbWUgZnJvbSBwcm9jZXNzIHRlc3RzLiBCZWxvdyBpcyBvbmUgc2V0IG9mIG1lYXN1cmVkIGhvbGUgc2l6ZSBjaGFuZ2VzIGFmdGVyIHZhcmlvdXMgc3RlcHMgKGRhdGEgZnJvbSBhIHJlcG9ydCk6PFwvcD5cbjxwIGRhdGEtc3RhcnQ9XCI4MDg5XCIgZGF0YS1lbmQ9XCI4MjEyXCI+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiODA4OVwiIGRhdGEtZW5kPVwiODEwNlwiPlByb2Nlc3MgZmxvdzo8XC9zdHJvbmc+IG1lY2hhbmljYWwgZHJpbGxpbmcgXHUyMTkyIGltbWVyc2lvbiBjb3BwZXIgXHUyMTkyIGVsZWN0cm9wbGF0aW5nIFx1MjE5MiBwYXR0ZXJuIHRyYW5zZmVyIFx1MjE5MiBldGNoIFx1MjE5MiBBT0kgXHUyMTkyIHdldCBmaWxtIFx1MjE5MiBIQVNMPFwvcD5cbjxwIGRhdGEtc3RhcnQ9XCI4MjE0XCIgZGF0YS1lbmQ9XCI4MjM5XCI+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiODIxNFwiIGRhdGEtZW5kPVwiODIzN1wiPlByb2Nlc3MgcGFyYW1ldGVyczo8XC9zdHJvbmc+PFwvcD5cbjx1bCBkYXRhLXN0YXJ0PVwiODI0MFwiIGRhdGEtZW5kPVwiODUxNVwiPlxuPGxpIGRhdGEtc3RhcnQ9XCI4MjQwXCIgZGF0YS1lbmQ9XCI4MzMwXCI+XG48cCBkYXRhLXN0YXJ0PVwiODI0MlwiIGRhdGEtZW5kPVwiODMzMFwiPkRyaWxsOiBkcmlsbCBiaXQgc2l6ZSAwLjk1IG1tLCByZS1zaGFycGVuXC9yZWdyaW5kIDMgdGltZXMsIGRyaWxsIGNvbXBlbnNhdGlvbiAwLjE1IG1tOzxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiODMzMVwiIGRhdGEtZW5kPVwiODM4NlwiPlxuPHAgZGF0YS1zdGFydD1cIjgzMzNcIiBkYXRhLWVuZD1cIjgzODZcIj5QbGF0aW5nOiBjb3BwZXIgdGhpY2tuZXNzIFx1MjI2NSAxOCBcdTAwYjVtLCBhdmVyYWdlIFx1MjI2NSAyMCBcdTAwYjVtOzxcL3A+XG48XC9saT5cbjxsaSBkYXRhLXN0YXJ0PVwiODM4N1wiIGRhdGEtZW5kPVwiODQ1NlwiPlxuPHAgZGF0YS1zdGFydD1cIjgzODlcIiBkYXRhLWVuZD1cIjg0NTZcIj5IQVNMOiBmaW5hbCBob2xlIHJlcXVpcmVtZW50IDAuODAgbW0sIHRvbGVyYW5jZSBcdTAwYjEwLjA4IG1tICgzIG1pbCk7PFwvcD5cbjxcL2xpPlxuPGxpIGRhdGEtc3RhcnQ9XCI4NDU3XCIgZGF0YS1lbmQ9XCI4NTE1XCI+XG48cCBkYXRhLXN0YXJ0PVwiODQ1OVwiIGRhdGEtZW5kPVwiODUxNVwiPlRlc3Q6IDEwIHBhbmVscywgY29ybmVyIHRyaW1tZWQsIGJvYXJkIHRoaWNrbmVzcyAyLjAgbW0uPFwvcD5cbjxcL2xpPlxuPFwvdWw+XG48aDMgZGF0YS1zdGFydD1cIjg1MTdcIiBkYXRhLWVuZD1cIjg1NDZcIj5Ib2xlIHNpemUgY2hhbmdlcyBieSBzdGVwPFwvaDM+XG48cCBkYXRhLXN0YXJ0PVwiODU0OFwiIGRhdGEtZW5kPVwiODU5M1wiPjxzdHJvbmcgZGF0YS1zdGFydD1cIjg1NDhcIiBkYXRhLWVuZD1cIjg1NjlcIj4xKSBBZnRlciBkcmlsbGluZzxcL3N0cm9uZz4gXHUyMDE0IGhvbGUgc2l6ZXMgbWVhc3VyZWQ8XC9wPlxuPHVsIGRhdGEtc3RhcnQ9XCI4NTk0XCIgZGF0YS1lbmQ9XCI4Nzk1XCI+XG48bGkgZGF0YS1zdGFydD1cIjg1OTRcIiBkYXRhLWVuZD1cIjg3OTVcIj5cbjxwIGRhdGEtc3RhcnQ9XCI4NTk2XCIgZGF0YS1lbmQ9XCI4Nzk1XCI+VG90YWwgMTkyMCBob2xlcyB0ZXN0ZWQgKDEwIHBhbmVscywgMzg0IGhvbGVzIGVhY2gpLiBTYW1wbGU6IDIwMCBob2xlcyAoMjAgcGVyIHBhbmVsKS4gSG9sZSByYW5nZTogPHN0cm9uZyBkYXRhLXN0YXJ0PVwiODY5NVwiIGRhdGEtZW5kPVwiODcxMVwiPjAuOTNcdTIwMTMwLjk0IG1tPFwvc3Ryb25nPiwgYXZlcmFnZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI4NzIxXCIgZGF0YS1lbmQ9XCI4NzMzXCI+MC45MzEgbW08XC9zdHJvbmc+LjxiciBkYXRhLXN0YXJ0PVwiODczNFwiIGRhdGEtZW5kPVwiODczN1wiIFwvPihUaGVuIGEgbG9uZyBsaXN0IG9mIHNhbXBsZWQgdmFsdWVzLCBtb3N0bHkgMC45MyBvciAwLjk0Lik8XC9wPlxuPFwvbGk+XG48XC91bD5cbjxwIGRhdGEtc3RhcnQ9XCI4Nzk3XCIgZGF0YS1lbmQ9XCI4ODQ4XCI+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiODc5N1wiIGRhdGEtZW5kPVwiODg0NlwiPjIpIEFmdGVyIHBhdHRlcm5lZCBwbGF0aW5nIFx1MjAxNCBjb3BwZXIgdGhpY2tuZXNzPFwvc3Ryb25nPjxcL3A+XG48dWwgZGF0YS1zdGFydD1cIjg4NDlcIiBkYXRhLWVuZD1cIjg5OTlcIj5cbjxsaSBkYXRhLXN0YXJ0PVwiODg0OVwiIGRhdGEtZW5kPVwiODk5OVwiPlxuPHAgZGF0YS1zdGFydD1cIjg4NTFcIiBkYXRhLWVuZD1cIjg5OTlcIj5Gb3IgZWFjaCBwYW5lbCwgdGVzdCAxMCBob2xlcy4gQ29wcGVyIHRoaWNrbmVzcyByYW5nZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI4OTA1XCIgZGF0YS1lbmQ9XCI4OTE3XCI+MThcdTIwMTMzMSBcdTAwYjVtPFwvc3Ryb25nPiwgbWVldGluZyBcdTIyNjUxOCBcdTAwYjVtIGFuZCBhdmVyYWdlIFx1MjI2NTIwIFx1MDBiNW0uPGJyIGRhdGEtc3RhcnQ9XCI4OTUzXCIgZGF0YS1lbmQ9XCI4OTU2XCIgXC8+KFRoZW4gbWFueSBzYW1wbGUgY29wcGVyIHRoaWNrbmVzcyB2YWx1ZXMuKTxcL3A+XG48XC9saT5cbjxcL3VsPlxuPHAgZGF0YS1zdGFydD1cIjkwMDFcIiBkYXRhLWVuZD1cIjkwNDVcIj48c3Ryb25nIGRhdGEtc3RhcnQ9XCI5MDAxXCIgZGF0YS1lbmQ9XCI5MDQzXCI+MykgQWZ0ZXIgcGF0dGVybmVkIHBsYXRpbmcgXHUyMDE0IGhvbGUgc2l6ZTxcL3N0cm9uZz48XC9wPlxuPHVsIGRhdGEtc3RhcnQ9XCI5MDQ2XCIgZGF0YS1lbmQ9XCI5MTc2XCI+XG48bGkgZGF0YS1zdGFydD1cIjkwNDZcIiBkYXRhLWVuZD1cIjkxNzZcIj5cbjxwIGRhdGEtc3RhcnQ9XCI5MDQ4XCIgZGF0YS1lbmQ9XCI5MTc2XCI+VG90YWwgMTkyMCBob2xlcywgc2FtcGxlIDIwMC4gSG9sZSByYW5nZTogPHN0cm9uZyBkYXRhLXN0YXJ0PVwiOTA5MFwiIGRhdGEtZW5kPVwiOTEwNlwiPjAuODRcdTIwMTMwLjg4IG1tPFwvc3Ryb25nPiwgYXZlcmFnZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI5MTE2XCIgZGF0YS1lbmQ9XCI5MTI4XCI+MC44NTggbW08XC9zdHJvbmc+LjxiciBkYXRhLXN0YXJ0PVwiOTEyOVwiIGRhdGEtZW5kPVwiOTEzMlwiIFwvPihUaGVuIG1hbnkgc2FtcGxlIHZhbHVlcywgbW9zdGx5IDAuODVcdTIwMTMwLjg4Lik8XC9wPlxuPFwvbGk+XG48XC91bD5cbjxwIGRhdGEtc3RhcnQ9XCI5MTc4XCIgZGF0YS1lbmQ9XCI5MjA5XCI+PHN0cm9uZyBkYXRhLXN0YXJ0PVwiOTE3OFwiIGRhdGEtZW5kPVwiOTE5NVwiPjQpIEFmdGVyIEhBU0w8XC9zdHJvbmc+IFx1MjAxNCBob2xlIHNpemU8XC9wPlxuPHVsIGRhdGEtc3RhcnQ9XCI5MjEwXCIgZGF0YS1lbmQ9XCI5MzIyXCI+XG48bGkgZGF0YS1zdGFydD1cIjkyMTBcIiBkYXRhLWVuZD1cIjkzMjJcIj5cbjxwIGRhdGEtc3RhcnQ9XCI5MjEyXCIgZGF0YS1lbmQ9XCI5MzIyXCI+VG90YWwgMTkyMCBob2xlcywgc2FtcGxlIDIwMC4gSG9sZSByYW5nZTogPHN0cm9uZyBkYXRhLXN0YXJ0PVwiOTI1NFwiIGRhdGEtZW5kPVwiOTI3MFwiPjAuODJcdTIwMTMwLjg2IG1tPFwvc3Ryb25nPiwgYXZlcmFnZSA8c3Ryb25nIGRhdGEtc3RhcnQ9XCI5MjgwXCIgZGF0YS1lbmQ9XCI5MjkyXCI+MC44MzYgbW08XC9zdHJvbmc+LjxiciBkYXRhLXN0YXJ0PVwiOTI5M1wiIGRhdGEtZW5kPVwiOTI5NlwiIFwvPihUaGVuIG1hbnkgc2FtcGxlIHZhbHVlcy4pPFwvcD5cbjxcL2xpPlxuPFwvdWw+XG48cCBkYXRhLXN0YXJ0PVwiOTMyNFwiIGRhdGEtZW5kPVwiOTM0MFwiPjxzdHJvbmcgZGF0YS1zdGFydD1cIjkzMjRcIiBkYXRhLWVuZD1cIjkzNDBcIj5UZXN0IHN1bW1hcnk8XC9zdHJvbmc+PFwvcD5cbjxkaXYgY2xhc3M9XCJUeWFnR1dfdGFibGVDb250YWluZXJcIj5cbjxkaXYgY2xhc3M9XCJncm91cCBUeWFnR1dfdGFibGVXcmFwcGVyIGZsZXggdy1maXQgZmxleC1jb2wtcmV2ZXJzZVwiIHRhYmluZGV4PVwiLTFcIj5cbjx0YWJsZSBjbGFzcz1cInctZml0IG1pbi13LSgtLXRocmVhZC1jb250ZW50LXdpZHRoKVwiIGRhdGEtc3RhcnQ9XCI5MzQyXCIgZGF0YS1lbmQ9XCI5NTMxXCI+XG48dGhlYWQgZGF0YS1zdGFydD1cIjkzNDJcIiBkYXRhLWVuZD1cIjkzNzhcIj5cbjx0ciBkYXRhLXN0YXJ0PVwiOTM0MlwiIGRhdGEtZW5kPVwiOTM3OFwiPlxuPHRoIGRhdGEtc3RhcnQ9XCI5MzQyXCIgZGF0YS1lbmQ9XCI5MzQ5XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+U3RlcDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI5MzQ5XCIgZGF0YS1lbmQ9XCI5MzYyXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+SG9sZSByYW5nZTxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI5MzYyXCIgZGF0YS1lbmQ9XCI5Mzc4XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+QXZlcmFnZSBob2xlPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5IGRhdGEtc3RhcnQ9XCI5Mzk1XCIgZGF0YS1lbmQ9XCI5NTMxXCI+XG48dHIgZGF0YS1zdGFydD1cIjkzOTVcIiBkYXRhLWVuZD1cIjk0MzlcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiOTM5NVwiIGRhdGEtZW5kPVwiOTQxMlwiIGRhdGEtY29sLXNpemU9XCJzbVwiPkFmdGVyIGRyaWxsaW5nPFwvdGQ+XG48dGQgZGF0YS1zdGFydD1cIjk0MTJcIiBkYXRhLWVuZD1cIjk0MjdcIiBkYXRhLWNvbC1zaXplPVwic21cIj4wLjkzXHUyMDEzMC45NCBtbTxcL3RkPlxuPHRkIGRhdGEtc3RhcnQ9XCI5NDI3XCIgZGF0YS1lbmQ9XCI5NDM5XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+MC45MzEgbW08XC90ZD5cbjxcL3RyPlxuPHRyIGRhdGEtc3RhcnQ9XCI5NDQwXCIgZGF0YS1lbmQ9XCI5NDkwXCI+XG48dGQgZGF0YS1zdGFydD1cIjk0NDBcIiBkYXRhLWVuZD1cIjk0NjNcIiBkYXRhLWNvbC1zaXplPVwic21cIj5BZnRlciBjb3BwZXIgcGxhdGluZzxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI5NDYzXCIgZGF0YS1lbmQ9XCI5NDc4XCI+MC44NFx1MjAxMzAuODggbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiOTQ3OFwiIGRhdGEtZW5kPVwiOTQ5MFwiPjAuODU4IG1tPFwvdGQ+XG48XC90cj5cbjx0ciBkYXRhLXN0YXJ0PVwiOTQ5MVwiIGRhdGEtZW5kPVwiOTUzMVwiPlxuPHRkIGRhdGEtc3RhcnQ9XCI5NDkxXCIgZGF0YS1lbmQ9XCI5NTA0XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+QWZ0ZXIgSEFTTDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCI5NTA0XCIgZGF0YS1lbmQ9XCI5NTE5XCI+MC44Mlx1MjAxMzAuODYgbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiOTUxOVwiIGRhdGEtZW5kPVwiOTUzMVwiPjAuODM2IG1tPFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+XG48XC9kaXY+XG48XC9kaXY+XG48cCBkYXRhLXN0YXJ0PVwiOTUzM1wiIGRhdGEtZW5kPVwiOTcyM1wiPjxzdHJvbmcgZGF0YS1zdGFydD1cIjk1MzNcIiBkYXRhLWVuZD1cIjk1NDhcIj5Db25jbHVzaW9uOjxcL3N0cm9uZz4gRm9yIEhBU0wgYm9hcmRzIHRoZSBkcmlsbCBjb21wZW5zYXRpb24gb2YgPHN0cm9uZyBkYXRhLXN0YXJ0PVwiOTU5MVwiIGRhdGEtZW5kPVwiOTYwMlwiPjAuMTUgbW08XC9zdHJvbmc+IGlzIGFuIFx1MjAxY292ZXItY29tcGVuc2F0aW9uXHUyMDFkIGFuZCBjYXVzZXMgZmluYWwgaG9sZXMgdG8gYmUgbGFyZ2VyLiBUaGUgYmVzdCBjb21wZW5zYXRpb24gdmFsdWUgaW4gdGhpcyB0ZXN0IGlzIDxzdHJvbmcgZGF0YS1zdGFydD1cIjk3MTBcIiBkYXRhLWVuZD1cIjk3MjJcIj4wLjEyNSBtbTxcL3N0cm9uZz4uPFwvcD5cbjxociBkYXRhLXN0YXJ0PVwiOTcyNVwiIGRhdGEtZW5kPVwiOTcyOFwiIFwvPlxuPGgyPjUuIERyaWxsIGNvbXBlbnNhdGlvbiBjb2RlIGltcGxlbWVudGF0aW9uIChydWxlcyk8XC9oMj5cbjxvbCBkYXRhLXN0YXJ0PVwiOTc4NFwiIGRhdGEtZW5kPVwiOTgxN1wiPlxuPGxpIGRhdGEtc3RhcnQ9XCI5Nzg0XCIgZGF0YS1lbmQ9XCI5ODE3XCI+XG48cCBkYXRhLXN0YXJ0PVwiOTc4N1wiIGRhdGEtZW5kPVwiOTgxN1wiPkNvbXBlbnNhdGlvbiBhbmQgc3RlcC11cCBydWxlczxcL3A+XG48XC9saT5cbjxcL29sPlxuPGRpdiBjbGFzcz1cIlR5YWdHV190YWJsZUNvbnRhaW5lclwiPlxuPGRpdiBjbGFzcz1cImdyb3VwIFR5YWdHV190YWJsZVdyYXBwZXIgZmxleCB3LWZpdCBmbGV4LWNvbC1yZXZlcnNlXCIgdGFiaW5kZXg9XCItMVwiPlxuPHRhYmxlIGNsYXNzPVwidy1maXQgbWluLXctKC0tdGhyZWFkLWNvbnRlbnQtd2lkdGgpXCIgZGF0YS1zdGFydD1cIjk4MTlcIiBkYXRhLWVuZD1cIjEwODQzXCI+XG48dGhlYWQgZGF0YS1zdGFydD1cIjk4MTlcIiBkYXRhLWVuZD1cIjk5NjhcIj5cbjx0ciBkYXRhLXN0YXJ0PVwiOTgxOVwiIGRhdGEtZW5kPVwiOTk2OFwiPlxuPHRoIGRhdGEtc3RhcnQ9XCI5ODE5XCIgZGF0YS1lbmQ9XCI5ODI4XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+QXNwZWN0PFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjk4MjhcIiBkYXRhLWVuZD1cIjk4NDRcIiBkYXRhLWNvbC1zaXplPVwic21cIj5GaW5pc2hlZCBob2xlPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjk4NDRcIiBkYXRhLWVuZD1cIjk4NjFcIiBkYXRhLWNvbC1zaXplPVwic21cIj5TdXJmYWNlIGZpbmlzaDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI5ODYxXCIgZGF0YS1lbmQ9XCI5ODc5XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+Qm9hcmQgdGhpY2tuZXNzPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjk4NzlcIiBkYXRhLWVuZD1cIjk4OTlcIiBkYXRhLWNvbC1zaXplPVwic21cIj5TdGVwLXVwIHRocmVzaG9sZDxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI5ODk5XCIgZGF0YS1lbmQ9XCI5OTIzXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+SWYgdmlhIGNvcHBlciAmbHQ7IDI2IFx1MDBiNW08XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiOTkyM1wiIGRhdGEtZW5kPVwiOTkzNFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjI2XHUyMDEzMzcgXHUwMGI1bTxcL3RoPlxuPHRoIGRhdGEtc3RhcnQ9XCI5OTM0XCIgZGF0YS1lbmQ9XCI5OTQ1XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+MzdcdTIwMTM0NyBcdTAwYjVtPFwvdGg+XG48dGggZGF0YS1zdGFydD1cIjk5NDVcIiBkYXRhLWVuZD1cIjk5NTZcIiBkYXRhLWNvbC1zaXplPVwic21cIj40N1x1MjAxMzY3IFx1MDBiNW08XC90aD5cbjx0aCBkYXRhLXN0YXJ0PVwiOTk1NlwiIGRhdGEtZW5kPVwiOTk2OFwiIGRhdGEtY29sLXNpemU9XCJzbVwiPjY3XHUyMDEzODYgXHUwMGI1bTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjx0Ym9keSBkYXRhLXN0YXJ0PVwiMTAwMThcIiBkYXRhLWVuZD1cIjEwODQzXCI+XG48dHIgZGF0YS1zdGFydD1cIjEwMDE4XCIgZGF0YS1lbmQ9XCIxMDE0NlwiPlxuPHRkIGRhdGEtc3RhcnQ9XCIxMDAxOFwiIGRhdGEtZW5kPVwiMTAwNDNcIiBkYXRhLWNvbC1zaXplPVwic21cIj50aGlja25lc3MgcmF0aW8gJmx0OyAxMjoxPFwvdGQ+XG48dGQgZGF0YS1zdGFydD1cIjEwMDQzXCIgZGF0YS1lbmQ9XCIxMDA1NVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPlx1MjI2NCAxLjkwIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMDU1XCIgZGF0YS1lbmQ9XCIxMDA4NFwiPkhBU0wgKGxlYWRlZCBvciBsZWFkLWZyZWUpPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMDg0XCIgZGF0YS1lbmQ9XCIxMDA5NVwiPlx1MjI2NSAzLjUgbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAwOTVcIiBkYXRhLWVuZD1cIjEwMTA1XCI+MC4wMTk1MjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDEwNVwiIGRhdGEtZW5kPVwiMTAxMTNcIj41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDExM1wiIGRhdGEtZW5kPVwiMTAxMjFcIj42IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDEyMVwiIGRhdGEtZW5kPVwiMTAxMjlcIj43IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDEyOVwiIGRhdGEtZW5kPVwiMTAxMzdcIj44IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDEzN1wiIGRhdGEtZW5kPVwiMTAxNDZcIj45IG1pbDxcL3RkPlxuPFwvdHI+XG48dHIgZGF0YS1zdGFydD1cIjEwMTQ3XCIgZGF0YS1lbmQ9XCIxMDI4NVwiPlxuPHRkIGRhdGEtc3RhcnQ9XCIxMDE0N1wiIGRhdGEtZW5kPVwiMTAxNzJcIiBkYXRhLWNvbC1zaXplPVwic21cIj50aGlja25lc3MgcmF0aW8gJmx0OyAxMjoxPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMTcyXCIgZGF0YS1lbmQ9XCIxMDE4NFwiPlx1MjI2NCAxLjkwIG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMTg0XCIgZGF0YS1lbmQ9XCIxMDIxM1wiPkhBU0wgKGxlYWRlZCBvciBsZWFkLWZyZWUpPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMjEzXCIgZGF0YS1lbmQ9XCIxMDIyNFwiPiZsdDsgMy41IG1tPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMjI0XCIgZGF0YS1lbmQ9XCIxMDIzNFwiPjAuMDE5NTI8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAyMzRcIiBkYXRhLWVuZD1cIjEwMjQ0XCI+NC41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDI0NFwiIGRhdGEtZW5kPVwiMTAyNTRcIj41LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwMjU0XCIgZGF0YS1lbmQ9XCIxMDI2NFwiPjYuNSBtaWw8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAyNjRcIiBkYXRhLWVuZD1cIjEwMjc0XCI+Ny41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDI3NFwiIGRhdGEtZW5kPVwiMTAyODVcIj44LjUgbWlsPFwvdGQ+XG48XC90cj5cbjx0ciBkYXRhLXN0YXJ0PVwiMTAyODZcIiBkYXRhLWVuZD1cIjEwMzk1XCI+XG48dGQgZGF0YS1zdGFydD1cIjEwMjg2XCIgZGF0YS1lbmQ9XCIxMDMxMVwiIGRhdGEtY29sLXNpemU9XCJzbVwiPnRoaWNrbmVzcyByYXRpbyAmbHQ7IDEyOjE8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAzMTFcIiBkYXRhLWVuZD1cIjEwMzIzXCI+XHUyMjY0IDEuOTAgbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAzMjNcIiBkYXRhLWVuZD1cIjEwMzQwXCI+T3RoZXIgZmluaXNoZXM8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAzNDBcIiBkYXRhLWVuZD1cIjEwMzQ0XCI+XC88XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTAzNDRcIiBkYXRhLWVuZD1cIjEwMzU0XCI+MC4wMTk1MjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDM1NFwiIGRhdGEtZW5kPVwiMTAzNjJcIj40IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDM2MlwiIGRhdGEtZW5kPVwiMTAzNzBcIj41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDM3MFwiIGRhdGEtZW5kPVwiMTAzNzhcIj42IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDM3OFwiIGRhdGEtZW5kPVwiMTAzODZcIj43IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDM4NlwiIGRhdGEtZW5kPVwiMTAzOTVcIj44IG1pbDxcL3RkPlxuPFwvdHI+XG48dHIgZGF0YS1zdGFydD1cIjEwMzk2XCIgZGF0YS1lbmQ9XCIxMDUwNFwiPlxuPHRkIGRhdGEtc3RhcnQ9XCIxMDM5NlwiIGRhdGEtZW5kPVwiMTA0MjFcIiBkYXRhLWNvbC1zaXplPVwic21cIj50aGlja25lc3MgcmF0aW8gJmx0OyAxMjoxPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNDIxXCIgZGF0YS1lbmQ9XCIxMDQzM1wiPiZndDsgMS45MCBtbTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDQzM1wiIGRhdGEtZW5kPVwiMTA0NDBcIj5IQVNMPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNDQwXCIgZGF0YS1lbmQ9XCIxMDQ0NFwiPlwvPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNDQ0XCIgZGF0YS1lbmQ9XCIxMDQ1M1wiPjAuMDI0NjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDQ1M1wiIGRhdGEtZW5kPVwiMTA0NjNcIj41LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNDYzXCIgZGF0YS1lbmQ9XCIxMDQ3M1wiPjYuNSBtaWw8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA0NzNcIiBkYXRhLWVuZD1cIjEwNDgzXCI+Ny41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDQ4M1wiIGRhdGEtZW5kPVwiMTA0OTNcIj44LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNDkzXCIgZGF0YS1lbmQ9XCIxMDUwNFwiPjkuNSBtaWw8XC90ZD5cbjxcL3RyPlxuPHRyIGRhdGEtc3RhcnQ9XCIxMDUwNVwiIGRhdGEtZW5kPVwiMTA2MjRcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiMTA1MDVcIiBkYXRhLWVuZD1cIjEwNTMwXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+dGhpY2tuZXNzIHJhdGlvICZsdDsgMTI6MTxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDUzMFwiIGRhdGEtZW5kPVwiMTA1NDJcIj4mZ3Q7IDEuOTAgbW08XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA1NDJcIiBkYXRhLWVuZD1cIjEwNTU5XCI+T3RoZXIgZmluaXNoZXM8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA1NTlcIiBkYXRhLWVuZD1cIjEwNTYzXCI+XC88XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA1NjNcIiBkYXRhLWVuZD1cIjEwNTczXCI+MC4wMTk1MjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDU3M1wiIGRhdGEtZW5kPVwiMTA1ODNcIj40LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNTgzXCIgZGF0YS1lbmQ9XCIxMDU5M1wiPjUuNSBtaWw8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA1OTNcIiBkYXRhLWVuZD1cIjEwNjAzXCI+Ni41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDYwM1wiIGRhdGEtZW5kPVwiMTA2MTNcIj43LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNjEzXCIgZGF0YS1lbmQ9XCIxMDYyNFwiPjguNSBtaWw8XC90ZD5cbjxcL3RyPlxuPHRyIGRhdGEtc3RhcnQ9XCIxMDYyNVwiIGRhdGEtZW5kPVwiMTA3MzNcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiMTA2MjVcIiBkYXRhLWVuZD1cIjEwNjUwXCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+dGhpY2tuZXNzIHJhdGlvIFx1MjI2NSAxMjoxPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNjUwXCIgZGF0YS1lbmQ9XCIxMDY2MlwiPmFsbCBob2xlczxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDY2MlwiIGRhdGEtZW5kPVwiMTA2NjlcIj5IQVNMPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNjY5XCIgZGF0YS1lbmQ9XCIxMDY3M1wiPlwvPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNjczXCIgZGF0YS1lbmQ9XCIxMDY4MlwiPjAuMDI0NjxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDY4MlwiIGRhdGEtZW5kPVwiMTA2OTJcIj41LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNjkyXCIgZGF0YS1lbmQ9XCIxMDcwMlwiPjYuNSBtaWw8XC90ZD5cbjx0ZCBkYXRhLWNvbC1zaXplPVwic21cIiBkYXRhLXN0YXJ0PVwiMTA3MDJcIiBkYXRhLWVuZD1cIjEwNzEyXCI+Ny41IG1pbDxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDcxMlwiIGRhdGEtZW5kPVwiMTA3MjJcIj44LjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNzIyXCIgZGF0YS1lbmQ9XCIxMDczM1wiPjkuNSBtaWw8XC90ZD5cbjxcL3RyPlxuPHRyIGRhdGEtc3RhcnQ9XCIxMDczNFwiIGRhdGEtZW5kPVwiMTA4NDNcIj5cbjx0ZCBkYXRhLXN0YXJ0PVwiMTA3MzRcIiBkYXRhLWVuZD1cIjEwNzU5XCIgZGF0YS1jb2wtc2l6ZT1cInNtXCI+dGhpY2tuZXNzIHJhdGlvIFx1MjI2NSAxMjoxPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwNzU5XCIgZGF0YS1lbmQ9XCIxMDc3MVwiPmFsbCBob2xlczxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDc3MVwiIGRhdGEtZW5kPVwiMTA3ODhcIj5PdGhlciBmaW5pc2hlczxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDc4OFwiIGRhdGEtZW5kPVwiMTA3OTJcIj5cLzxcL3RkPlxuPHRkIGRhdGEtY29sLXNpemU9XCJzbVwiIGRhdGEtc3RhcnQ9XCIxMDc5MlwiIGRhdGEtZW5kPVwiMTA4MDJcIj4wLjAxOTUyPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwODAyXCIgZGF0YS1lbmQ9XCIxMDgxMFwiPjUgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwODEwXCIgZGF0YS1lbmQ9XCIxMDgxOFwiPjYgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwODE4XCIgZGF0YS1lbmQ9XCIxMDgyNlwiPjcgbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwODI2XCIgZGF0YS1lbmQ9XCIxMDgzNFwiPjggbWlsPFwvdGQ+XG48dGQgZGF0YS1jb2wtc2l6ZT1cInNtXCIgZGF0YS1zdGFydD1cIjEwODM0XCIgZGF0YS1lbmQ9XCIxMDg0M1wiPjkgbWlsPFwvdGQ+XG48XC90cj5cbjxcL3Rib2R5PlxuPFwvdGFibGU+XG48XC9kaXY+XG48XC9kaXY+XG48b2wgc3RhcnQ9XCIyXCIgZGF0YS1zdGFydD1cIjEwODQ1XCIgZGF0YS1lbmQ9XCIxMDk1M1wiPlxuPGxpIGRhdGEtc3RhcnQ9XCIxMDg0NVwiIGRhdGEtZW5kPVwiMTA5NTNcIj5cbjxwIGRhdGEtc3RhcnQ9XCIxMDg0OFwiIGRhdGEtZW5kPVwiMTA5NTNcIj5TcGVjaWFsIGRyaWxsIHNpemVzIChpZiB0b2xlcmFuY2UgJmx0OyAzIG1pbCwgdXNlIHNwZWNpYWwgZHJpbGxzIG9yIDI1IFx1MDBiNW0gaW5jcmVtZW50LCB1c2UgbmVhcmVzdCBkcmlsbCBydWxlKTxcL3A+XG48XC9saT5cbjxcL29sPiIsImRpc3BsYXlfY29uZGl0aW9uX2xpc3QiOlt7ImRpc3BsYXlfY29uZGl0aW9uX2xvZ2luX3N0YXR1cyI6InN1YnNjcmliZXIiLCJfaWQiOiJhNGZkODYwIn1dfSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-f7e142f elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"f7e142f\\\" data-element_type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language-aspnet line-numbers\\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-aspnet\\\">\\n\\t\\t\\t\\t\\t<xmp>List<double> ContainDrillToolList = new List<double>();\\r\\nContainDrillToolList.AddRange(new double[] { 610, 635, 711, 838, 914, 1016, 1320, 3120 });<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"0e46bd9387093ca73b9000e38f18cce4\\\" data=\\\"eyJpZCI6ImVjNTQyNGIiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8cD4zLiBEcmlsbCBDb21wZW5zYXRpb24gQ29kZTxcL3A+IiwiZGlzcGxheV9jb25kaXRpb25fbGlzdCI6W3siZGlzcGxheV9jb25kaXRpb25fbG9naW5fc3RhdHVzIjoic3Vic2NyaWJlciIsIl9pZCI6IjE3YzczOTMifV19LCJlbGVtZW50cyI6W10sIndpZGdldFR5cGUiOiJ0ZXh0LWVkaXRvciJ9\\\"]\\t\\t<div class=\\\"elementor-element elementor-element-3dfeb51 elementor-widget elementor-widget-code-highlight\\\" data-id=\\\"3dfeb51\\\" data-element_type=\\\"widget\\\" data-widget_type=\\\"code-highlight.default\\\">\\n\\t\\t\\t\\t<div class=\\\"elementor-widget-container\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"prismjs-default copy-to-clipboard \\\">\\n\\t\\t\\t<pre data-line=\\\"\\\" class=\\\"highlight-height language-csharp line-numbers\\\">\\n\\t\\t\\t\\t<code readonly=\\\"true\\\" class=\\\"language-csharp\\\">\\n\\t\\t\\t\\t\\t<xmp>\\\/\\\/\\\/<summary>\\r\\n\\\/\\\/\\\/ Calculate the drill bit diameter based on drill compensation parameters\\r\\n\\\/\\\/\\\/<\\\/summary>\\r\\n\\\/\\\/\\\/<param name=\\\"ToolInfo\\\">Drill tool basic information<\\\/param>\\r\\n\\\/\\\/\\\/<param name=\\\"UpParam\\\">Drill compensation parameters<\\\/param>\\r\\n\\\/\\\/\\\/<param name=\\\"ContainDrillToolList\\\">Special drill bit diameter list<\\\/param>\\r\\n\\\/\\\/\\\/<returns>Return 1 if calculation is successful<\\\/returns>\\r\\npublic static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List<double> ContainDrillToolList)\\r\\n{\\r\\n    if (ContainDrillToolList == null) ContainDrillToolList = new List<double>();\\r\\n    gToolUpParamHole UpParamHole = new G_Helper.gToolUpParamHole();\\r\\n    switch (ToolInfo.type)\\r\\n    {\\r\\n        case \\\"via\\\":\\r\\n            UpParamHole = UpParam.Via;\\r\\n            break;\\r\\n        case \\\"plate\\\":\\r\\n            UpParamHole = UpParam.Pth;\\r\\n            break;\\r\\n        case \\\"nplate\\\":\\r\\n            UpParamHole = UpParam.Npth;\\r\\n            break;\\r\\n    }\\r\\n    ToolInfo.max_tol = Math.Round(UpParamHole.Max_Tol, 0);\\r\\n    ToolInfo.min_tol = Math.Round(UpParamHole.Min_Tol, 0);\\r\\n    if (ToolInfo.finish_size < 50)\\r\\n    {\\r\\n        ToolInfo.finish_size = ToolInfo.drill_size;\\r\\n    }\\r\\n    double DrillSlotLevel = (ToolInfo.shape == \\\"slot\\\") ? UpParam.SlotLevel : UpParam.DrillLevel;  \\\/\\\/Drill step interval: Round holes have two levels (25\\\/50\\u03bcm), slot holes have one level (50\\u03bcm)\\r\\n    double UpLevel;\\r\\n    if (UpParam.DrillLevel > 49) \\\/\\\/When the step interval is 50\\u03bcm, do not use special drill bits\\r\\n    {\\r\\n        ContainDrillToolList = new List<double>();\\r\\n        UpLevel = UpParamHole.UpLevel;\\r\\n    }\\r\\n    else\\r\\n    {\\r\\n        UpLevel = UpParam.DrillLevel * 0.5;   \\\/\\\/Select drill bit by half of the step interval\\r\\n    }\\r\\n\\r\\n    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \\\/\\\/Average the upper and lower tolerance\\r\\n    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) \\\/ DrillSlotLevel)); \\\/\\\/Drill step count\\r\\n    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; \\\/\\\/Round down to the nearest drill step\\r\\n    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;\\\/\\\/Remainder of drill size after step division\\r\\n    double DrillsizeLevel = (DrillsizeFloat > UpLevel) ? DrillSlotLevel : 0;\\\/\\\/Determine whether to round up the remainder\\r\\n\\r\\n    \\\/\\\/Check if special drill bits are included\\r\\n    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt => (int)(Math.Floor(tt \\\/ DrillSlotLevel)) == DrillLevelCount);\\r\\n    if (ContainDrillIndex > -1)\\r\\n    {\\r\\n        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;\\\/\\\/Remainder of special drill bit size after step division\\r\\n        if (DrillsizeFloat > UpLevel) \\\/\\\/ e.g. 38 > 20\\r\\n        {\\r\\n            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel);   \\\/\\\/e.g. 40-50\\r\\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \\\/\\\/e.g. 40-38\\r\\n            DrillsizeLevel = (diff1 < diff2) ? DrillSlotLevel : ContainDrillFloat;\\r\\n        }\\r\\n        else \\\/\\\/if (ContainDrillFloat < UpLevel)\\r\\n        {\\r\\n            double diff1 = Math.Abs(DrillsizeFloat - 0);  \\\/\\\/e.g. 12-0\\r\\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat);  \\\/\\\/e.g. 12-16\\r\\n            DrillsizeLevel = (diff1 < diff2) ? 0 : ContainDrillFloat;\\r\\n        }\\r\\n    }\\r\\n    ToolInfo.drill_size = DrillsizeInt + DrillsizeLevel;\\r\\n\\r\\n    double DiffDrillSizeUp = ToolInfo.drill_size - ToolInfo.finish_size;\\r\\n    if (ToolInfo.shape == \\\"slot\\\") \\\/\\\/ Slot length compensation\\r\\n    {\\r\\n        if (UpParam.isSlotUpLevel) \\\/\\\/Whether to round the slot length to step interval\\r\\n        {\\r\\n            Drillfinish_size = ToolInfo.slot_len + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5;  \\\/\\\/Average the upper and lower tolerance\\r\\n            DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) \\\/ DrillSlotLevel)); \\\/\\\/ Drill step count\\r\\n            DrillsizeInt = DrillLevelCount * DrillSlotLevel; \\\/\\\/Round down to the nearest drill step (50\\u03bcm)\\r\\n            DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal + UpParam.SlotLengthUp) % DrillSlotLevel;\\\/\\\/Remainder of slot length after step division\\r\\n            DrillsizeLevel = (DrillsizeFloat > UpParamHole.UpLevel) ? DrillSlotLevel : 0;\\\/\\\/Determine whether to round up the remainder\\r\\n            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;\\r\\n        }\\r\\n        else\\r\\n        {\\r\\n            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) \\\/ 10) * 10; \\\/\\\/ Round down to the nearest 10\\u03bcm\\r\\n            ToolInfo.slot_len = DrillsizeInt;\\r\\n        }\\r\\n        ToolInfo.drill_size += UpParam.SlotEndNumber;  \\\/\\\/ Add suffix number for slot drill bit segmentation\\r\\n    }\\r\\n    ToolInfo.bit = Math.Round((ToolInfo.drill_size * 0.001), 3).ToString();\\r\\n    return 1;\\r\\n}\\r\\n\\r\\npublic class gToolUpParam\\r\\n{\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for VIA holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for PTH (Plated Through Hole) (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation parameters for NPTH (Non-Plated Through Hole) (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval for round drill holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double DrillLevel { get; set; } = 50;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval for slot drill holes (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double SlotLevel { get; set; } = 50;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Suffix number for slot drill bit segmentation\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public int SlotEndNumber { get; set; } = 0;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Additional compensation value for slot length (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double SlotLengthUp { get; set; } = 0;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Whether to round the slot length to step interval\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public bool isSlotUpLevel { get; set; } = false;\\r\\n}\\r\\n\\r\\npublic class gToolUpParamHole\\r\\n{\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Compensation value (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double UpVal { get; set; } = 100;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Step interval threshold for rounding up (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double UpLevel { get; set; } = 25;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Upper tolerance (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double Max_Tol { get; set; } = 76;\\r\\n    \\\/\\\/\\\/ <summary>\\r\\n    \\\/\\\/\\\/ Lower tolerance (in \\u03bcm)\\r\\n    \\\/\\\/\\\/ <\\\/summary>\\r\\n    public double Min_Tol { get; set; } = 76;\\r\\n}\\r\\n\\r\\n\\\/\\\/\\\/<summary>\\r\\n\\\/\\\/\\\/ Mod_tool: Drill tool attribute model\\r\\n\\\/\\\/\\\/<\\\/summary>\\r\\npublic class Mod_tool\\r\\n{\\r\\n    public int num { get; set; }\\r\\n    public string type { get; set; } \\\/\\\/ Hole type: via\\\/plate(nplate)\\r\\n    public string shape { get; set; } \\\/\\\/ Hole shape: round\\\/slot\\r\\n    public double finish_size { get; set; } \\\/\\\/ Finished hole size (in \\u03bcm)\\r\\n    public double drill_size { get; set; } \\\/\\\/ Drill bit size (in \\u03bcm)\\r\\n    public double max_tol { get; set; } \\\/\\\/ Upper tolerance (in \\u03bcm)\\r\\n    public double min_tol { get; set; } \\\/\\\/ Lower tolerance (in \\u03bcm)\\r\\n    public double slot_len { get; set; } \\\/\\\/ Slot length (in \\u03bcm)\\r\\n    public string bit { get; set; } \\\/\\\/ Drill bit size (in mm, formatted string)\\r\\n}<\\\/xmp>\\n\\t\\t\\t\\t<\\\/code>\\n\\t\\t\\t<\\\/pre>\\n\\t\\t<\\\/div>\\n\\t\\t\\t\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t[elementor-element k=\\\"0e46bd9387093ca73b9000e38f18cce4\\\" data=\\\"eyJpZCI6IjU3OGViMjYiLCJlbFR5cGUiOiJ3aWRnZXQiLCJzZXR0aW5ncyI6eyJlZGl0b3IiOiI8aDIgZGF0YS1zdGFydD1cIjEwOTYwXCIgZGF0YS1lbmQ9XCIxMTAxN1wiPjYuIFdoeSBkb2VzIGJvYXJkIHRoaWNrbmVzcyBhZmZlY3QgZHJpbGwgY29tcGVuc2F0aW9uPzxcL2gyPlxuPHAgZGF0YS1zdGFydD1cIjExMDE5XCIgZGF0YS1lbmQ9XCIxMTQ2NFwiPkkgZGlkIG5vdCB1bmRlcnN0YW5kIHRoaXMgYXQgZmlyc3QgZWl0aGVyLiBUaGUgbWFpbiByZWFzb24gaXMgdGhlIGhpZ2ggPHN0cm9uZyBkYXRhLXN0YXJ0PVwiMTEwOTBcIiBkYXRhLWVuZD1cIjExMTIxXCI+dGhpY2tuZXNzLXRvLWRpYW1ldGVyIHJhdGlvPFwvc3Ryb25nPiAoYm9hcmQgdGhpY2tuZXNzIGRpdmlkZWQgYnkgaG9sZSBkaWFtZXRlcikuIEEgaGlnaCByYXRpbyBtYWtlcyB0aGUgY29wcGVyIGF0IHRoZSBob2xlIGNlbnRlciB0aGlubmVyIGFuZCB0aGUgY29wcGVyIGF0IHRoZSBob2xlIGVkZ2UgdGhpY2tlci4gVG8gY29tcHV0ZSB0aGUgdGhpY2tuZXNzLXRvLWRpYW1ldGVyIHJhdGlvIHlvdSBuZWVkIHRoZSBib2FyZCB0aGlja25lc3MgdmFsdWUuIFNvIGJvYXJkIHRoaWNrbmVzcyBlbnRlcnMgdGhlIGRyaWxsIGNvbXBlbnNhdGlvbiBydWxlcy4gRm9yIGhpZ2ggdGhpY2tuZXNzLXRvLWRpYW1ldGVyIGhvbGVzLCB0aGUgY29tcGVuc2F0aW9uIGlzIGxhcmdlci48XC9wPiIsImRpc3BsYXlfY29uZGl0aW9uX2xpc3QiOlt7ImRpc3BsYXlfY29uZGl0aW9uX2xvZ2luX3N0YXR1cyI6InN1YnNjcmliZXIiLCJfaWQiOiI3MTVjNjlhIn1dfSwiZWxlbWVudHMiOltdLCJ3aWRnZXRUeXBlIjoidGV4dC1lZGl0b3IifQ==\\\"]\\t\\t\\t<\\\/div>\\n\\t\\t\\t\\t<\\\/div>\\n\\t\\t\",\"scripts\":[],\"styles\":[]}}"],"_uag_css_file_name":["uag-css-4575.css"],"_uag_js_file_name":["uag-js-4575.js"]},"uagb_featured_image_src":{"full":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed.webp",800,533,false],"thumbnail":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed-150x150.webp",150,150,true],"medium":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed-300x200.webp",300,200,true],"medium_large":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed-768x512.webp",768,512,true],"large":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed.webp",800,533,false],"1536x1536":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed.webp",800,533,false],"2048x2048":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed.webp",800,533,false],"trp-custom-language-flag":["https:\/\/flj-pcb.com\/wp-content\/uploads\/2025\/12\/About-PCB-Drill-Compensation_compressed-18x12.webp",18,12,true]},"uagb_author_info":{"display_name":"Philifast","author_link":"https:\/\/flj-pcb.com\/fi\/author\/2475017442jygmail-com\/"},"uagb_comment_info":1,"uagb_excerpt":"There are no great individuals, only great teams. With the team working together, the first-stage PCB CAM automation project for [&hellip;]","_links":{"self":[{"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/posts\/4575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/comments?post=4575"}],"version-history":[{"count":5,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/posts\/4575\/revisions"}],"predecessor-version":[{"id":4582,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/posts\/4575\/revisions\/4582"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/media\/4584"}],"wp:attachment":[{"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/media?parent=4575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/categories?post=4575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flj-pcb.com\/fi\/wp-json\/wp\/v2\/tags?post=4575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}