{"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\/de_at\/about-pcb-drill-compensation-simple-english\/","title":{"rendered":"\u00dcber PCB-Bohrer-Kompensation"},"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\">Es gibt keine gro\u00dfartigen Einzelpersonen, sondern nur gro\u00dfartige Teams. Durch die Zusammenarbeit des Teams konnte das PCB-CAM-Automatisierungsprojekt der ersten Stufe f\u00fcr <strong data-start=\"178\" data-end=\"194\">Netzbearbeitung<\/strong> und <strong data-start=\"199\" data-end=\"217\">Handhabung von Bohrern<\/strong> ist fertig. Als N\u00e4chstes k\u00f6nnen wir uns mit dem PCB-Regelwerk befassen. Hier spreche ich \u00fcber die Bohrungskompensation in der Leiterplattenentwicklung. Als Entwickler in der Leiterplattenentwicklung sollten Sie wissen, was das ist und warum es funktioniert. Im Folgenden erl\u00e4utere ich die wichtigsten Punkte zur Bohrerkompensation.<\/p>\n<hr data-start=\"463\" data-end=\"466\" \/>\n<h2 data-start=\"468\" data-end=\"507\">1. Warum kompensieren wir die Bohrergr\u00f6\u00dfen?<\/h2>\n<p data-start=\"509\" data-end=\"870\">Die Lochgr\u00f6\u00dfen in den vom Kunden angegebenen PCB-Dateien bedeuten in der Regel die <em data-start=\"577\" data-end=\"584\">endg\u00fcltig<\/em> Lochgr\u00f6\u00dfe. Bei der Herstellung von Leiterplatten werden die L\u00f6cher mit Kupfer beschichtet (oder die L\u00f6cher erhalten eine Oberfl\u00e4chenbehandlung wie HASL, ENIG, OSP usw.). Dadurch wird das Loch kleiner. Um sicherzustellen, dass die endg\u00fcltige Bohrungsgr\u00f6\u00dfe den Anforderungen entspricht, korrigiert der CAM-Schritt die Bohrungsgr\u00f6\u00dfe. Dies ist die Bohrerkompensation.<\/p>\n<p data-start=\"872\" data-end=\"1171\"><strong data-start=\"872\" data-end=\"889\">Ein echtes Beispiel:<\/strong><br data-start=\"889\" data-end=\"892\" \/>Endg\u00fcltige Lochgr\u00f6\u00dfe: <strong data-start=\"909\" data-end=\"920\">1,00 mm<\/strong>. Oberfl\u00e4cheng\u00fcte: <strong data-start=\"938\" data-end=\"946\">ENIG<\/strong> (Nickeldicke 2,54 \u00b5m, Golddicke 0,0254 \u00b5m). Befolgen Sie die IPC-Klasse II, und die durchschnittliche Dicke der Kupferbeschichtung betr\u00e4gt <strong data-start=\"1064\" data-end=\"1073\">20 \u00b5m<\/strong>. Wenn wir <strong data-start=\"1085\" data-end=\"1096\">0,10 mm<\/strong> als Kompensationswert, w\u00e4hlt das CAM-Team einen <strong data-start=\"1149\" data-end=\"1160\">1,10 mm<\/strong> Bohrer.<\/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. Wie machen wir den Bohrerausgleich?<\/h2>\n<p data-start=\"1218\" data-end=\"1445\">Zun\u00e4chst sollten Sie sich \u00fcber die drei wichtigsten Parameter f\u00fcr den Bohrerausgleich im Klaren sein:<br data-start=\"1288\" data-end=\"1291\" \/><strong data-start=\"1291\" data-end=\"1298\">(1)<\/strong> Schrittweite des Bohrers,<br data-start=\"1319\" data-end=\"1322\" \/><strong data-start=\"1322\" data-end=\"1329\">(2)<\/strong> Ausgleichswert,<br data-start=\"1349\" data-end=\"1352\" \/><strong data-start=\"1352\" data-end=\"1359\">(3)<\/strong> Step-up-Schwelle (Vorlaufwert).<br data-start=\"1394\" data-end=\"1397\" \/>Diese drei bestimmen, wie die Entsch\u00e4digung anzuwenden ist.<\/p>\n<h3 data-start=\"1447\" data-end=\"1475\">1) Schrittweite des Bohrers<\/h3>\n<p data-start=\"1476\" data-end=\"1773\">Dies h\u00e4ngt von den Bohrern ab, die das Unternehmen kauft. Die branchen\u00fcbliche Schrittweite betr\u00e4gt <strong data-start=\"1558\" data-end=\"1567\">50 \u00b5m<\/strong>. Typische Bohrergr\u00f6\u00dfen reichen von <strong data-start=\"1600\" data-end=\"1611\">0,10 mm<\/strong> zu <strong data-start=\"1615\" data-end=\"1626\">6,35 mm<\/strong>. Der \u00fcbliche kleinste Schritt zwischen den Bohrern ist <strong data-start=\"1674\" data-end=\"1685\">0,05 mm<\/strong>. Die Bohrerbibliothek hat also Gr\u00f6\u00dfen wie <strong data-start=\"1723\" data-end=\"1761\">0,10 mm, 0,15 mm, 0,20 mm, 0,25 mm<\/strong>, und so weiter.<\/p>\n<h3 data-start=\"1775\" data-end=\"1802\">2) Ausgleichswert<\/h3>\n<p data-start=\"1803\" data-end=\"1952\">Das Prozessteam legt die Verg\u00fctungsregeln auf der Grundlage der Testergebnisse des Unternehmens fest. Die Kompensationswerte variieren in der Branche nicht sehr stark. Gemeinsame Regeln:<\/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\">Bretter mit HASL<\/strong> (Spr\u00fchdose): <strong data-start=\"1989\" data-end=\"2011\">0,15 mm ausgleichen<\/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\">Bretter ohne HASL<\/strong> (ENIG, chemisches Zinn, OSP, usw.): <strong data-start=\"2075\" data-end=\"2097\">0,10 mm ausgleichen<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"2100\" data-end=\"2142\">3) Step-up-Schwelle (Vorlaufwert)<\/h3>\n<p data-start=\"2143\" data-end=\"2403\">Das Prozessteam legt auch die Strategie f\u00fcr die Auswahl des Bohrers fest, \u00e4hnlich wie bei einer Rundungsregel. Zum Beispiel, wenn das Inkrement <strong data-start=\"2273\" data-end=\"2282\">20 \u00b5m<\/strong>, wenn der Rest nach Division durch das Inkrement <strong data-start=\"2336\" data-end=\"2347\">\u2265 20 \u00b5m<\/strong>, wird auf 50 \u00b5m aufgerundet, andernfalls wird die kleinere Gr\u00f6\u00dfe beibehalten.<\/p>\n<p data-start=\"2405\" data-end=\"2737\"><strong data-start=\"2405\" data-end=\"2417\">Beispiel:<\/strong><br data-start=\"2417\" data-end=\"2420\" \/>Endg\u00fcltige Lochgr\u00f6\u00dfe = <strong data-start=\"2438\" data-end=\"2450\">1,025 mm<\/strong>, Entsch\u00e4digung = <strong data-start=\"2467\" data-end=\"2478\">0,10 mm<\/strong>, so kompensierte Gr\u00f6\u00dfe = <strong data-start=\"2502\" data-end=\"2514\">1,125 mm<\/strong>. Aber es gibt keine <strong data-start=\"2532\" data-end=\"2544\">1,125 mm<\/strong> in der Bibliothek bohren. Verwenden Sie die Step-up-Regel. Der Rest von 1,125 mm im Vergleich zum Schritt von 0,05 mm ist <strong data-start=\"2652\" data-end=\"2661\">25 \u00b5m<\/strong>. Seit <strong data-start=\"2669\" data-end=\"2686\">25 \u00b5m &gt; 20 \u00b5m<\/strong>, runden Sie um 50 \u00b5m auf und w\u00e4hlen Sie eine <strong data-start=\"2719\" data-end=\"2730\">1,15 mm<\/strong> bohren.<\/p>\n<hr data-start=\"2739\" data-end=\"2742\" \/>\n<h3 data-start=\"2744\" data-end=\"2782\">Beispiele f\u00fcr tats\u00e4chliche Bohrverg\u00fctungen<\/h3>\n<p data-start=\"2784\" data-end=\"2850\">Angenommen: Bohrinkrement = <strong data-start=\"2810\" data-end=\"2819\">50 \u00b5m<\/strong>, Aufw\u00e4rtsschwelle = <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-Loch<\/th>\n<th data-start=\"2868\" data-end=\"2883\" data-col-size=\"sm\">Entsch\u00e4digung<\/th>\n<th data-start=\"2883\" data-end=\"2904\" data-col-size=\"sm\">Nach Entsch\u00e4digung<\/th>\n<th data-start=\"2904\" data-end=\"2919\" data-col-size=\"sm\">Ganzzahliger Teil<\/th>\n<th data-start=\"2919\" data-end=\"2931\" data-col-size=\"sm\">Restbetrag<\/th>\n<th data-start=\"2931\" data-end=\"2947\" data-col-size=\"sm\">Bohrer gew\u00e4hlt<\/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\">So berechnen Sie die gew\u00e4hlte Bohrergr\u00f6\u00dfe<\/h4>\n<p data-start=\"3141\" data-end=\"3241\">Zerlegen Sie die kompensierte Lochgr\u00f6\u00dfe in einen ganzzahligen Teil und einen Restteil unter Verwendung des Bohrinkrements:<\/p>\n<p data-start=\"3243\" data-end=\"3396\">Nehmen Sie <strong data-start=\"3248\" data-end=\"3260\">1,125 mm<\/strong> als Beispiel:<br data-start=\"3275\" data-end=\"3278\" \/>1,125 \/ 0,05 = 22,5 \u2192 Boden zu 22 \u2192 ganzer Teil = 22 \u00d7 0,05 = <strong data-start=\"3341\" data-end=\"3352\">1,10 mm<\/strong>.<br data-start=\"3353\" data-end=\"3356\" \/>Rest = 1,125 % 0,05 = <strong data-start=\"3383\" data-end=\"3395\">0,025 mm<\/strong>.<\/p>\n<p data-start=\"3398\" data-end=\"3475\">Vergleichen Sie dann den Restwert mit dem Schwellenwert f\u00fcr die Erh\u00f6hung (z. B. 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\">Wenn Rest &gt; Schwellenwert, Bohrergr\u00f6\u00dfe = ganzer Teil + 0,05 mm.<\/p>\n<\/li>\n<li data-start=\"3543\" data-end=\"3607\">\n<p data-start=\"3545\" data-end=\"3607\">Wenn Rest \u2264 Schwellenwert, Bohrergr\u00f6\u00dfe = ganzer Teil + 0,00 mm.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"3609\" data-end=\"3612\" \/>\n<h3 data-start=\"3614\" data-end=\"3653\">Zusammenfassung \u00fcber den Schwellenwert f\u00fcr die Heraufstufung<\/h3>\n<p data-start=\"3654\" data-end=\"3897\">Wenn das Bohrinkrement <strong data-start=\"3682\" data-end=\"3691\">50 \u00b5m<\/strong>, ist der Schwellenwert f\u00fcr den Step-up kritisch. Sie f\u00fchrt eine zweite Korrektur der kompensierten Bohrergr\u00f6\u00dfe durch. Sie entscheidet, ob sie \u201cerh\u00f6ht\u201d wird oder \u201cbleibt\u201d. Eine \u00c4nderung dieses Schwellenwerts \u00e4ndert direkt die gew\u00e4hlte Bohrergr\u00f6\u00dfe.<\/p>\n<p data-start=\"3899\" data-end=\"3943\"><strong data-start=\"3899\" data-end=\"3943\">Weitere Beispiele (Bohrschrittweite = 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-Loch<\/th>\n<th data-start=\"3961\" data-end=\"3976\" data-col-size=\"sm\">Entsch\u00e4digung<\/th>\n<th data-start=\"3976\" data-end=\"3990\" data-col-size=\"sm\">Nach 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\">Restbetrag<\/th>\n<th data-start=\"4012\" data-end=\"4032\" data-col-size=\"sm\">Step-up-Schwelle<\/th>\n<th data-start=\"4032\" data-end=\"4041\" data-col-size=\"sm\">Bohrer<\/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\">Pers\u00f6nliche Meinung zur Festlegung der Aufstockungsschwelle<\/h3>\n<p data-start=\"4267\" data-end=\"4575\"><strong data-start=\"4267\" data-end=\"4285\">Vor- und Nachteile:<\/strong> Wenn das endg\u00fcltige Loch nach dem Ausgleich etwas gr\u00f6\u00dfer ist, kann das Teil zumindest eingef\u00fcgt werden. Wenn das Loch zu klein ist, kann das Teil nicht eingef\u00fcgt werden. Daher setzen wir den Schwellenwert f\u00fcr die Vergr\u00f6\u00dferung normalerweise auf <strong data-start=\"4477\" data-end=\"4486\">20 \u00b5m<\/strong> anstelle von <strong data-start=\"4498\" data-end=\"4507\">25 \u00b5m<\/strong>. Die genaue Auswahl sollte auf den jeweiligen Prozess und Verg\u00fctungswert abgestimmt sein.<\/p>\n<p data-start=\"4577\" data-end=\"4862\"><strong data-start=\"4577\" data-end=\"4614\">Kombiniert mit dem Ausgleichswert:<\/strong> F\u00fcr Platten mit HASL, bei denen die Kompensation <strong data-start=\"4658\" data-end=\"4669\">0,15 mm<\/strong>, In diesem Fall \u201c\u00fcberkompensieren\u201d Sie bereits ein wenig, und die endg\u00fcltigen L\u00f6cher sind tendenziell etwas zu gro\u00df. In diesem Fall ist ein Step-up-Schwellenwert von <strong data-start=\"4791\" data-end=\"4800\">25 \u00b5m<\/strong> kann auch funktionieren. W\u00e4hle den Bohrer nach der Regel \u201cam n\u00e4chsten\u201d aus.<\/p>\n<hr data-start=\"4864\" data-end=\"4867\" \/>\n<h2 data-start=\"4869\" data-end=\"4943\">3. Wie kann man sicherstellen, dass die endg\u00fcltige Lochgr\u00f6\u00dfe nach der Kompensation den Anforderungen entspricht?<\/h2>\n<h3 data-start=\"4945\" data-end=\"4983\">Methode 1: Spezialbohrer kaufen<\/h3>\n<p data-start=\"4984\" data-end=\"5207\">Standard-Bohrerschrittweite ist <strong data-start=\"5012\" data-end=\"5021\">50 \u00b5m<\/strong> (0,05 mm Schritte wie 1,00, 1,05, 1,10, 1,15 mm). Bei einer PTH-Toleranz von \u00b13 mil kann ein 50-\u00b5m-Bohrersatz die Toleranz abdecken. Wenn die Toleranz kleiner ist, m\u00fcssen spezielle Bohrer verwendet werden.<\/p>\n<p data-start=\"5209\" data-end=\"5352\"><strong data-start=\"5209\" data-end=\"5222\">Beispiel 1<\/strong> - Vergleichen Sie die Abstufungen von 50 \u00b5m und 25 \u00b5m:<br data-start=\"5259\" data-end=\"5262\" \/>Urspr\u00fcngliches Loch = <strong data-start=\"5278\" data-end=\"5290\">0,922 mm<\/strong>, Entsch\u00e4digung = <strong data-start=\"5307\" data-end=\"5318\">0,10 mm<\/strong>, kompensierte Gr\u00f6\u00dfe = <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\">Entsch\u00e4digung<\/th>\n<th data-start=\"5380\" data-end=\"5394\" data-col-size=\"sm\">Kompensiert<\/th>\n<th data-start=\"5394\" data-end=\"5406\" data-col-size=\"sm\">Inkrement<\/th>\n<th data-start=\"5406\" data-end=\"5422\" data-col-size=\"sm\">Bohrer gew\u00e4hlt<\/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\">Abweichung: 1,050 - 1,022 = 0,028 mm; 1,025 - 1,022 = 0,003 mm. Die kleinere Differenz ist besser, also <strong data-start=\"5648\" data-end=\"5660\">1,025 mm<\/strong> (Schrittweite 25 \u00b5m) ist besser.<\/p>\n<p data-start=\"5691\" data-end=\"5818\"><strong data-start=\"5691\" data-end=\"5704\">Beispiel 2<\/strong> - 50 \u00b5m vs. Spezialbohrer:<br data-start=\"5730\" data-end=\"5733\" \/>Urspr\u00fcngliches Loch = <strong data-start=\"5749\" data-end=\"5761\">0,611 mm<\/strong>, Entsch\u00e4digung = <strong data-start=\"5778\" data-end=\"5789\">0,10 mm<\/strong>, kompensiert = <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\">Entsch\u00e4digung<\/th>\n<th data-start=\"5846\" data-end=\"5860\" data-col-size=\"sm\">Kompensiert<\/th>\n<th data-start=\"5860\" data-end=\"5879\" data-col-size=\"sm\">Inkrement \/ Typ<\/th>\n<th data-start=\"5879\" data-end=\"5895\" data-col-size=\"sm\">Bohrer gew\u00e4hlt<\/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\">Spezialbohrer<\/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\">Abweichung: 0,700 - 0,711 = -0,011 mm; 0,711 - 0,711 = 0,000 mm. Je kleiner die Differenz, desto besser. Also die <strong data-start=\"6126\" data-end=\"6152\">0,711 mm Spezialbohrer<\/strong> ist am besten.<\/p>\n<h3 data-start=\"6163\" data-end=\"6206\">Methode 2: Verbesserung von Verfahren und Ausr\u00fcstung<\/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\">F\u00fcgen Sie einen zweiten Plattierungsschritt hinzu, um ungleichm\u00e4\u00dfige Dicken aufgrund der Musterverteilung zu reduzieren.<\/p>\n<\/li>\n<li data-start=\"6297\" data-end=\"6395\">\n<p data-start=\"6299\" data-end=\"6395\">Verwenden Sie das Negativ-Fotodirekt\u00e4tzen und plattieren Sie die gesamte Leiterplatte, um ungleichm\u00e4\u00dfige Kupferst\u00e4rken zu reduzieren.<\/p>\n<\/li>\n<li data-start=\"6396\" data-end=\"6538\">\n<p data-start=\"6398\" data-end=\"6538\">Verringern Sie die Stromdichte (typisch sind 19 ASF); eine etwas geringere Stromdichte kann die Gleichm\u00e4\u00dfigkeit der Beschichtung verbessern, verl\u00e4ngert aber die Beschichtungszeit.<\/p>\n<\/li>\n<li data-start=\"6539\" data-end=\"6752\">\n<p data-start=\"6541\" data-end=\"6752\">Wechseln Sie zu einer horizontalen Beschichtungslinie. Vertikale Galvanisierungslinien f\u00fchren bei L\u00f6chern mit hohem Aspektverh\u00e4ltnis h\u00e4ufig zu dickerem Kupfer am Lochrand und d\u00fcnnerem Kupfer in der Lochmitte. Eine horizontale Linie kann dieses Problem verringern.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"6754\" data-end=\"6790\">Methode 3: Verbesserung der CAM-Strategien<\/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\">Bei L\u00f6chern in isolierten Kupferbereichen ist eine zus\u00e4tzliche Kompensationsstufe anzuwenden. Isolierte Bereiche haben weniger Kupfer, so dass sie w\u00e4hrend des Galvanisierens eine h\u00f6here lokale Stromdichte und eine gr\u00f6\u00dfere Kupferdicke erhalten; die zus\u00e4tzliche Kompensation gleicht dies aus.<\/p>\n<\/li>\n<li data-start=\"7020\" data-end=\"7361\">\n<p data-start=\"7022\" data-end=\"7361\">Bei Entw\u00fcrfen mit dichten Leiterbahnen auf einer Seite und sp\u00e4rlichen auf der anderen (z. B. bei einer Stromversorgungsplatine) legen Sie die sp\u00e4rliche Seite nach innen und die dichte Seite nach au\u00dfen und verwenden die umgekehrte Panelisierung. Bei der Panelisierung werden die Bereiche in der N\u00e4he der Leiterplattenkante mit einer h\u00f6heren Stromdichte und einer dickeren Beschichtung versehen. Die umgekehrte Beplankung tr\u00e4gt zu einer gleichm\u00e4\u00dfigen Verteilung der Beschichtung bei.<\/p>\n<\/li>\n<li data-start=\"7362\" data-end=\"7617\">\n<p data-start=\"7364\" data-end=\"7617\">Wenn die Kupferfl\u00e4chen OBEN und UNTEN sehr unterschiedlich sind, sollten Sie eine positive\/negative (Yin-Yang) Verkleidung verwenden. Je dicker die Leiterplatte und je mehr Kupfer, desto schlimmer der Effekt; die Yin-Yang-Verkleidung hilft, die Kupferverteilung auszugleichen.<\/p>\n<\/li>\n<li data-start=\"7618\" data-end=\"7885\">\n<p data-start=\"7620\" data-end=\"7885\">F\u00fcgen Sie bei isolierten L\u00f6chern in der N\u00e4he der Leiterplattenkante oder der Steckpl\u00e4tze Kupfer-\u201cPick-up\u201d-Bereiche oder Kupferpads in der N\u00e4he der Kante oder des Steckplatzes hinzu. Isolierte L\u00f6cher k\u00f6nnen eine zu gro\u00dfe Schichtdicke erhalten und zu klein werden; zus\u00e4tzliches Kupfer in ihrer N\u00e4he reduziert die lokale Stromdichte und gleicht die Schichtdicke aus.<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"7887\" data-end=\"7890\" \/>\n<h2 data-start=\"7892\" data-end=\"7952\">4. Wie hoch ist der Ausgleichsbedarf und wie wird er ermittelt?<\/h2>\n<p data-start=\"7954\" data-end=\"8087\">Die Kompensationswerte stammen aus Prozesstests. Nachfolgend finden Sie eine Reihe von gemessenen \u00c4nderungen der Lochgr\u00f6\u00dfe nach verschiedenen Schritten (Daten aus einem Bericht):<\/p>\n<p data-start=\"8089\" data-end=\"8212\"><strong data-start=\"8089\" data-end=\"8106\">Prozessablauf:<\/strong> Mechanisches Bohren \u2192 Tauchkupfer \u2192 Galvanik \u2192 Muster\u00fcbertragung \u2192 \u00c4tzen \u2192 AOI \u2192 Nassfilm \u2192 HASL<\/p>\n<p data-start=\"8214\" data-end=\"8239\"><strong data-start=\"8214\" data-end=\"8237\">Prozessparameter:<\/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\">Bohrer: Bohrergr\u00f6\u00dfe 0,95 mm, 3 Mal nachsch\u00e4rfen\/nachschleifen, Bohrerausgleich 0,15 mm;<\/p>\n<\/li>\n<li data-start=\"8331\" data-end=\"8386\">\n<p data-start=\"8333\" data-end=\"8386\">Beschichtung: Kupferdicke \u2265 18 \u00b5m, Durchschnitt \u2265 20 \u00b5m;<\/p>\n<\/li>\n<li data-start=\"8387\" data-end=\"8456\">\n<p data-start=\"8389\" data-end=\"8456\">HASL: Endg\u00fcltiger Lochbedarf 0,80 mm, Toleranz \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 Platten, eckbeschnitten, Plattendicke 2,0 mm.<\/p>\n<\/li>\n<\/ul>\n<h3 data-start=\"8517\" data-end=\"8546\">Lochgr\u00f6\u00dfe \u00e4ndert sich schrittweise<\/h3>\n<p data-start=\"8548\" data-end=\"8593\"><strong data-start=\"8548\" data-end=\"8569\">1) Nach dem Bohren<\/strong> - gemessene Lochgr\u00f6\u00dfen<\/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\">Insgesamt 1920 gepr\u00fcfte L\u00f6cher (10 Platten mit je 384 L\u00f6chern). Probe: 200 L\u00f6cher (20 pro Panel). Bereich der L\u00f6cher: <strong data-start=\"8695\" data-end=\"8711\">0,93-0,94 mm<\/strong>, Durchschnitt <strong data-start=\"8721\" data-end=\"8733\">0,931 mm<\/strong>.<br data-start=\"8734\" data-end=\"8737\" \/>(Dann eine lange Liste von Stichprobenwerten, meist 0,93 oder 0,94.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"8797\" data-end=\"8848\"><strong data-start=\"8797\" data-end=\"8846\">2) Nach der strukturierten Beschichtung - Kupferdicke<\/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\">F\u00fcr jede Platte sind 10 L\u00f6cher zu pr\u00fcfen. Bereich der Kupferdicke <strong data-start=\"8905\" data-end=\"8917\">18-31 \u00b5m<\/strong>, Treffen \u226518 \u00b5m und Durchschnitt \u226520 \u00b5m.<br data-start=\"8953\" data-end=\"8956\" \/>(Dann viele Werte f\u00fcr die Kupferdicke.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"9001\" data-end=\"9045\"><strong data-start=\"9001\" data-end=\"9043\">3) Nach der strukturierten Beschichtung - Lochgr\u00f6\u00dfe<\/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\">Insgesamt 1920 L\u00f6cher, Probe 200. Bereich der L\u00f6cher: <strong data-start=\"9090\" data-end=\"9106\">0,84-0,88 mm<\/strong>, Durchschnitt <strong data-start=\"9116\" data-end=\"9128\">0,858 mm<\/strong>.<br data-start=\"9129\" data-end=\"9132\" \/>(Dann viele Beispielwerte, meist 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) Nach HASL<\/strong> - Lochgr\u00f6\u00dfe<\/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\">Insgesamt 1920 L\u00f6cher, Probe 200. Bereich der L\u00f6cher: <strong data-start=\"9254\" data-end=\"9270\">0,82-0,86 mm<\/strong>, Durchschnitt <strong data-start=\"9280\" data-end=\"9292\">0,836 mm<\/strong>.<br data-start=\"9293\" data-end=\"9296\" \/>(Dann viele Beispielwerte.)<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"9324\" data-end=\"9340\"><strong data-start=\"9324\" data-end=\"9340\">Zusammenfassung des Tests<\/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\">Schritt<\/th>\n<th data-start=\"9349\" data-end=\"9362\" data-col-size=\"sm\">Bereich L\u00f6cher<\/th>\n<th data-start=\"9362\" data-end=\"9378\" data-col-size=\"sm\">Durchschnittliches Loch<\/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\">Nach dem Bohren<\/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\">Nach der Verkupferung<\/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\">Nach HASL<\/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\">Schlussfolgerung:<\/strong> Bei HASL-Platten ist der Bohrungsausgleich von <strong data-start=\"9591\" data-end=\"9602\">0,15 mm<\/strong> ist eine \u201c\u00dcberkompensation\u201d und f\u00fchrt dazu, dass die endg\u00fcltigen L\u00f6cher gr\u00f6\u00dfer sind. Der beste Kompensationswert in diesem Test ist <strong data-start=\"9710\" data-end=\"9722\">0,125 mm<\/strong>.<\/p>\n<hr data-start=\"9725\" data-end=\"9728\" \/>\n<h2>5. Implementierung des Bohrkompensationscodes (Regeln)<\/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\">Ausgleichszahlungen und Aufstockungsregeln<\/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\">Aspekt<\/th>\n<th data-start=\"9828\" data-end=\"9844\" data-col-size=\"sm\">Fertiges Loch<\/th>\n<th data-start=\"9844\" data-end=\"9861\" data-col-size=\"sm\">Oberfl\u00e4cheng\u00fcte<\/th>\n<th data-start=\"9861\" data-end=\"9879\" data-col-size=\"sm\">Dicke der Platte<\/th>\n<th data-start=\"9879\" data-end=\"9899\" data-col-size=\"sm\">Step-up-Schwelle<\/th>\n<th data-start=\"9899\" data-end=\"9923\" data-col-size=\"sm\">Wenn Durchgangskupfer &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\">Dickenverh\u00e4ltnis &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 (verbleit oder bleifrei)<\/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 Millionen<\/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\">Dickenverh\u00e4ltnis &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 (verbleit oder bleifrei)<\/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 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10244\" data-end=\"10254\">5,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10254\" data-end=\"10264\">6,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10264\" data-end=\"10274\">7,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10274\" data-end=\"10285\">8,5 Millionen<\/td>\n<\/tr>\n<tr data-start=\"10286\" data-end=\"10395\">\n<td data-start=\"10286\" data-end=\"10311\" data-col-size=\"sm\">Dickenverh\u00e4ltnis &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\">Andere Veredelungen<\/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 Millionen<\/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\">Dickenverh\u00e4ltnis &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 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10463\" data-end=\"10473\">6,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10473\" data-end=\"10483\">7,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10483\" data-end=\"10493\">8,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10493\" data-end=\"10504\">9,5 Millionen<\/td>\n<\/tr>\n<tr data-start=\"10505\" data-end=\"10624\">\n<td data-start=\"10505\" data-end=\"10530\" data-col-size=\"sm\">Dickenverh\u00e4ltnis &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\">Andere Veredelungen<\/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 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10583\" data-end=\"10593\">5,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10593\" data-end=\"10603\">6,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10603\" data-end=\"10613\">7,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10613\" data-end=\"10624\">8,5 Millionen<\/td>\n<\/tr>\n<tr data-start=\"10625\" data-end=\"10733\">\n<td data-start=\"10625\" data-end=\"10650\" data-col-size=\"sm\">Verh\u00e4ltnis der Dicke \u2265 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10650\" data-end=\"10662\">alle L\u00f6cher<\/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 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10692\" data-end=\"10702\">6,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10702\" data-end=\"10712\">7,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10712\" data-end=\"10722\">8,5 Millionen<\/td>\n<td data-col-size=\"sm\" data-start=\"10722\" data-end=\"10733\">9,5 Millionen<\/td>\n<\/tr>\n<tr data-start=\"10734\" data-end=\"10843\">\n<td data-start=\"10734\" data-end=\"10759\" data-col-size=\"sm\">Verh\u00e4ltnis der Dicke \u2265 12:1<\/td>\n<td data-col-size=\"sm\" data-start=\"10759\" data-end=\"10771\">alle L\u00f6cher<\/td>\n<td data-col-size=\"sm\" data-start=\"10771\" data-end=\"10788\">Andere Veredelungen<\/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 Millionen<\/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\">Spezielle Bohrergr\u00f6\u00dfen (wenn die Toleranz &lt; 3 mil ist, verwenden Sie spezielle Bohrer oder 25 \u00b5m Schrittweite, verwenden Sie die n\u00e4chstliegende Bohrerlinie)<\/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\tList ContainDrillToolList = new List();\r\nContainDrillToolList.AddRange(new double[] { 610, 635, 711, 838, 914, 1016, 1320, 3120 });\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. Bohrer Ausgleichscode<\/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\/\/\/<summary>\r\n\/\/\/ Berechnet den Bohrerdurchmesser basierend auf den Parametern der Bohrerkompensation\r\n\/\/\/<\/summary>\r\n\/\/\/Basisinformationen des Bohrwerkzeugs\r\n\/\/\/Bohrerkompensationsparameter\r\n\/\/\/Spezialliste f\u00fcr Bohrerdurchmesser\r\n\/\/\/R\u00fcckgabe 1, wenn die Berechnung erfolgreich war\r\npublic static int getDrillUpSize(Mod_tool ToolInfo, gToolUpParam UpParam, List ContainDrillToolList)\r\n{\r\n    if (ContainDrillToolList == null) ContainDrillToolList = new List();\r\n    gToolUpParamHole UpParamHole = new G_Helper.gToolUpParamHole();\r\n    switch (ToolInfo.type)\r\n    {\r\n        Fall \"\u00fcber\":\r\n            UpParamHole = UpParam.Via;\r\n            break;\r\n        Fall \"Platte\":\r\n            UpParamHole = UpParam.Pth;\r\n            break;\r\n        Fall \"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  49) \/\/Wenn das Schrittintervall 50\u03bcm betr\u00e4gt, keine Spezialbohrer verwenden\r\n    {\r\n        ContainDrillToolList = new List();\r\n        UpLevel = UpParamHole.UpLevel;\r\n    }\r\n    sonst\r\n    {\r\n        UpLevel = UpParam.DrillLevel * 0.5; \/\/Bohrer um die H\u00e4lfte des Schrittintervalls ausw\u00e4hlen\r\n    }\r\n\r\n    double Drillfinish_size = ToolInfo.finish_size + (ToolInfo.max_tol - ToolInfo.min_tol) * 0.5; \/\/Mittelwert der oberen und unteren Toleranz\r\n    int DrillLevelCount = (int)(Math.Floor((Drillfinish_size + UpParamHole.UpVal) \/ DrillSlotLevel)); \/\/Bohrschrittanzahl\r\n    double DrillsizeInt = DrillLevelCount * DrillSlotLevel; \/\/Abrundung auf den n\u00e4chsten Bohrschritt\r\n    double DrillsizeFloat = (Drillfinish_size + UpParamHole.UpVal) % DrillSlotLevel;\/\/Rest der Bohrergr\u00f6\u00dfe nach Schrittteilung\r\n    double DrillsizeLevel = (DrillsizeFloat &gt; UpLevel) ? DrillSlotLevel : 0;\/\/Bestimmen, ob der Rest aufgerundet werden soll\r\n\r\n    \/\/Pr\u00fcfen, ob spezielle Bohrer enthalten sind\r\n    int ContainDrillIndex = ContainDrillToolList.FindIndex(tt =&gt; (int)(Math.Floor(tt \/ DrillSlotLevel)) == DrillLevelCount);\r\n    if (ContainDrillIndex &gt; -1)\r\n    {\r\n        double ContainDrillFloat = ContainDrillToolList[ContainDrillIndex] % DrillSlotLevel;\/\/Rest der speziellen Bohrergr\u00f6\u00dfe nach Schrittteilung\r\n        if (DrillsizeFloat &gt; UpLevel) \/\/ z.B. 38 &gt; 20\r\n        {\r\n            double diff1 = Math.Abs(DrillsizeFloat - DrillSlotLevel); \/\/z.B. 40-50\r\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat); \/\/z.B. 40-38\r\n            DrillSizeLevel = (diff1 &lt; diff2) ? DrillSlotLevel : ContainDrillFloat;\r\n        }\r\n        else \/\/if (ContainDrillFloat &lt; UpLevel)\r\n        {\r\n            double diff1 = Math.Abs(DrillsizeFloat - 0); \/\/z.B. 12-0\r\n            double diff2 = Math.Abs(DrillsizeFloat - ContainDrillFloat); \/\/z.B. 12-16\r\n            DrillsizeLevel = (diff1  UpParamHole.UpLevel) ? DrillSlotLevel : 0;\/\/Bestimmen, ob der Rest aufgerundet werden soll\r\n            ToolInfo.slot_len = DrillsizeInt + DrillsizeLevel;\r\n        }\r\n        sonst\r\n        {\r\n            DrillsizeInt = Math.Floor((ToolInfo.slot_len + DiffDrillSizeUp) \/ 10) * 10; \/\/ Abrunden auf die n\u00e4chsten 10\u03bcm\r\n            ToolInfo.slot_len = DrillsizeInt;\r\n        }\r\n        ToolInfo.drill_size += UpParam.SlotEndNumber; \/\/ Suffix-Nummer f\u00fcr Schlitzbohrer-Segmentierung hinzuf\u00fcgen\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    \/\/\/ Kompensationsparameter f\u00fcr VIA-L\u00f6cher (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Via { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Kompensationsparameter f\u00fcr PTH (Plated Through Hole) (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Pth { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Kompensationsparameter f\u00fcr NPTH (Non-Plated Through Hole) (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public gToolUpParamHole Npth { get; set; } = new gToolUpParamHole();\r\n    \/\/\/ <summary>\r\n    \/\/\/ Schrittweite f\u00fcr runde Bohrungen (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double DrillLevel { get; set; } = 50;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Schrittweite f\u00fcr Langlochbohrungen (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double SlotLevel { get; set; } = 50;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Suffixnummer f\u00fcr Schlitzbohrer-Segmentierung\r\n    \/\/\/ <\/summary>\r\n    public int SlotEndNumber { get; set; } = 0;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Zus\u00e4tzlicher Kompensationswert f\u00fcr die Schlitzl\u00e4nge (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double SlotLengthUp { get; set; } = 0;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Ob die Schlitzl\u00e4nge auf das Schrittintervall gerundet werden soll.\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    \/\/\/ Kompensationswert (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double UpVal { get; set; } = 100;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Schrittintervallschwelle f\u00fcr das Aufrunden (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double UpLevel { get; set; } = 25;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Obere Toleranz (in \u03bcm)\r\n    \/\/\/ <\/summary>\r\n    public double Max_Tol { get; set; } = 76;\r\n    \/\/\/ <summary>\r\n    \/\/\/ Untere Toleranz (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: Bohrwerkzeug-Attributmodell\r\n\/\/\/<\/summary>\r\npublic class Mod_tool\r\n{\r\n    public int num { get; set; }\r\n    public string type { get; set; } \/\/ Bohrungstyp: via\/plate(nplate)\r\n    public string form { get; set; } \/\/ Lochform: rund\/Schlitz\r\n    public double finish_size { get; set; } \/\/ Fertige Lochgr\u00f6\u00dfe (in \u03bcm)\r\n    public double drill_size { get; set; } \/\/ Gr\u00f6\u00dfe des Bohrers (in \u03bcm)\r\n    public double max_tol { get; set; } \/\/ Obere Toleranz (in \u03bcm)\r\n    public double min_tol { get; set; } \/\/ Untere Toleranz (in \u03bcm)\r\n    public double slot_len { get; set; } \/\/ Schlitzl\u00e4nge (in \u03bcm)\r\n    public string bit { get; set; } \/\/ Bohrergr\u00f6\u00dfe (in mm, formatierter String)\r\n}\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. Warum beeinflusst die Plattendicke die Bohrkompensation?<\/h2>\n<p data-start=\"11019\" data-end=\"11464\">Auch ich habe das anfangs nicht verstanden. Der Hauptgrund ist die hohe <strong data-start=\"11090\" data-end=\"11121\">Verh\u00e4ltnis Dicke\/Durchmesser<\/strong> (Plattendicke geteilt durch Lochdurchmesser). Bei einem hohen Verh\u00e4ltnis ist das Kupfer in der Lochmitte d\u00fcnner und das Kupfer am Lochrand dicker. Zur Berechnung des Verh\u00e4ltnisses von Dicke zu Durchmesser ben\u00f6tigen Sie den Wert der Plattendicke. Die Plattendicke flie\u00dft also in die Regeln f\u00fcr die Bohrkompensation ein. Bei L\u00f6chern mit hohem Verh\u00e4ltnis von Dicke zu Durchmesser ist der Ausgleich gr\u00f6\u00dfer.<\/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\/de_at\/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\/de_at\/wp-json\/wp\/v2\/posts\/4575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/comments?post=4575"}],"version-history":[{"count":5,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/posts\/4575\/revisions"}],"predecessor-version":[{"id":4582,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/posts\/4575\/revisions\/4582"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/media\/4584"}],"wp:attachment":[{"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/media?parent=4575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/categories?post=4575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flj-pcb.com\/de_at\/wp-json\/wp\/v2\/tags?post=4575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}