<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>مشـروع مهندس انشائـي </title><description>مدونة مشـروع مهندس انشائـي تهتم بكل ما يخص الهندسة المعمارية والانشائية من كتب ومعلومات ومقالات واخبار ومشاريع وتطبيقات هندسية مفيدة  سواء فى جانب التصميم او التنفيذ والموقع  وكل ما هو جديد فى هذا المجال  </description><managingEditor>noreply@blogger.com (Ahmd Elzammar)</managingEditor><pubDate>Sun, 1 Nov 2026 13:22:25 -0800</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">188</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>https://www.civilmaker.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:summary>مدونة مشـروع مهندس انشائـي تهتم بكل ما يخص الهندسة المعمارية والانشائية من كتب ومعلومات ومقالات واخبار ومشاريع وتطبيقات هندسية مفيدة سواء فى جانب التصميم او التنفيذ والموقع وكل ما هو جديد فى هذا المجال </itunes:summary><itunes:subtitle>مدونة مشـروع مهندس انشائـي تهتم بكل ما يخص الهندسة المعمارية والانشائية من كتب ومعلومات ومقالات واخبار ومشاريع وتطبيقات هندسية مفيدة سواء فى جانب التصميم او التنفيذ والموقع وكل ما هو جديد فى هذا المجال </itunes:subtitle><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>عمل سيرة ذاتية CV احترافية  ATS جاهزة مجانا اونلاين PDF&amp;WORD عربي وانجليزي </title><link>https://www.civilmaker.com/2026/10/create-cv-ats.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Thu, 22 Oct 2026 13:59:43 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3715057882641724368</guid><description>
&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirxeCC2soXEn6niWyGyCNjw0HtJTMJN_JqtcNANyGoMvbmiaRSoPSAtUGVYXJUZXC9iNLhPFcGIhtWYrZqnQG3ET3zCJzg0dqpAoxapvK45mmls5tlCOT8AVGOUf62qJKoNIgLV-ez5PT1-5oTAP2Kqjjyp0w5gljvF86gfAz8PA6ltVspvuACluqbSrUq/s1600/cv.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" data-original-height="941" data-original-width="1672" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirxeCC2soXEn6niWyGyCNjw0HtJTMJN_JqtcNANyGoMvbmiaRSoPSAtUGVYXJUZXC9iNLhPFcGIhtWYrZqnQG3ET3zCJzg0dqpAoxapvK45mmls5tlCOT8AVGOUf62qJKoNIgLV-ez5PT1-5oTAP2Kqjjyp0w5gljvF86gfAz8PA6ltVspvuACluqbSrUq/s1600/cv.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;600;700;800&amp;family=Tajawal:wght@400;500;700;800&amp;family=IBM+Plex+Sans+Arabic:wght@400;600;700&amp;family=Almarai:wght@400;700;800&amp;family=Noto+Naskh+Arabic:wght@400;600;700&amp;display=swap" rel="stylesheet"&gt;
&lt;!-- ===== الإعلان الأول (قبل الأداة) - Rebar Page1 ===== --&gt;
&lt;div class="cvm-ad cvm-ad-top" style="margin:12px auto;text-align:center;clear:both"&gt;
&lt;script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6324409391516444" crossorigin="anonymous"&gt;&lt;/script&gt;
&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
&lt;div id="cvb" dir="rtl"&gt;
&lt;style&gt;
#cvb{--p:#0f4c81;--p2:#f28c28;--bg:#f2f4f7;--card:#fff;--bd:#dce2e9;--tx:#1d2733;--mut:#677482;--ok:#15803d;--warn:#b45309;--bad:#b91c1c;font-family:'Cairo',Tahoma,Arial,sans-serif;color:var(--tx);direction:rtl;text-align:right;line-height:1.6;font-size:15px;background:var(--bg);border-radius:14px;max-width:1440px;margin:0 auto;container-type:inline-size;position:relative}
#cvb *{box-sizing:border-box}
#cvb :where(div,p,span,label,b,small,i,em,ul,li,h5,section,header,aside,main):not(.cv,.cv *){text-align:inherit}
#cvb.cvb-full{position:fixed;inset:0;z-index:2147483000;max-width:none;border-radius:0;overflow:auto}
#cvb button,#cvb input,#cvb select,#cvb textarea{font-family:inherit;font-size:14px;color:var(--tx);margin:0;line-height:1.5}
#cvb input[type=text],#cvb input:not([type]),#cvb input[type=email],#cvb input[type=tel],#cvb input[type=url],#cvb select,#cvb textarea{width:100%;background:#fff;border:1px solid var(--bd);border-radius:8px;padding:7px 10px;outline:none;box-shadow:none;height:auto;min-height:0}
#cvb textarea{resize:vertical;min-height:70px}
#cvb input:focus,#cvb select:focus,#cvb textarea:focus{border-color:var(--p);box-shadow:0 0 0 3px rgba(15,76,129,.12)}
#cvb label.cvb-f{display:block;font-size:12.5px;color:var(--mut);font-weight:600}
#cvb label.cvb-f&gt;span{display:block;margin-bottom:3px}
#cvb .cvb-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--bd);background:#fff;border-radius:9px;padding:7px 13px;cursor:pointer;font-weight:600;white-space:nowrap;text-decoration:none;transition:background .15s,border-color .15s}
#cvb .cvb-btn:hover{border-color:var(--p);background:#f6f9fc}
#cvb .cvb-btn.pri{background:var(--p);border-color:var(--p);color:#fff}
#cvb .cvb-btn.pri:hover{background:#0c3d68}
#cvb .cvb-btn.acc{background:var(--p2);border-color:var(--p2);color:#fff}
#cvb .cvb-btn.acc:hover{background:#d9761a}
#cvb .cvb-btn.sm{padding:3px 9px;font-size:13px;border-radius:7px}
#cvb .cvb-btn.ghost{border-color:transparent;background:transparent}
#cvb .cvb-btn.ghost:hover{background:#eef2f6}
#cvb .cvb-ico{width:30px;height:30px;padding:0;justify-content:center;border-radius:8px}
#cvb .cvb-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;background:linear-gradient(135deg,#0f4c81,#163d63);color:#fff;border-radius:14px 14px 0 0}
#cvb.cvb-full .cvb-top{border-radius:0;position:sticky;top:0;z-index:5}
#cvb div,#cvb span,#cvb b,#cvb small,#cvb i,#cvb em,#cvb p,#cvb label,#cvb ul,#cvb li,#cvb section,#cvb header,#cvb aside,#cvb main,#cvb h1,#cvb h2{max-width:none;float:none;text-shadow:none}
#cvb .cvb-top *{text-align:right}
#cvb .cvb-brand{display:flex;flex-direction:row;align-items:center;gap:12px;flex:1 1 320px;min-width:0;margin:0;padding:0}
#cvb .cvb-brand&gt;div:last-child{flex:1 1 auto;min-width:0;width:auto;margin:0;padding:0}
#cvb .cvb-brand b{font-size:19px;font-weight:800;display:block;line-height:1.35;margin:0;padding:0;color:#fff;white-space:normal;width:auto}
#cvb .cvb-brand small{display:block;opacity:.85;font-size:12.5px;line-height:1.5;margin:2px 0 0;padding:0;color:#fff;width:auto}
#cvb .cvb-brand small span{white-space:nowrap}
#cvb .cvb-actions{flex:0 1 auto;margin:0;padding:0}
@container (max-width:760px){#cvb .cvb-top{flex-direction:column;align-items:stretch}#cvb .cvb-brand{flex:0 0 auto}#cvb .cvb-actions{width:100%}#cvb .cvb-actions&gt;.cvb-btn.acc,#cvb .cvb-actions&gt;.cvb-btn.pri{flex:1 1 0;justify-content:center}}
.cvm-ad:empty{display:none}
#cvb .cvb-logo{width:40px;height:40px;border-radius:10px;background:var(--p2);display:grid;place-items:center;font-weight:800;font-size:18px;flex:none}
#cvb .cvb-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
#cvb .cvb-top .cvb-btn:not(.acc):not(.pri){background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.25);color:#fff}
#cvb .cvb-top .cvb-btn:not(.acc):not(.pri):hover{background:rgba(255,255,255,.2)}
#cvb .cvb-top .cvb-btn.pri{background:#fff;color:var(--p);border-color:#fff}
#cvb .cvb-menu{position:relative}
#cvb .cvb-dd{position:absolute;top:calc(100% + 6px);left:0;background:#fff;border:1px solid var(--bd);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.15);padding:6px;min-width:230px;z-index:20;display:none}
#cvb .cvb-dd.open{display:block}
#cvb .cvb-dd button{display:block;width:100%;text-align:right;background:none;border:0;padding:8px 10px;border-radius:7px;cursor:pointer;color:var(--tx)}
#cvb .cvb-dd button:hover{background:#f0f4f8}
#cvb .cvb-dd hr{border:0;border-top:1px solid var(--bd);margin:4px 0}
#cvb .cvb-grid{display:grid;grid-template-columns:1fr;gap:16px;padding:16px}
#cvb .cvb-tabs{display:flex;gap:4px;background:#e4e9ef;padding:4px;border-radius:11px;margin-bottom:12px}
#cvb .cvb-tabs button{flex:1;border:0;background:transparent;padding:8px 6px;border-radius:8px;cursor:pointer;font-weight:700;color:var(--mut)}
#cvb .cvb-tabs button.on{background:#fff;color:var(--p);box-shadow:0 1px 3px rgba(0,0,0,.1)}
#cvb .cvb-card{background:var(--card);border:1px solid var(--bd);border-radius:12px;margin-bottom:12px}
#cvb .cvb-card-h{display:flex;align-items:center;gap:6px;padding:10px 12px;cursor:pointer;user-select:none}
#cvb .cvb-card-h .cvb-t{flex:1;font-weight:800;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#cvb .cvb-card-h .cvb-t small{font-weight:600;color:var(--mut);font-size:12px;margin-inline-start:6px}
#cvb .cvb-card.off .cvb-t{opacity:.45;text-decoration:line-through}
#cvb .cvb-card-b{padding:4px 12px 12px;border-top:1px solid #edf0f4}
#cvb .cvb-chev{transition:transform .2s;color:var(--mut);font-size:12px}
#cvb .cvb-card.open .cvb-chev{transform:rotate(180deg)}
#cvb .cvb-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
#cvb .cvb-row.one{grid-template-columns:1fr}
#cvb .cvb-row.three{grid-template-columns:2fr 1fr 1fr}
#cvb .cvb-ent{border:1px dashed #cfd7e0;border-radius:10px;padding:8px 10px 10px;margin-top:10px;background:#fafbfd}
#cvb .cvb-ent-h{display:flex;align-items:center;gap:4px}
#cvb .cvb-ent-h b{flex:1;font-size:13.5px;color:var(--p);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
#cvb .cvb-li{display:grid;grid-template-columns:1fr 1fr 30px;gap:6px;margin-top:6px}
#cvb .cvb-li.nolv{grid-template-columns:1fr 30px}
#cvb .cvb-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
#cvb .cvb-chip{border:1px solid var(--bd);background:#fff;border-radius:20px;padding:2px 10px;font-size:12.5px;cursor:pointer}
#cvb .cvb-chip:hover{border-color:var(--p2);color:var(--p2)}
#cvb .cvb-chip.used{opacity:.4;pointer-events:none}
#cvb .cvb-bank{background:#fff8ef;border:1px solid #f6d7b3;border-radius:10px;padding:8px 10px;margin-top:8px}
#cvb .cvb-bank h5{margin:6px 0 4px;font-size:12.5px;color:#9a5a12}
#cvb .cvb-bank button.cvb-sug{display:block;width:100%;text-align:start;background:#fff;border:1px solid #f1dcc2;border-radius:7px;padding:5px 8px;margin-bottom:4px;cursor:pointer;font-size:13px;line-height:1.5}
#cvb .cvb-bank button.cvb-sug:hover{border-color:var(--p2)}
#cvb .cvb-hint{font-size:12.5px;color:var(--mut);margin-top:6px}
#cvb .cvb-note{background:#eef6ff;border:1px solid #cfe3fb;color:#164a7a;border-radius:10px;padding:9px 12px;font-size:13.5px;margin-bottom:12px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#cvb .cvb-note.w{background:#fff7ed;border-color:#fed7aa;color:#8a4b0f}
#cvb .cvb-add{display:flex;gap:8px;align-items:center}
#cvb .cvb-tpls{display:grid;grid-template-columns:repeat(auto-fill,minmax(146px,1fr));gap:10px}
#cvb .cvb-tcat{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
#cvb .cvb-tcat button{border:1px solid var(--bd);background:#fff;border-radius:20px;padding:3px 12px;font-size:13px;font-weight:700;cursor:pointer;color:var(--mut)}
#cvb .cvb-tcat button.on{background:var(--p);border-color:var(--p);color:#fff}
#cvb .cvb-tpl b.cvb-badge{display:inline-block;font-size:11px;font-weight:700;border-radius:10px;padding:0 7px;margin-top:3px;background:#eef2f6;color:var(--mut)}
#cvb .cvb-tpl b.cvb-badge.ph{background:#fff1e3;color:#9a5a12}
#cvb .cvb-tpl{border:2px solid var(--bd);border-radius:10px;padding:8px;cursor:pointer;background:#fff;text-align:center;font-weight:700;font-size:13px}
#cvb .cvb-tpl.on{border-color:var(--p);box-shadow:0 0 0 3px rgba(15,76,129,.15)}
#cvb .cvb-tpl i{display:block;font-style:normal;font-weight:600;font-size:11.5px;color:var(--mut)}
#cvb .cvb-thumb{width:130px;height:184px;margin:0 auto 6px;border-radius:4px;background:#fff;position:relative;overflow:hidden;border:1px solid #e3e7ec;box-shadow:0 1px 4px rgba(0,0,0,.08)}
#cvb .cvb-mini{position:absolute;top:0;right:0;width:210mm;transform:scale(.1637);transform-origin:top right;pointer-events:none}
#cvb .cvb-colors{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
#cvb .cvb-sw{width:30px;height:30px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 1px var(--bd);cursor:pointer;padding:0}
#cvb .cvb-sw.on{box-shadow:0 0 0 2px var(--tx)}
#cvb input[type=color]{width:38px;height:32px;border:1px solid var(--bd);border-radius:8px;padding:2px;background:#fff;cursor:pointer}
#cvb input[type=range]{width:100%;accent-color:var(--p)}
#cvb .cvb-seg{display:inline-flex;background:#e4e9ef;border-radius:9px;padding:3px;gap:3px}
#cvb .cvb-seg button{border:0;background:transparent;border-radius:7px;padding:5px 12px;cursor:pointer;font-weight:700;color:var(--mut)}
#cvb .cvb-seg button.on{background:#fff;color:var(--p);box-shadow:0 1px 2px rgba(0,0,0,.1)}
#cvb .cvb-sec-t{font-weight:800;margin:4px 0 8px;font-size:14.5px}
#cvb .cvb-photo{display:flex;align-items:center;gap:12px;margin-top:10px}
#cvb .cvb-photo img,#cvb .cvb-photo .ph{width:64px;height:64px;border-radius:50%;object-fit:cover;background:#e8edf2;display:grid;place-items:center;color:var(--mut);font-size:24px;flex:none}
#cvb .cvb-switch{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer;color:var(--tx);font-weight:600}
#cvb .cvb-switch input{width:16px;height:16px;accent-color:var(--p)}
#cvb .cvb-score{display:flex;align-items:center;gap:16px;margin-bottom:12px}
#cvb .cvb-ring{--v:0;--c:var(--ok);width:92px;height:92px;border-radius:50%;background:conic-gradient(var(--c) calc(var(--v)*1%),#e5e9ee 0);display:grid;place-items:center;flex:none}
#cvb .cvb-ring b{width:72px;height:72px;border-radius:50%;background:#fff;display:grid;place-items:center;font-size:22px;font-weight:800}
#cvb .cvb-chk{list-style:none;margin:0;padding:0}
#cvb .cvb-chk li{display:flex;gap:8px;padding:7px 0;border-bottom:1px solid #eef1f4;font-size:13.5px;align-items:flex-start}
#cvb .cvb-chk li:last-child{border-bottom:0}
#cvb .cvb-chk .d{width:20px;height:20px;border-radius:50%;flex:none;display:grid;place-items:center;color:#fff;font-size:12px;font-weight:800;margin-top:1px}
#cvb .cvb-chk .ok .d{background:var(--ok)}
#cvb .cvb-chk .warn .d{background:var(--warn)}
#cvb .cvb-chk .bad .d{background:var(--bad)}
#cvb .cvb-kw{display:inline-block;border-radius:20px;padding:1px 10px;margin:3px;font-size:12.5px;font-weight:600}
#cvb .cvb-kw.y{background:#dcfce7;color:#14532d}
#cvb .cvb-kw.n{background:#fee2e2;color:#7f1d1d}
#cvb .cvb-pv{background:#dfe4ea;border-radius:12px;padding:12px;overflow:hidden}
#cvb .cvb-pv-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px;color:var(--mut);gap:8px;flex-wrap:wrap}
#cvb .cvb-pv-h b{color:var(--tx)}
#cvb .cvb-paper{position:relative;overflow:hidden}
#cvb .cvb-paper-in{transform-origin:top right;width:210mm;position:absolute;top:0;right:0}
#cvb .cvb-paper-in .cv{box-shadow:0 4px 24px rgba(0,0,0,.18)}
#cvb .cvb-pb{position:absolute;right:0;width:210mm;border-top:2px dashed rgba(220,38,38,.55);pointer-events:none;z-index:3}
#cvb .cvb-pb span{position:absolute;left:4px;top:-20px;background:rgba(220,38,38,.85);color:#fff;font-size:11px;padding:0 6px;border-radius:4px}
#cvb .cvb-fab{position:sticky;bottom:12px;margin:0 16px 12px auto;display:flex;justify-content:center}
#cvb .cvb-toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(30px);background:#1d2733;color:#fff;padding:9px 18px;border-radius:10px;font-size:14px;opacity:0;transition:.25s;z-index:2147483600;pointer-events:none}
#cvb .cvb-toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
#cvb .cvb-foot{text-align:center;font-size:12.5px;color:var(--mut);padding:0 16px 14px}
#cvb .cvb-foot a{color:var(--p)}
#cvb [hidden]{display:none!important}
@container (min-width:1000px){#cvb .cvb-grid{grid-template-columns:minmax(380px,1fr) minmax(0,1.15fr);align-items:start}#cvb .cvb-pv{position:sticky;top:12px}#cvb.cvb-full .cvb-pv{top:84px}#cvb .cvb-fab{display:none}}
@media (max-width:560px){#cvb .cvb-row,#cvb .cvb-row.three{grid-template-columns:1fr}#cvb .cvb-grid{padding:10px}#cvb .cvb-top{padding:12px}#cvb .cvb-li{grid-template-columns:1fr 1fr 30px}}
&lt;/style&gt;

&lt;div class="cvb-top"&gt;
  &lt;div class="cvb-brand"&gt;&lt;div class="cvb-logo"&gt;CV&lt;/div&gt;&lt;div&gt;&lt;b&gt;منشئ السيرة الذاتية للمهندسين&lt;/b&gt;&lt;small&gt;&lt;span&gt;قوالب احترافية متوافقة مع ATS&lt;/span&gt; · &lt;span&gt;تحميل PDF و Word مجانًا&lt;/span&gt;&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;div class="cvb-actions"&gt;
    &lt;button class="cvb-btn acc" data-act="pdf"&gt;⬇ تحميل PDF&lt;/button&gt;
    &lt;button class="cvb-btn pri" data-act="docx"&gt;⬇ تحميل Word&lt;/button&gt;
    &lt;div class="cvb-menu"&gt;
      &lt;button class="cvb-btn" data-act="menu"&gt;المزيد ▾&lt;/button&gt;
      &lt;div class="cvb-dd" id="cvb-dd"&gt;
        &lt;button data-act="txt"&gt;&#128196; تحميل نص عادي (للصق في مواقع التوظيف)&lt;/button&gt;
        &lt;button data-act="copytxt"&gt;&#128203; نسخ السيرة كنص&lt;/button&gt;
        &lt;hr&gt;
        &lt;button data-act="sample-ar"&gt;&#129514; تحميل نموذج تجريبي (عربي)&lt;/button&gt;
        &lt;button data-act="sample-en"&gt;&#129514; تحميل نموذج تجريبي (English)&lt;/button&gt;
        &lt;button data-act="blank"&gt;✨ البدء بسيرة فارغة&lt;/button&gt;
        &lt;hr&gt;
        &lt;button data-act="save-json"&gt;&#128190; حفظ نسخة من بياناتي (ملف)&lt;/button&gt;
        &lt;button data-act="load-json"&gt;&#128194; فتح ملف بيانات محفوظ&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;button class="cvb-btn cvb-ico" data-act="full" title="ملء الشاشة"&gt;⛶&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class="cvb-grid"&gt;
  &lt;div class="cvb-ed"&gt;
    &lt;div class="cvb-tabs"&gt;
      &lt;button data-tab="content" class="on"&gt;✍️ المحتوى&lt;/button&gt;
      &lt;button data-tab="design"&gt;&#127912; التصميم&lt;/button&gt;
      &lt;button data-tab="ats"&gt;✅ فحص ATS&lt;/button&gt;
    &lt;/div&gt;
    &lt;div id="cvb-pane"&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="cvb-pv" id="cvb-pv"&gt;
    &lt;div class="cvb-pv-h"&gt;&lt;span&gt;المعاينة المباشرة · &lt;b id="cvb-pages"&gt;صفحة واحدة&lt;/b&gt;&lt;/span&gt;&lt;span id="cvb-tplname"&gt;&lt;/span&gt;&lt;/div&gt;
    &lt;div class="cvb-paper" id="cvb-paper"&gt;&lt;div class="cvb-paper-in" id="cvb-paper-in"&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="cvb-fab"&gt;&lt;button class="cvb-btn acc" data-act="goto-pv"&gt;&#128065; عرض المعاينة&lt;/button&gt;&lt;/div&gt;
&lt;div class="cvb-foot"&gt;بياناتك تُحفظ تلقائيًا في متصفحك فقط ولا تُرسل لأي خادم · &lt;a href="https://www.civilmaker.com" target="_blank" rel="noopener"&gt;civilmaker&lt;/a&gt;&lt;/div&gt;
&lt;input type="file" id="cvb-file-json" accept=".json,application/json" hidden&gt;
&lt;input type="file" id="cvb-file-img" accept="image/*" hidden&gt;
&lt;div class="cvb-toast" id="cvb-toast"&gt;&lt;/div&gt;

&lt;script&gt;
(function(){
'use strict';
var root=document.getElementById('cvb');
if(!root||root.getAttribute('data-ready')){return;}
root.setAttribute('data-ready','1');
var LS='civilmaker_cv_v1';
function $(s){return root.querySelector(s);}
function h(s){return String(s==null?'':s).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;').replace(/"/g,'&amp;quot;');}
function uid(){return 's'+Math.random().toString(36).slice(2,9);}
function clone(o){return JSON.parse(JSON.stringify(o));}

/* ---------- \u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0623\u0642\u0633\u0627\u0645 ---------- */
var TYPES={
 summary:{kind:'text',ar:'\u0627\u0644\u0645\u0644\u062e\u0635 \u0627\u0644\u0645\u0647\u0646\u064a',en:'Professional Summary',ph:'\u0627\u0643\u062a\u0628 3 \u0625\u0644\u0649 4 \u0623\u0633\u0637\u0631 \u0639\u0646 \u062e\u0628\u0631\u062a\u0643 \u0648\u062a\u062e\u0635\u0635\u0643 \u0648\u0623\u0647\u0645 \u0625\u0646\u062c\u0627\u0632\u0627\u062a\u0643 \u0648\u0645\u0627 \u062a\u0636\u064a\u0641\u0647 \u0644\u062c\u0647\u0629 \u0627\u0644\u0639\u0645\u0644.',bank:'sum'},
 experience:{kind:'entries',ar:'\u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629',en:'Work Experience',f:['h1','h2','loc','start','end','desc'],L:{h1:'\u0627\u0644\u0645\u0633\u0645\u0649 \u0627\u0644\u0648\u0638\u064a\u0641\u064a',h2:'\u0627\u0644\u0634\u0631\u0643\u0629 / \u0627\u0644\u062c\u0647\u0629',loc:'\u0627\u0644\u0645\u062f\u064a\u0646\u0629\u060c \u0627\u0644\u062f\u0648\u0644\u0629',desc:'\u0627\u0644\u0645\u0647\u0627\u0645 \u0648\u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a (\u0643\u0644 \u0633\u0637\u0631 = \u0646\u0642\u0637\u0629)'},bank:'exp'},
 projects:{kind:'entries',ar:'\u0623\u0628\u0631\u0632 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639',en:'Key Projects',f:['h1','h2','loc','start','end','desc'],L:{h1:'\u0627\u0633\u0645 \u0627\u0644\u0645\u0634\u0631\u0648\u0639',h2:'\u062f\u0648\u0631\u0643 / \u0627\u0644\u0639\u0645\u064a\u0644 / \u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639',loc:'\u0627\u0644\u0645\u0648\u0642\u0639',desc:'\u0648\u0635\u0641 \u0645\u062e\u062a\u0635\u0631 \u0648\u062f\u0648\u0631\u0643 \u0641\u064a \u0627\u0644\u0645\u0634\u0631\u0648\u0639 (\u0643\u0644 \u0633\u0637\u0631 = \u0646\u0642\u0637\u0629)'},bank:'exp'},
 education:{kind:'entries',ar:'\u0627\u0644\u062a\u0639\u0644\u064a\u0645',en:'Education',f:['h1','h2','loc','start','end','desc'],L:{h1:'\u0627\u0644\u062f\u0631\u062c\u0629 \u0627\u0644\u0639\u0644\u0645\u064a\u0629 \u0648\u0627\u0644\u062a\u062e\u0635\u0635',h2:'\u0627\u0644\u062c\u0627\u0645\u0639\u0629 / \u0627\u0644\u0643\u0644\u064a\u0629',loc:'\u0627\u0644\u0645\u062f\u064a\u0646\u0629\u060c \u0627\u0644\u062f\u0648\u0644\u0629',desc:'\u0627\u0644\u062a\u0642\u062f\u064a\u0631\u060c \u0645\u0634\u0631\u0648\u0639 \u0627\u0644\u062a\u062e\u0631\u062c\u060c \u062a\u0641\u0627\u0635\u064a\u0644 \u0623\u062e\u0631\u0649'}},
 certifications:{kind:'entries',ar:'\u0627\u0644\u0634\u0647\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0647\u0646\u064a\u0629',en:'Certifications',f:['h1','h2','end'],L:{h1:'\u0627\u0633\u0645 \u0627\u0644\u0634\u0647\u0627\u062f\u0629 (\u0645\u062b\u0627\u0644: PMP)',h2:'\u0627\u0644\u062c\u0647\u0629 \u0627\u0644\u0645\u0627\u0646\u062d\u0629',end:'\u0627\u0644\u062a\u0627\u0631\u064a\u062e'}},
 courses:{kind:'entries',ar:'\u0627\u0644\u062f\u0648\u0631\u0627\u062a \u0627\u0644\u062a\u062f\u0631\u064a\u0628\u064a\u0629',en:'Training Courses',f:['h1','h2','end'],L:{h1:'\u0627\u0633\u0645 \u0627\u0644\u062f\u0648\u0631\u0629',h2:'\u0627\u0644\u062c\u0647\u0629 / \u0627\u0644\u0645\u062f\u0631\u0628',end:'\u0627\u0644\u062a\u0627\u0631\u064a\u062e'}},
 skills:{kind:'list',ar:'\u0627\u0644\u0645\u0647\u0627\u0631\u0627\u062a',en:'Skills',lvl:false,sug:'skills',L:{name:'\u0627\u0644\u0645\u0647\u0627\u0631\u0629'}},
 software:{kind:'list',ar:'\u0627\u0644\u0628\u0631\u0627\u0645\u062c \u0627\u0644\u0647\u0646\u062f\u0633\u064a\u0629',en:'Engineering Software',lvl:true,sug:'soft',L:{name:'\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c',lvl:'\u0627\u0644\u0645\u0633\u062a\u0648\u0649'}},
 languages:{kind:'list',ar:'\u0627\u0644\u0644\u063a\u0627\u062a',en:'Languages',lvl:true,sug:'lang',L:{name:'\u0627\u0644\u0644\u063a\u0629',lvl:'\u0627\u0644\u0645\u0633\u062a\u0648\u0649'}},
 memberships:{kind:'list',ar:'\u0627\u0644\u0639\u0636\u0648\u064a\u0627\u062a \u0627\u0644\u0645\u0647\u0646\u064a\u0629',en:'Professional Memberships',lvl:false,L:{name:'\u0627\u0644\u0639\u0636\u0648\u064a\u0629'}},
 personal:{kind:'list',ar:'\u0628\u064a\u0627\u0646\u0627\u062a \u0634\u062e\u0635\u064a\u0629',en:'Personal Details',lvl:true,sug:'pers',L:{name:'\u0627\u0644\u0628\u064a\u0627\u0646',lvl:'\u0627\u0644\u0642\u064a\u0645\u0629'}},
 awards:{kind:'entries',ar:'\u0627\u0644\u062c\u0648\u0627\u0626\u0632 \u0648\u0627\u0644\u062a\u0643\u0631\u064a\u0645\u0627\u062a',en:'Awards',f:['h1','h2','end','desc'],L:{h1:'\u0627\u0644\u062c\u0627\u0626\u0632\u0629',h2:'\u0627\u0644\u062c\u0647\u0629 \u0627\u0644\u0645\u0627\u0646\u062d\u0629',end:'\u0627\u0644\u062a\u0627\u0631\u064a\u062e',desc:'\u062a\u0641\u0627\u0635\u064a\u0644'}},
 volunteer:{kind:'entries',ar:'\u0627\u0644\u0639\u0645\u0644 \u0627\u0644\u062a\u0637\u0648\u0639\u064a',en:'Volunteering',f:['h1','h2','start','end','desc'],L:{h1:'\u0627\u0644\u062f\u0648\u0631',h2:'\u0627\u0644\u062c\u0647\u0629',desc:'\u062a\u0641\u0627\u0635\u064a\u0644'}},
 references:{kind:'text',ar:'\u0627\u0644\u0645\u0631\u0627\u062c\u0639',en:'References',ph:'\u062a\u064f\u0642\u062f\u064e\u0651\u0645 \u0639\u0646\u062f \u0627\u0644\u0637\u0644\u0628'},
 custom:{kind:'entries',ar:'\u0642\u0633\u0645 \u0645\u062e\u0635\u0635',en:'Custom Section',f:['h1','h2','loc','start','end','desc'],L:{h1:'\u0627\u0644\u0639\u0646\u0648\u0627\u0646',h2:'\u0639\u0646\u0648\u0627\u0646 \u0641\u0631\u0639\u064a',loc:'\u0627\u0644\u0645\u0643\u0627\u0646',desc:'\u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644'}}
};
var ADD_ORDER=['summary','experience','projects','education','skills','software','certifications','courses','languages','memberships','personal','awards','volunteer','references','custom'];
var TPL=[
 {id:'classic',n:'\u0643\u0644\u0627\u0633\u064a\u0643',d:'\u0631\u0633\u0645\u064a \u0645\u062a\u0648\u0627\u0632\u0646',cat:'classic',ph:'none',ats:1},
 {id:'classicp',n:'\u0643\u0644\u0627\u0633\u064a\u0643 \u0628\u0635\u0648\u0631\u0629',d:'\u0631\u0633\u0645\u064a \u0645\u0639 \u0635\u0648\u0631\u0629',cat:'classic',ph:'yes',ats:1},
 {id:'elegant',n:'\u0623\u0646\u064a\u0642',d:'\u0643\u0644\u0627\u0633\u064a\u0643\u064a \u0631\u0627\u0642\u064d',cat:'classic',ph:'none',ats:1},
 {id:'minimal',n:'\u0628\u0633\u064a\u0637 ATS',d:'\u0623\u0628\u064a\u0636 \u0648\u0623\u0633\u0648\u062f\u060c \u0627\u0644\u0623\u0639\u0644\u0649 \u062a\u0648\u0627\u0641\u0642\u064b\u0627',cat:'classic',ph:'none',ats:1},
 {id:'modern',n:'\u0645\u0648\u062f\u0631\u0646',d:'\u0639\u0635\u0631\u064a \u0648\u0646\u0638\u064a\u0641',cat:'modern',ph:'opt',ats:1},
 {id:'card',n:'\u0645\u0648\u062f\u0631\u0646 \u0628\u0635\u0648\u0631\u0629',d:'\u0628\u0637\u0627\u0642\u0629 \u0639\u0644\u0648\u064a\u0629 \u0648\u0635\u0648\u0631\u0629',cat:'modern',ph:'yes',ats:1},
 {id:'split',n:'\u0645\u0648\u062f\u0631\u0646 \u0645\u0642\u0633\u0651\u0645',d:'\u0627\u0644\u062a\u0648\u0627\u0635\u0644 \u0641\u064a \u062c\u0627\u0646\u0628 \u0627\u0644\u0631\u0623\u0633',cat:'modern',ph:'none',ats:1},
 {id:'exec',n:'\u062a\u0646\u0641\u064a\u0630\u064a',d:'\u062a\u0648\u0627\u0631\u064a\u062e \u0641\u064a \u0639\u0645\u0648\u062f',cat:'modern',ph:'none',ats:1},
 {id:'vivid',n:'\u062d\u064a\u0648\u064a',d:'\u0634\u0631\u064a\u0637 \u0645\u0644\u0648\u0646',cat:'vivid',ph:'opt',ats:1},
 {id:'wave',n:'\u062d\u064a\u0648\u064a \u0645\u062a\u062f\u0631\u062c',d:'\u062a\u062f\u0631\u062c \u0644\u0648\u0646\u064a \u0645\u0639 \u0635\u0648\u0631\u0629',cat:'vivid',ph:'yes',ats:1},
 {id:'timeline',n:'\u062e\u0637 \u0632\u0645\u0646\u064a',d:'\u0645\u0633\u0627\u0631 \u0645\u0647\u0646\u064a \u0628\u0646\u0642\u0627\u0637',cat:'vivid',ph:'none',ats:1},
 {id:'side',n:'\u0639\u0645\u0648\u062f \u062c\u0627\u0646\u0628\u064a',d:'\u0625\u0628\u062f\u0627\u0639\u064a \u0641\u0627\u062a\u062d \u0628\u0635\u0648\u0631\u0629',cat:'vivid',ph:'yes',ats:0,lay:'side'},
 {id:'bold',n:'\u062c\u0631\u064a\u0621 \u062f\u0627\u0643\u0646',d:'\u0639\u0645\u0648\u062f \u0645\u0644\u0648\u0646 \u0628\u0635\u0648\u0631\u0629',cat:'vivid',ph:'yes',ats:0,lay:'side'}
];
var TCAT=[['all','\u0627\u0644\u0643\u0644'],['classic','\u0643\u0644\u0627\u0633\u064a\u0643'],['modern','\u0645\u0648\u062f\u0631\u0646'],['vivid','\u062d\u064a\u0648\u064a'],['photo','\ud83d\udcf7 \u0628\u0635\u0648\u0631\u0629'],['nophoto','\u0628\u062f\u0648\u0646 \u0635\u0648\u0631\u0629']];
function tplOf(id){for(var i=0;i&lt;TPL.length;i++)if(TPL[i].id===id)return TPL[i];return TPL[0];}
var FAM={classic:'classic',classicp:'classicL',elegant:'classic',minimal:'minimal',modern:'modern',card:'modern',split:'modern',exec:'exec',vivid:'vivid',wave:'vivid',timeline:'modern',side:'side',bold:'side'};
var COLORS=['#1f4e79','#0f766e','#b45309','#334155','#7c2d12','#166534','#6d28d9','#be123c'];
var FONTS=[
 {id:'Cairo',n:'Cairo',css:"'Cairo',Arial,sans-serif"},
 {id:'Tajawal',n:'Tajawal',css:"'Tajawal',Arial,sans-serif"},
 {id:'Plex',n:'IBM Plex Arabic',css:"'IBM Plex Sans Arabic',Arial,sans-serif"},
 {id:'Almarai',n:'Almarai',css:"'Almarai',Arial,sans-serif"},
 {id:'Naskh',n:'Noto Naskh (\u0643\u0644\u0627\u0633\u064a\u0643\u064a)',css:"'Noto Naskh Arabic',Georgia,serif"},
 {id:'Arial',n:'Arial (\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645)',css:"Arial,Helvetica,sans-serif"}
];
var LVL={ar:['\u0645\u0628\u062a\u062f\u0626','\u0645\u062a\u0648\u0633\u0637','\u062c\u064a\u062f','\u062c\u064a\u062f \u062c\u062f\u064b\u0627','\u0645\u062a\u0642\u062f\u0645','\u062e\u0628\u064a\u0631','\u0645\u0645\u062a\u0627\u0632','\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0623\u0645'],en:['Beginner','Intermediate','Good','Very Good','Advanced','Expert','Fluent','Native']};

/* ---------- \u0628\u0646\u0643 \u0627\u0644\u0639\u0628\u0627\u0631\u0627\u062a \u0648\u0627\u0644\u0627\u0642\u062a\u0631\u0627\u062d\u0627\u062a ---------- */
var BANK={
 exp:{ar:[
  ['\u062a\u0646\u0641\u064a\u0630 \u0648\u0625\u0634\u0631\u0627\u0641 \u0645\u0648\u0642\u0639',['\u0627\u0644\u0625\u0634\u0631\u0627\u0641 \u0639\u0644\u0649 \u062a\u0646\u0641\u064a\u0630 \u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629 \u0627\u0644\u0645\u0633\u0644\u062d\u0629 \u0644\u0639\u062f\u062f [X] \u0645\u0628\u0627\u0646\u064d \u0633\u0643\u0646\u064a\u0629 \u0648\u0641\u0642 \u0627\u0644\u0645\u062e\u0637\u0637\u0627\u062a \u0648\u0627\u0644\u0645\u0648\u0627\u0635\u0641\u0627\u062a \u0627\u0644\u0641\u0646\u064a\u0629.','\u0627\u0633\u062a\u0644\u0627\u0645 \u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0634\u062f\u0627\u062a \u0648\u0627\u0644\u062a\u0633\u0644\u064a\u062d \u0642\u0628\u0644 \u0627\u0644\u0635\u0628 \u0648\u0625\u0639\u062f\u0627\u062f \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0641\u062d\u0635 (IR) \u0645\u0639 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u064a.','\u0625\u0639\u062f\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u062a\u0641\u0631\u064a\u062f \u0627\u0644\u062d\u062f\u064a\u062f (BBS) \u0648\u062a\u0642\u0644\u064a\u0644 \u0627\u0644\u0647\u0627\u0644\u0643 \u0641\u064a \u0627\u0644\u062a\u0633\u0644\u064a\u062d \u0628\u0646\u0633\u0628\u0629 [X]%.','\u0645\u062a\u0627\u0628\u0639\u0629 \u0645\u0642\u0627\u0648\u0644\u064a \u0627\u0644\u0628\u0627\u0637\u0646 \u064a\u0648\u0645\u064a\u064b\u0627 \u0648\u0627\u0644\u0627\u0644\u062a\u0632\u0627\u0645 \u0628\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0627\u0644\u0632\u0645\u0646\u064a \u062f\u0648\u0646 \u062a\u0623\u062e\u064a\u0631.','\u062a\u0637\u0628\u064a\u0642 \u0627\u0634\u062a\u0631\u0627\u0637\u0627\u062a \u0627\u0644\u0633\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0647\u0646\u064a\u0629 \u0648\u062a\u062d\u0642\u064a\u0642 [X] \u0633\u0627\u0639\u0629 \u0639\u0645\u0644 \u062f\u0648\u0646 \u0625\u0635\u0627\u0628\u0627\u062a.','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u062a\u0642\u0627\u0631\u064a\u0631 \u0627\u0644\u064a\u0648\u0645\u064a\u0629 \u0648\u0627\u0644\u0623\u0633\u0628\u0648\u0639\u064a\u0629 \u0644\u062a\u0642\u062f\u0645 \u0627\u0644\u0623\u0639\u0645\u0627\u0644 \u0648\u0631\u0641\u0639\u0647\u0627 \u0644\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639.']],
  ['\u0645\u0643\u062a\u0628 \u0641\u0646\u064a \u0648\u062d\u0635\u0631',['\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0644\u0648\u062d\u0627\u062a \u0627\u0644\u062a\u0646\u0641\u064a\u0630\u064a\u0629 (Shop Drawings) \u0644\u0644\u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a\u0629 \u0648\u0627\u0644\u0645\u0639\u0645\u0627\u0631\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 AutoCAD.','\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0648\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0642\u0627\u064a\u0633\u0627\u062a \u0648\u062c\u062f\u0627\u0648\u0644 \u0627\u0644\u0643\u0645\u064a\u0627\u062a (BOQ) \u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0628\u0642\u064a\u0645\u0629 [X] \u0645\u0644\u064a\u0648\u0646.','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a \u0627\u0644\u0634\u0647\u0631\u064a\u0629 \u0644\u0644\u0645\u0627\u0644\u0643 \u0648\u0645\u0642\u0627\u0648\u0644\u064a \u0627\u0644\u0628\u0627\u0637\u0646 \u0648\u0645\u0631\u0627\u062c\u0639\u062a\u0647\u0627.','\u0625\u0639\u062f\u0627\u062f \u0637\u0644\u0628\u0627\u062a \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0645\u0648\u0627\u062f (MIR) \u0648\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0627\u0633\u062a\u064a\u0636\u0627\u062d (RFI) \u0648\u0645\u062a\u0627\u0628\u0639\u062a\u0647\u0627 \u0645\u0639 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u064a.','\u062f\u0631\u0627\u0633\u0629 \u0627\u0644\u0645\u0646\u0627\u0642\u0635\u0627\u062a \u0648\u062a\u0633\u0639\u064a\u0631 \u0627\u0644\u0628\u0646\u0648\u062f \u0648\u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0623\u0633\u0639\u0627\u0631.']],
  ['\u062a\u0635\u0645\u064a\u0645 \u0625\u0646\u0634\u0627\u0626\u064a',['\u062a\u0635\u0645\u064a\u0645 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a\u0629 \u0644\u0645\u0628\u0627\u0646\u064d \u062e\u0631\u0633\u0627\u0646\u064a\u0629 \u062d\u062a\u0649 [X] \u0637\u0627\u0628\u0642\u064b\u0627 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 ETABS \u0648SAFE \u0648\u0641\u0642 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0645\u0635\u0631\u064a \u0648ACI.','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u062a\u062d\u0644\u064a\u0644\u064a\u0629 \u0648\u062f\u0631\u0627\u0633\u0629 \u062a\u0623\u062b\u064a\u0631 \u0627\u0644\u0623\u062d\u0645\u0627\u0644 \u0627\u0644\u0632\u0644\u0632\u0627\u0644\u064a\u0629 \u0648\u0627\u0644\u0631\u064a\u0627\u062d.','\u062e\u0641\u0636 \u062a\u0643\u0644\u0641\u0629 \u0627\u0644\u0647\u064a\u0643\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a \u0628\u0646\u0633\u0628\u0629 [X]% \u0645\u0646 \u062e\u0644\u0627\u0644 \u062a\u062d\u0633\u064a\u0646 \u0627\u0644\u062d\u0644\u0648\u0644 \u0627\u0644\u062a\u0635\u0645\u064a\u0645\u064a\u0629.','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0630\u0643\u0631\u0627\u062a \u0627\u0644\u062d\u0633\u0627\u0628\u064a\u0629 \u0648\u0627\u0644\u0644\u0648\u062d\u0627\u062a \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a\u0629 \u0648\u0645\u0631\u0627\u062c\u0639\u062a\u0647\u0627 \u0645\u0639 \u0627\u0644\u0645\u0647\u0646\u062f\u0633 \u0627\u0644\u0645\u0633\u0624\u0648\u0644.']],
  ['\u062a\u062e\u0637\u064a\u0637 \u0648\u0625\u062f\u0627\u0631\u0629 \u0645\u0634\u0631\u0648\u0639\u0627\u062a',['\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0627\u0644\u0632\u0645\u0646\u064a \u0644\u0644\u0645\u0634\u0631\u0648\u0639 \u0639\u0644\u0649 Primavera P6 \u0648\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u062a\u0642\u062f\u0645 \u0627\u0644\u0641\u0639\u0644\u064a \u0623\u0633\u0628\u0648\u0639\u064a\u064b\u0627.','\u0625\u0639\u062f\u0627\u062f \u062a\u0642\u0627\u0631\u064a\u0631 \u0627\u0644\u0623\u062f\u0627\u0621 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u0646\u0647\u062c\u064a\u0629 \u0627\u0644\u0642\u064a\u0645\u0629 \u0627\u0644\u0645\u0643\u062a\u0633\u0628\u0629 (EVM).','\u0642\u064a\u0627\u062f\u0629 \u0641\u0631\u064a\u0642 \u0645\u0643\u0648\u0651\u0646 \u0645\u0646 [X] \u0645\u0647\u0646\u062f\u0633\u064a\u0646 \u0648\u0641\u0646\u064a\u064a\u0646 \u0648\u062a\u0648\u0632\u064a\u0639 \u0627\u0644\u0645\u0647\u0627\u0645 \u0628\u064a\u0646\u0647\u0645.','\u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0645\u0634\u0631\u0648\u0639 \u0642\u0628\u0644 \u0627\u0644\u0645\u0648\u0639\u062f \u0627\u0644\u0645\u062d\u062f\u062f \u0628\u0640 [X] \u0623\u0633\u0627\u0628\u064a\u0639 \u0648\u0636\u0645\u0646 \u0627\u0644\u0645\u064a\u0632\u0627\u0646\u064a\u0629 \u0627\u0644\u0645\u0639\u062a\u0645\u062f\u0629.']]
 ],en:[
  ['Site Execution',['Supervised reinforced concrete works for [X] residential buildings in line with drawings and specifications.','Inspected formwork and reinforcement before casting and raised inspection requests (IR) with the consultant.','Prepared bar bending schedules (BBS), reducing rebar waste by [X]%.','Coordinated daily with subcontractors to keep works on schedule.','Enforced HSE requirements, achieving [X] safe man-hours with zero lost-time injuries.','Prepared daily and weekly progress reports for project management.']],
  ['Technical Office &amp; QS',['Prepared structural and architectural shop drawings using AutoCAD.','Performed quantity take-off and prepared BOQs for projects worth [X] million.','Prepared and reviewed monthly payment applications for the client and subcontractors.','Prepared material submittals (MIR) and RFIs and followed up with the consultant.','Studied tenders, priced items and prepared cost analyses.']],
  ['Structural Design',['Designed RC structures up to [X] storeys using ETABS and SAFE per ACI and ECP codes.','Built analytical models and assessed seismic and wind load effects.','Reduced structural cost by [X]% through design optimization.','Prepared calculation reports and structural drawings for review.']],
  ['Planning &amp; PM',['Developed project schedules in Primavera P6 and tracked weekly progress.','Prepared performance reports using Earned Value Management (EVM).','Led a team of [X] engineers and technicians.','Delivered the project [X] weeks ahead of schedule and within budget.']]
 ]},
 sum:{ar:[
  ['\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u062e\u0631\u062c',['\u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a \u062d\u062f\u064a\u062b \u0627\u0644\u062a\u062e\u0631\u062c \u0645\u0646 [\u0627\u0644\u062c\u0627\u0645\u0639\u0629] \u0628\u062a\u0642\u062f\u064a\u0631 [\u062c\u064a\u062f \u062c\u062f\u064b\u0627]\u060c \u0623\u0645\u062a\u0644\u0643 \u0645\u0639\u0631\u0641\u0629 \u062c\u064a\u062f\u0629 \u0628\u0628\u0631\u0627\u0645\u062c AutoCAD \u0648ETABS \u0648\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a\u060c \u0648\u062e\u0628\u0631\u0629 \u062a\u062f\u0631\u064a\u0628\u064a\u0629 \u0641\u064a \u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u062a\u0646\u0641\u064a\u0630. \u0623\u0633\u0639\u0649 \u0644\u0644\u0627\u0646\u0636\u0645\u0627\u0645 \u0625\u0644\u0649 \u0634\u0631\u0643\u0629 \u0645\u0642\u0627\u0648\u0644\u0627\u062a \u0631\u0627\u0626\u062f\u0629 \u0644\u062a\u0637\u0648\u064a\u0631 \u0645\u0647\u0627\u0631\u0627\u062a\u064a \u0648\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0628\u062c\u0648\u062f\u0629 \u0639\u0627\u0644\u064a\u0629.']],
  ['\u062e\u0628\u0631\u0629 \u0645\u062a\u0648\u0633\u0637\u0629',['\u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a \u0628\u062e\u0628\u0631\u0629 [X] \u0633\u0646\u0648\u0627\u062a \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0645\u0628\u0627\u0646\u064a \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u064a\u0629 \u0648\u0627\u0644\u0625\u0634\u0631\u0627\u0641 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0627\u0642\u0639\u060c \u0634\u0627\u0631\u0643\u062a \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0645\u0634\u0627\u0631\u064a\u0639 \u0633\u0643\u0646\u064a\u0629 \u0648\u062a\u062c\u0627\u0631\u064a\u0629 \u0628\u0642\u064a\u0645\u0629 \u062a\u062a\u062c\u0627\u0648\u0632 [X] \u0645\u0644\u064a\u0648\u0646. \u0645\u062a\u0645\u0643\u0646 \u0645\u0646 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062e\u0637\u0637\u0627\u062a \u0648\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a \u0648\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0648\u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0645\u0639 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u064a \u0648\u0645\u0642\u0627\u0648\u0644\u064a \u0627\u0644\u0628\u0627\u0637\u0646.']],
  ['\u062e\u0628\u0631\u0629 \u0643\u0628\u064a\u0631\u0629',['\u0645\u062f\u064a\u0631 \u0645\u0634\u0631\u0648\u0639\u0627\u062a \u0628\u062e\u0628\u0631\u0629 \u062a\u062a\u062c\u0627\u0648\u0632 [X] \u0639\u0627\u0645\u064b\u0627 \u0641\u064a \u0625\u062f\u0627\u0631\u0629 \u0645\u0634\u0627\u0631\u064a\u0639 \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0648\u0627\u0644\u0645\u0628\u0627\u0646\u064a\u060c \u0623\u0642\u0648\u062f \u0641\u0631\u0642\u064b\u0627 \u0645\u062a\u0639\u062f\u062f\u0629 \u0627\u0644\u062a\u062e\u0635\u0635\u0627\u062a \u0648\u0623\u062f\u064a\u0631 \u0627\u0644\u0645\u064a\u0632\u0627\u0646\u064a\u0627\u062a \u0648\u0627\u0644\u0628\u0631\u0627\u0645\u062c \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0628\u0643\u0641\u0627\u0621\u0629. \u062d\u0627\u0635\u0644 \u0639\u0644\u0649 \u0634\u0647\u0627\u062f\u0629 PMP \u0648\u0644\u062f\u064a \u0633\u062c\u0644 \u0641\u064a \u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0641\u064a \u0645\u0648\u0627\u0639\u064a\u062f\u0647\u0627 \u0648\u0636\u0645\u0646 \u0627\u0644\u0645\u064a\u0632\u0627\u0646\u064a\u0629.']]
 ],en:[
  ['Fresh graduate',['Civil engineering graduate from [University] with a [Very Good] grade, skilled in AutoCAD, ETABS and quantity take-off, with site training experience. Seeking to join a leading contractor to grow and deliver high-quality projects.']],
  ['Mid-level',['Civil engineer with [X] years of experience in RC building construction and site supervision, contributing to residential and commercial projects worth over [X] million. Skilled in reading drawings, preparing payment applications, quantity surveying and coordinating with consultants and subcontractors.']],
  ['Senior',['Project manager with [X]+ years of experience delivering infrastructure and building projects, leading multidisciplinary teams and managing budgets and schedules. PMP certified with a track record of on-time, on-budget delivery.']]
 ]}
};
var SUG={
 skills:{ar:['\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062e\u0637\u0637\u0627\u062a','\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a','\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u0648\u0627\u0642\u0639','\u0636\u0628\u0637 \u0627\u0644\u062c\u0648\u062f\u0629 QA/QC','\u0627\u0644\u0633\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0647\u0646\u064a\u0629 HSE','\u0627\u0644\u062a\u0635\u0645\u064a\u0645 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a','\u0627\u0644\u062a\u062e\u0637\u064a\u0637 \u0648\u0627\u0644\u062c\u062f\u0648\u0644\u0629','\u0625\u0639\u062f\u0627\u062f BBS','\u0627\u0644\u0644\u0648\u062d\u0627\u062a \u0627\u0644\u062a\u0646\u0641\u064a\u0630\u064a\u0629','\u062f\u0631\u0627\u0633\u0629 \u0627\u0644\u0645\u0646\u0627\u0642\u0635\u0627\u062a','\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u062a\u0643\u0627\u0644\u064a\u0641','\u0627\u0644\u0639\u0645\u0644 \u0636\u0645\u0646 \u0641\u0631\u064a\u0642','\u0627\u0644\u0642\u064a\u0627\u062f\u0629','\u062d\u0644 \u0627\u0644\u0645\u0634\u0643\u0644\u0627\u062a'],en:['Blueprint Reading','Quantity Surveying','Payment Applications','Site Management','QA/QC','HSE','Structural Design','Planning &amp; Scheduling','Bar Bending Schedules','Shop Drawings','Tendering','Cost Control','Teamwork','Leadership','Problem Solving']},
 soft:{all:['AutoCAD','Revit','ETABS','SAFE','SAP2000','STAAD.Pro','Tekla Structures','Robot Structural','CSI Bridge','Civil 3D','Primavera P6','MS Project','Navisworks','MS Excel','Prokon','Plaxis']},
 lang:{ar:['\u0627\u0644\u0639\u0631\u0628\u064a\u0629','\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629','\u0627\u0644\u0641\u0631\u0646\u0633\u064a\u0629','\u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a\u0629'],en:['Arabic','English','French','German']},
 pers:{ar:['\u0627\u0644\u062c\u0646\u0633\u064a\u0629','\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0645\u064a\u0644\u0627\u062f','\u0627\u0644\u0645\u0648\u0642\u0641 \u0645\u0646 \u0627\u0644\u062a\u062c\u0646\u064a\u062f','\u0631\u062e\u0635\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629','\u0627\u0644\u062d\u0627\u0644\u0629 \u0627\u0644\u0627\u062c\u062a\u0645\u0627\u0639\u064a\u0629'],en:['Nationality','Date of Birth','Military Status','Driving License','Marital Status']}
};

/* ---------- \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a\u0629 ---------- */
function S_(type,title,extra){var s={id:uid(),type:type,title:title,on:true};var k=TYPES[type].kind;if(k==='text')s.text='';else s.items=[];for(var x in extra)s[x]=extra[x];return s;}
function E(h1,h2,loc,start,end,desc){return {h1:h1||'',h2:h2||'',loc:loc||'',start:start||'',end:end||'',desc:desc||''};}
function I(n,l){return {name:n,lvl:l||''};}
function sampleAR(){return {v:1,lang:'ar',tpl:'modern',color:'#1f4e79',font:'Cairo',fs:10.5,sp:1,photoOn:true,photo:'',
 p:{name:'\u0645. \u0623\u062d\u0645\u062f \u0645\u062d\u0645\u0648\u062f \u0627\u0644\u0633\u064a\u062f',role:'\u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a | \u0645\u0647\u0646\u062f\u0633 \u0645\u0648\u0642\u0639 \u0625\u0646\u0634\u0627\u0626\u064a',email:'ahmed.elsayed@example.com',phone:'+20 100 000 0000',loc:'\u0627\u0644\u0642\u0627\u0647\u0631\u0629\u060c \u0645\u0635\u0631',link:'linkedin.com/in/ahmed-elsayed',web:'',extra:'\u0639\u0636\u0648 \u0646\u0642\u0627\u0628\u0629 \u0627\u0644\u0645\u0647\u0646\u062f\u0633\u064a\u0646 \u0627\u0644\u0645\u0635\u0631\u064a\u0629'},
 s:[
  S_('summary','\u0627\u0644\u0645\u0644\u062e\u0635 \u0627\u0644\u0645\u0647\u0646\u064a',{text:'\u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a \u0628\u062e\u0628\u0631\u0629 6 \u0633\u0646\u0648\u0627\u062a \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0645\u0628\u0627\u0646\u064a \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u064a\u0629 \u0648\u0627\u0644\u0625\u0634\u0631\u0627\u0641 \u0639\u0644\u0649 \u0627\u0644\u0645\u0648\u0627\u0642\u0639\u060c \u0634\u0627\u0631\u0643\u062a \u0641\u064a \u062a\u0646\u0641\u064a\u0630 \u0645\u0634\u0627\u0631\u064a\u0639 \u0633\u0643\u0646\u064a\u0629 \u0648\u062a\u062c\u0627\u0631\u064a\u0629 \u0628\u0642\u064a\u0645\u0629 \u062a\u062a\u062c\u0627\u0648\u0632 450 \u0645\u0644\u064a\u0648\u0646 \u062c\u0646\u064a\u0647. \u0645\u062a\u0645\u0643\u0646 \u0645\u0646 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062e\u0637\u0637\u0627\u062a \u0648\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a \u0648\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0648\u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0645\u0639 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u064a \u0648\u0645\u0642\u0627\u0648\u0644\u064a \u0627\u0644\u0628\u0627\u0637\u0646\u060c \u0645\u0639 \u0627\u0644\u062a\u0632\u0627\u0645 \u0635\u0627\u0631\u0645 \u0628\u0645\u0639\u0627\u064a\u064a\u0631 \u0627\u0644\u062c\u0648\u062f\u0629 \u0648\u0627\u0644\u0633\u0644\u0627\u0645\u0629.'}),
  S_('experience','\u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629',{items:[
   E('\u0645\u0647\u0646\u062f\u0633 \u0645\u0648\u0642\u0639 \u0623\u0648\u0644','\u0634\u0631\u0643\u0629 \u0627\u0644\u0646\u064a\u0644 \u0644\u0644\u0645\u0642\u0627\u0648\u0644\u0627\u062a \u0627\u0644\u0639\u0627\u0645\u0629','\u0627\u0644\u0642\u0627\u0647\u0631\u0629 \u0627\u0644\u062c\u062f\u064a\u062f\u0629\u060c \u0645\u0635\u0631','03/2021','\u062d\u062a\u0649 \u0627\u0644\u0622\u0646','\u0627\u0644\u0625\u0634\u0631\u0627\u0641 \u0639\u0644\u0649 \u062a\u0646\u0641\u064a\u0630 \u0627\u0644\u0647\u064a\u0643\u0644 \u0627\u0644\u062e\u0631\u0633\u0627\u0646\u064a \u0644\u0639\u062f\u062f 8 \u0639\u0645\u0627\u0631\u0627\u062a \u0633\u0643\u0646\u064a\u0629 \u0628\u0625\u062c\u0645\u0627\u0644\u064a 42,000 \u0645\u00b2 \u0645\u0633\u0637\u062d\u0627\u062a.\n\u0625\u0639\u062f\u0627\u062f \u062c\u062f\u0627\u0648\u0644 \u062a\u0641\u0631\u064a\u062f \u0627\u0644\u062d\u062f\u064a\u062f (BBS) \u0648\u062a\u0642\u0644\u064a\u0644 \u0627\u0644\u0647\u0627\u0644\u0643 \u0641\u064a \u0627\u0644\u062a\u0633\u0644\u064a\u062d \u0628\u0646\u0633\u0628\u0629 7%.\n\u0642\u064a\u0627\u062f\u0629 \u0641\u0631\u064a\u0642 \u0645\u0643\u0648\u0651\u0646 \u0645\u0646 4 \u0645\u0647\u0646\u062f\u0633\u064a\u0646 \u064830 \u0641\u0646\u064a\u064b\u0627 \u0648\u062a\u0648\u0632\u064a\u0639 \u0627\u0644\u0645\u0647\u0627\u0645 \u0627\u0644\u064a\u0648\u0645\u064a\u0629.\n\u062a\u0633\u0644\u064a\u0645 \u0627\u0644\u0645\u0631\u062d\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0642\u0628\u0644 \u0645\u0648\u0639\u062f\u0647\u0627 \u0628\u062b\u0644\u0627\u062b\u0629 \u0623\u0633\u0627\u0628\u064a\u0639 \u0648\u0636\u0645\u0646 \u0627\u0644\u0645\u064a\u0632\u0627\u0646\u064a\u0629 \u0627\u0644\u0645\u0639\u062a\u0645\u062f\u0629.'),
   E('\u0645\u0647\u0646\u062f\u0633 \u0645\u0643\u062a\u0628 \u0641\u0646\u064a','\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0647\u0646\u062f\u0633\u064a\u0629 \u0627\u0644\u0645\u062a\u062d\u062f\u0629','\u0627\u0644\u062c\u064a\u0632\u0629\u060c \u0645\u0635\u0631','07/2018','02/2021','\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0644\u0648\u062d\u0627\u062a \u0627\u0644\u062a\u0646\u0641\u064a\u0630\u064a\u0629 (Shop Drawings) \u0644\u0644\u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a\u0629 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 AutoCAD \u0648Revit.\n\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a \u0648\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a \u0627\u0644\u0634\u0647\u0631\u064a\u0629 \u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0628\u0642\u064a\u0645\u0629 120 \u0645\u0644\u064a\u0648\u0646 \u062c\u0646\u064a\u0647.\n\u0625\u0639\u062f\u0627\u062f \u0637\u0644\u0628\u0627\u062a \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0645\u0648\u0627\u062f (MIR) \u0648\u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0627\u0633\u062a\u064a\u0636\u0627\u062d (RFI) \u0648\u0645\u062a\u0627\u0628\u0639\u062a\u0647\u0627 \u0645\u0639 \u0627\u0644\u0627\u0633\u062a\u0634\u0627\u0631\u064a.')]}),
  S_('projects','\u0623\u0628\u0631\u0632 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639',{items:[
   E('\u0643\u0645\u0628\u0648\u0646\u062f \u0633\u0643\u0646\u064a - 8 \u0639\u0645\u0627\u0631\u0627\u062a (\u0623\u0631\u0636\u064a + 10 \u0623\u062f\u0648\u0627\u0631)','\u0645\u0647\u0646\u062f\u0633 \u0645\u0648\u0642\u0639 \u0623\u0648\u0644 | \u0627\u0644\u0645\u0627\u0644\u0643: \u0634\u0631\u0643\u0629 \u0627\u0644\u062a\u0639\u0645\u064a\u0631','\u0627\u0644\u0642\u0627\u0647\u0631\u0629 \u0627\u0644\u062c\u062f\u064a\u062f\u0629','2021','2024','\u062a\u0646\u0641\u064a\u0630 \u0647\u064a\u0643\u0644 \u062e\u0631\u0633\u0627\u0646\u064a \u0628\u0623\u0633\u0642\u0641 \u0641\u0644\u0627\u062a \u0633\u0644\u0627\u0628 \u0648\u0644\u0628\u0634\u0629 \u0645\u0633\u0644\u062d\u0629 \u0628\u0633\u0645\u0643 1.2 \u0645.'),
   E('\u0645\u0628\u0646\u0649 \u0625\u062f\u0627\u0631\u064a \u062a\u062c\u0627\u0631\u064a','\u0645\u0647\u0646\u062f\u0633 \u0645\u0643\u062a\u0628 \u0641\u0646\u064a | 120 \u0645\u0644\u064a\u0648\u0646 \u062c\u0646\u064a\u0647','\u0627\u0644\u0634\u064a\u062e \u0632\u0627\u064a\u062f','2019','2020','')]}),
  S_('education','\u0627\u0644\u062a\u0639\u0644\u064a\u0645',{items:[E('\u0628\u0643\u0627\u0644\u0648\u0631\u064a\u0648\u0633 \u0627\u0644\u0647\u0646\u062f\u0633\u0629 \u0627\u0644\u0645\u062f\u0646\u064a\u0629 - \u0642\u0633\u0645 \u0627\u0644\u0625\u0646\u0634\u0627\u0621\u0627\u062a','\u062c\u0627\u0645\u0639\u0629 \u0627\u0644\u0642\u0627\u0647\u0631\u0629 - \u0643\u0644\u064a\u0629 \u0627\u0644\u0647\u0646\u062f\u0633\u0629','\u0627\u0644\u062c\u064a\u0632\u0629\u060c \u0645\u0635\u0631','2013','2018','\u0627\u0644\u062a\u0642\u062f\u064a\u0631 \u0627\u0644\u0639\u0627\u0645: \u062c\u064a\u062f \u062c\u062f\u064b\u0627 \u00b7 \u0645\u0634\u0631\u0648\u0639 \u0627\u0644\u062a\u062e\u0631\u062c: \u062a\u0635\u0645\u064a\u0645 \u0645\u0628\u0646\u0649 \u062e\u0631\u0633\u0627\u0646\u064a \u0645\u0642\u0627\u0648\u0645 \u0644\u0644\u0632\u0644\u0627\u0632\u0644 (\u0627\u0645\u062a\u064a\u0627\u0632)')]}),
  S_('skills','\u0627\u0644\u0645\u0647\u0627\u0631\u0627\u062a',{items:[I('\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062e\u0637\u0637\u0627\u062a'),I('\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a'),I('\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a'),I('\u0636\u0628\u0637 \u0627\u0644\u062c\u0648\u062f\u0629 QA/QC'),I('\u0625\u0639\u062f\u0627\u062f BBS'),I('\u0627\u0644\u0633\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0647\u0646\u064a\u0629 HSE'),I('\u0627\u0644\u0642\u064a\u0627\u062f\u0629 \u0648\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0641\u0631\u064a\u0642')]}),
  S_('software','\u0627\u0644\u0628\u0631\u0627\u0645\u062c \u0627\u0644\u0647\u0646\u062f\u0633\u064a\u0629',{items:[I('AutoCAD','\u0645\u062a\u0642\u062f\u0645'),I('ETABS','\u0645\u062a\u0642\u062f\u0645'),I('SAFE','\u062c\u064a\u062f \u062c\u062f\u064b\u0627'),I('Revit','\u062c\u064a\u062f'),I('Primavera P6','\u062c\u064a\u062f'),I('MS Excel','\u0645\u062a\u0642\u062f\u0645')]}),
  S_('certifications','\u0627\u0644\u0634\u0647\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u0647\u0646\u064a\u0629',{items:[E('Project Management Professional (PMP)','\u0645\u0639\u0647\u062f \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\u0627\u062a PMI','','','2023',''),E('OSHA 30-Hour Construction','OSHA','','','2022','')]}),
  S_('languages','\u0627\u0644\u0644\u063a\u0627\u062a',{items:[I('\u0627\u0644\u0639\u0631\u0628\u064a\u0629','\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0623\u0645'),I('\u0627\u0644\u0625\u0646\u062c\u0644\u064a\u0632\u064a\u0629','\u062c\u064a\u062f \u062c\u062f\u064b\u0627')]}),
  S_('personal','\u0628\u064a\u0627\u0646\u0627\u062a \u0634\u062e\u0635\u064a\u0629',{on:false,items:[I('\u0627\u0644\u062c\u0646\u0633\u064a\u0629','\u0645\u0635\u0631\u064a'),I('\u0627\u0644\u0645\u0648\u0642\u0641 \u0645\u0646 \u0627\u0644\u062a\u062c\u0646\u064a\u062f','\u0623\u062f\u0649 \u0627\u0644\u062e\u062f\u0645\u0629')]})
 ]};}
function sampleEN(){return {v:1,lang:'en',tpl:'classic',color:'#1f4e79',font:'Cairo',fs:10.5,sp:1,photoOn:false,photo:'',
 p:{name:'Ahmed Mahmoud Elsayed',role:'Civil Engineer | Structural Site Engineer',email:'ahmed.elsayed@example.com',phone:'+20 100 000 0000',loc:'Cairo, Egypt',link:'linkedin.com/in/ahmed-elsayed',web:'',extra:'Member, Egyptian Engineers Syndicate'},
 s:[
  S_('summary','Professional Summary',{text:'Civil engineer with 6 years of experience in RC building construction and site supervision, contributing to residential and commercial projects worth over EGP 450 million. Skilled in reading drawings, quantity surveying, payment applications and coordinating with consultants and subcontractors, with a strong commitment to quality and safety.'}),
  S_('experience','Work Experience',{items:[
   E('Senior Site Engineer','Nile General Contracting','New Cairo, Egypt','03/2021','Present','Supervised the RC superstructure of 8 residential buildings totalling 42,000 m\u00b2 built-up area.\nPrepared bar bending schedules (BBS), reducing rebar waste by 7%.\nLed a team of 4 engineers and 30 technicians, assigning daily tasks.\nDelivered Phase 1 three weeks ahead of schedule and within the approved budget.'),
   E('Technical Office Engineer','United Engineering Group','Giza, Egypt','07/2018','02/2021','Prepared structural shop drawings using AutoCAD and Revit.\nPerformed quantity take-off and monthly payment applications for projects worth EGP 120 million.\nPrepared material submittals (MIR) and RFIs and followed up with the consultant.')]}),
  S_('projects','Key Projects',{items:[
   E('Residential Compound - 8 Buildings (G+10)','Senior Site Engineer | Client: Taameer Co.','New Cairo','2021','2024','RC superstructure with flat slabs on a 1.2 m thick raft foundation.'),
   E('Administrative &amp; Commercial Building','Technical Office Engineer | EGP 120 million','Sheikh Zayed','2019','2020','')]}),
  S_('education','Education',{items:[E('B.Sc. Civil Engineering - Structural Department','Cairo University - Faculty of Engineering','Giza, Egypt','2013','2018','Grade: Very Good \u00b7 Graduation project: Earthquake-resistant RC building design (Excellent)')]}),
  S_('skills','Skills',{items:[I('Blueprint Reading'),I('Quantity Surveying'),I('Payment Applications'),I('QA/QC'),I('Bar Bending Schedules'),I('HSE'),I('Team Leadership')]}),
  S_('software','Engineering Software',{items:[I('AutoCAD','Advanced'),I('ETABS','Advanced'),I('SAFE','Very Good'),I('Revit','Good'),I('Primavera P6','Good'),I('MS Excel','Advanced')]}),
  S_('certifications','Certifications',{items:[E('Project Management Professional (PMP)','Project Management Institute (PMI)','','','2023',''),E('OSHA 30-Hour Construction','OSHA','','','2022','')]}),
  S_('languages','Languages',{items:[I('Arabic','Native'),I('English','Very Good')]})
 ]};}
function blank(lang){var d={v:1,lang:lang||'ar',tpl:'classic',color:'#1f4e79',font:'Cairo',fs:10.5,sp:1,photoOn:true,photo:'',p:{name:'',role:'',email:'',phone:'',loc:'',link:'',web:'',extra:''},s:[]};
 ['summary','experience','education','skills','software','certifications','languages'].forEach(function(t){var s=S_(t,TYPES[t][d.lang]);if(TYPES[t].kind==='entries')s.items.push(E());if(TYPES[t].kind==='list')s.items.push(I(''));d.s.push(s);});return d;}

/* ---------- \u0627\u0644\u062d\u0627\u0644\u0629 \u0648\u0627\u0644\u062d\u0641\u0638 ---------- */
var D,UI={tab:'content',open:{},bank:null,jd:''};
try{var raw=localStorage.getItem(LS);if(raw){if(/&amp;#\d+;/.test(raw))raw=raw.replace(/&amp;#(\d+);/g,function(m,n){return String.fromCharCode(+n);});D=JSON.parse(raw);}}catch(e){}
var firstVisit=!D;
if(!D||!D.s)D=sampleAR();
var saveT;
function flush(){clearTimeout(saveT);try{localStorage.setItem(LS,JSON.stringify(D));}catch(e){}}
function save(){clearTimeout(saveT);saveT=setTimeout(flush,300);}
window.addEventListener('pagehide',flush);document.addEventListener('visibilitychange',function(){if(document.visibilityState==='hidden')flush();});
function toast(m){var t=$('#cvb-toast');t.textContent=m;t.classList.add('on');clearTimeout(t._t);t._t=setTimeout(function(){t.classList.remove('on');},2200);}
function secById(id){for(var i=0;i&lt;D.s.length;i++)if(D.s[i].id===id)return D.s[i];return null;}
function isAr(){return D.lang==='ar';}

/* ---------- \u0639\u0631\u0636 \u0627\u0644\u0633\u064a\u0631\u0629 (\u0645\u0639\u0627\u064a\u0646\u0629 + \u0637\u0628\u0627\u0639\u0629) ---------- */
var CV_CSS=[
'.cvb-paper-in .cv :where(div,p,span,b,li,ul,section,header,aside,main,h1,h2){text-align:inherit;max-width:none}',
'.cv{--acc:#1f4e79;--accs:rgba(31,78,121,.1);--fs:10.5pt;--sp:1;--ff:Cairo,Arial,sans-serif;font-family:var(--ff);font-size:var(--fs);line-height:1.5;color:#1d232b;background:#fff;width:210mm;min-height:297mm;padding:13mm 15mm;box-sizing:border-box;-webkit-print-color-adjust:exact;print-color-adjust:exact;text-align:start;overflow-wrap:break-word;position:relative}',
'.cv *{box-sizing:border-box;margin:0;padding:0;border:0;background:none;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit;letter-spacing:normal;text-transform:none;box-shadow:none;float:none}',
'.cv-head{display:flex;align-items:center;gap:5mm;margin-bottom:calc(3mm*var(--sp))}',
'.cv-hb{flex:1;min-width:0}',
'.cv-photo{width:27mm;height:27mm;border-radius:50%;object-fit:cover;flex:none;display:block}',
'.cv .cv-name{font-size:2.1em;font-weight:800;line-height:1.2}',
'.cv .cv-role{font-size:1.13em;font-weight:700;color:var(--acc);margin-top:.6mm}',
'.cv .cv-contact{display:flex;flex-wrap:wrap;gap:.6mm 0;margin-top:2mm;font-size:.9em;color:#3a4552}',
'.cv .cv-ci:not(:last-child)::after{content:"|";margin:0 2.4mm;color:#b8c0c9}',
'.cv .cv-extra{font-size:.9em;color:#3a4552;margin-top:.8mm}',
'.tpl-vivid .cv-extra{color:#fff;opacity:.95}',
'.cv .cv-sec{margin-top:calc(4.2mm*var(--sp))}',
'.cv .cv-st{font-size:1.12em;font-weight:800;color:var(--acc);padding-bottom:.8mm;border-bottom:.35mm solid var(--acc);margin-bottom:calc(2.2mm*var(--sp));break-after:avoid;page-break-after:avoid}',
'.cv .cv-ent{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"b d";column-gap:4mm;margin-bottom:calc(2.8mm*var(--sp));break-inside:avoid;page-break-inside:avoid}',
'.cv .cv-ent:last-child{margin-bottom:0}',
'.cv .cv-eb{grid-area:b;min-width:0}',
'.cv .cv-date{grid-area:d;font-size:.9em;color:#56616e;white-space:nowrap;font-weight:700;padding-top:.1em}',
'.cv .cv-h1{font-weight:700;font-size:1.04em}',
'.cv .cv-h2{color:#3a4552;font-weight:600}',
'.cv .cv-loc{color:#6b7682;font-weight:400}',
'.cv .cv-desc{margin-top:.6mm}',
'.cv ul.cv-ul{padding-inline-start:4.6mm;list-style:disc outside}',
'.cv ul.cv-ul li{margin-bottom:.35mm;padding-inline-start:.6mm}',
'.cv .cv-txt{text-align:justify}',
'.cv .cv-txt+.cv-txt{margin-top:1mm}',
'.cv .cv-lv{color:#56616e}',
'.cv .cv-sep{color:#9aa4ae}',
'.cv .cv-kv{display:block}',
/* classic */
'.tpl-classic .cv-head{flex-direction:column;text-align:center;gap:2.5mm;padding-bottom:3mm;border-bottom:.8mm double #2b2b2b}',
'.tpl-classic .cv-contact{justify-content:center}',
'.tpl-classic .cv-name{color:#151515;letter-spacing:.02em}',
'.tpl-classic .cv-st{color:#151515;border-bottom:.3mm solid #2b2b2b;text-align:center;letter-spacing:.06em}',
'.tpl-classic[dir=ltr] .cv-st{text-transform:uppercase;font-size:1.02em;letter-spacing:.12em}',
'.tpl-classic .cv-h1{color:var(--acc)}',
/* modern */
'.tpl-modern{border-top:4.5mm solid var(--acc)}',
'.tpl-modern .cv-name{color:var(--acc)}',
'.tpl-modern .cv-role{color:#3a4552}',
'.tpl-modern .cv-st{border-bottom:0;display:flex;align-items:center;gap:2.5mm;padding-bottom:0}',
'.tpl-modern .cv-st::before{content:"";width:2.4mm;height:2.4mm;background:var(--acc);border-radius:.6mm;flex:none}',
'.tpl-modern .cv-st::after{content:"";flex:1;height:.3mm;background:#d3dae2}',
'.tpl-modern .cv-date{color:var(--acc)}',
/* vivid */
'.tpl-vivid{padding-top:0}',
'.tpl-vivid .cv-head{background:var(--acc);color:#fff;margin:0 -15mm calc(4mm*var(--sp));padding:9mm 15mm 8mm}',
'.tpl-vivid .cv-role{color:#fff;opacity:.92}',
'.tpl-vivid .cv-contact{color:#fff;opacity:.95}',
'.tpl-vivid .cv-ci:not(:last-child)::after{color:rgba(255,255,255,.55)}',
'.tpl-vivid .cv-photo{border:1mm solid rgba(255,255,255,.75)}',
'.tpl-vivid .cv-st{border:0;border-inline-start:1.3mm solid var(--acc);background:var(--accs);padding:1mm 3mm;border-radius:1.2mm}',
'.tpl-vivid .cv-li .cv-sep{display:none}',
'.tpl-vivid .cv-list .cv-li{display:inline-block;background:var(--accs);border-radius:10mm;padding:.3mm 3mm;margin:0 0 1.4mm 1.4mm}',
'.tpl-vivid[dir=ltr] .cv-list .cv-li{margin:0 1.4mm 1.4mm 0}',
'.tpl-vivid .cv-date{background:var(--acc);color:#fff;border-radius:10mm;padding:0 2.6mm;font-size:.8em;align-self:start;margin-top:.3mm}',
'.tpl-vivid .cv-h1{color:var(--acc)}',
/* exec */
'.tpl-exec .cv-head{padding-bottom:3.5mm;border-bottom:.3mm solid #c4ccd4}',
'.tpl-exec .cv-name{letter-spacing:.03em;color:#111}',
'.tpl-exec .cv-st{border:0;display:flex;align-items:center;gap:3mm;font-size:1.05em;padding-bottom:0}',
'.tpl-exec[dir=ltr] .cv-st{text-transform:uppercase;letter-spacing:.12em;font-size:.95em}',
'.tpl-exec .cv-st::after{content:"";flex:1;height:.3mm;background:var(--acc);opacity:.35}',
'.tpl-exec .cv-ent{grid-template-columns:26mm minmax(0,1fr);grid-template-areas:"d b";column-gap:5mm}',
'.tpl-exec .cv-date{white-space:normal;color:var(--acc)}',
'.tpl-exec .cv-eb{border-inline-start:.4mm solid #dbe1e7;padding-inline-start:4mm}',
/* side */
'.lay-side{padding:0;display:grid;grid-template-columns:64mm minmax(0,1fr)}',
'.lay-side .cv-side{padding:12mm 7mm}',
'.lay-side .cv-main{padding:12mm 11mm 12mm}',
'.lay-side .cv-photo{width:36mm;height:36mm;margin:0 auto 5mm}',
'.lay-side .cv-contact{display:block;margin-top:0}',
'.lay-side .cv-ci{display:block;margin-bottom:1mm}',
'.lay-side .cv-ci:not(:last-child)::after{display:none}',
'.lay-side .cv-side .cv-li{display:block;margin-bottom:.8mm}',
'.lay-side .cv-li .cv-sep{display:none}',
'.lay-side .cv-side .cv-st{font-size:1.02em}',
'.lay-side .cv-name{color:var(--acc)}',
'.lay-side .cv-head{margin-bottom:calc(2mm*var(--sp))}',
'.tpl-side .cv-side{background:var(--accs)}',
'.tpl-bold .cv-side{background:var(--acc2);color:#fff}',
'.tpl-bold .cv-side .cv-st{color:#fff;border-bottom-color:rgba(255,255,255,.45)}',
'.tpl-bold .cv-side .cv-lv{color:rgba(255,255,255,.75)}',
'.tpl-bold .cv-side .cv-contact,.tpl-bold .cv-side .cv-extra{color:#fff}',
'.tpl-bold .cv-photo{border:1.2mm solid rgba(255,255,255,.85)}',
'.tpl-bold .cv-main .cv-st{border:0;background:var(--accs);padding:1mm 3mm;border-radius:1mm}',
'.tpl-bold .cv-name{color:var(--acc2)}',
'.tpl-bold .cv-date{color:var(--acc)}',
/* classic with photo */
'.tpl-classicp .cv-head{padding-bottom:3.5mm;border-bottom:.8mm double #2b2b2b;gap:6mm}',
'.tpl-classicp .cv-photo{border-radius:1.2mm;width:25mm;height:31mm}',
'.tpl-classicp .cv-name{color:#151515}',
'.tpl-classicp .cv-st{color:#151515;border-bottom:.3mm solid #2b2b2b;letter-spacing:.04em}',
'.tpl-classicp[dir=ltr] .cv-st{text-transform:uppercase;letter-spacing:.1em;font-size:1.02em}',
'.tpl-classicp .cv-h1{color:var(--acc)}',
/* elegant */
'.tpl-elegant .cv-head{flex-direction:column;text-align:center;gap:1.5mm;padding:3.5mm 0;border-top:.3mm solid #222;border-bottom:.3mm solid #222}',
'.tpl-elegant .cv-contact{justify-content:center}',
'.tpl-elegant .cv-name{letter-spacing:.07em;color:#1a1a1a}',
'.tpl-elegant[dir=ltr] .cv-name{text-transform:uppercase;font-size:1.9em}',
'.tpl-elegant .cv-role{color:#555;letter-spacing:.05em}',
'.tpl-elegant .cv-st{border:0;display:flex;align-items:center;gap:3mm;color:#1a1a1a;padding:0}',
'.tpl-elegant .cv-st::before,.tpl-elegant .cv-st::after{content:"";flex:1;height:.25mm;background:#8a8a8a}',
'.tpl-elegant[dir=ltr] .cv-st{text-transform:uppercase;letter-spacing:.14em;font-size:.98em}',
'.tpl-elegant .cv-h1{color:#1a1a1a}',
'.tpl-elegant .cv-date{color:var(--acc)}',
'.tpl-elegant[dir=ltr] .cv-h2{font-style:italic}',
/* minimal */
'.tpl-minimal{--acc:#1a1a1a!important}',
'.tpl-minimal .cv-name{font-size:1.9em}',
'.tpl-minimal .cv-role{color:#1a1a1a;font-weight:600}',
'.tpl-minimal .cv-st{font-size:1.05em;border-bottom:.2mm solid #1a1a1a}',
'.tpl-minimal[dir=ltr] .cv-st{text-transform:uppercase;letter-spacing:.05em}',
'.tpl-minimal .cv-date{color:#1a1a1a;font-weight:600}',
/* modern card */
'.tpl-card .cv-head{background:var(--accs);border-radius:4mm;padding:6mm 7mm;gap:6mm;border-inline-start:2mm solid var(--acc)}',
'.tpl-card .cv-photo{border-radius:3mm;width:30mm;height:30mm;border:1mm solid #fff}',
'.tpl-card .cv-name{color:var(--acc)}',
'.tpl-card .cv-role{color:#2c3540}',
'.tpl-card .cv-contact{gap:1.2mm 1.4mm}',
'.tpl-card .cv-ci{background:#fff;border-radius:10mm;padding:.2mm 2.6mm}',
'.tpl-card .cv-ci:not(:last-child)::after{display:none}',
'.tpl-card .cv-st{border:0;padding:0}',
'.tpl-card .cv-st::after{content:"";display:block;width:14mm;height:.8mm;background:var(--acc);border-radius:1mm;margin-top:.8mm}',
'.tpl-card .cv-date{color:var(--acc)}',
/* modern split */
'.tpl-split .cv-head{padding-bottom:3mm;border-bottom:.6mm solid var(--acc)}',
'.tpl-split .cv-hb{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:8mm;align-items:center}',
'.tpl-split .cv-name,.tpl-split .cv-role,.tpl-split .cv-extra{grid-column:1}',
'.tpl-split .cv-contact{grid-column:2;grid-row:1/span 3;flex-direction:column;align-items:flex-end;text-align:end;margin:0;gap:.4mm}',
'.tpl-split .cv-ci:not(:last-child)::after{display:none}',
'.tpl-split .cv-name{color:#151a20}',
'.tpl-split .cv-st{border-bottom:.3mm solid #d3dae2}',
'.tpl-split[dir=ltr] .cv-st{text-transform:uppercase;letter-spacing:.08em;font-size:1em}',
'.tpl-split .cv-date{color:var(--acc)}',
/* vivid gradient */
'.tpl-wave{padding-top:0}',
'.tpl-wave .cv-head{background:linear-gradient(120deg,var(--acc),var(--acc2));color:#fff;margin:0 -15mm calc(5mm*var(--sp));padding:9mm 15mm 11mm;border-radius:0 0 50% 50%/0 0 7mm 7mm;gap:6mm}',
'.tpl-wave .cv-photo{width:30mm;height:30mm;border:1.2mm solid #fff}',
'.tpl-wave .cv-role,.tpl-wave .cv-contact,.tpl-wave .cv-extra{color:#fff}',
'.tpl-wave .cv-ci:not(:last-child)::after{color:rgba(255,255,255,.55)}',
'.tpl-wave .cv-st{border:0;display:flex;align-items:center;gap:2.5mm;padding:0;color:var(--acc2)}',
'.tpl-wave .cv-st::before{content:"";width:4.2mm;height:4.2mm;border-radius:50%;background:linear-gradient(120deg,var(--acc),var(--acc2));flex:none}',
'.tpl-wave .cv-st::after{content:"";flex:1;height:.3mm;background:var(--acc3)}',
'.tpl-wave .cv-date{border:.3mm solid var(--acc);color:var(--acc);border-radius:10mm;padding:0 2.4mm;font-size:.82em;align-self:start}',
'.tpl-wave .cv-h1{color:var(--acc2)}',
'.tpl-wave .cv-li .cv-sep{display:none}',
'.tpl-wave .cv-list .cv-li{display:inline-block;border:.3mm solid var(--acc3);border-radius:10mm;padding:.1mm 2.6mm;margin:0 0 1.4mm 1.4mm}',
'.tpl-wave[dir=ltr] .cv-list .cv-li{margin:0 1.4mm 1.4mm 0}',
/* timeline */
'.tpl-timeline .cv-head{padding-bottom:3mm;border-bottom:.3mm solid #d3dae2}',
'.tpl-timeline .cv-name{color:var(--acc)}',
'.tpl-timeline .cv-st{border:0;padding:0;display:flex;align-items:center;gap:2.5mm}',
'.tpl-timeline .cv-st::before{content:"";width:3.6mm;height:3.6mm;border-radius:50%;border:.9mm solid var(--acc);flex:none}',
'.tpl-timeline .cv-sec&gt;*:not(.cv-st){margin-inline-start:1.6mm;border-inline-start:.4mm solid var(--acc3);padding-inline-start:5mm}',
'.tpl-timeline .cv-ent{position:relative;margin-bottom:0;padding-bottom:calc(2.8mm*var(--sp))}',
'.tpl-timeline .cv-ent::before{content:"";position:absolute;inset-inline-start:-1.7mm;top:1.3mm;width:3mm;height:3mm;border-radius:50%;background:var(--acc);border:.6mm solid #fff}',
'.tpl-timeline .cv-date{color:var(--acc)}',
/* photo placeholder (screen only) */
'.cv .cv-photo-ph{background:#eef1f4;border:.5mm dashed #9aa4ae;display:grid;place-items:center;font-size:18pt;color:#9aa4ae;cursor:pointer}'
].join('');
(function(){var st=document.createElement('style');st.textContent=CV_CSS;root.insertBefore(st,root.firstChild);})();

function hexRgba(hex,a){var m=hex.replace('#','');if(m.length===3)m=m.split('').map(function(c){return c+c;}).join('');var n=parseInt(m,16);return 'rgba('+(n&gt;&gt;16&amp;255)+','+(n&gt;&gt;8&amp;255)+','+(n&amp;255)+','+a+')';}
function shade(hex,f){var n=parseInt(hex.replace('#',''),16),r=n&gt;&gt;16&amp;255,g=n&gt;&gt;8&amp;255,b=n&amp;255;function m(c){return Math.max(0,Math.min(255,Math.round(f&lt;0?c*(1+f):c+(255-c)*f)));}return '#'+((1&lt;&lt;24)+(m(r)&lt;&lt;16)+(m(g)&lt;&lt;8)+m(b)).toString(16).slice(1);}
function fontCss(){for(var i=0;i&lt;FONTS.length;i++)if(FONTS[i].id===D.font)return FONTS[i].css;return FONTS[0].css;}
function lines(t){return String(t||'').split(/\n/).map(function(x){return x.replace(/^\s*[-\u2022*\u25aa\u25cf]\s*/,'').trim();}).filter(Boolean);}
function dates(e){var a=(e.start||'').trim(),b=(e.end||'').trim();if(a&amp;&amp;b)return a+' \u2013 '+b;return a||b;}
function entFilled(e){return ['h1','h2','loc','start','end','desc'].some(function(k){return (e[k]||'').trim();});}
function secHas(s){var T=TYPES[s.type];if(!T||!s.on)return false;if(T.kind==='text')return !!(s.text||'').trim();if(T.kind==='entries')return s.items.some(entFilled);return s.items.some(function(i){return (i.name||'').trim();});}
function bd(t){return '&lt;bdi&gt;'+h(t)+'&lt;/bdi&gt;';}
function contactList(){var p=D.p,a=[];['phone','email','loc','link','web'].forEach(function(k){if((p[k]||'').trim())a.push(k==='loc'?h(p[k]):'&lt;bdi dir="ltr"&gt;'+h(p[k])+'&lt;/bdi&gt;');});return a;}
function secHTML(s){
 var T=TYPES[s.type],o='&lt;section class="cv-sec cv-s-'+s.type+'"&gt;&lt;h2 class="cv-st"&gt;'+h(s.title)+'&lt;/h2&gt;';
 if(T.kind==='text'){o+=lines(s.text).length&gt;1&amp;&amp;s.type!=='summary'?'&lt;ul class="cv-ul"&gt;'+lines(s.text).map(function(l){return '&lt;li&gt;'+bd(l)+'&lt;/li&gt;';}).join('')+'&lt;/ul&gt;':String(s.text).split(/\n+/).filter(function(x){return x.trim();}).map(function(p){return '&lt;p class="cv-txt"&gt;'+h(p.trim())+'&lt;/p&gt;';}).join('');}
 else if(T.kind==='entries'){s.items.filter(entFilled).forEach(function(e){var dt=dates(e),L=lines(e.desc);
  o+='&lt;div class="cv-ent"&gt;'+(dt?'&lt;div class="cv-date"&gt;&lt;bdi&gt;'+h(dt)+'&lt;/bdi&gt;&lt;/div&gt;':'')+'&lt;div class="cv-eb"&gt;';
  if(e.h1)o+='&lt;div class="cv-h1"&gt;'+bd(e.h1)+'&lt;/div&gt;';
  if(e.h2||e.loc)o+='&lt;div class="cv-h2"&gt;'+(e.h2?bd(e.h2):'')+(e.loc?'&lt;span class="cv-loc"&gt;'+(e.h2?' \u2014 ':'')+bd(e.loc)+'&lt;/span&gt;':'')+'&lt;/div&gt;';
  if(L.length===1&amp;&amp;!/^\s*[-\u2022*]/.test(e.desc))o+='&lt;p class="cv-desc"&gt;'+bd(L[0])+'&lt;/p&gt;';
  else if(L.length)o+='&lt;ul class="cv-ul cv-desc"&gt;'+L.map(function(l){return '&lt;li&gt;'+bd(l)+'&lt;/li&gt;';}).join('')+'&lt;/ul&gt;';
  o+='&lt;/div&gt;&lt;/div&gt;';});}
 else{var it=s.items.filter(function(i){return (i.name||'').trim();});
  if(s.type==='personal')o+=it.map(function(i){return '&lt;span class="cv-kv"&gt;&lt;b&gt;'+bd(i.name)+(i.lvl?':&lt;/b&gt; '+bd(i.lvl):'&lt;/b&gt;')+'&lt;/span&gt;';}).join('');
  else o+='&lt;p class="cv-list"&gt;'+it.map(function(i,n){return '&lt;span class="cv-li"&gt;'+bd(i.name)+(T.lvl&amp;&amp;i.lvl?'&lt;span class="cv-lv"&gt; ('+bd(i.lvl)+')&lt;/span&gt;':'')+(n&lt;it.length-1?'&lt;span class="cv-sep"&gt; \u2022 &lt;/span&gt;':'')+'&lt;/span&gt;';}).join(' ')+'&lt;/p&gt;';}
 return o+'&lt;/section&gt;';
}
function cvHTML(op){
 op=op||{};var TT=tplOf(op.tpl||D.tpl),ar=isAr(),p=D.p,cls='cv tpl-'+TT.id+(TT.lay==='side'?' lay-side':''),style='--acc:'+D.color+';--accs:'+hexRgba(D.color,.1)+';--acc2:'+shade(D.color,-.38)+';--acc3:'+shade(D.color,.6)+';--fs:'+D.fs+'pt;--sp:'+D.sp+';--ff:'+fontCss().replace(/"/g,"'");
 var photo='';if(TT.ph!=='none'){if(D.photoOn&amp;&amp;D.photo)photo='&lt;img class="cv-photo" src="'+D.photo+'" alt=""&gt;';else if(!op.exp&amp;&amp;!D.photo&amp;&amp;TT.ph==='yes')photo='&lt;div class="cv-photo cv-photo-ph"'+(op.thumb?'&gt;':' data-act="photo" title="\u0623\u0636\u0641 \u0635\u0648\u0631\u062a\u0643"&gt;\ud83d\udcf7')+'&lt;/div&gt;';}
 var name='&lt;h1 class="cv-name"&gt;'+bd(p.name||(ar?'\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644':'Full Name'))+'&lt;/h1&gt;'+(p.role?'&lt;div class="cv-role"&gt;'+bd(p.role)+'&lt;/div&gt;':'');
 var cl=contactList().map(function(c){return '&lt;span class="cv-ci"&gt;'+c+'&lt;/span&gt;';}).join('');var ex=(p.extra||'').trim()?'&lt;div class="cv-extra"&gt;'+bd(p.extra)+'&lt;/div&gt;':'';
 var secs=D.s.filter(secHas);
 var o='&lt;div class="'+cls+'" dir="'+(ar?'rtl':'ltr')+'" lang="'+D.lang+'" style="'+style+'"&gt;';
 if(TT.lay==='side'){
  var side=secs.filter(function(s){return TYPES[s.type].kind==='list';}),main=secs.filter(function(s){return TYPES[s.type].kind!=='list';});
  o+='&lt;aside class="cv-side"&gt;'+photo+(cl?'&lt;section class="cv-sec" style="margin-top:0"&gt;&lt;h2 class="cv-st"&gt;'+(ar?'\u0627\u0644\u062a\u0648\u0627\u0635\u0644':'Contact')+'&lt;/h2&gt;&lt;div class="cv-contact"&gt;'+cl+'&lt;/div&gt;'+ex+'&lt;/section&gt;':'')+side.map(secHTML).join('')+'&lt;/aside&gt;';
  o+='&lt;main class="cv-main"&gt;&lt;header class="cv-head"&gt;&lt;div class="cv-hb"&gt;'+name+'&lt;/div&gt;&lt;/header&gt;'+main.map(secHTML).join('')+'&lt;/main&gt;';
 }else{
  o+='&lt;header class="cv-head"&gt;'+photo+'&lt;div class="cv-hb"&gt;'+name+(cl?'&lt;div class="cv-contact"&gt;'+cl+'&lt;/div&gt;':'')+ex+'&lt;/div&gt;&lt;/header&gt;'+secs.map(secHTML).join('');
 }
 return o+'&lt;/div&gt;';
}
var PX_MM=96/25.4;
function renderPreview(){
 var inn=$('#cvb-paper-in');inn.innerHTML=cvHTML();
 var t=tplOf(D.tpl);
 $('#cvb-tplname').textContent='\u0627\u0644\u0642\u0627\u0644\u0628: '+(t?t.n:'');
 fitPreview();
}
function fitPreview(){
 var wrap=$('#cvb-paper'),inn=$('#cvb-paper-in'),cv=inn.firstChild;if(!cv)return;
 var w=wrap.clientWidth,pw=210*PX_MM,sc=Math.min(1,w/pw);
 inn.style.transform='scale('+sc+')';
 inn.querySelectorAll('.cvb-pb').forEach(function(x){x.remove();});
 var hgt=cv.offsetHeight,pageH=297*PX_MM,usable=pageH-12*PX_MM,pages=hgt&lt;=pageH+2?1:1+Math.ceil((hgt-pageH+12*PX_MM)/usable-0.01);
 for(var k=1;k&lt;pages;k++){var y=k===1?pageH-12*PX_MM:pageH-12*PX_MM+(k-1)*usable;var pb=document.createElement('div');pb.className='cvb-pb';pb.style.top=y+'px';pb.innerHTML='&lt;span&gt;\u0646\u0647\u0627\u064a\u0629 \u0635\u0641\u062d\u0629 '+k+' \u062a\u0642\u0631\u064a\u0628\u064b\u0627&lt;/span&gt;';inn.appendChild(pb);}
 wrap.style.height=Math.max(pageH,hgt)*sc+'px';
 $('#cvb-pages').textContent=pages===1?'\u0635\u0641\u062d\u0629 \u0648\u0627\u062d\u062f\u0629':pages===2?'\u0635\u0641\u062d\u062a\u0627\u0646':pages+' \u0635\u0641\u062d\u0627\u062a';
}

/* ---------- \u0627\u0644\u0645\u062d\u0631\u0631 ---------- */
function fld(label,attrs,val,type,ph,list){return '&lt;label class="cvb-f"&gt;&lt;span&gt;'+label+'&lt;/span&gt;&lt;input dir="'+(type==='email'||type==='tel'||/link|web/.test(attrs)?'ltr':'auto')+'" type="'+(type||'text')+'" '+attrs+' value="'+h(val)+'"'+(ph?' placeholder="'+h(ph)+'"':'')+(list?' list="'+list+'"':'')+'&gt;&lt;/label&gt;';}
function paneContent(){
 var p=D.p,ar=isAr(),o='';
 if(firstVisit)o+='&lt;div class="cvb-note"&gt;\ud83d\udc4b \u0647\u0630\u0647 \u0628\u064a\u0627\u0646\u0627\u062a \u062a\u062c\u0631\u064a\u0628\u064a\u0629 \u0644\u062a\u0648\u0636\u064a\u062d \u0627\u0644\u0634\u0643\u0644 \u0627\u0644\u0646\u0647\u0627\u0626\u064a. \u0639\u062f\u0651\u0644\u0647\u0627 \u0628\u0628\u064a\u0627\u0646\u0627\u062a\u0643\u060c \u0623\u0648 &lt;button class="cvb-btn sm" data-act="blank"&gt;\u0627\u0628\u062f\u0623 \u0628\u0633\u064a\u0631\u0629 \u0641\u0627\u0631\u063a\u0629&lt;/button&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-card open"&gt;&lt;div class="cvb-card-h" data-act="noop"&gt;&lt;span class="cvb-t"&gt;\ud83d\udc64 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629&lt;/span&gt;&lt;/div&gt;&lt;div class="cvb-card-b"&gt;';
 o+='&lt;div class="cvb-row"&gt;'+fld('\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644','data-p="name"',p.name,'text',ar?'\u0645. \u0623\u062d\u0645\u062f \u0645\u062d\u0645\u0648\u062f':'Ahmed Mahmoud')+fld('\u0627\u0644\u0645\u0633\u0645\u0649 \u0627\u0644\u0645\u0647\u0646\u064a','data-p="role"',p.role,'text',ar?'\u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a - \u0625\u0646\u0634\u0627\u0626\u064a':'Civil Engineer')+'&lt;/div&gt;';
 o+='&lt;div class="cvb-row"&gt;'+fld('\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a','data-p="email"',p.email,'email','name@email.com')+fld('\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641','data-p="phone"',p.phone,'tel','+20 1xx xxx xxxx')+'&lt;/div&gt;';
 o+='&lt;div class="cvb-row"&gt;'+fld('\u0627\u0644\u0645\u062f\u064a\u0646\u0629\u060c \u0627\u0644\u062f\u0648\u0644\u0629','data-p="loc"',p.loc,'text',ar?'\u0627\u0644\u0642\u0627\u0647\u0631\u0629\u060c \u0645\u0635\u0631':'Cairo, Egypt')+fld('LinkedIn','data-p="link"',p.link,'text','linkedin.com/in/...')+'&lt;/div&gt;';
 o+='&lt;div class="cvb-row"&gt;'+fld('\u0645\u0648\u0642\u0639 / \u0645\u0639\u0631\u0636 \u0623\u0639\u0645\u0627\u0644 (\u0627\u062e\u062a\u064a\u0627\u0631\u064a)','data-p="web"',p.web,'text','')+fld('\u0633\u0637\u0631 \u0625\u0636\u0627\u0641\u064a (\u0627\u062e\u062a\u064a\u0627\u0631\u064a)','data-p="extra"',p.extra,'text',ar?'\u0631\u0642\u0645 \u0627\u0644\u0639\u0636\u0648\u064a\u0629 \u0628\u0646\u0642\u0627\u0628\u0629 \u0627\u0644\u0645\u0647\u0646\u062f\u0633\u064a\u0646':'Engineers Syndicate No.')+'&lt;/div&gt;';
 o+='&lt;div class="cvb-photo"&gt;'+(D.photo?'&lt;img src="'+D.photo+'" alt=""&gt;':'&lt;div class="ph"&gt;\ud83d\udcf7&lt;/div&gt;')+'&lt;div&gt;&lt;button class="cvb-btn sm" data-act="photo"&gt;'+(D.photo?'\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629':'\u0625\u0636\u0627\u0641\u0629 \u0635\u0648\u0631\u0629 \u0634\u062e\u0635\u064a\u0629')+'&lt;/button&gt; '+(D.photo?'&lt;button class="cvb-btn sm ghost" data-act="photo-del"&gt;\u062d\u0630\u0641&lt;/button&gt;&lt;br&gt;&lt;label class="cvb-switch" style="margin-top:6px"&gt;&lt;input type="checkbox" data-opt="photoOn" '+(D.photoOn?'checked':'')+'&gt; \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 \u0641\u064a \u0627\u0644\u0633\u064a\u0631\u0629&lt;/label&gt;':'')+'&lt;div class="cvb-hint"&gt;\u0641\u064a \u0627\u0644\u062e\u0644\u064a\u062c \u0648\u0645\u0635\u0631 \u0627\u0644\u0635\u0648\u0631\u0629 \u0634\u0627\u0626\u0639\u0629\u060c \u0644\u0643\u0646 \u0627\u0644\u0634\u0631\u0643\u0627\u062a \u0627\u0644\u0623\u062c\u0646\u0628\u064a\u0629 \u062a\u0641\u0636\u0651\u0644 \u0627\u0644\u0633\u064a\u0631\u0629 \u0628\u062f\u0648\u0646 \u0635\u0648\u0631\u0629.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;/div&gt;&lt;/div&gt;';
 D.s.forEach(function(s,i){o+=secEditor(s,i);});
 o+='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-sec-t"&gt;\u2795 \u0625\u0636\u0627\u0641\u0629 \u0642\u0633\u0645 \u062c\u062f\u064a\u062f&lt;/div&gt;&lt;div class="cvb-add"&gt;&lt;select id="cvb-addsel"&gt;'+ADD_ORDER.map(function(t){return '&lt;option value="'+t+'"&gt;'+TYPES[t].ar+' \u00b7 '+TYPES[t].en+'&lt;/option&gt;';}).join('')+'&lt;/select&gt;&lt;button class="cvb-btn pri" data-act="add-sec"&gt;\u0625\u0636\u0627\u0641\u0629&lt;/button&gt;&lt;/div&gt;&lt;div class="cvb-hint"&gt;\u0631\u062a\u0651\u0628 \u0627\u0644\u0623\u0642\u0633\u0627\u0645 \u0628\u0627\u0644\u0623\u0633\u0647\u0645\u060c \u0623\u062e\u0641\u0650 \u0645\u0627 \u0644\u0627 \u062a\u062d\u062a\u0627\u062c\u0647 \u0628\u0632\u0631 \ud83d\udc41\u060c \u0648\u063a\u064a\u0651\u0631 \u0639\u0646\u0648\u0627\u0646 \u0623\u064a \u0642\u0633\u0645 \u0643\u0645\u0627 \u062a\u0631\u064a\u062f.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;datalist id="cvb-lvl"&gt;'+LVL[D.lang].map(function(l){return '&lt;option value="'+h(l)+'"&gt;';}).join('')+'&lt;/datalist&gt;';
 return o;
}
function secEditor(s,i){
 var T=TYPES[s.type],open=UI.open[s.id],cnt=T.kind==='text'?'':(' ('+s.items.length+')');
 var o='&lt;div class="cvb-card'+(open?' open':'')+(s.on?'':' off')+'" data-sid="'+s.id+'"&gt;&lt;div class="cvb-card-h" data-act="toggle" data-s="'+s.id+'"&gt;&lt;span class="cvb-t"&gt;'+h(s.title||T.ar)+'&lt;small&gt;'+cnt+'&lt;/small&gt;&lt;/span&gt;';
 o+='&lt;button class="cvb-btn ghost cvb-ico" data-act="sec-up" data-s="'+s.id+'" title="\u0644\u0623\u0639\u0644\u0649" '+(i===0?'disabled':'')+'&gt;\u25b2&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="sec-down" data-s="'+s.id+'" title="\u0644\u0623\u0633\u0641\u0644" '+(i===D.s.length-1?'disabled':'')+'&gt;\u25bc&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="sec-vis" data-s="'+s.id+'" title="'+(s.on?'\u0625\u062e\u0641\u0627\u0621 \u0645\u0646 \u0627\u0644\u0633\u064a\u0631\u0629':'\u0625\u0638\u0647\u0627\u0631 \u0641\u064a \u0627\u0644\u0633\u064a\u0631\u0629')+'"&gt;'+(s.on?'\ud83d\udc41':'\ud83d\udeab')+'&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="sec-del" data-s="'+s.id+'" title="\u062d\u0630\u0641 \u0627\u0644\u0642\u0633\u0645"&gt;\ud83d\uddd1&lt;/button&gt;&lt;span class="cvb-chev"&gt;\u25bc&lt;/span&gt;&lt;/div&gt;';
 if(!open)return o+'&lt;/div&gt;';
 o+='&lt;div class="cvb-card-b"&gt;&lt;div class="cvb-row one"&gt;'+fld('\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0642\u0633\u0645 \u0643\u0645\u0627 \u064a\u0638\u0647\u0631 \u0641\u064a \u0627\u0644\u0633\u064a\u0631\u0629','data-s="'+s.id+'" data-st="1"',s.title,'text',T[D.lang])+'&lt;/div&gt;';
 if(T.kind==='text'){
  o+='&lt;div class="cvb-row one"&gt;&lt;label class="cvb-f"&gt;&lt;span&gt;\u0627\u0644\u0646\u0635 &lt;em class="cvb-wc" data-wc="'+s.id+'"&gt;'+wc(s.text)+' \u0643\u0644\u0645\u0629&lt;/em&gt;&lt;/span&gt;&lt;textarea dir="auto" rows="5" data-s="'+s.id+'" data-txt="1" placeholder="'+h(T.ph||'')+'"&gt;'+h(s.text)+'&lt;/textarea&gt;&lt;/label&gt;&lt;/div&gt;';
  if(T.bank)o+=bankUI(s,-1);
 }else if(T.kind==='entries'){
  s.items.forEach(function(e,j){
   var L=T.L,f=T.f;
   o+='&lt;div class="cvb-ent"&gt;&lt;div class="cvb-ent-h"&gt;&lt;b&gt;'+h(e.h1||('\u0639\u0646\u0635\u0631 '+(j+1)))+'&lt;/b&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="e-up" data-s="'+s.id+'" data-e="'+j+'" title="\u0644\u0623\u0639\u0644\u0649"&gt;\u25b2&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="e-down" data-s="'+s.id+'" data-e="'+j+'" title="\u0644\u0623\u0633\u0641\u0644"&gt;\u25bc&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="e-dup" data-s="'+s.id+'" data-e="'+j+'" title="\u062a\u0643\u0631\u0627\u0631"&gt;\u29c9&lt;/button&gt;&lt;button class="cvb-btn ghost cvb-ico" data-act="e-del" data-s="'+s.id+'" data-e="'+j+'" title="\u062d\u0630\u0641"&gt;\u2715&lt;/button&gt;&lt;/div&gt;';
   var a=function(k){return 'data-s="'+s.id+'" data-e="'+j+'" data-f="'+k+'"';};
   o+='&lt;div class="cvb-row"&gt;'+fld(L.h1,a('h1'),e.h1)+fld(L.h2||'',a('h2'),e.h2)+'&lt;/div&gt;';
   var r=[];if(f.indexOf('loc')&gt;-1)r.push(fld(L.loc,a('loc'),e.loc));if(f.indexOf('start')&gt;-1)r.push(fld('\u0645\u0646',a('start'),e.start,'text','03/2021'));if(f.indexOf('end')&gt;-1)r.push(fld(L.end||'\u0625\u0644\u0649',a('end'),e.end,'text',isAr()?'\u062d\u062a\u0649 \u0627\u0644\u0622\u0646':'Present'));
   if(r.length)o+='&lt;div class="cvb-row'+(r.length===3?' three':'')+'"&gt;'+r.join('')+'&lt;/div&gt;';
   if(f.indexOf('desc')&gt;-1){o+='&lt;div class="cvb-row one"&gt;&lt;label class="cvb-f"&gt;&lt;span&gt;'+L.desc+'&lt;/span&gt;&lt;textarea dir="auto" rows="4" '+a('desc')+'&gt;'+h(e.desc)+'&lt;/textarea&gt;&lt;/label&gt;&lt;/div&gt;';if(T.bank)o+=bankUI(s,j);}
   o+='&lt;/div&gt;';
  });
  o+='&lt;div style="margin-top:10px"&gt;&lt;button class="cvb-btn sm" data-act="e-add" data-s="'+s.id+'"&gt;+ \u0625\u0636\u0627\u0641\u0629 \u0639\u0646\u0635\u0631&lt;/button&gt;&lt;/div&gt;';
 }else{
  s.items.forEach(function(it,j){var a=function(k){return 'data-s="'+s.id+'" data-e="'+j+'" data-f="'+k+'"';};
   o+='&lt;div class="cvb-li'+(T.lvl?'':' nolv')+'"&gt;&lt;input dir="auto" type="text" '+a('name')+' value="'+h(it.name)+'" placeholder="'+h(T.L.name)+'"&gt;'+(T.lvl?'&lt;input dir="auto" type="text" '+a('lvl')+' value="'+h(it.lvl)+'" placeholder="'+h(T.L.lvl)+'"'+(s.type==='personal'?'':' list="cvb-lvl"')+'&gt;':'')+'&lt;button class="cvb-btn ghost cvb-ico" data-act="e-del" data-s="'+s.id+'" data-e="'+j+'" title="\u062d\u0630\u0641"&gt;\u2715&lt;/button&gt;&lt;/div&gt;';});
  o+='&lt;div style="margin-top:8px"&gt;&lt;button class="cvb-btn sm" data-act="e-add" data-s="'+s.id+'"&gt;+ \u0625\u0636\u0627\u0641\u0629&lt;/button&gt;&lt;/div&gt;';
  if(T.sug){var sg=SUG[T.sug],arr=sg.all||sg[D.lang],have=s.items.map(function(x){return (x.name||'').toLowerCase();});
   o+='&lt;div class="cvb-hint"&gt;\u0627\u0642\u062a\u0631\u0627\u062d\u0627\u062a \u0633\u0631\u064a\u0639\u0629 (\u0627\u0636\u063a\u0637 \u0644\u0644\u0625\u0636\u0627\u0641\u0629):&lt;/div&gt;&lt;div class="cvb-chips"&gt;'+arr.map(function(x){return '&lt;button class="cvb-chip'+(have.indexOf(x.toLowerCase())&gt;-1?' used':'')+'" data-act="sug" data-s="'+s.id+'" data-v="'+h(x)+'"&gt;+ '+h(x)+'&lt;/button&gt;';}).join('')+'&lt;/div&gt;';}
 }
 return o+'&lt;/div&gt;&lt;/div&gt;';
}
function bankUI(s,j){
 var T=TYPES[s.type],key=s.id+':'+j,open=UI.bank===key;
 var o='&lt;div style="margin-top:6px"&gt;&lt;button class="cvb-btn sm" data-act="bank" data-s="'+s.id+'" data-e="'+j+'"&gt;\ud83d\udca1 '+(open?'\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0627\u0642\u062a\u0631\u0627\u062d\u0627\u062a':(T.bank==='sum'?'\u0646\u0645\u0627\u0630\u062c \u0645\u0644\u062e\u0635 \u062c\u0627\u0647\u0632\u0629':'\u0639\u0628\u0627\u0631\u0627\u062a \u0627\u062d\u062a\u0631\u0627\u0641\u064a\u0629 \u062c\u0627\u0647\u0632\u0629 \u0644\u0644\u0645\u0647\u0646\u062f\u0633\u064a\u0646'))+'&lt;/button&gt;&lt;/div&gt;';
 if(!open)return o;
 o+='&lt;div class="cvb-bank"&gt;&lt;div class="cvb-hint" style="margin:0"&gt;\u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0627\u0644\u0639\u0628\u0627\u0631\u0629 \u0644\u0625\u0636\u0627\u0641\u062a\u0647\u0627\u060c \u062b\u0645 \u0627\u0633\u062a\u0628\u062f\u0644 [X] \u0628\u0631\u0642\u0645 \u062d\u0642\u064a\u0642\u064a. \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u062a\u062c\u0639\u0644 \u0633\u064a\u0631\u062a\u0643 \u0623\u0642\u0648\u0649 \u0628\u0643\u062b\u064a\u0631.&lt;/div&gt;';
 BANK[T.bank][D.lang].forEach(function(g){o+='&lt;h5&gt;'+h(g[0])+'&lt;/h5&gt;';g[1].forEach(function(t){o+='&lt;button class="cvb-sug" data-act="bank-add" data-s="'+s.id+'" data-e="'+j+'" data-v="'+h(t)+'"&gt;+ '+h(t)+'&lt;/button&gt;';});});
 return o+'&lt;/div&gt;';
}
function wc(t){var m=String(t||'').trim().match(/\S+/g);return m?m.length:0;}
function thumb(id){return '&lt;div class="cvb-thumb"&gt;&lt;div class="cvb-mini"&gt;'+cvHTML({tpl:id,thumb:true})+'&lt;/div&gt;&lt;/div&gt;';}
function tplShown(t){var c=UI.tcat||'all';return c==='all'||c===t.cat||c==='photo'&amp;&amp;t.ph!=='none'||c==='nophoto'&amp;&amp;t.ph!=='yes';}
function paneDesign(){
 var o='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-sec-t"&gt;\u0644\u063a\u0629 \u0627\u0644\u0633\u064a\u0631\u0629 \u0627\u0644\u0630\u0627\u062a\u064a\u0629&lt;/div&gt;&lt;div class="cvb-seg"&gt;&lt;button data-act="lang" data-v="ar" class="'+(isAr()?'on':'')+'"&gt;\u0627\u0644\u0639\u0631\u0628\u064a\u0629 (\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646)&lt;/button&gt;&lt;button data-act="lang" data-v="en" class="'+(!isAr()?'on':'')+'"&gt;English (LTR)&lt;/button&gt;&lt;/div&gt;&lt;div class="cvb-hint"&gt;\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0644\u063a\u0629 \u064a\u0642\u0644\u0628 \u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0633\u064a\u0631\u0629 \u0648\u064a\u062a\u0631\u062c\u0645 \u0639\u0646\u0627\u0648\u064a\u0646 \u0627\u0644\u0623\u0642\u0633\u0627\u0645 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629. \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0646\u0641\u0633\u0647 \u062a\u0643\u062a\u0628\u0647 \u0623\u0646\u062a \u0628\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 var CT=tplOf(D.tpl);o+='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-sec-t"&gt;\u0627\u0644\u0642\u0627\u0644\u0628 ('+TPL.length+' \u0642\u0648\u0627\u0644\u0628)&lt;/div&gt;&lt;div class="cvb-tcat"&gt;'+TCAT.map(function(c){return '&lt;button data-act="tcat" data-v="'+c[0]+'" class="'+((UI.tcat||'all')===c[0]?'on':'')+'"&gt;'+c[1]+'&lt;/button&gt;';}).join('')+'&lt;/div&gt;&lt;div class="cvb-tpls"&gt;'+TPL.filter(tplShown).map(function(t){return '&lt;div class="cvb-tpl'+(D.tpl===t.id?' on':'')+'" data-act="tpl" data-v="'+t.id+'"&gt;'+thumb(t.id)+t.n+'&lt;i&gt;'+t.d+(t.ats?' \u00b7 ATS \u2713':' \u00b7 ATS \u0645\u062a\u0648\u0633\u0637')+'&lt;/i&gt;&lt;b class="cvb-badge'+(t.ph==='yes'?' ph"&gt;\ud83d\udcf7 \u0628\u0635\u0648\u0631\u0629':t.ph==='opt'?'"&gt;\u0635\u0648\u0631\u0629 \u0627\u062e\u062a\u064a\u0627\u0631\u064a\u0629':'"&gt;\u0628\u062f\u0648\u0646 \u0635\u0648\u0631\u0629')+'&lt;/b&gt;&lt;/div&gt;';}).join('')+'&lt;/div&gt;'+(CT.ats?'':'&lt;div class="cvb-note w" style="margin:10px 0 0"&gt;\u0642\u0648\u0627\u0644\u0628 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0646 \u062c\u0645\u064a\u0644\u0629 \u0644\u0644\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0628\u0627\u0644\u0628\u0631\u064a\u062f\u060c \u0644\u0643\u0646 \u0628\u0639\u0636 \u0623\u0646\u0638\u0645\u0629 ATS \u0627\u0644\u0642\u062f\u064a\u0645\u0629 \u062a\u0642\u0631\u0623 \u0627\u0644\u0623\u0639\u0645\u062f\u0629 \u0628\u062a\u0631\u062a\u064a\u0628 \u062e\u0627\u0637\u0626. \u0644\u0644\u062a\u0642\u062f\u064a\u0645 \u0639\u0628\u0631 \u0628\u0648\u0627\u0628\u0627\u062a \u0627\u0644\u062a\u0648\u0638\u064a\u0641 \u0627\u062e\u062a\u0631 \u0642\u0627\u0644\u0628\u064b\u0627 \u0628\u0639\u0645\u0648\u062f \u0648\u0627\u062d\u062f.&lt;/div&gt;')+(CT.ph==='yes'&amp;&amp;!D.photo?'&lt;div class="cvb-note" style="margin:10px 0 0"&gt;\u0647\u0630\u0627 \u0627\u0644\u0642\u0627\u0644\u0628 \u0645\u0635\u0645\u0645 \u0644\u064a\u062d\u062a\u0648\u064a \u0635\u0648\u0631\u0629 \u0634\u062e\u0635\u064a\u0629. &lt;button class="cvb-btn sm" data-act="photo"&gt;\ud83d\udcf7 \u0625\u0636\u0627\u0641\u0629 \u0635\u0648\u0631\u0629&lt;/button&gt;&lt;/div&gt;':'')+(CT.ph==='none'&amp;&amp;D.photo&amp;&amp;D.photoOn?'&lt;div class="cvb-note" style="margin:10px 0 0"&gt;\u0647\u0630\u0627 \u0627\u0644\u0642\u0627\u0644\u0628 \u0644\u0627 \u064a\u0639\u0631\u0636 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0634\u062e\u0635\u064a\u0629\u060c \u0648\u0647\u0648 \u0627\u0644\u0623\u0646\u0633\u0628 \u0644\u0644\u062a\u0642\u062f\u064a\u0645 \u0639\u0628\u0631 \u0623\u0646\u0638\u0645\u0629 ATS.&lt;/div&gt;':'')+'&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-sec-t"&gt;\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0631\u0626\u064a\u0633\u064a&lt;/div&gt;&lt;div class="cvb-colors"&gt;'+COLORS.map(function(c){return '&lt;button class="cvb-sw'+(D.color===c?' on':'')+'" style="background:'+c+'" data-act="color" data-v="'+c+'" title="'+c+'"&gt;&lt;/button&gt;';}).join('')+'&lt;input type="color" data-opt="color" value="'+D.color+'" title="\u0644\u0648\u0646 \u0645\u062e\u0635\u0635"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-row" style="margin-top:0"&gt;&lt;label class="cvb-f"&gt;&lt;span&gt;\u0627\u0644\u062e\u0637&lt;/span&gt;&lt;select data-opt="font"&gt;'+FONTS.map(function(f){return '&lt;option value="'+f.id+'"'+(D.font===f.id?' selected':'')+'&gt;'+f.n+'&lt;/option&gt;';}).join('')+'&lt;/select&gt;&lt;/label&gt;&lt;label class="cvb-f"&gt;&lt;span&gt;\u062d\u062c\u0645 \u0627\u0644\u062e\u0637: &lt;b data-out="fs"&gt;'+D.fs+'&lt;/b&gt;pt&lt;/span&gt;&lt;input type="range" min="9" max="12" step="0.5" data-opt="fs" value="'+D.fs+'"&gt;&lt;/label&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-row"&gt;&lt;label class="cvb-f"&gt;&lt;span&gt;\u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a \u0628\u064a\u0646 \u0627\u0644\u0623\u0642\u0633\u0627\u0645&lt;/span&gt;&lt;div class="cvb-seg"&gt;&lt;button data-act="sp" data-v="0.7" class="'+(D.sp==0.7?'on':'')+'"&gt;\u0645\u0636\u063a\u0648\u0637\u0629&lt;/button&gt;&lt;button data-act="sp" data-v="1" class="'+(D.sp==1?'on':'')+'"&gt;\u0639\u0627\u062f\u064a\u0629&lt;/button&gt;&lt;button data-act="sp" data-v="1.35" class="'+(D.sp==1.35?'on':'')+'"&gt;\u0645\u0631\u064a\u062d\u0629&lt;/button&gt;&lt;/div&gt;&lt;/label&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-hint"&gt;\ud83d\udca1 \u0625\u0630\u0627 \u0632\u0627\u062f\u062a \u0627\u0644\u0633\u064a\u0631\u0629 \u0639\u0646 \u0635\u0641\u062d\u062a\u064a\u0646 \u0642\u0644\u064a\u0644\u064b\u0627\u060c \u0635\u063a\u0651\u0631 \u0627\u0644\u062e\u0637 \u0623\u0648 \u0627\u062e\u062a\u0631 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u0636\u063a\u0648\u0637\u0629. \u0627\u0644\u062e\u0637\u0648\u0637 \u0627\u0644\u062d\u0645\u0631\u0627\u0621 \u0641\u064a \u0627\u0644\u0645\u0639\u0627\u064a\u0646\u0629 \u062a\u0648\u0636\u062d \u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0635\u0641\u062d\u0627\u062a.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 return o;
}

/* ---------- \u0641\u062d\u0635 ATS ---------- */
var VERBS_EN='led,managed,supervised,designed,prepared,reduced,increased,coordinated,delivered,achieved,implemented,developed,reviewed,planned,executed,inspected,performed,built,created,improved,controlled,monitored,analyzed,analysed,conducted,directed,established,estimated,handled,launched,maintained,negotiated,organized,produced,resolved,saved,streamlined,trained,enforced,completed,optimized,calculated,modeled,modelled,drafted,surveyed,tested,submitted,followed,studied,priced,assisted,participated,ensured,oversaw,generated'.split(',');
var VERBS_AR='\u0627\u0644\u0625\u0634\u0631\u0627\u0641,\u0625\u0634\u0631\u0627\u0641,\u0623\u0634\u0631\u0641\u062a,\u0623\u0634\u0631\u0641,\u0625\u062f\u0627\u0631\u0629,\u0623\u062f\u0631\u062a,\u062a\u0635\u0645\u064a\u0645,\u0635\u0645\u0645\u062a,\u0625\u0639\u062f\u0627\u062f,\u0623\u0639\u062f\u062f\u062a,\u062a\u0646\u0641\u064a\u0630,\u0646\u0641\u0630\u062a,\u062a\u0642\u0644\u064a\u0644,\u062e\u0641\u0636,\u062a\u062e\u0641\u064a\u0636,\u0632\u064a\u0627\u062f\u0629,\u062a\u062d\u0642\u064a\u0642,\u062d\u0642\u0642\u062a,\u062a\u0637\u0648\u064a\u0631,\u0637\u0648\u0631\u062a,\u0642\u064a\u0627\u062f\u0629,\u0642\u062f\u062a,\u0645\u062a\u0627\u0628\u0639\u0629,\u062a\u0627\u0628\u0639\u062a,\u0645\u0631\u0627\u062c\u0639\u0629,\u0631\u0627\u062c\u0639\u062a,\u0627\u0644\u062a\u0646\u0633\u064a\u0642,\u062a\u0646\u0633\u064a\u0642,\u0646\u0633\u0642\u062a,\u062a\u062e\u0637\u064a\u0637,\u0627\u0644\u062a\u062e\u0637\u064a\u0637,\u0627\u0633\u062a\u0644\u0627\u0645,\u062a\u0637\u0628\u064a\u0642,\u0637\u0628\u0642\u062a,\u062d\u0635\u0631,\u062a\u0633\u0644\u064a\u0645,\u0633\u0644\u0645\u062a,\u062f\u0631\u0627\u0633\u0629,\u062a\u062d\u0633\u064a\u0646,\u062d\u0633\u0627\u0628,\u0636\u0628\u0637,\u0627\u0639\u062a\u0645\u0627\u062f,\u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629,\u0645\u0634\u0627\u0631\u0643\u0629,\u0634\u0627\u0631\u0643\u062a,\u062a\u062f\u0631\u064a\u0628,\u062f\u0631\u0628\u062a,\u0631\u0641\u0639,\u062a\u0633\u0639\u064a\u0631,\u0641\u062d\u0635,\u0627\u062e\u062a\u0628\u0627\u0631,\u062a\u0648\u0641\u064a\u0631,\u0648\u0641\u0631\u062a,\u0625\u0646\u062c\u0627\u0632,\u0623\u0646\u062c\u0632\u062a,\u0625\u0637\u0644\u0627\u0642,\u062a\u0623\u0633\u064a\u0633,\u0623\u0633\u0633\u062a,\u0625\u0646\u0634\u0627\u0621,\u062a\u062d\u0644\u064a\u0644,\u062d\u0644\u0644\u062a,\u0627\u0644\u062a\u0641\u0627\u0648\u0636,\u062a\u0641\u0627\u0648\u0636\u062a'.split(',');
function normAr(t){return String(t).toLowerCase().replace(/[\u064B-\u0652\u0640]/g,'').replace(/[\u0625\u0623\u0622]/g,'\u0627').replace(/\u0629/g,'\u0647').replace(/\u0649/g,'\u064a');}
function allBullets(){var b=[];D.s.forEach(function(s){if(!s.on)return;if(s.type==='experience'||s.type==='projects'||s.type==='volunteer')s.items.forEach(function(e){b=b.concat(lines(e.desc));});});return b;}
function cvText(){var p=D.p,o=[p.name,p.role,p.email,p.phone,p.loc,p.link,p.web,p.extra];D.s.forEach(function(s){if(!s.on)return;o.push(s.title);if(TYPES[s.type].kind==='text')o.push(s.text);else s.items.forEach(function(e){for(var k in e)o.push(e[k]);});});return o.join('\n');}
function atsChecks(){
 var p=D.p,c=[],bul=allBullets(),txt=cvText(),words=wc(txt);
 function add(st,t,w){c.push({st:st,t:t,w:w||1});}
 add(p.name&amp;&amp;p.role?'ok':'bad',p.name&amp;&amp;p.role?'\u0627\u0644\u0627\u0633\u0645 \u0648\u0627\u0644\u0645\u0633\u0645\u0649 \u0627\u0644\u0645\u0647\u0646\u064a \u0645\u0648\u062c\u0648\u062f\u0627\u0646.':'\u0623\u0636\u0641 \u0627\u0633\u0645\u0643 \u0627\u0644\u0643\u0627\u0645\u0644 \u0648\u0645\u0633\u0645\u0627\u0643 \u0627\u0644\u0645\u0647\u0646\u064a (\u0645\u062b\u0644: \u0645\u0647\u0646\u062f\u0633 \u0645\u062f\u0646\u064a - \u0625\u0646\u0634\u0627\u0626\u064a) \u0623\u0639\u0644\u0649 \u0627\u0644\u0633\u064a\u0631\u0629.',2);
 var em=/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test((p.email||'').trim()),ph=/\d{7,}/.test((p.phone||'').replace(/\D/g,''));
 add(em&amp;&amp;ph?'ok':'bad',em&amp;&amp;ph?'\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0648\u0631\u0642\u0645 \u0627\u0644\u0647\u0627\u062a\u0641 \u0635\u062d\u064a\u062d\u0627\u0646.':'\u062a\u0623\u0643\u062f \u0645\u0646 \u0643\u062a\u0627\u0628\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0635\u062d\u064a\u062d \u0648\u0631\u0642\u0645 \u0647\u0627\u062a\u0641 \u0628\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u062f\u0648\u0644\u0629.',2);
 add(p.link?'ok':'warn',p.link?'\u0631\u0627\u0628\u0637 LinkedIn \u0645\u0648\u062c\u0648\u062f.':'\u0623\u0636\u0641 \u0631\u0627\u0628\u0637 LinkedIn\u060c \u0645\u0639\u0638\u0645 \u0645\u0633\u0624\u0648\u0644\u064a \u0627\u0644\u062a\u0648\u0638\u064a\u0641 \u064a\u0631\u0627\u062c\u0639\u0648\u0646\u0647.');
 var sum=null;D.s.forEach(function(s){if(s.type==='summary'&amp;&amp;s.on)sum=s;});var sw=sum?wc(sum.text):0;
 add(sw&gt;=25&amp;&amp;sw&lt;=110?'ok':sw?'warn':'bad',sw&gt;=25&amp;&amp;sw&lt;=110?'\u0627\u0644\u0645\u0644\u062e\u0635 \u0627\u0644\u0645\u0647\u0646\u064a \u0628\u0637\u0648\u0644 \u0645\u0646\u0627\u0633\u0628 ('+sw+' \u0643\u0644\u0645\u0629).':sw?'\u0627\u0644\u0645\u0644\u062e\u0635 \u0627\u0644\u0645\u0647\u0646\u064a '+(sw&lt;25?'\u0642\u0635\u064a\u0631 \u062c\u062f\u064b\u0627':'\u0637\u0648\u064a\u0644')+' ('+sw+' \u0643\u0644\u0645\u0629). \u0627\u0644\u0623\u0641\u0636\u0644 \u0628\u064a\u0646 30 \u064880 \u0643\u0644\u0645\u0629.':'\u0623\u0636\u0641 \u0645\u0644\u062e\u0635\u064b\u0627 \u0645\u0647\u0646\u064a\u064b\u0627 \u0645\u0646 3 \u0625\u0644\u0649 4 \u0623\u0633\u0637\u0631\u060c \u0641\u0647\u0648 \u0623\u0648\u0644 \u0645\u0627 \u064a\u0642\u0631\u0624\u0647 \u0645\u0633\u0624\u0648\u0644 \u0627\u0644\u062a\u0648\u0638\u064a\u0641.',1.5);
 var hasExp=D.s.some(function(s){return (s.type==='experience'||s.type==='projects')&amp;&amp;secHas(s);});
 add(hasExp?'ok':'bad',hasExp?'\u0642\u0633\u0645 \u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0623\u0648 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0645\u0648\u062c\u0648\u062f.':'\u0623\u0636\u0641 \u0642\u0633\u0645 \u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0627\u0644\u0639\u0645\u0644\u064a\u0629 (\u0623\u0648 \u0627\u0644\u0645\u0634\u0627\u0631\u064a\u0639 \u0648\u0627\u0644\u062a\u062f\u0631\u064a\u0628 \u0644\u062d\u062f\u064a\u062b\u064a \u0627\u0644\u062a\u062e\u0631\u062c).',2);
 var noDate=0;D.s.forEach(function(s){if(s.on&amp;&amp;s.type==='experience')s.items.filter(entFilled).forEach(function(e){if(!dates(e))noDate++;});});
 if(hasExp)add(noDate?'warn':'ok',noDate?'\u064a\u0648\u062c\u062f '+noDate+' \u062e\u0628\u0631\u0629 \u0628\u062f\u0648\u0646 \u062a\u0627\u0631\u064a\u062e. \u0623\u0646\u0638\u0645\u0629 ATS \u062a\u062d\u0633\u0628 \u0633\u0646\u0648\u0627\u062a \u0627\u0644\u062e\u0628\u0631\u0629 \u0645\u0646 \u0627\u0644\u062a\u0648\u0627\u0631\u064a\u062e.':'\u0643\u0644 \u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0645\u0624\u0631\u062e\u0629.');
 add(bul.length&gt;=4?'ok':'warn',bul.length&gt;=4?'\u0639\u062f\u062f \u0646\u0642\u0627\u0637 \u0627\u0644\u0625\u0646\u062c\u0627\u0632 \u062c\u064a\u062f ('+bul.length+').':'\u0627\u0643\u062a\u0628 3 \u0625\u0644\u0649 5 \u0646\u0642\u0627\u0637 \u0644\u0643\u0644 \u0648\u0638\u064a\u0641\u0629\u060c \u0643\u0644 \u0646\u0642\u0637\u0629 \u0641\u064a \u0633\u0637\u0631 \u0645\u0633\u062a\u0642\u0644.',1.5);
 if(bul.length){
  var nums=bul.filter(function(b){return /[0-9\u0660-\u0669]/.test(b);}).length,r=nums/bul.length;
  add(r&gt;=.3?'ok':'warn',r&gt;=.3?'\u0646\u0633\u0628\u0629 \u062c\u064a\u062f\u0629 \u0645\u0646 \u0627\u0644\u0625\u0646\u062c\u0627\u0632\u0627\u062a \u0645\u062f\u0639\u0648\u0645\u0629 \u0628\u0627\u0644\u0623\u0631\u0642\u0627\u0645 ('+Math.round(r*100)+'%).':'\u0641\u0642\u0637 '+Math.round(r*100)+'% \u0645\u0646 \u0627\u0644\u0646\u0642\u0627\u0637 \u0641\u064a\u0647\u0627 \u0623\u0631\u0642\u0627\u0645. \u0623\u0636\u0641 \u0623\u0631\u0642\u0627\u0645\u064b\u0627 (\u0645\u0633\u0627\u062d\u0627\u062a\u060c \u0642\u064a\u0645 \u0645\u0634\u0627\u0631\u064a\u0639\u060c \u0646\u0633\u0628 \u062a\u0648\u0641\u064a\u0631\u060c \u0639\u062f\u062f \u0623\u0641\u0631\u0627\u062f).',1.5);
  var vb=bul.filter(function(b){var w=normAr(b.split(/\s+/)[0]||'').replace(/[^\w\u0600-\u06FF]/g,'');return VERBS_EN.indexOf(w)&gt;-1||VERBS_AR.map(normAr).indexOf(w)&gt;-1||VERBS_AR.map(normAr).indexOf(w.replace(/^\u0627\u0644/,''))&gt;-1||/^(\u0627\u0644)?[\u0600-\u06FF]{3,}/.test(w)&amp;&amp;isAr();}).length;
  if(!isAr())add(vb/bul.length&gt;=.6?'ok':'warn',vb/bul.length&gt;=.6?'\u0645\u0639\u0638\u0645 \u0627\u0644\u0646\u0642\u0627\u0637 \u062a\u0628\u062f\u0623 \u0628\u0641\u0639\u0644 \u0642\u0648\u064a.':'\u0627\u0628\u062f\u0623 \u0643\u0644 \u0646\u0642\u0637\u0629 \u0628\u0641\u0639\u0644 \u0642\u0648\u064a \u0641\u064a \u0627\u0644\u0645\u0627\u0636\u064a \u0645\u062b\u0644 Supervised, Designed, Reduced, Delivered.');
  var lg=bul.filter(function(b){return wc(b)&gt;35;}).length;
  if(lg)add('warn','\u064a\u0648\u062c\u062f '+lg+' \u0646\u0642\u0637\u0629 \u0637\u0648\u064a\u0644\u0629 \u062c\u062f\u064b\u0627 (\u0623\u0643\u062b\u0631 \u0645\u0646 35 \u0643\u0644\u0645\u0629). \u0627\u062e\u062a\u0635\u0631\u0647\u0627 \u0644\u062a\u064f\u0642\u0631\u0623 \u0628\u0633\u0631\u0639\u0629.');
 }
 var sk=0;D.s.forEach(function(s){if(s.on&amp;&amp;(s.type==='skills'||s.type==='software'))sk+=s.items.filter(function(i){return (i.name||'').trim();}).length;});
 add(sk&gt;=6?'ok':'warn',sk&gt;=6?'\u0627\u0644\u0645\u0647\u0627\u0631\u0627\u062a \u0648\u0627\u0644\u0628\u0631\u0627\u0645\u062c \u0643\u0627\u0641\u064a\u0629 ('+sk+').':'\u0623\u0636\u0641 \u0645\u0647\u0627\u0631\u0627\u062a \u0648\u0628\u0631\u0627\u0645\u062c \u0647\u0646\u062f\u0633\u064a\u0629 \u0623\u0643\u062b\u0631 (6 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644)\u060c \u0641\u0647\u064a \u0643\u0644\u0645\u0627\u062a \u0645\u0641\u062a\u0627\u062d\u064a\u0629 \u0623\u0633\u0627\u0633\u064a\u0629 \u0641\u064a ATS.',1.5);
 var edu=D.s.some(function(s){return s.type==='education'&amp;&amp;secHas(s);});
 add(edu?'ok':'bad',edu?'\u0642\u0633\u0645 \u0627\u0644\u062a\u0639\u0644\u064a\u0645 \u0645\u0648\u062c\u0648\u062f.':'\u0623\u0636\u0641 \u0642\u0633\u0645 \u0627\u0644\u062a\u0639\u0644\u064a\u0645 (\u0627\u0644\u062f\u0631\u062c\u0629\u060c \u0627\u0644\u062c\u0627\u0645\u0639\u0629\u060c \u0633\u0646\u0629 \u0627\u0644\u062a\u062e\u0631\u062c).');
 var ph2=/\[[^\]]*\]/.test(txt);
 add(ph2?'bad':'ok',ph2?'\u0645\u0627 \u0632\u0627\u0644\u062a \u0647\u0646\u0627\u0643 \u0639\u0644\u0627\u0645\u0627\u062a \u0645\u062b\u0644 [X] \u0623\u0648 [\u0627\u0644\u062c\u0627\u0645\u0639\u0629]. \u0627\u0633\u062a\u0628\u062f\u0644\u0647\u0627 \u0628\u0628\u064a\u0627\u0646\u0627\u062a \u062d\u0642\u064a\u0642\u064a\u0629 \u0642\u0628\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644.':'\u0644\u0627 \u062a\u0648\u062c\u062f \u0641\u0631\u0627\u063a\u0627\u062a \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629.',2);
 add(words&gt;=200&amp;&amp;words&lt;=900?'ok':'warn',words&lt;200?'\u0627\u0644\u0633\u064a\u0631\u0629 \u0642\u0635\u064a\u0631\u0629 ('+words+' \u0643\u0644\u0645\u0629). \u0623\u0636\u0641 \u062a\u0641\u0627\u0635\u064a\u0644 \u0623\u0643\u062b\u0631 \u0639\u0646 \u062e\u0628\u0631\u0627\u062a\u0643 \u0648\u0645\u0634\u0627\u0631\u064a\u0639\u0643.':words&gt;900?'\u0627\u0644\u0633\u064a\u0631\u0629 \u0637\u0648\u064a\u0644\u0629 ('+words+' \u0643\u0644\u0645\u0629). \u062d\u0627\u0648\u0644 \u0623\u0644\u0627 \u062a\u062a\u062c\u0627\u0648\u0632 \u0635\u0641\u062d\u062a\u064a\u0646.':'\u0637\u0648\u0644 \u0627\u0644\u0633\u064a\u0631\u0629 \u0645\u0646\u0627\u0633\u0628 ('+words+' \u0643\u0644\u0645\u0629).');
 add(!tplOf(D.tpl).ats?'warn':'ok',!tplOf(D.tpl).ats?'\u0642\u0627\u0644\u0628 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0646 \u0642\u062f \u064a\u064f\u0642\u0631\u0623 \u0628\u0634\u0643\u0644 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628 \u0641\u064a \u0628\u0639\u0636 \u0623\u0646\u0638\u0645\u0629 ATS.':'\u0627\u0644\u0642\u0627\u0644\u0628 \u0628\u0639\u0645\u0648\u062f \u0648\u0627\u062d\u062f \u0648\u0633\u0647\u0644 \u0627\u0644\u0642\u0631\u0627\u0621\u0629 \u0622\u0644\u064a\u064b\u0627.');
 if(D.photoOn&amp;&amp;D.photo&amp;&amp;tplOf(D.tpl).ph!=='none')add('warn','\u0627\u0644\u0633\u064a\u0631\u0629 \u062a\u062d\u062a\u0648\u064a \u0635\u0648\u0631\u0629. \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u062e\u0644\u064a\u062c \u0648\u0645\u0635\u0631\u060c \u0644\u0643\u0646 \u0627\u062d\u0630\u0641\u0647\u0627 \u0639\u0646\u062f \u0627\u0644\u062a\u0642\u062f\u064a\u0645 \u0644\u0634\u0631\u0643\u0627\u062a \u0623\u0648\u0631\u0648\u0628\u064a\u0629 \u0648\u0623\u0645\u0631\u064a\u0643\u064a\u0629.',.5);
 var tot=0,got=0;c.forEach(function(x){tot+=x.w;got+=x.st==='ok'?x.w:x.st==='warn'?x.w*.5:0;});
 return {c:c,score:Math.round(got/tot*100)};
}
var STOP=('a,an,the,and,or,for,with,to,of,in,on,at,by,as,is,are,be,will,shall,you,your,we,our,us,from,this,that,these,those,it,its,have,has,must,should,can,able,etc,per,including,within,into,about,also,well,strong,good,excellent,experience,years,year,work,working,team,role,job,position,candidate,required,requirements,preferred,plus,ability,knowledge,skills,responsibilities,minimum,least,other,all,any,such,new,based,more,than,who,which,join,looking,company,works,preparation,prepare,knowledge,environment,apply,salary,location,full,time,degree,related,field,engineer,engineering,'+
'\u0641\u064a,\u0645\u0646,\u0639\u0644\u0649,\u0625\u0644\u0649,\u0627\u0644\u0649,\u0639\u0646,\u0645\u0639,\u0623\u0646,\u0627\u0646,\u0623\u0648,\u0627\u0648,\u062b\u0645,\u0647\u0630\u0627,\u0647\u0630\u0647,\u0627\u0644\u062a\u064a,\u0627\u0644\u0630\u064a,\u0627\u0644\u0630\u064a\u0646,\u0643\u0645\u0627,\u0644\u062f\u0649,\u064a\u062c\u0628,\u0645\u0627,\u0644\u0627,\u0642\u062f,\u0643\u0644,\u0628\u0639\u0636,\u063a\u064a\u0631,\u0628\u064a\u0646,\u062d\u062a\u0649,\u0630\u0644\u0643,\u062a\u0644\u0643,\u0647\u0648,\u0647\u064a,\u0647\u0645,\u0646\u062d\u0646,\u0623\u064a,\u0627\u064a,\u0648\u0641\u0642,\u062e\u0644\u0627\u0644,\u0639\u0646\u062f,\u0644\u0645\u062f\u0629,\u0633\u0646\u0648\u0627\u062a,\u0633\u0646\u0629,\u062e\u0628\u0631\u0629,\u0627\u0644\u0639\u0645\u0644,\u0639\u0645\u0644,\u0645\u0647\u0646\u062f\u0633,\u0627\u0644\u0645\u0647\u0646\u062f\u0633,\u0627\u0644\u0647\u0646\u062f\u0633\u0629,\u0647\u0646\u062f\u0633\u0629,\u0627\u0644\u0645\u062a\u0642\u062f\u0645,\u0634\u0631\u0643\u0629,\u0627\u0644\u0634\u0631\u0643\u0629,\u0648\u0638\u064a\u0641\u0629,\u0645\u0637\u0644\u0648\u0628,\u0627\u0644\u0645\u0637\u0644\u0648\u0628,\u064a\u0641\u0636\u0644,\u0627\u0644\u0642\u062f\u0631\u0629,\u0642\u062f\u0631\u0629,\u0645\u0639\u0631\u0641\u0629,\u062c\u064a\u062f\u0629,\u062c\u064a\u062f,\u0645\u0645\u062a\u0627\u0632,\u0627\u0644\u0645\u0647\u0627\u0631\u0627\u062a,\u0645\u0647\u0627\u0631\u0627\u062a,\u0627\u0644\u062d\u062f,\u0627\u0644\u0623\u062f\u0646\u0649,\u0644\u062f\u064a\u0647,\u0623\u0646,\u064a\u0643\u0648\u0646,\u062a\u0643\u0648\u0646,\u0648\u062c\u0648\u062f,\u0645\u0639,\u0636\u0645\u0646,\u0627\u062c\u0627\u062f\u0629,\u0625\u062c\u0627\u062f\u0629').split(',');
var TERMS='autocad,revit,etabs,safe,sap2000,staad,tekla,primavera,p6,ms project,civil 3d,bim,navisworks,excel,shop drawings,qa/qc,hse,boq,bbs,rfi,pmp,fidic,aci,ecp,structural design,site supervision,quantity surveying,cost control,scheduling,planning,concrete,steel structures,infrastructure,road,roads,bridges,water,drainage,mep,finishing,tendering,estimation,estimating,value engineering,contract,contracts,claims,safety,quality,inspection,surveying,geotechnical,foundations,\u062d\u0635\u0631 \u0627\u0644\u0643\u0645\u064a\u0627\u062a,\u0627\u0644\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a,\u0645\u0633\u062a\u062e\u0644\u0635\u0627\u062a,\u0627\u0644\u0625\u0634\u0631\u0627\u0641,\u0625\u0634\u0631\u0627\u0641,\u0627\u0644\u062a\u0646\u0641\u064a\u0630,\u062a\u0646\u0641\u064a\u0630,\u0627\u0644\u062c\u0648\u062f\u0629,\u0627\u0644\u0633\u0644\u0627\u0645\u0629,\u0627\u0644\u0645\u0643\u062a\u0628 \u0627\u0644\u0641\u0646\u064a,\u0645\u0643\u062a\u0628 \u0641\u0646\u064a,\u0627\u0644\u062a\u0635\u0645\u064a\u0645 \u0627\u0644\u0625\u0646\u0634\u0627\u0626\u064a,\u062a\u0635\u0645\u064a\u0645,\u0627\u0644\u062e\u0631\u0633\u0627\u0646\u0629,\u062e\u0631\u0633\u0627\u0646\u0629,\u0627\u0644\u0634\u062f\u0627\u062a,\u0627\u0644\u062a\u0633\u0644\u064a\u062d,\u0627\u0644\u0645\u0642\u0627\u064a\u0633\u0627\u062a,\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0627\u0644\u0632\u0645\u0646\u064a,\u0641\u064a\u062f\u064a\u0643,\u0627\u0644\u062a\u0634\u0637\u064a\u0628\u0627\u062a,\u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629,\u0627\u0644\u0637\u0631\u0642,\u0627\u0644\u0643\u0628\u0627\u0631\u064a,\u0627\u0644\u0645\u0646\u0627\u0642\u0635\u0627\u062a,\u0627\u0644\u062a\u0633\u0639\u064a\u0631,\u0627\u0644\u0644\u0648\u062d\u0627\u062a \u0627\u0644\u062a\u0646\u0641\u064a\u0630\u064a\u0629,\u0634\u0648\u0628 \u062f\u0631\u0648\u064a\u0646\u062c,\u0627\u0644\u0639\u0642\u0648\u062f,\u0627\u0644\u0645\u0637\u0627\u0644\u0628\u0627\u062a,\u0627\u0644\u0645\u0633\u0627\u062d\u0629,\u0627\u0644\u062a\u0631\u0628\u0629,\u0627\u0644\u0623\u0633\u0627\u0633\u0627\u062a'.split(',');
function jdKeywords(jd){
 var low=normAr(jd),found=[],seen={};
 TERMS.forEach(function(t){var n=normAr(t);if(new RegExp('(^|[^a-z0-9\u0600-\u06ff])'+n.replace(/[.*+?^${}()|[\]\\\/]/g,'\\$&amp;')+'(?=$|[^a-z0-9\u0600-\u06ff])').test(low)&amp;&amp;!seen[n]){seen[n]=1;found.push({k:t,n:n,f:99});}});
 var freq={};(low.match(/[a-z][a-z0-9+#.\/-]{2,}|[\u0600-\u06ff]{3,}/g)||[]).forEach(function(w){w=w.replace(/[.\-\/]+$/,'');if(w.length&lt;3||STOP.map(normAr).indexOf(w)&gt;-1||/^\d+$/.test(w))return;freq[w]=(freq[w]||0)+1;});
 Object.keys(freq).sort(function(a,b){return freq[b]-freq[a];}).forEach(function(w){if(found.length&gt;=30)return;var base=w.replace(/^(\u0648\u0627\u0644|\u0628\u0627\u0644|\u0644\u0644|\u0627\u0644|\u0648)/,'');if(seen[w]||seen[base]||seen['\u0627\u0644'+base])return;if(found.some(function(f){return f.n.indexOf(w)&gt;-1||base.length&gt;2&amp;&amp;f.n.indexOf(base)&gt;-1;}))return;if(freq[w]&gt;=2){seen[w]=1;found.push({k:w,n:w,f:freq[w]});}});
 var cv=normAr(cvText());
 return found.slice(0,30).map(function(o){var b=o.n.replace(/^(\u0648\u0627\u0644|\u0628\u0627\u0644|\u0644\u0644|\u0627\u0644|\u0648)/,'');return {k:o.k,y:cv.indexOf(o.n)&gt;-1||(b.length&gt;2&amp;&amp;cv.indexOf(b)&gt;-1)};});
}
function paneAts(){
 var r=atsChecks(),col=r.score&gt;=80?'var(--ok)':r.score&gt;=55?'var(--warn)':'var(--bad)';
 var o='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-score"&gt;&lt;div class="cvb-ring" style="--v:'+r.score+';--c:'+col+'"&gt;&lt;b&gt;'+r.score+'%&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="cvb-sec-t" style="margin:0"&gt;\u0645\u062f\u0649 \u062a\u0648\u0627\u0641\u0642 \u0633\u064a\u0631\u062a\u0643 \u0645\u0639 \u0623\u0646\u0638\u0645\u0629 ATS&lt;/div&gt;&lt;div class="cvb-hint"&gt;\u0623\u0646\u0638\u0645\u0629 \u062a\u062a\u0628\u0639 \u0627\u0644\u0645\u062a\u0642\u062f\u0645\u064a\u0646 (ATS) \u062a\u0641\u0631\u0632 \u0627\u0644\u0633\u064a\u0631 \u0627\u0644\u0630\u0627\u062a\u064a\u0629 \u0622\u0644\u064a\u064b\u0627 \u0642\u0628\u0644 \u0623\u0646 \u064a\u0631\u0627\u0647\u0627 \u0623\u064a \u0634\u062e\u0635. \u0627\u0644\u0642\u0648\u0627\u0644\u0628 \u0647\u0646\u0627 \u0645\u0635\u0645\u0645\u0629 \u0644\u062a\u064f\u0642\u0631\u0623 \u0646\u0635\u064a\u064b\u0627 \u0628\u0627\u0644\u0643\u0627\u0645\u0644\u060c \u0648\u0647\u0630\u0647 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u062a\u0633\u0627\u0639\u062f\u0643 \u0641\u064a \u062a\u062d\u0633\u064a\u0646 \u0627\u0644\u0645\u062d\u062a\u0648\u0649.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;ul class="cvb-chk"&gt;'+r.c.map(function(x){return '&lt;li class="'+x.st+'"&gt;&lt;span class="d"&gt;'+(x.st==='ok'?'\u2713':x.st==='warn'?'!':'\u2715')+'&lt;/span&gt;&lt;span&gt;'+h(x.t)+'&lt;/span&gt;&lt;/li&gt;';}).join('')+'&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;';
 o+='&lt;div class="cvb-card"&gt;&lt;div class="cvb-card-b" style="border:0;padding-top:12px"&gt;&lt;div class="cvb-sec-t"&gt;\ud83c\udfaf \u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u0633\u064a\u0631\u0629 \u0645\u0639 \u0625\u0639\u0644\u0627\u0646 \u0648\u0638\u064a\u0641\u0629&lt;/div&gt;&lt;div class="cvb-hint" style="margin-top:0;margin-bottom:8px"&gt;\u0627\u0644\u0635\u0642 \u0646\u0635 \u0625\u0639\u0644\u0627\u0646 \u0627\u0644\u0648\u0638\u064a\u0641\u0629 \u0627\u0644\u062a\u064a \u062a\u062a\u0642\u062f\u0645 \u0644\u0647\u0627\u060c \u0648\u0633\u0646\u0633\u062a\u062e\u0631\u062c \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0641\u062a\u0627\u062d\u064a\u0629 \u0648\u0646\u0648\u0636\u062d \u0623\u064a\u0647\u0627 \u0645\u0648\u062c\u0648\u062f \u0641\u064a \u0633\u064a\u0631\u062a\u0643 \u0648\u0623\u064a\u0647\u0627 \u064a\u0646\u0642\u0635\u0643.&lt;/div&gt;&lt;textarea dir="auto" id="cvb-jd" rows="6" placeholder="\u0627\u0644\u0635\u0642 \u0647\u0646\u0627 \u0648\u0635\u0641 \u0627\u0644\u0648\u0638\u064a\u0641\u0629 (\u0639\u0631\u0628\u064a \u0623\u0648 \u0625\u0646\u062c\u0644\u064a\u0632\u064a)..."&gt;'+h(UI.jd)+'&lt;/textarea&gt;&lt;div style="margin-top:8px"&gt;&lt;button class="cvb-btn pri sm" data-act="jd"&gt;\u062a\u062d\u0644\u064a\u0644 \u0627\u0644\u0625\u0639\u0644\u0627\u0646&lt;/button&gt;&lt;/div&gt;&lt;div id="cvb-jdres"&gt;'+jdRes()+'&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
 return o;
}
function jdRes(){
 if(!UI.jd.trim())return '';var k=jdKeywords(UI.jd);if(!k.length)return '&lt;div class="cvb-hint"&gt;\u0644\u0645 \u0646\u062c\u062f \u0643\u0644\u0645\u0627\u062a \u0645\u0641\u062a\u0627\u062d\u064a\u0629 \u0648\u0627\u0636\u062d\u0629.&lt;/div&gt;';
 var y=k.filter(function(x){return x.y;}).length,pc=Math.round(y/k.length*100);
 return '&lt;div class="cvb-hint" style="font-weight:700;color:var(--tx)"&gt;\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0637\u0627\u0628\u0642\u0629: '+pc+'% ('+y+' \u0645\u0646 '+k.length+')&lt;/div&gt;&lt;div style="margin-top:6px"&gt;'+k.map(function(x){return '&lt;span class="cvb-kw '+(x.y?'y':'n')+'"&gt;'+(x.y?'\u2713 ':'\u2715 ')+h(x.k)+'&lt;/span&gt;';}).join('')+'&lt;/div&gt;&lt;div class="cvb-hint"&gt;\u0623\u0636\u0641 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u062d\u0645\u0631\u0627\u0621 \u0627\u0644\u062a\u064a \u062a\u0646\u0637\u0628\u0642 \u0639\u0644\u064a\u0643 \u0641\u0639\u0644\u064b\u0627 \u0641\u064a \u0627\u0644\u0645\u0647\u0627\u0631\u0627\u062a \u0623\u0648 \u0627\u0644\u062e\u0628\u0631\u0627\u062a \u0623\u0648 \u0627\u0644\u0645\u0644\u062e\u0635\u060c \u0628\u0646\u0641\u0633 \u0635\u064a\u0627\u063a\u0629 \u0627\u0644\u0625\u0639\u0644\u0627\u0646.&lt;/div&gt;';
}

/* ---------- \u0631\u0633\u0645 \u0627\u0644\u0648\u0627\u062c\u0647\u0629 ---------- */
function renderPane(){
 var pane=$('#cvb-pane');
 pane.innerHTML=UI.tab==='content'?paneContent():UI.tab==='design'?paneDesign():paneAts();
 root.querySelectorAll('.cvb-tabs button').forEach(function(b){b.classList.toggle('on',b.getAttribute('data-tab')===UI.tab);});
}
function renderAll(){renderPane();renderPreview();save();}

/* ---------- \u0627\u0644\u0623\u062d\u062f\u0627\u062b ---------- */
root.addEventListener('input',function(ev){
 var t=ev.target,s;
 if(t.hasAttribute('data-p')){D.p[t.getAttribute('data-p')]=t.value;}
 else if(t.hasAttribute('data-st')){s=secById(t.getAttribute('data-s'));s.title=t.value;var c=root.querySelector('.cvb-card[data-sid="'+s.id+'"] .cvb-t');if(c&amp;&amp;c.firstChild)c.firstChild.nodeValue=t.value;}
 else if(t.hasAttribute('data-txt')){s=secById(t.getAttribute('data-s'));s.text=t.value;var w=root.querySelector('[data-wc="'+s.id+'"]');if(w)w.textContent=wc(t.value)+' \u0643\u0644\u0645\u0629';}
 else if(t.hasAttribute('data-f')){s=secById(t.getAttribute('data-s'));s.items[+t.getAttribute('data-e')][t.getAttribute('data-f')]=t.value;
  if(t.getAttribute('data-f')==='h1'){var b=t.closest('.cvb-ent');if(b){b=b.querySelector('.cvb-ent-h b');if(b)b.textContent=t.value||'\u0639\u0646\u0635\u0631';}}}
 else if(t.hasAttribute('data-opt')){var k=t.getAttribute('data-opt');
  if(k==='fs'){D.fs=+t.value;var out=root.querySelector('[data-out=fs]');if(out)out.textContent=t.value;}
  else if(k==='color'){D.color=t.value;}
  else if(k==='font'){D.font=t.value;}
  else if(k==='photoOn'){D.photoOn=t.checked;}}
 else if(t.id==='cvb-jd'){UI.jd=t.value;return;}
 else return;
 renderPreview();save();
});
root.addEventListener('change',function(ev){var t=ev.target;if(t.getAttribute('data-opt')==='photoOn'){D.photoOn=t.checked;renderPreview();save();}if(t.getAttribute('data-opt')==='color'){renderPane();}});
function swapTitles(to){var from=to==='ar'?'en':'ar';D.s.forEach(function(s){var T=TYPES[s.type];if(!s.title||s.title===T[from])s.title=T[to];});}
root.addEventListener('click',function(ev){
 var tab=ev.target.closest('[data-tab]');if(tab&amp;&amp;root.contains(tab)){UI.tab=tab.getAttribute('data-tab');renderPane();return;}
 var b=ev.target.closest('[data-act]');if(!b||!root.contains(b))return;
 var a=b.getAttribute('data-act'),sid=b.getAttribute('data-s'),s=sid?secById(sid):null,j=+b.getAttribute('data-e'),v=b.getAttribute('data-v'),i;
 if(a!=='menu')$('#cvb-dd').classList.remove('open');
 if(ev.target.closest('input,select,textarea'))return;
 switch(a){
  case 'menu':$('#cvb-dd').classList.toggle('open');return;
  case 'noop':return;
  case 'toggle':UI.open[sid]=!UI.open[sid];renderPane();return;
  case 'sec-up':case 'sec-down':ev.stopPropagation();i=D.s.indexOf(s);var n=a==='sec-up'?i-1:i+1;if(n&lt;0||n&gt;=D.s.length)return;D.s.splice(i,1);D.s.splice(n,0,s);break;
  case 'sec-vis':ev.stopPropagation();s.on=!s.on;break;
  case 'sec-del':ev.stopPropagation();if(!confirm('\u062d\u0630\u0641 \u0642\u0633\u0645 "'+s.title+'" \u0646\u0647\u0627\u0626\u064a\u064b\u0627\u061f'))return;D.s.splice(D.s.indexOf(s),1);break;
  case 'add-sec':var ty=$('#cvb-addsel').value,ns=S_(ty,TYPES[ty][D.lang]);if(TYPES[ty].kind==='entries')ns.items.push(E());if(TYPES[ty].kind==='list')ns.items.push(I(''));if(ty==='references')ns.text=isAr()?'\u062a\u064f\u0642\u062f\u064e\u0651\u0645 \u0639\u0646\u062f \u0627\u0644\u0637\u0644\u0628.':'Available upon request.';D.s.push(ns);UI.open[ns.id]=true;renderAll();setTimeout(function(){var c=root.querySelector('[data-sid="'+ns.id+'"]');if(c)c.scrollIntoView({behavior:'smooth',block:'center'});},50);return;
  case 'e-add':s.items.push(TYPES[s.type].kind==='list'?I(''):E());break;
  case 'e-del':s.items.splice(j,1);break;
  case 'e-dup':s.items.splice(j+1,0,clone(s.items[j]));break;
  case 'e-up':if(j&gt;0){s.items.splice(j-1,0,s.items.splice(j,1)[0]);}break;
  case 'e-down':if(j&lt;s.items.length-1){s.items.splice(j+1,0,s.items.splice(j,1)[0]);}break;
  case 'sug':var empty=s.items.filter(function(x){return !(x.name||'').trim();})[0];if(empty)empty.name=v;else s.items.push(I(v));break;
  case 'bank':var key=sid+':'+j;UI.bank=UI.bank===key?null:key;renderPane();return;
  case 'bank-add':if(j&lt;0){s.text=s.text&amp;&amp;s.text.trim()?s.text.trim()+'\n'+v:v;}else{var e=s.items[j];e.desc=e.desc&amp;&amp;e.desc.trim()?e.desc.replace(/\s+$/,'')+'\n'+v:v;}toast('\u062a\u0645\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u0629\u060c \u0644\u0627 \u062a\u0646\u0633\u064e \u0627\u0633\u062a\u0628\u062f\u0627\u0644 [X]');break;
  case 'tpl':D.tpl=v;break;
  case 'tcat':UI.tcat=v;renderPane();return;
  case 'color':D.color=v;break;
  case 'sp':D.sp=+v;break;
  case 'lang':if(D.lang===v)return;swapTitles(v);D.lang=v;break;
  case 'photo':$('#cvb-file-img').click();return;
  case 'photo-del':D.photo='';break;
  case 'jd':UI.jd=$('#cvb-jd').value;$('#cvb-jdres').innerHTML=jdRes();return;
  case 'pdf':doPDF();return;
  case 'docx':doDOCX();return;
  case 'txt':download(new Blob(['\ufeff'+plainText()],{type:'text/plain;charset=utf-8'}),fname('txt'));return;
  case 'copytxt':copyText(plainText());return;
  case 'sample-ar':case 'sample-en':if(!confirm('\u0633\u064a\u062a\u0645 \u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0628\u0627\u0644\u0646\u0645\u0648\u0630\u062c \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u061f (\u0627\u062d\u0641\u0638 \u0646\u0633\u062e\u0629 \u0623\u0648\u0644\u064b\u0627 \u0625\u0646 \u0623\u0631\u062f\u062a)'))return;D=a==='sample-ar'?sampleAR():sampleEN();firstVisit=false;UI.open={};break;
  case 'blank':if(!confirm('\u0633\u064a\u062a\u0645 \u0645\u0633\u062d \u0643\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0648\u0627\u0644\u0628\u062f\u0621 \u0628\u0633\u064a\u0631\u0629 \u0641\u0627\u0631\u063a\u0629. \u0645\u062a\u0627\u0628\u0639\u0629\u061f'))return;D=blank(D.lang);firstVisit=false;UI.open={};D.s.slice(0,2).forEach(function(x){UI.open[x.id]=true;});UI.tab='content';break;
  case 'save-json':download(new Blob([JSON.stringify(D,null,1)],{type:'application/json'}),fname('json'));toast('\u062a\u0645 \u062d\u0641\u0638 \u0645\u0644\u0641 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a\u060c \u064a\u0645\u0643\u0646\u0643 \u0641\u062a\u062d\u0647 \u0644\u0627\u062d\u0642\u064b\u0627 \u0644\u062a\u0639\u062f\u064a\u0644 \u0633\u064a\u0631\u062a\u0643');return;
  case 'load-json':$('#cvb-file-json').click();return;
  case 'full':root.classList.toggle('cvb-full');document.documentElement.style.overflow=root.classList.contains('cvb-full')?'hidden':'';b.textContent=root.classList.contains('cvb-full')?'\u2715':'\u26f6';setTimeout(fitPreview,50);return;
  case 'goto-pv':$('#cvb-pv').scrollIntoView({behavior:'smooth'});return;
  default:return;
 }
 if(a!=='bank-add'&amp;&amp;a!=='sug'&amp;&amp;a!=='e-add'&amp;&amp;a!=='e-del'&amp;&amp;a!=='e-dup')firstVisit=firstVisit&amp;&amp;false;
 renderAll();
});
document.addEventListener('click',function(ev){if(!ev.target.closest||!ev.target.closest('.cvb-menu'))$('#cvb-dd').classList.remove('open');});
$('#cvb-file-json').addEventListener('change',function(){var f=this.files[0];if(!f)return;var r=new FileReader();r.onload=function(){try{var d=JSON.parse(r.result);if(!d||!d.s||!d.p)throw 0;D=d;firstVisit=false;UI.open={};renderAll();toast('\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0628\u0646\u062c\u0627\u062d');}catch(e){alert('\u0627\u0644\u0645\u0644\u0641 \u063a\u064a\u0631 \u0635\u0627\u0644\u062d.');}};r.readAsText(f);this.value='';});
$('#cvb-file-img').addEventListener('change',function(){var f=this.files[0];if(!f)return;var r=new FileReader();r.onload=function(){var im=new Image();im.onload=function(){var c=document.createElement('canvas'),z=360,m=Math.min(im.width,im.height);c.width=c.height=z;c.getContext('2d').drawImage(im,(im.width-m)/2,(im.height-m)/2,m,m,0,0,z,z);D.photo=c.toDataURL('image/jpeg',.86);D.photoOn=true;renderAll();};im.src=r.result;};r.readAsDataURL(f);this.value='';});
var rsT;window.addEventListener('resize',function(){clearTimeout(rsT);rsT=setTimeout(fitPreview,120);});
if(window.ResizeObserver)new ResizeObserver(function(){fitPreview();}).observe($('#cvb-paper'));
if(document.fonts&amp;&amp;document.fonts.ready)document.fonts.ready.then(fitPreview);

/* ---------- \u0627\u0644\u062a\u0635\u062f\u064a\u0631 ---------- */
function fname(ext){var n=(D.p.name||'CV').replace(/^(\u0645\.|eng\.|\u0645\/)\s*/i,'').trim().replace(/[\\\/:*?"&lt;&gt;|]+/g,'').replace(/\s+/g,'_');return n+(isAr()?'_\u0627\u0644\u0633\u064a\u0631\u0629_\u0627\u0644\u0630\u0627\u062a\u064a\u0629':'_CV')+'.'+ext;}
function download(blob,name){var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=name;document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(a.href);a.remove();},1500);}
function copyText(t){if(navigator.clipboard&amp;&amp;navigator.clipboard.writeText){navigator.clipboard.writeText(t).then(function(){toast('\u062a\u0645 \u0646\u0633\u062e \u0627\u0644\u0633\u064a\u0631\u0629 \u0643\u0646\u0635');},function(){fallback();});}else fallback();function fallback(){var ta=document.createElement('textarea');ta.value=t;document.body.appendChild(ta);ta.select();try{document.execCommand('copy');toast('\u062a\u0645 \u0646\u0633\u062e \u0627\u0644\u0633\u064a\u0631\u0629 \u0643\u0646\u0635');}catch(e){}ta.remove();}}
function plainText(){
 var p=D.p,o=[(p.name||'').toUpperCase()];if(p.role)o.push(p.role);var c=['phone','email','loc','link','web'].map(function(k){return p[k];}).filter(Boolean);if(c.length)o.push(c.join(' | '));if(p.extra)o.push(p.extra);
 D.s.filter(secHas).forEach(function(s){var T=TYPES[s.type];o.push('','=== '+s.title+' ===');
  if(T.kind==='text')o.push(String(s.text).trim());
  else if(T.kind==='entries')s.items.filter(entFilled).forEach(function(e,n){if(n)o.push('');o.push([e.h1,dates(e)].filter(Boolean).join(' | '));var sub=[e.h2,e.loc].filter(Boolean).join(' \u2014 ');if(sub)o.push(sub);lines(e.desc).forEach(function(l){o.push('\u2022 '+l);});});
  else{var it=s.items.filter(function(i){return (i.name||'').trim();});if(s.type==='personal')it.forEach(function(i){o.push(i.name+(i.lvl?': '+i.lvl:''));});else o.push(it.map(function(i){return i.name+(T.lvl&amp;&amp;i.lvl?' ('+i.lvl+')':'');}).join(' \u2022 '));}
 });
 return o.join('\r\n')+'\r\n';
}
var SITE_NAME='www.civilmaker.com',SITE_URL='https://www.civilmaker.com/';
function toolUrl(){try{if(/^https?:$/.test(location.protocol)&amp;&amp;/civilmaker/i.test(location.hostname))return location.origin+location.pathname;}catch(e){}return SITE_URL;}
function doPDF(){
 var hasPh=/\[[^\]]*\]/.test(cvText());if(hasPh&amp;&amp;!confirm('\u0645\u0627 \u0632\u0627\u0644\u062a \u0647\u0646\u0627\u0643 \u0639\u0644\u0627\u0645\u0627\u062a \u0645\u062b\u0644 [X] \u0641\u064a \u0633\u064a\u0631\u062a\u0643. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0639\u0644\u0649 \u0623\u064a \u062d\u0627\u0644\u061f'))return;
 var title=fname('pdf').replace(/\.pdf$/,'');
 var fl=document.querySelector('link[href*="fonts.googleapis.com/css2"]');
 var html='&lt;!doctype html&gt;&lt;html lang="'+D.lang+'" dir="'+(isAr()?'rtl':'ltr')+'"&gt;&lt;head&gt;&lt;meta charset="utf-8"&gt;&lt;title&gt;'+h(title)+'&lt;/title&gt;'+(fl?'&lt;link rel="stylesheet" href="'+fl.href+'"&gt;':'')+'&lt;style&gt;'+CV_CSS+'@page{size:A4;margin:0}html,body{margin:0;padding:0;background:#fff}.cv{width:auto;min-height:0;padding-bottom:14mm}.cv,.lay-side .cv-main,.lay-side .cv-side{-webkit-box-decoration-break:clone;box-decoration-break:clone}.lay-side{padding-bottom:0}.lay-side .cv-main,.lay-side .cv-side{padding-bottom:14mm}.tpl-vivid,.tpl-wave{padding-top:13mm}.tpl-vivid .cv-head,.tpl-wave .cv-head{margin-top:-13mm}.lay-side .cv-side{min-height:297mm}.cv-credit{position:fixed;bottom:4.5mm;left:0;right:0;text-align:center;font:7.5pt Arial,Helvetica,sans-serif;color:#8a949e;text-decoration:none;direction:ltr;letter-spacing:.02em}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;'+cvHTML({exp:true})+'&lt;a class="cv-credit" href="'+h(toolUrl())+'"&gt;'+SITE_NAME+'&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;';
 var mobile=/Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
 if(mobile){var w=window.open('','_blank');if(!w){alert('\u0627\u0633\u0645\u062d \u0628\u0627\u0644\u0646\u0648\u0627\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629 \u0644\u062a\u062d\u0645\u064a\u0644 PDF.');return;}w.document.open();w.document.write(html.replace('&lt;/body&gt;','&lt;script&gt;(document.fonts?document.fonts.ready:Promise.resolve()).then(function(){setTimeout(function(){window.print();},400);});&lt;\/script&gt;&lt;/body&gt;'));w.document.close();return;}
 var old=document.getElementById('cvb-print-frame');if(old)old.remove();
 var fr=document.createElement('iframe');fr.id='cvb-print-frame';fr.setAttribute('aria-hidden','true');fr.style.cssText='position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden';document.body.appendChild(fr);
 var d=fr.contentDocument;d.open();d.write(html);d.close();
 var done=false;function go(){if(done)return;done=true;try{fr.contentWindow.focus();fr.contentWindow.print();}catch(e){alert('\u062a\u0639\u0630\u0651\u0631 \u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0637\u0628\u0627\u0639\u0629.');}}
 toast('\u0641\u064a \u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u0637\u0628\u0627\u0639\u0629 \u0627\u062e\u062a\u0631 "\u062d\u0641\u0638 \u0643\u0645\u0644\u0641 PDF" / Save as PDF');
 var fw=fr.contentWindow;setTimeout(function(){if(fw.document.fonts&amp;&amp;fw.document.fonts.ready){fw.document.fonts.ready.then(function(){setTimeout(go,250);});}else go();},300);setTimeout(go,3500);
}

/* --- \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 Word \u062d\u0642\u064a\u0642\u064a (docx) \u0628\u062f\u0648\u0646 \u0645\u0643\u062a\u0628\u0627\u062a --- */
var CRC=(function(){var t=[];for(var n=0;n&lt;256;n++){var c=n;for(var k=0;k&lt;8;k++)c=c&amp;1?0xEDB88320^(c&gt;&gt;&gt;1):c&gt;&gt;&gt;1;t[n]=c&gt;&gt;&gt;0;}return t;})();
function crc32(b){var c=0xFFFFFFFF;for(var i=0;i&lt;b.length;i++)c=CRC[(c^b[i])&amp;255]^(c&gt;&gt;&gt;8);return (c^0xFFFFFFFF)&gt;&gt;&gt;0;}
function zip(files,mime){
 var enc=new TextEncoder(),parts=[],cen=[],off=0,cs=0;
 files.forEach(function(f){var nm=enc.encode(f[0]),d=typeof f[1]==='string'?enc.encode(f[1]):f[1],crc=crc32(d);
  var l=new DataView(new ArrayBuffer(30));l.setUint32(0,0x04034b50,true);l.setUint16(4,20,true);l.setUint16(6,0x0800,true);l.setUint16(12,0x21,true);l.setUint32(14,crc,true);l.setUint32(18,d.length,true);l.setUint32(22,d.length,true);l.setUint16(26,nm.length,true);
  parts.push(new Uint8Array(l.buffer),nm,d);
  var c=new DataView(new ArrayBuffer(46));c.setUint32(0,0x02014b50,true);c.setUint16(4,20,true);c.setUint16(6,20,true);c.setUint16(8,0x0800,true);c.setUint16(14,0x21,true);c.setUint32(16,crc,true);c.setUint32(20,d.length,true);c.setUint32(24,d.length,true);c.setUint16(28,nm.length,true);c.setUint32(42,off,true);
  cen.push(new Uint8Array(c.buffer),nm);cs+=46+nm.length;off+=30+nm.length+d.length;});
 var e=new DataView(new ArrayBuffer(22));e.setUint32(0,0x06054b50,true);e.setUint16(8,files.length,true);e.setUint16(10,files.length,true);e.setUint32(12,cs,true);e.setUint32(16,off,true);
 return new Blob(parts.concat(cen,[new Uint8Array(e.buffer)]),{type:mime});
}
function x(t){return String(t==null?'':t).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;').replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g,'');}
function mix(hex,a){var n=parseInt(hex,16),r=n&gt;&gt;16&amp;255,g=n&gt;&gt;8&amp;255,b=n&amp;255;function m(c){return Math.round(c*a+255*(1-a));}return ((1&lt;&lt;24)+(m(r)&lt;&lt;16)+(m(g)&lt;&lt;8)+m(b)).toString(16).slice(1).toUpperCase();}
function buildDocx(){
 var ar=isAr(),TT=tplOf(D.tpl),tpl=FAM[TT.id]||'modern',acc=tpl==='minimal'?'1A1A1A':D.color.replace('#','').toUpperCase(),ctr=tpl==='classic',cls=tpl==='classic'||tpl==='classicL'||tpl==='minimal',W='http://schemas.openxmlformats.org/wordprocessingml/2006/main';
 var heading=cls?'1A1A1A':acc;
 function R(t,o){o=o||{};var r='';if(o.b)r+='&lt;w:b/&gt;&lt;w:bCs/&gt;';if(o.i)r+='&lt;w:i/&gt;&lt;w:iCs/&gt;';if(o.c)r+='&lt;w:color w:val="'+o.c+'"/&gt;';if(o.sz)r+='&lt;w:sz w:val="'+o.sz+'"/&gt;&lt;w:szCs w:val="'+o.sz+'"/&gt;';if(/[\u0590-\u08FF]/.test(t))r+='&lt;w:rtl/&gt;';return '&lt;w:r&gt;'+(r?'&lt;w:rPr&gt;'+r+'&lt;/w:rPr&gt;':'')+'&lt;w:t xml:space="preserve"&gt;'+x(t)+'&lt;/w:t&gt;&lt;/w:r&gt;';}
 function P(runs,o){o=o||{};var p='';if(o.st)p+='&lt;w:pStyle w:val="'+o.st+'"/&gt;';if(o.keep)p+='&lt;w:keepNext/&gt;';if(o.num)p+='&lt;w:numPr&gt;&lt;w:ilvl w:val="0"/&gt;&lt;w:numId w:val="1"/&gt;&lt;/w:numPr&gt;';if(o.bdr)p+='&lt;w:pBdr&gt;&lt;w:bottom w:val="'+(o.bdrv||'single')+'" w:sz="'+(o.bsz||8)+'" w:space="1" w:color="'+o.bdr+'"/&gt;&lt;/w:pBdr&gt;';if(o.shd)p+='&lt;w:shd w:val="clear" w:color="auto" w:fill="'+o.shd+'"/&gt;';if(ar)p+='&lt;w:bidi/&gt;';if(o.sp)p+='&lt;w:spacing w:before="'+o.sp[0]+'" w:after="'+o.sp[1]+'"/&gt;';if(o.jc)p+='&lt;w:jc w:val="'+o.jc+'"/&gt;';return '&lt;w:p&gt;'+(p?'&lt;w:pPr&gt;'+p+'&lt;/w:pPr&gt;':'')+runs+'&lt;/w:p&gt;';}
 var p=D.p,b=[],sp=D.sp,fs=Math.round(D.fs*2);
 if(tpl==='modern'||tpl==='vivid')b.push(P('',{shd:acc,sp:[0,120]}));
 var hd=[];
 hd.push(P(R(p.name||'',{b:1,sz:fs*2+2,c:tpl==='modern'||tpl==='vivid'||tpl==='side'?acc:'1A1A1A'}),{st:'Title',jc:ctr?'center':null,sp:[0,40]}));
 if(p.role)hd.push(P(R(p.role,{b:1,sz:fs+4,c:tpl==='modern'?'3A4552':acc}),{jc:ctr?'center':null,sp:[0,60]}));
 var cl=['phone','email','loc','link','web'].map(function(k){var v=String(p[k]||'').trim();return v&amp;&amp;ar&amp;&amp;!/[\u0590-\u08FF]/.test(v)?'\u202A'+v+'\u202C':v;}).filter(Boolean),ex=String(p.extra||'').trim();
 if(cl.length)hd.push(P(cl.map(function(c,n){return (n?R('  |  ',{c:'A0A8B0',sz:fs-2}):'')+R(c,{c:'3A4552',sz:fs-2});}).join(''),{jc:ctr?'center':null,sp:[0,ex?20:Math.round(120*sp)],bdr:ex?null:(cls?'2B2B2B':(tpl==='exec'?'C4CCD4':null)),bdrv:cls?'double':'single',bsz:6}));
 if(ex)hd.push(P(R(ex,{c:'3A4552',sz:fs-2}),{jc:ctr?'center':null,sp:[0,Math.round(120*sp)],bdr:cls?'2B2B2B':(tpl==='exec'?'C4CCD4':null),bdrv:cls?'double':'single',bsz:6}));
 var img=null;
 if(TT.ph!=='none'&amp;&amp;D.photoOn&amp;&amp;/^data:image\/jpe?g;base64,/.test(D.photo||'')){var bin=atob(D.photo.split(',')[1]);img=new Uint8Array(bin.length);for(var q=0;q&lt;bin.length;q++)img[q]=bin.charCodeAt(q);}
 if(img){var em=TT.id==='classicp'?[900000,1116000]:[1008000,1008000],geo=TT.id==='classicp'?'roundRect':TT.id==='card'?'roundRect':'ellipse';
  var pic='&lt;w:r&gt;&lt;w:drawing&gt;&lt;wp:inline distT="0" distB="0" distL="0" distR="0"&gt;&lt;wp:extent cx="'+em[0]+'" cy="'+em[1]+'"/&gt;&lt;wp:docPr id="1" name="Photo"/&gt;&lt;wp:cNvGraphicFramePr&gt;&lt;a:graphicFrameLocks noChangeAspect="1"/&gt;&lt;/wp:cNvGraphicFramePr&gt;&lt;a:graphic&gt;&lt;a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"&gt;&lt;pic:pic&gt;&lt;pic:nvPicPr&gt;&lt;pic:cNvPr id="0" name="photo.jpeg"/&gt;&lt;pic:cNvPicPr/&gt;&lt;/pic:nvPicPr&gt;&lt;pic:blipFill&gt;&lt;a:blip r:embed="rId3"/&gt;&lt;a:srcRect/&gt;&lt;a:stretch&gt;&lt;a:fillRect/&gt;&lt;/a:stretch&gt;&lt;/pic:blipFill&gt;&lt;pic:spPr&gt;&lt;a:xfrm&gt;&lt;a:off x="0" y="0"/&gt;&lt;a:ext cx="'+em[0]+'" cy="'+em[1]+'"/&gt;&lt;/a:xfrm&gt;&lt;a:prstGeom prst="'+geo+'"&gt;&lt;a:avLst/&gt;&lt;/a:prstGeom&gt;&lt;/pic:spPr&gt;&lt;/pic:pic&gt;&lt;/a:graphicData&gt;&lt;/a:graphic&gt;&lt;/wp:inline&gt;&lt;/w:drawing&gt;&lt;/w:r&gt;';
  var c1=1900,c2=9978-c1;
  b.push('&lt;w:tbl&gt;&lt;w:tblPr&gt;'+(ar?'&lt;w:bidiVisual/&gt;':'')+'&lt;w:tblW w:w="9978" w:type="dxa"/&gt;&lt;w:tblLayout w:type="fixed"/&gt;&lt;w:tblCellMar&gt;&lt;w:left w:w="0" w:type="dxa"/&gt;&lt;w:right w:w="0" w:type="dxa"/&gt;&lt;/w:tblCellMar&gt;&lt;w:tblLook w:val="0000"/&gt;&lt;/w:tblPr&gt;&lt;w:tblGrid&gt;&lt;w:gridCol w:w="'+c1+'"/&gt;&lt;w:gridCol w:w="'+c2+'"/&gt;&lt;/w:tblGrid&gt;&lt;w:tr&gt;&lt;w:tc&gt;&lt;w:tcPr&gt;&lt;w:tcW w:w="'+c1+'" w:type="dxa"/&gt;&lt;w:vAlign w:val="center"/&gt;&lt;/w:tcPr&gt;'+P(pic,{sp:[0,0]})+'&lt;/w:tc&gt;&lt;w:tc&gt;&lt;w:tcPr&gt;&lt;w:tcW w:w="'+c2+'" w:type="dxa"/&gt;&lt;w:vAlign w:val="center"/&gt;&lt;/w:tcPr&gt;'+hd.join('')+'&lt;/w:tc&gt;&lt;/w:tr&gt;&lt;/w:tbl&gt;');
 }else b.push.apply(b,hd);
 D.s.filter(secHas).forEach(function(s){
  var T=TYPES[s.type],title=ar||!cls&amp;&amp;tpl!=='exec'?s.title:s.title.toUpperCase();
  b.push(P(R(title,{b:1,sz:fs+3,c:heading}),{st:'Heading1',keep:1,jc:ctr?'center':null,bdr:tpl==='vivid'?null:(cls?'2B2B2B':acc),bsz:tpl==='exec'?4:8,shd:tpl==='vivid'?mix(acc,.12):null,sp:[Math.round(220*sp),Math.round(90*sp)]}));
  if(T.kind==='text'){String(s.text).split(/\n+/).filter(function(l){return l.trim();}).forEach(function(l){b.push(P(R(l.trim(),{sz:fs}),{sp:[0,60],jc:'both'}));});}
  else if(T.kind==='entries'){s.items.filter(entFilled).forEach(function(e){var dt=dates(e),L=lines(e.desc),sub=[e.h2,e.loc].filter(Boolean).join(' \u2014 ');
   b.push(P((e.h1?R(e.h1,{b:1,sz:fs+1,c:cls||tpl==='vivid'?acc:null}):'')+(dt?R((e.h1?'   |   ':''),{c:'A0A8B0',sz:fs})+R(dt,{b:1,c:cls?'56616E':acc,sz:fs-1}):''),{keep:sub||L.length?1:0,sp:[Math.round(110*sp),0]}));
   if(sub)b.push(P(R(sub,{c:'3A4552',sz:fs,i:!ar}),{keep:L.length?1:0,sp:[0,30]}));
   if(L.length===1&amp;&amp;!/^\s*[-\u2022*]/.test(e.desc))b.push(P(R(L[0],{sz:fs}),{sp:[0,30]}));else L.forEach(function(l){b.push(P(R(l,{sz:fs}),{num:1,sp:[0,20]}));});});}
  else{var it=s.items.filter(function(i){return (i.name||'').trim();});
   if(s.type==='personal')it.forEach(function(i){b.push(P(R(i.name+(i.lvl?': ':''),{b:1,sz:fs})+(i.lvl?R(i.lvl,{sz:fs}):''),{sp:[0,20]}));});
   else b.push(P(it.map(function(i,n){return (n?R('  \u2022  ',{c:acc,sz:fs}):'')+R(i.name,{sz:fs})+(T.lvl&amp;&amp;i.lvl?R(' ('+i.lvl+')',{c:'56616E',sz:fs}):'');}).join(''),{sp:[0,40]}));}
 });
 var font=D.font==='Naskh'?'Times New Roman':'Calibri',csFont=D.font==='Naskh'?'Traditional Arabic':'Arial';
 var doc='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;w:document xmlns:w="'+W+'" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"&gt;&lt;w:body&gt;'+b.join('')+'&lt;w:sectPr&gt;&lt;w:pgSz w:w="11906" w:h="16838"/&gt;&lt;w:pgMar w:top="850" w:right="964" w:bottom="850" w:left="964" w:header="0" w:footer="0" w:gutter="0"/&gt;'+(ar?'&lt;w:bidi/&gt;':'')+'&lt;/w:sectPr&gt;&lt;/w:body&gt;&lt;/w:document&gt;';
 var styles='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;w:styles xmlns:w="'+W+'"&gt;&lt;w:docDefaults&gt;&lt;w:rPrDefault&gt;&lt;w:rPr&gt;&lt;w:rFonts w:ascii="'+font+'" w:hAnsi="'+font+'" w:eastAsia="'+font+'" w:cs="'+csFont+'"/&gt;&lt;w:color w:val="1D232B"/&gt;&lt;w:sz w:val="'+fs+'"/&gt;&lt;w:szCs w:val="'+fs+'"/&gt;&lt;w:lang w:val="en-US" w:bidi="ar-EG"/&gt;&lt;/w:rPr&gt;&lt;/w:rPrDefault&gt;&lt;w:pPrDefault&gt;&lt;w:pPr&gt;&lt;w:spacing w:after="0" w:line="264" w:lineRule="auto"/&gt;&lt;/w:pPr&gt;&lt;/w:pPrDefault&gt;&lt;/w:docDefaults&gt;'+
  '&lt;w:style w:type="paragraph" w:default="1" w:styleId="Normal"&gt;&lt;w:name w:val="Normal"/&gt;&lt;w:qFormat/&gt;&lt;/w:style&gt;'+
  '&lt;w:style w:type="paragraph" w:styleId="Title"&gt;&lt;w:name w:val="Title"/&gt;&lt;w:basedOn w:val="Normal"/&gt;&lt;w:next w:val="Normal"/&gt;&lt;w:qFormat/&gt;&lt;w:rPr&gt;&lt;w:b/&gt;&lt;w:bCs/&gt;&lt;/w:rPr&gt;&lt;/w:style&gt;'+
  '&lt;w:style w:type="paragraph" w:styleId="Heading1"&gt;&lt;w:name w:val="heading 1"/&gt;&lt;w:basedOn w:val="Normal"/&gt;&lt;w:next w:val="Normal"/&gt;&lt;w:qFormat/&gt;&lt;w:pPr&gt;&lt;w:keepNext/&gt;&lt;w:outlineLvl w:val="0"/&gt;&lt;/w:pPr&gt;&lt;w:rPr&gt;&lt;w:b/&gt;&lt;w:bCs/&gt;&lt;/w:rPr&gt;&lt;/w:style&gt;'+
  '&lt;w:style w:type="paragraph" w:styleId="ListParagraph"&gt;&lt;w:name w:val="List Paragraph"/&gt;&lt;w:basedOn w:val="Normal"/&gt;&lt;w:qFormat/&gt;&lt;/w:style&gt;&lt;/w:styles&gt;';
 var ind=ar?'&lt;w:ind w:right="340" w:hanging="250"/&gt;':'&lt;w:ind w:left="340" w:hanging="250"/&gt;';
 var numbering='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;w:numbering xmlns:w="'+W+'"&gt;&lt;w:abstractNum w:abstractNumId="0"&gt;&lt;w:multiLevelType w:val="singleLevel"/&gt;&lt;w:lvl w:ilvl="0"&gt;&lt;w:start w:val="1"/&gt;&lt;w:numFmt w:val="bullet"/&gt;&lt;w:lvlText w:val="\u2022"/&gt;&lt;w:lvlJc w:val="left"/&gt;&lt;w:pPr&gt;'+(ar?'&lt;w:bidi/&gt;':'')+ind+'&lt;/w:pPr&gt;&lt;w:rPr&gt;&lt;w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/&gt;&lt;w:color w:val="'+acc+'"/&gt;&lt;/w:rPr&gt;&lt;/w:lvl&gt;&lt;/w:abstractNum&gt;&lt;w:num w:numId="1"&gt;&lt;w:abstractNumId w:val="0"/&gt;&lt;/w:num&gt;&lt;/w:numbering&gt;';
 var now=new Date().toISOString().replace(/\.\d+Z$/,'Z');
 var core='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;&lt;dc:title&gt;'+x((p.name||'')+' - '+(ar?'\u0627\u0644\u0633\u064a\u0631\u0629 \u0627\u0644\u0630\u0627\u062a\u064a\u0629':'CV'))+'&lt;/dc:title&gt;&lt;dc:creator&gt;'+x(p.name||'')+'&lt;/dc:creator&gt;&lt;cp:keywords&gt;'+x(p.role||'')+'&lt;/cp:keywords&gt;&lt;dcterms:created xsi:type="dcterms:W3CDTF"&gt;'+now+'&lt;/dcterms:created&gt;&lt;dcterms:modified xsi:type="dcterms:W3CDTF"&gt;'+now+'&lt;/dcterms:modified&gt;&lt;/cp:coreProperties&gt;';
 var ct='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"&gt;&lt;Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/&gt;&lt;Default Extension="xml" ContentType="application/xml"/&gt;&lt;Default Extension="jpeg" ContentType="image/jpeg"/&gt;&lt;Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/&gt;&lt;Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/&gt;&lt;Override PartName="/word/numbering.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/&gt;&lt;Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/&gt;&lt;/Types&gt;';
 var rels='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"&gt;&lt;Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/&gt;&lt;Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/&gt;&lt;/Relationships&gt;';
 var drels='&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"&gt;&lt;Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/&gt;&lt;Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml"/&gt;'+(img?'&lt;Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/photo.jpeg"/&gt;':'')+'&lt;/Relationships&gt;';
 return zip([['[Content_Types].xml',ct],['_rels/.rels',rels],['docProps/core.xml',core],['word/document.xml',doc],['word/styles.xml',styles],['word/numbering.xml',numbering],['word/_rels/document.xml.rels',drels]].concat(img?[['word/media/photo.jpeg',img]]:[]),'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
}
function doDOCX(){
 var hasPh=/\[[^\]]*\]/.test(cvText());if(hasPh&amp;&amp;!confirm('\u0645\u0627 \u0632\u0627\u0644\u062a \u0647\u0646\u0627\u0643 \u0639\u0644\u0627\u0645\u0627\u062a \u0645\u062b\u0644 [X] \u0641\u064a \u0633\u064a\u0631\u062a\u0643. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0639\u0644\u0649 \u0623\u064a \u062d\u0627\u0644\u061f'))return;
 try{download(buildDocx(),fname('docx'));toast('\u062a\u0645 \u062a\u062d\u0645\u064a\u0644 \u0645\u0644\u0641 Word');}catch(e){alert('\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0625\u0646\u0634\u0627\u0621 \u0645\u0644\u0641 Word: '+e.message);}
}
root.__cvb={get:function(){return D;},set:function(d){D=d;renderAll();},docx:buildDocx,text:plainText,ats:atsChecks,html:cvHTML};

if(firstVisit){UI.open[D.s[0].id]=true;UI.open[D.s[1].id]=true;}
renderPane();renderPreview();
})();
&lt;/script&gt;
&lt;/div&gt;
&lt;!-- ===== الإعلان الثاني (بعد الأداة) - Rebar Page1 ===== --&gt;
&lt;div class="cvm-ad cvm-ad-bottom" style="margin:12px auto;text-align:center;clear:both"&gt;
&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirxeCC2soXEn6niWyGyCNjw0HtJTMJN_JqtcNANyGoMvbmiaRSoPSAtUGVYXJUZXC9iNLhPFcGIhtWYrZqnQG3ET3zCJzg0dqpAoxapvK45mmls5tlCOT8AVGOUf62qJKoNIgLV-ez5PT1-5oTAP2Kqjjyp0w5gljvF86gfAz8PA6ltVspvuACluqbSrUq/s72-c/cv.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>اداة تصميم البلاطات الارضية Slab on Grade (SOG) لارضيات المصانع مع النوتة الحسابية PDF </title><link>https://www.civilmaker.com/2026/10/slab-on-grade-design-calculator.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Mon, 19 Oct 2026 12:35:35 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-7957582051484122839</guid><description>&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGJslE4UNKVgpS9B7hiHuk8TJjyRfA1fLH1ZQ27PtDY3Zdo0UqeKJqHeCXIEGM8pBUPqKMVlJKTR5qfo5XbQ1yOX6SgfwYFqy6AUInDFzCOEuzpXBgqZ0WeUoYOBaN8AL9HB7nO1v9WgtucHDPTXs8JrhA58xsSKYolQtHRbhTQUMH6J0XBSh0MtxNFjQt/s1536/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A3%D8%B1%D8%B6%D9%8A%D8%A9%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="600" data-original-height="1024" data-original-width="1536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGJslE4UNKVgpS9B7hiHuk8TJjyRfA1fLH1ZQ27PtDY3Zdo0UqeKJqHeCXIEGM8pBUPqKMVlJKTR5qfo5XbQ1yOX6SgfwYFqy6AUInDFzCOEuzpXBgqZ0WeUoYOBaN8AL9HB7nO1v9WgtucHDPTXs8JrhA58xsSKYolQtHRbhTQUMH6J0XBSh0MtxNFjQt/s600/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A3%D8%B1%D8%B6%D9%8A%D8%A9%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;!-- ===== civilmaker · SOG Designer (ACI 360R-10) — paste into a Blogger post in HTML view ===== --&gt;
&lt;script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6324409391516444" crossorigin="anonymous"&gt;&lt;/script&gt;
&lt;!-- AD 1: above the tool (Rebar Page1, display) --&gt;
&lt;div class="cm-ad" id="cm-ad-top"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;&lt;/div&gt;
&lt;div id="cm-sog" dir="ltr" lang="en"&gt;
&lt;style&gt;
/* Layout: summary bar, tab row, then card grid of boxed inputs/outputs. Colours follow the civilmaker (Jannah) theme. */
#cm-sog{
  --cm-brand:#0088ff; --cm-brand-ink:#ffffff; --cm-dark:#1f2024; --cm-bg:#ffffff; --cm-soft:#f6f8fa; --cm-box:#fbfcfd;
  --cm-line:#e3e6ea; --cm-ink:#2c2f34; --cm-muted:#6b7178; --cm-steel:#0b5cad; --cm-soil:#b08a5a; --cm-conc:#c9cdd2;
  --cm-ok:#16a34a; --cm-ok-bg:#e7f6ec; --cm-warn:#c27803; --cm-warn-bg:#fdf3e1; --cm-bad:#e0313b; --cm-bad-bg:#fde8e9;
  --cm-mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
  background:var(--cm-bg); color:var(--cm-ink); font-family:inherit; font-size:14px; line-height:1.55; text-align:left;
  border:1px solid var(--cm-line); border-radius:6px; overflow:hidden; margin:0 0 20px;
  width:100%; max-width:100%; container-type:inline-size; container-name:cmsog; position:relative; z-index:0; clear:both;
}
.dark-skin #cm-sog, #cm-sog.cm-dark{
  --cm-bg:#1f2024; --cm-soft:#27292d; --cm-box:#2a2c31; --cm-line:#3a3d42; --cm-ink:#eceef0; --cm-muted:#a3a8ae; --cm-steel:#5aa9ff;
  --cm-conc:#5a5f66; --cm-soil:#a0805a; --cm-ok:#4ade80; --cm-ok-bg:#173524; --cm-warn:#f6b04a; --cm-warn-bg:#3b2d14; --cm-bad:#ff7a80; --cm-bad-bg:#40191c;
}
#cm-sog *,#cm-sog *::before,#cm-sog *::after{box-sizing:border-box}
#cm-sog h2,#cm-sog h3,#cm-sog h4,#cm-sog p{margin:0;padding:0;border:0;background:none;text-align:left}
#cm-sog [dir=rtl], #cm-sog [dir=rtl] p, #cm-sog [dir=rtl] h4{text-align:right}
#cm-sog [hidden]{display:none!important}
#cm-sog .cm-head{background:var(--cm-dark);color:#fff;padding:14px 16px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between}
#cm-sog .cm-head h2{color:#fff;font-size:19px;font-weight:700;line-height:1.3}
#cm-sog .cm-head small{display:block;color:#b9bec5;font-size:12px;font-weight:400}
#cm-sog .cm-head .cm-acts{display:flex;gap:6px;flex-wrap:wrap}
#cm-sog button{font-family:inherit;cursor:pointer;margin:0;line-height:1.4;box-shadow:none;text-transform:none;letter-spacing:0;height:auto;min-height:0}
#cm-sog .cm-btn{font-size:12.5px;font-weight:600;border:1px solid var(--cm-brand);background:var(--cm-brand);color:var(--cm-brand-ink);padding:6px 12px;border-radius:4px}
#cm-sog .cm-btn.cm-ghost{background:transparent;color:inherit;border-color:currentColor}
#cm-sog .cm-head .cm-btn.cm-ghost{color:#fff;border-color:#5b6068}
#cm-sog .cm-btn:hover{filter:brightness(1.08)}
#cm-sog button:focus-visible,#cm-sog input:focus-visible,#cm-sog select:focus-visible{outline:2px solid var(--cm-brand);outline-offset:2px}
/* summary */
#cm-sog .cm-sum{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-bottom:1px solid var(--cm-line);background:var(--cm-soft)}
#cm-sog .cm-sum &gt; div{padding:10px 14px;border-inline-end:1px solid var(--cm-line);min-width:0}
#cm-sog .cm-sum &gt; div:last-child{border-inline-end:0}
#cm-sog .cm-sum .cm-l{font-size:11px;color:var(--cm-muted);text-transform:uppercase;letter-spacing:.05em}
#cm-sog .cm-sum .cm-v{font-size:16px;font-weight:700;overflow-wrap:anywhere}
#cm-sog .cm-sum .cm-v.cm-big{font-size:24px;color:var(--cm-brand);line-height:1.2}
/* tabs */
#cm-sog .cm-tabs{display:flex;flex-wrap:wrap;gap:0;background:var(--cm-bg);border-bottom:2px solid var(--cm-brand);padding:0 8px}
#cm-sog .cm-tabs button{background:transparent;border:0;border-bottom:3px solid transparent;color:var(--cm-muted);font-size:13px;font-weight:600;padding:10px 11px 8px;border-radius:0}
#cm-sog .cm-tabs button[aria-selected=true]{color:var(--cm-brand);border-bottom-color:var(--cm-brand)}
#cm-sog .cm-body{padding:16px}
#cm-sog .cm-sec{display:flex;flex-direction:column;gap:16px}
/* cards */
#cm-sog .cm-card{border:1px solid var(--cm-line);border-radius:6px;background:var(--cm-bg);min-width:0}
#cm-sog .cm-card &gt; h3{font-size:14px;font-weight:700;padding:9px 12px;border-bottom:1px solid var(--cm-line);background:var(--cm-soft);display:flex;align-items:center;justify-content:space-between;gap:8px;border-radius:6px 6px 0 0;color:var(--cm-ink)}
#cm-sog .cm-card &gt; .cm-in{padding:12px}
#cm-sog .cm-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px}
/* boxed fields: identical boxes on a strict grid */
#cm-sog .cm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:8px}
#cm-sog .cm-f{border:1px solid var(--cm-line);border-radius:5px;background:var(--cm-box);padding:7px 8px 8px;display:flex;flex-direction:column;gap:5px;min-width:0}
#cm-sog .cm-f .cm-fl{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;min-height:34px;font-size:12px;font-weight:600;color:var(--cm-muted);line-height:1.35}
#cm-sog .cm-f .cm-fl span{min-width:0}
#cm-sog .cm-i{flex:none;width:18px;height:18px;border-radius:50%;border:1px solid var(--cm-brand);background:transparent;color:var(--cm-brand);font:italic 700 11px/16px Georgia,serif;padding:0;text-align:center}
#cm-sog .cm-i:hover,#cm-sog .cm-i[aria-expanded=true]{background:var(--cm-brand);color:#fff}
#cm-sog .cm-ctl{display:flex;align-items:stretch;border:1px solid var(--cm-line);border-radius:4px;background:var(--cm-bg);overflow:hidden;height:34px}
#cm-sog .cm-ctl input,#cm-sog .cm-ctl select{flex:1;min-width:0;width:100%;height:32px;border:0;margin:0;padding:0 8px;background:transparent;color:var(--cm-ink);font-family:inherit;font-size:14px;box-shadow:none;border-radius:0;outline-offset:-2px;line-height:32px}
#cm-sog .cm-ctl input{font-family:var(--cm-mono);text-align:right}
#cm-sog .cm-ctl select{appearance:auto}
#cm-sog .cm-ctl select option{background:var(--cm-bg);color:var(--cm-ink)}
#cm-sog .cm-ctl .cm-u{flex:none;display:flex;align-items:center;padding:0 8px;background:var(--cm-soft);border-inline-start:1px solid var(--cm-line);font-family:var(--cm-mono);font-size:11.5px;color:var(--cm-muted)}
#cm-sog .cm-f.cm-out{background:var(--cm-soft)}
#cm-sog .cm-f.cm-out .cm-val{height:34px;display:flex;align-items:center;justify-content:space-between;gap:6px;font-family:var(--cm-mono);font-size:15px;font-weight:700;color:var(--cm-ink)}
#cm-sog .cm-f.cm-out .cm-val small{font-size:11px;font-weight:400;color:var(--cm-muted)}
#cm-sog .cm-pop{border:1px solid var(--cm-brand);background:var(--cm-bg);border-radius:5px;padding:8px 10px;font-size:12.5px;font-weight:400;color:var(--cm-ink);line-height:1.5}
#cm-sog .cm-pop .cm-ref{display:block;color:var(--cm-steel);font-size:11.5px;margin-top:4px}
#cm-sog .cm-pop a{color:var(--cm-brand);font-weight:600;text-decoration:none;cursor:pointer}
/* checks */
#cm-sog .cm-checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
#cm-sog .cm-chk{border:1px solid var(--cm-line);border-radius:5px;padding:8px 10px;background:var(--cm-box);display:flex;flex-direction:column;gap:6px;min-width:0}
#cm-sog .cm-chk .cm-ct{display:flex;justify-content:space-between;align-items:flex-start;gap:6px;font-size:12px;font-weight:600;color:var(--cm-muted);min-height:32px}
#cm-sog .cm-chk .cm-nums{font-family:var(--cm-mono);font-size:13px}
#cm-sog .cm-bar{height:6px;border-radius:3px;background:var(--cm-line);overflow:hidden}
#cm-sog .cm-bar i{display:block;height:100%;border-radius:3px}
#cm-sog .cm-pill{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:700;white-space:nowrap;font-style:normal}
#cm-sog .cm-ok{background:var(--cm-ok-bg);color:var(--cm-ok)} #cm-sog .cm-warn{background:var(--cm-warn-bg);color:var(--cm-warn)} #cm-sog .cm-bad{background:var(--cm-bad-bg);color:var(--cm-bad)}
/* load cards */
#cm-sog .cm-addrow{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
#cm-sog .cm-load &gt; h3{flex-wrap:wrap}
#cm-sog .cm-load .cm-name{flex:1;min-width:160px;border:0;border-bottom:1px dashed var(--cm-line);background:transparent;color:var(--cm-ink);font:inherit;font-weight:700;font-size:14px;padding:2px 0;margin:0;height:auto;box-shadow:none}
#cm-sog .cm-tag{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;background:var(--cm-brand);color:#fff;padding:2px 7px;border-radius:3px;flex:none}
#cm-sog .cm-lgrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start}
#cm-sog .cm-diag{border:1px solid var(--cm-line);border-radius:5px;background:var(--cm-soft);padding:6px;min-width:0}
#cm-sog .cm-diag svg{display:block;width:100%;height:auto;max-width:100%}
#cm-sog .cm-cap{font-size:11.5px;color:var(--cm-muted);padding:4px 4px 0}
#cm-sog .cm-sub{font-size:12px;font-weight:700;color:var(--cm-muted);text-transform:uppercase;letter-spacing:.05em;margin:12px 0 6px}
#cm-sog .cm-note{font-size:12.5px;color:var(--cm-muted)}
#cm-sog .cm-note b{color:var(--cm-ink)}
#cm-sog .cm-eq{font-family:var(--cm-mono);font-size:12px;background:var(--cm-soft);border:1px solid var(--cm-line);border-radius:4px;padding:8px 10px;white-space:pre;overflow-x:auto;color:var(--cm-ink);text-align:left;direction:ltr;margin:0}
#cm-sog .cm-tw{overflow-x:auto}
#cm-sog table.cm-t{border-collapse:collapse;width:100%;font-size:12.5px;margin:0;border:0}
#cm-sog table.cm-t th,#cm-sog table.cm-t td{border:0;border-bottom:1px solid var(--cm-line);padding:6px 8px;text-align:left;vertical-align:top;background:transparent;color:var(--cm-ink)}
#cm-sog table.cm-t th{font-size:11.5px;color:var(--cm-muted);font-weight:700;background:var(--cm-soft)}
#cm-sog table.cm-t td.n{font-family:var(--cm-mono);white-space:nowrap;text-align:right}
/* SVG drawing classes */
#cm-sog svg text{font-family:inherit}
.cm-s-slab{fill:var(--cm-conc);stroke:var(--cm-ink);stroke-width:1.2}
.cm-s-line{stroke:var(--cm-ink);stroke-width:1.2;fill:none}
.cm-s-thin{stroke:var(--cm-muted);stroke-width:.8;fill:none}
.cm-s-joint{stroke:var(--cm-ink);stroke-width:1.4;fill:none;stroke-dasharray:6 4}
.cm-s-brand{stroke:var(--cm-brand);stroke-width:1.6;fill:none}
.cm-s-brandf{fill:var(--cm-brand)}
.cm-s-red{stroke:var(--cm-bad);stroke-width:1.6;fill:none}
.cm-s-redf{fill:var(--cm-bad)}
.cm-s-soil{fill:var(--cm-soil);opacity:.35}
.cm-s-steel{fill:var(--cm-steel);stroke:var(--cm-steel)}
.cm-s-wheel{fill:var(--cm-dark);stroke:var(--cm-ink)}
.cm-s-plate{fill:var(--cm-steel);opacity:.85}
.cm-s-fill{fill:var(--cm-warn);opacity:.55}
.cm-s-bg{fill:var(--cm-bg);stroke:var(--cm-line)}
.cm-t-s{font-size:10.5px;fill:var(--cm-ink)} .cm-t-m{font-size:10px;fill:var(--cm-muted)} .cm-t-b{font-size:11.5px;font-weight:700;fill:var(--cm-ink)} .cm-t-br{font-size:10.5px;font-weight:700;fill:var(--cm-brand)} .cm-t-r{font-size:10.5px;font-weight:700;fill:var(--cm-bad)}
/* joint details */
#cm-sog .cm-jd{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px}
#cm-sog .cm-jd .cm-card p{font-size:12.5px;margin-top:6px}
/* worked example */
#cm-sog .cm-ex{display:flex;flex-direction:column;gap:12px}
#cm-sog .cm-ex .cm-exitem{border:1px solid var(--cm-line);border-radius:6px;padding:12px;scroll-margin-top:80px}
#cm-sog .cm-ex .cm-exitem.cm-flash{border-color:var(--cm-brand);box-shadow:0 0 0 3px rgba(0,136,255,.18)}
#cm-sog .cm-ex h4{font-size:14px;font-weight:700;margin:0 0 6px;color:var(--cm-ink)}
#cm-sog .cm-ex .cm-bi{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}
#cm-sog .cm-ex .cm-bi &gt; div{font-size:13px;min-width:0}
#cm-sog .cm-ex .cm-bi &gt; div[dir=rtl]{border-inline-start:3px solid var(--cm-brand);padding-inline-start:10px}
#cm-sog .cm-ex .cm-refl{font-size:11.5px;color:var(--cm-steel);margin-top:6px;font-weight:600}
#cm-sog .cm-ex .cm-exv{margin-top:8px}
#cm-sog .cm-ex h3.cm-exh{font-size:16px;font-weight:700;border-bottom:2px solid var(--cm-brand);padding-bottom:4px;margin-top:8px;color:var(--cm-ink)}
#cm-sog blockquote.cm-q{margin:8px 0 0;padding:6px 10px;border-inline-start:3px solid var(--cm-muted);background:var(--cm-soft);font-size:12.5px;font-style:italic;color:var(--cm-ink)}
#cm-sog .rp-top{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;border-bottom:3px solid var(--cm-dark);padding-bottom:8px}
#cm-sog .rp-fig{max-width:430px}
#cm-sog .rp-fig svg,#cm-sog .rp-fig2 svg{display:block;width:100%;height:auto}
#cm-sog .rp-fig2{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}
#cm-sog .rp-case h3{font-size:13.5px;margin:12px 0 6px}
#cm-sog textarea{width:100%;min-height:110px;font-family:var(--cm-mono);font-size:11.5px;background:var(--cm-soft);color:var(--cm-ink);border:1px solid var(--cm-line);border-radius:4px;padding:8px;margin:0}
#cm-sog .cm-foot{border-top:1px solid var(--cm-line);background:var(--cm-soft);padding:8px 16px;font-size:11.5px;color:var(--cm-muted);display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}
@media (max-width:720px){
  #cm-sog .cm-sum{grid-template-columns:repeat(2,minmax(0,1fr))}
  #cm-sog .cm-sum &gt; div:nth-child(2){border-inline-end:0}
  #cm-sog .cm-sum &gt; div:nth-child(-n+2){border-bottom:1px solid var(--cm-line)}
  #cm-sog .cm-lgrid,#cm-sog .cm-ex .cm-bi{grid-template-columns:minmax(0,1fr)}
  #cm-sog .cm-body{padding:12px}
  #cm-sog .cm-cols{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:420px){#cm-sog .cm-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}
/* Post column next to a fixed/sticky Blogger sidebar is narrower than the screen: size by the tool's own width */
@container cmsog (max-width:720px){
  #cm-sog .cm-sum{grid-template-columns:repeat(2,minmax(0,1fr))}
  #cm-sog .cm-sum &gt; div:nth-child(2){border-inline-end:0}
  #cm-sog .cm-sum &gt; div:nth-child(-n+2){border-bottom:1px solid var(--cm-line)}
  #cm-sog .cm-lgrid,#cm-sog .cm-ex .cm-bi{grid-template-columns:minmax(0,1fr)}
  #cm-sog .cm-body{padding:12px}
  #cm-sog .cm-cols{grid-template-columns:minmax(0,1fr)}
  #cm-sog .cm-tabs button{padding:9px 8px 7px;font-size:12.5px}
}
@container cmsog (max-width:440px){#cm-sog .cm-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))} #cm-sog .cm-head h2{font-size:17px}}
#cm-sog .cm-warn-box{background:var(--cm-warn-bg);color:var(--cm-ink);border-bottom:1px solid var(--cm-line);border-inline-start:4px solid var(--cm-warn);padding:8px 14px;font-size:12.5px}
#cm-sog .cm-warn-box b{color:var(--cm-warn)}
#cm-sog .cm-warn-box ul{margin:4px 0 0;padding-inline-start:18px}
#cm-sog .cm-warn-box li{margin:2px 0;list-style:disc}
/* Ad slots: paste the AdSense unit inside; an empty slot takes no space */
.cm-ad{display:block;margin:18px auto;text-align:center;max-width:100%;overflow:hidden;clear:both}
.cm-ad:empty{display:none}
.cm-ad ins.adsbygoogle[data-ad-status="unfilled"]{display:none!important}
#cm-sog .cm-ad{margin:16px 0 0}
/* SEO article under the tool */
.cm-seo{line-height:1.8;font-size:15px;margin:10px 0 20px}
.cm-seo h2{font-size:21px;margin:22px 0 8px;border-inline-start:4px solid #0088ff;padding-inline-start:10px}
.cm-seo h3{font-size:17px;margin:16px 0 6px}
.cm-seo ul,.cm-seo ol{padding-inline-start:22px;margin:6px 0 10px}
.cm-seo .cm-en{direction:ltr;text-align:left}
.cm-seo details{border:1px solid #e3e6ea;border-radius:6px;padding:8px 12px;margin:8px 0;background:rgba(0,136,255,.03)}
.cm-seo summary{font-weight:700;cursor:pointer}
.cm-seo .cm-kw{display:flex;flex-wrap:wrap;gap:6px;padding:0;list-style:none}
.cm-seo .cm-kw li{border:1px solid #0088ff;color:#0088ff;border-radius:14px;padding:1px 10px;font-size:13px}
&lt;/style&gt;

&lt;div class="cm-head"&gt;
  &lt;div&gt;&lt;h2&gt;SOG Designer · Industrial Slab-on-Ground&lt;/h2&gt;&lt;small&gt;ACI 360R-10 (Westergaard · PCA · Rice/Hetenyi) with ACI 318-19 post checks · civilmaker&lt;/small&gt;&lt;/div&gt;
  &lt;div class="cm-acts"&gt;
    &lt;button type="button" class="cm-btn cm-ghost" id="cm-reset"&gt;Reset to example&lt;/button&gt;
    &lt;button type="button" class="cm-btn cm-ghost" id="cm-save"&gt;Save project&lt;/button&gt;
    &lt;button type="button" class="cm-btn cm-ghost" id="cm-open"&gt;Open project&lt;/button&gt;
    &lt;input type="file" id="cm-file" accept=".json,application/json" hidden&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="cm-sum" id="cm-sum" aria-live="polite"&gt;&lt;/div&gt;
&lt;div id="cm-warn" class="cm-warn-box" role="status" hidden&gt;&lt;/div&gt;
&lt;div class="cm-tabs" role="tablist" id="cm-tabs"&gt;
  &lt;button type="button" role="tab" data-t="mat" aria-selected="true"&gt;Materials &amp;amp; Soil&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="loads" aria-selected="false"&gt;Load Cases&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="joints" aria-selected="false"&gt;Joints &amp;amp; Reinforcement&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="layout" aria-selected="false"&gt;Joint Layout &amp;amp; Details&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="report" aria-selected="false"&gt;Calculation Report&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="example" aria-selected="false"&gt;Worked Example&lt;/button&gt;
  &lt;button type="button" role="tab" data-t="verify" aria-selected="false"&gt;Verification&lt;/button&gt;
&lt;/div&gt;
&lt;div class="cm-body"&gt;
  &lt;section class="cm-sec" data-tab="mat"&gt;
    &lt;div class="cm-cols"&gt;
      &lt;div class="cm-card"&gt;&lt;h3&gt;Concrete&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-conc"&gt;&lt;/div&gt;&lt;div class="cm-grid" style="margin-top:8px" id="cm-o-conc"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div class="cm-card"&gt;&lt;h3&gt;Subgrade&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-soil"&gt;&lt;/div&gt;
        &lt;div class="cm-tw" style="margin-top:10px"&gt;&lt;table class="cm-t"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Soil type (indicative)&lt;/th&gt;&lt;th style="text-align:right"&gt;k, MN/m³&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
          &lt;tr&gt;&lt;td&gt;Soft plastic clay&lt;/td&gt;&lt;td class="n"&gt;13 – 27&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Medium clay / silt&lt;/td&gt;&lt;td class="n"&gt;27 – 54&lt;/td&gt;&lt;/tr&gt;
          &lt;tr&gt;&lt;td&gt;Medium-dense sand&lt;/td&gt;&lt;td class="n"&gt;54 – 80&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dense sand / compacted gravel&lt;/td&gt;&lt;td class="n"&gt;80 – 135&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
        &lt;p class="cm-note" style="margin-top:8px"&gt;Indicative only. Use k from a plate load test (760 mm plate) or the geotechnical report.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Design criteria&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-des"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="loads" hidden&gt;
    &lt;div class="cm-addrow"&gt;&lt;span class="cm-note"&gt;&lt;b&gt;Add load case:&lt;/b&gt;&lt;/span&gt;
      &lt;button type="button" class="cm-btn" data-add="wheel"&gt;+ Forklift wheels&lt;/button&gt;
      &lt;button type="button" class="cm-btn" data-add="post"&gt;+ Rack posts&lt;/button&gt;
      &lt;button type="button" class="cm-btn" data-add="uniform"&gt;+ Uniform load&lt;/button&gt;
      &lt;button type="button" class="cm-btn" data-add="line"&gt;+ Line load&lt;/button&gt;&lt;/div&gt;
    &lt;div id="cm-loads" class="cm-sec"&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="joints" hidden&gt;
    &lt;div class="cm-cols"&gt;
      &lt;div class="cm-card"&gt;&lt;h3&gt;Joints&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-joint"&gt;&lt;/div&gt;&lt;div class="cm-sub"&gt;Results&lt;/div&gt;&lt;div class="cm-grid" id="cm-o-joint"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;div class="cm-card"&gt;&lt;h3&gt;Reinforcement&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-reinf"&gt;&lt;/div&gt;&lt;div class="cm-sub"&gt;Results&lt;/div&gt;&lt;div class="cm-grid" id="cm-o-reinf"&gt;&lt;/div&gt;&lt;p class="cm-note" id="cm-n-reinf" style="margin-top:8px"&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Curling check (advisory)&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-curl"&gt;&lt;/div&gt;&lt;div class="cm-sub"&gt;Results&lt;/div&gt;&lt;div class="cm-grid" id="cm-o-curl"&gt;&lt;/div&gt;
      &lt;p class="cm-note" style="margin-top:8px"&gt;Westergaard–Bradbury warping stress (ACI 360R §14.13). PCA, WRI and COE do not combine curling with load stresses, so use this check to judge joint spacing, not to size thickness.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="layout" hidden&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Building and column grid&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-grid" id="cm-f-lay"&gt;&lt;/div&gt;&lt;div class="cm-sub"&gt;Results&lt;/div&gt;&lt;div class="cm-grid" id="cm-o-lay"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Joint layout plan&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-diag" id="cm-lay-svg"&gt;&lt;/div&gt;
      &lt;p class="cm-note" style="margin-top:6px"&gt;&lt;b&gt;J1&lt;/b&gt; sawcut contraction joint (dashed) · &lt;b&gt;J2&lt;/b&gt; construction joint on pour-strip column lines (bold) · &lt;b&gt;J3&lt;/b&gt; isolation joint around columns (diamond). Joints run straight and continuous through intersections; do not stagger or offset them (ACI 360R §6.1).&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div class="cm-jd" id="cm-jd"&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="report" hidden&gt;
    &lt;div class="cm-addrow"&gt;&lt;button type="button" class="cm-btn" id="cm-pdf"&gt;Generate PDF report&lt;/button&gt;&lt;span class="cm-note" id="cm-pdf-note"&gt;Opens the print dialog; choose “Save as PDF”. The report carries the civilmaker watermark and disclaimer.&lt;/span&gt;&lt;/div&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Report preview&lt;/h3&gt;&lt;div class="cm-in" id="cm-rep"&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="example" hidden&gt;
    &lt;div class="cm-ex" id="cm-ex"&gt;&lt;/div&gt;
      &lt;/section&gt;

  &lt;section class="cm-sec" data-tab="verify" hidden&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Engine check against ACI 360R-10 Appendix 1&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-tw" id="cm-ver"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div class="cm-card"&gt;&lt;h3&gt;Project data (JSON)&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;p class="cm-note"&gt;Copy to keep a project, or paste a saved project and press Import.&lt;/p&gt;&lt;textarea id="cm-json" spellcheck="false" aria-label="Project JSON"&gt;&lt;/textarea&gt;
      &lt;div class="cm-addrow" style="margin-top:6px"&gt;&lt;button type="button" class="cm-btn" id="cm-copy"&gt;Copy&lt;/button&gt;&lt;button type="button" class="cm-btn cm-ghost" id="cm-imp"&gt;Import&lt;/button&gt;&lt;span class="cm-note" id="cm-jmsg"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;/section&gt;
&lt;/div&gt;
&lt;div class="cm-foot"&gt;&lt;span&gt;© civilmaker · SOG Designer v3&lt;/span&gt;&lt;span&gt;Design aid only. Results must be reviewed by a qualified engineer.&lt;/span&gt;&lt;/div&gt;

&lt;script&gt;
//&lt;![CDATA[
// SOG design engine — ACI 360R-10 based. Units: N, mm, MPa (N/mm2), k in N/mm3.
// Core stress functions are unit-consistent and also work in lb, in, psi, pci.
const SOG = (() =&gt; {
  const G = 0.5772156649015329;
  const LOG10 = Math.log10;

  // Kelvin function kei(x), series form (accurate for x &lt; ~8)
  function kei(x) {
    const q = x * x / 4;
    let ber = 0, bei = 0, s = 0, f0 = 1, f1 = 1, psi0 = -G, psi1 = -G + 1;
    // f0 = (2k)!^2 , f1 = (2k+1)!^2 ; psi(n) = -G + H(n-1)
    let qp0 = 1, qp1 = q;
    for (let k = 0; k &lt; 30; k++) {
      const sg = k % 2 ? -1 : 1;
      const t0 = sg * qp0 / f0, t1 = sg * qp1 / f1;
      ber += t0; bei += t1; s += t1 * psi1;
      // advance
      const n0 = 2 * k + 2, n1 = 2 * k + 3;
      f0 = f0 * (n0 - 1) * (n0 - 1) * n0 * n0;
      f1 = f1 * (n1 - 1) * (n1 - 1) * n1 * n1;
      psi1 = psi1 + 1 / (2 * k + 2) + 1 / (2 * k + 3);
      qp0 *= q * q; qp1 *= q * q;
      if (Math.abs(t1) &lt; 1e-18 &amp;&amp; Math.abs(t0) &lt; 1e-18) break;
    }
    return -Math.log(x / 2) * bei - Math.PI / 4 * ber + s;
  }

  // Bending moments (per unit width) at distance r from point load P on plate on Winkler foundation.
  // Positive = tension at bottom. Returns radial and tangential moments.
  function neighbourMoments(P, r, l, nu) {
    const rho = r / l;
    if (rho &gt; 7) return { Mr: 0, Mt: 0 };
    const h = 1e-4;
    const k0 = kei(rho), kp = kei(rho + h), km = kei(rho - h);
    const d1 = (kp - km) / (2 * h), d2 = (kp - 2 * k0 + km) / (h * h);
    return {
      Mr: P / (2 * Math.PI) * (d2 + nu * d1 / rho),
      Mt: P / (2 * Math.PI) * (nu * d2 + d1 / rho),
    };
  }

  const radiusRelStiffness = (E, h, nu, k) =&gt; Math.pow(E * h ** 3 / (12 * (1 - nu * nu) * k), 0.25); // ACI 360R Eq 7-3
  const equivRadius = (a, h) =&gt; (a &lt; 1.724 * h ? Math.sqrt(1.6 * a * a + h * h) - 0.675 * h : a);

  // Westergaard interior (ACI 360R Eq 7-4, general E form)
  const sigInterior = (P, a, h, l) =&gt; 0.316 * P / (h * h) * (4 * LOG10(l / equivRadius(a, h)) + 1.069);
  // Westergaard edge (Eq 7-5)
  const sigEdge = (P, a, h, l) =&gt; 0.572 * P / (h * h) * (4 * LOG10(l / equivRadius(a, h)) + 0.359);
  // Westergaard corner (Eq 7-2)
  const sigCorner = (P, a, h, l) =&gt; 3 * P / (h * h) * (1 - Math.pow(a * Math.SQRT2 / l, 0.6));

  // Concentrated load group: primary load P at origin, others at offsets [{x,y}] with same P
  function groupStress({ P, a, h, E, nu, k, others, location, ltf }) {
    const l = radiusRelStiffness(E, h, nu, k);
    const si = sigInterior(P, a, h, l);
    let Mx = 0, My = 0;
    for (const o of others) {
      const r = Math.hypot(o.x, o.y);
      if (r &lt;= 0) continue;
      const { Mr, Mt } = neighbourMoments(P, r, l, nu);
      const c = o.x / r, s = o.y / r;
      Mx += Mr * c * c + Mt * s * s;
      My += Mr * s * s + Mt * c * c;
    }
    const add = 6 * Math.max(Mx, My) / (h * h);
    const interiorTotal = si + add;
    const amp = interiorTotal / si;
    let sigma, single;
    if (location === 'edge') { single = sigEdge(P, a, h, l); sigma = single * amp * ltf; }
    else if (location === 'corner') { single = sigCorner(P, a, h, l); sigma = single * ltf; }
    else { single = si; sigma = interiorTotal; }
    return { l, b: equivRadius(a, h), si, add, single, sigma, amp };
  }

  // Uniform load each side of aisle (Rice 1957, ACI 360R Eq 7-6). w in stress units (MPa or psi)
  function uniformAisle({ w, h, E, k, aisle, variable }) {
    const I = h ** 3 / 12;
    const lam = Math.pow(k / (4 * E * I), 0.25);
    const critAisle = Math.PI / (2 * lam);
    const a = variable ? critAisle / 2 : aisle / 2;
    const M = Math.max(0, w / (2 * lam * lam) * Math.exp(-lam * a) * Math.sin(lam * a));
    return { lam, critAisle, M, sigma: 6 * M / (h * h) };
  }

  // Line load, interior (Hetenyi infinite beam on elastic foundation). wl = force per length
  function lineLoad({ wl, h, E, k }) {
    const I = h ** 3 / 12;
    const lam = Math.pow(k / (4 * E * I), 0.25);
    const M = wl / (4 * lam);
    return { lam, M, sigma: 6 * M / (h * h) };
  }

  // ACI 360R Table 5.3 (PCA) stress ratio vs allowable repetitions
  const FATIGUE = [[0.45, Infinity], [0.46, 14335236], [0.47, 5202474], [0.48, 2402754], [0.49, 1286914], [0.50, 762043], [0.51, 485184], [0.52, 326334], [0.53, 229127], [0.54, 166533], [0.55, 124523], [0.56, 94065], [0.57, 71229], [0.58, 53937], [0.59, 40842], [0.60, 30927], [0.61, 23419], [0.62, 17733], [0.63, 13428], [0.64, 10168], [0.65, 7700], [0.66, 5830], [0.67, 4415], [0.68, 3343], [0.69, 2532], [0.70, 1917], [0.71, 1452], [0.72, 1099], [0.73, 832], [0.74, 630], [0.75, 477], [0.76, 361], [0.77, 274], [0.78, 207], [0.79, 157], [0.80, 119], [0.81, 90], [0.82, 68], [0.83, 52], [0.84, 39], [0.85, 30], [0.86, 22], [0.87, 17], [0.88, 13], [0.89, 10], [0.90, 7], [0.91, 6], [0.92, 4], [0.93, 3], [0.94, 2], [0.95, 2], [0.96, 1]];
  function stressRatioFor(N) {
    let sr = 0.45;
    for (const [r, n] of FATIGUE) if (n &gt;= N) sr = r;
    return sr;
  }

  // Dowels — ACI 360R Table 6.1 (SI)
  function dowels(h) {
    if (h &lt; 130) return { range: '&lt; 130', note: 'below Table 6.1 range, follow manufacturer' };
    if (h &lt;= 165) return { range: '130–150', roundEn: 'Ø19×250 / Ø19×330', sRound: 300, sSquare: 360, sPlate: 460 };
    if (h &lt;= 215) return { range: '180–200', roundEn: 'Ø25×330 / Ø25×410', sRound: 300, sSquare: 360, sPlate: 460 };
    if (h &lt;= 280) return { range: '230–280', roundEn: 'Ø32×380 / Ø32×460', sRound: 300, sSquare: 300, sPlate: 460 };
    return { range: '&gt; 280', note: 'beyond Table 6.1, design dowels' };
  }

  // Westergaard–Bradbury curling coefficient
  function bradburyC(L, l) {
    const lam = L / (l * Math.sqrt(8));
    if (lam &gt; 6) return 1.0;
    const c = 1 - (2 * Math.cos(lam) * Math.cosh(lam) / (Math.sin(2 * lam) + Math.sinh(2 * lam))) * (Math.tan(lam) + Math.tanh(lam));
    return Math.max(0, c);
  }

  // Plain concrete punching (ACI 318-19 Table 14.5.5.1) and bearing (14.5.6). SI units N, mm, MPa.
  function punching({ P, LF, bx, by, h, fc, l }) {
    const he = Math.max(h - 50, 0); // 14.5.1.7: reduce h by 50 mm for concrete cast against soil
    const c1 = bx + he, c2 = by + he;
    const bo = 2 * (c1 + c2);
    const beta = Math.max(bx, by) / Math.min(bx, by);
    const coef = Math.min(0.11 + 0.22 / beta, 0.22);
    const phiVn = 0.6 * coef * Math.sqrt(fc) * bo * he;
    const q0 = P / (8 * l * l); // max subgrade pressure under load (Westergaard)
    const Vu = Math.max(0, LF * (P - q0 * c1 * c2));
    const phiBn = 0.6 * 0.85 * fc * bx * by * 2; // sqrt(A2/A1) &lt;= 2
    return { he, bo, beta, coef, phiVn, Vu, q0, phiBn, Pu: LF * P };
  }

  return { kei, radiusRelStiffness, equivRadius, sigInterior, sigEdge, sigCorner, groupStress, uniformAisle, lineLoad, FATIGUE, stressRatioFor, dowels, bradburyC, punching };
})();


// Help texts: en, ar, ref. Section id = 'cmx-' + key (used by (i) links into the Worked Example tab)
const CM_HELP = {
  fc: { t: "Concrete compressive strength f'c", en: "Specified 28-day cylinder strength. It sets the default modulus of rupture and elastic modulus, and the punching and bearing capacity of the slab at rack posts.", ar: "مقاومة الضغط المميزة للأسطوانة بعمر 28 يوماً. منها تُحسب القيم الافتراضية لمعاير الانكسار ومعامل المرونة، وقدرة البلاطة على القص الثاقب والتحمل أسفل قوائم الرفوف.", ref: "ACI 360R-10 §5.1 · ACI 318-19 §19.2" },
  morMode: { t: "Modulus of rupture source", en: "Slab thickness design is governed by flexural tension, so the modulus of rupture (MOR) is the strength that matters. Use a tested value (ASTM C78, third-point loading) when available; otherwise the tool uses 0.62√f'c from ACI 318, which is conservative.", ar: "تصميم سماكة البلاطة يحكمه إجهاد الشد الناتج عن الانحناء، لذلك المقاومة المعتبرة هي معاير الانكسار MOR. استخدم قيمة مختبرية (ASTM C78) إن وجدت، وإلا تأخذ الأداة 0.62√f'c من ACI 318 وهي قيمة محافظة.", ref: "ACI 360R-10 §5.1, §7.1 · ASTM C78" },
  mor: { t: "Modulus of rupture MOR", en: "Flexural tensile strength of the concrete. The allowable working stress is MOR divided by the factor of safety. ACI 360R recommends a 28-day (or later) strength for thickness design.", ar: "مقاومة الشد بالانحناء للخرسانة. الإجهاد المسموح = MOR مقسوماً على معامل الأمان. يوصي ACI 360R باستخدام مقاومة 28 يوماً أو أكثر في تصميم السماكة.", ref: "ACI 360R-10 §5.1" },
  E: { t: "Elastic modulus E", en: "Used in the radius of relative stiffness ℓ. Default 4700√f'c (ACI 318). The PCA and COE charts assume 4,000,000 psi (27,600 MPa).", ar: "يدخل في حساب نصف قطر الجساءة النسبية ℓ. القيمة الافتراضية 4700√f'c حسب ACI 318. منحنيات PCA وCOE تفترض 27,600 MPa تقريباً.", ref: "ACI 360R-10 Eq. 7-3 · ACI 318-19 §19.2.2" },
  nu: { t: "Poisson's ratio ν", en: "Approximately 0.15 for concrete (ACI 360R §7.2). Enters the plate stiffness D = E·h³ / 12(1−ν²).", ar: "حوالي 0.15 للخرسانة حسب ACI 360R. يدخل في جساءة اللوح D = E·h³ / 12(1−ν²).", ref: "ACI 360R-10 §7.2" },
  gamma: { t: "Concrete unit weight γ", en: "Used for the slab self-weight in the subgrade-drag reinforcement calculation.", ar: "يستخدم لحساب وزن البلاطة الذاتي في معادلة احتكاك التربة لحساب التسليح.", ref: "ACI 360R-10 Eq. 10-1" },
  k: { t: "Modulus of subgrade reaction k", en: "Pressure per unit settlement of the supporting soil, from a plate load test with a 760 mm (30 in.) plate. Westergaard theory treats the soil as independent springs (Winkler foundation). Do not raise k for a subbase without geotechnical justification.", ar: "الضغط اللازم لهبوط وحدة طول للتربة الحاملة، ويُقاس باختبار التحميل باللوح قطر 760 mm. نظرية Westergaard تعامل التربة كنوابض مستقلة (أساس Winkler). لا تزد قيمة k بسبب طبقة الأساس إلا بمبرر من تقرير التربة.", ref: "ACI 360R-10 Ch. 4 · ASTM D1196" },
  h: { t: "Design thickness h", en: "The thickness you intend to build. Stresses, utilisation ratios, joint spacing, dowels, reinforcement and curling are reported at this h. The required thickness in the summary is solved separately from the loads (the smallest h for which every load case passes), so it does not change when you change h. If h is below the required thickness the summary flags it and offers a button to adopt the required value.", ar: "السماكة التي ستُنفذ فعلاً. تُحسب عندها الإجهادات ونسب الاستغلال وتباعد الفواصل والدسرات والتسليح والتقوس. أما السماكة المطلوبة في الملخص فتُحسب بشكل مستقل من الأحمال (أقل سماكة تحقق جميع حالات التحميل)، لذلك لا تتغير بتغيير h. إذا كانت h أقل من المطلوبة يظهر تنبيه وزر لاعتماد القيمة المطلوبة.", ref: "ACI 360R-10 Ch. 7" },
  hMin: { t: "Minimum acceptable thickness", en: "A practical lower limit (construction, dowel size, flatness). The governing thickness is never taken less than this.", ar: "حد أدنى عملي (التنفيذ، مقاس الدسرات، الاستواء). لا تقل السماكة الحاكمة عن هذه القيمة.", ref: "Designer's choice" },
  round: { t: "Rounding step", en: "The governing thickness is rounded up to this step, typically 10 or 25 mm.", ar: "تُقرّب السماكة الحاكمة لأعلى بهذه الخطوة، عادة 10 أو 25 mm.", ref: "Designer's choice" },
  wP: { t: "Wheel load P", en: "Load on one wheel, including the lift-truck self weight and the rated payload on the heaviest axle (normally the front drive axle when lifting).", ar: "الحمل على عجلة واحدة، ويشمل وزن الرافعة والحمولة المقننة على المحور الأثقل (غالباً المحور الأمامي أثناء الرفع).", ref: "ACI 360R-10 §5.2.1, §7.2.1.1" },
  wPress: { t: "Tire contact pressure", en: "Gives the contact area A = P / pressure. Typical: pneumatic 0.6–0.7 MPa, steel-cord 0.6–0.8 MPa, solid or cushion 1.2–1.7 MPa, polyurethane up to 6.9 MPa.", ar: "تحدد مساحة التلامس A = P / الضغط. القيم المعتادة: إطارات هوائية 0.6–0.7 MPa، سلك فولاذي 0.6–0.8 MPa، صلبة 1.2–1.7 MPa، بولي يوريثان حتى 6.9 MPa.", ref: "ACI 360R-10 §7.2.1.1" },
  wS: { t: "Wheel spacing s", en: "Centre-to-centre distance between the two wheels of the axle. The adjacent wheel adds stress at the critical wheel. Enter 0 for a single wheel.", ar: "المسافة بين مركزي عجلتي المحور. العجلة المجاورة تضيف إجهاداً عند العجلة الحرجة. أدخل 0 لعجلة مفردة.", ref: "ACI 360R-10 §7.2.1, Fig. A1.1" },
  wImpact: { t: "Impact factor", en: "Optional multiplier on the wheel load for impact at joints or rough floors. The COE method builds in 25% impact; PCA and WRI do not.", ar: "معامل اختياري لزيادة حمل العجلة بسبب الصدم عند الفواصل أو الأرضيات غير المستوية. طريقة COE تتضمن 25% صدم، بينما PCA وWRI لا تتضمنه.", ref: "ACI 360R-10 §7.2.3" },
  loc: { t: "Load location", en: "Interior: more than about 4ℓ from any edge (Westergaard case 2). Edge: on a joint or free edge away from corners (case 3). Corner: at a joint intersection (case 1). Edge and corner stresses are multiplied by the joint load-transfer factor.", ar: "داخلي: على بعد أكبر من 4ℓ تقريباً من أي حافة (حالة Westergaard 2). حافة: على فاصل أو حافة حرة بعيداً عن الأركان (حالة 3). ركن: عند تقاطع الفواصل (حالة 1). إجهاد الحافة والركن يُضرب في معامل نقل الحمل عند الفاصل.", ref: "ACI 360R-10 §7.2 Cases 1–3" },
  sfMode: { t: "Factor of safety mode", en: "Manual: choose from Table 5.2 (1.7–2.0 typical, 1.4 lower limit). From repetitions: the tool reads the stress ratio from PCA fatigue Table 5.3 for the expected number of load passes; SF = 1 / stress ratio, and not less than 1.7 for moving loads.", ar: "يدوي: اختر من جدول 5.2 (المعتاد 1.7–2.0، والحد الأدنى 1.4). من التكرارات: تقرأ الأداة نسبة الإجهاد من جدول الكلال 5.3 حسب عدد مرات المرور المتوقعة، ومعامل الأمان = 1 / نسبة الإجهاد، وبحد أدنى 1.7 للأحمال المتحركة.", ref: "ACI 360R-10 §5.3, Tables 5.2 and 5.3" },
  reps: { t: "Load repetitions", en: "Total passes of the wheel over the critical location during the design life, e.g. 100 passes/day × 300 days × 20 years = 600,000. Stress ratios of 0.45 or less allow unlimited repetitions.", ar: "إجمالي مرات مرور العجلة على الموقع الحرج طوال عمر التصميم، مثلاً 100 مرة/يوم × 300 يوم × 20 سنة = 600,000. نسبة إجهاد 0.45 أو أقل تسمح بتكرارات غير محدودة.", ref: "ACI 360R-10 Table 5.3" },
  sf: { t: "Factor of safety SF", en: "Applied to the modulus of rupture only: allowable stress = MOR / SF. The tool never uses less than 1.4 (Table 5.2 lower limit) and warns below 1.7 for moving loads. Avoid compounding safety factors on k, loads and strength at the same time.", ar: "يُطبق على معاير الانكسار فقط: الإجهاد المسموح = MOR / SF. لا تستخدم الأداة قيمة أقل من 1.4 (الحد الأدنى في جدول 5.2) وتنبه إذا قلّ عن 1.7 للأحمال المتحركة. تجنب مضاعفة معاملات الأمان على k والأحمال والمقاومة في نفس الوقت.", ref: "ACI 360R-10 §5.3, Table 5.2" },
  pP: { t: "Rack post load P", en: "Maximum service load on one upright, from the rack manufacturer (pallet loads + rack self weight).", ar: "أقصى حمل تشغيلي على القائم الواحد، من بيانات مورد الرفوف (أحمال المنصات + وزن الرف).", ref: "ACI 360R-10 §5.2.2, §7.2.1.2" },
  pBx: { t: "Base plate width bx", en: "Width of the post base plate. The equivalent contact radius is a = √(bx·by / π).", ar: "عرض لوح القاعدة للقائم. نصف قطر التلامس المكافئ a = √(bx·by / π).", ref: "ACI 360R-10 §7.2, Fig. A1.4" },
  pBy: { t: "Base plate length by", en: "Length of the post base plate. Also used for the punching perimeter and bearing area.", ar: "طول لوح القاعدة. ويستخدم أيضاً لمحيط القص الثاقب ومساحة التحمل.", ref: "ACI 318-19 §14.5.5, §14.5.6" },
  pSx: { t: "Short post spacing x", en: "Distance between the two posts of one rack frame (frame depth) or between back-to-back frames, whichever is shorter.", ar: "المسافة بين قائمي إطار الرف الواحد (عمق الإطار) أو بين الإطارات المتظهرة، أيهما أقصر.", ref: "ACI 360R-10 Fig. A1.4" },
  pSy: { t: "Long post spacing y", en: "Distance between posts along the rack (beam length / bay width).", ar: "المسافة بين القوائم على طول الرف (طول الكمرة / عرض الخلية).", ref: "ACI 360R-10 Fig. A1.4" },
  pLF: { t: "Load factor for punching", en: "Factored load for the ACI 318 strength checks: Pu = LF × P. Use 1.6 for storage live load (1.2D + 1.6L).", ar: "معامل التصعيد لفحوص المقاومة حسب ACI 318: Pu = LF × P. استخدم 1.6 لأحمال التخزين الحية.", ref: "ACI 318-19 §5.3.1" },
  uW: { t: "Uniform storage load w", en: "Distributed load from floor-stacked goods on both sides of an aisle. It produces top tension at the aisle centreline.", ar: "حمل موزع من البضائع المرصوصة على الأرض على جانبي الممر، ويسبب شداً في السطح العلوي عند منتصف الممر.", ref: "ACI 360R-10 §7.2 Case 4, §7.2.1.3" },
  uAisle: { t: "Aisle width", en: "Clear unloaded width between the storage areas. Used only when the layout is fixed.", ar: "العرض الحر غير المحمل بين مناطق التخزين. يُستخدم فقط عندما يكون الترتيب ثابتاً.", ref: "ACI 360R-10 Eq. 7-6" },
  uVar: { t: "Layout type", en: "Variable layout uses the critical aisle width π/(2λ) (= 2.209ℓ) that maximises the aisle moment, as recommended by Rice. Fixed layout uses the actual aisle width.", ar: "الترتيب المتغير يستخدم عرض الممر الحرج π/(2λ) الذي يعطي أكبر عزم كما يوصي Rice. الترتيب الثابت يستخدم عرض الممر الفعلي.", ref: "ACI 360R-10 §7.2 Case 4, Table A1.2" },
  lW: { t: "Line load w", en: "Load per unit length, e.g. a non-bearing partition wall or a rail. Interior position, analysed as an infinite beam on elastic foundation (Hetenyi).", ar: "حمل لكل وحدة طول مثل جدار غير حامل أو قضبان. يحلل في موقع داخلي كعتب لانهائي على أساس مرن (Hetenyi).", ref: "ACI 360R-10 §5.2.4, Table 5.2" },
  jS: { t: "Contraction joint spacing", en: "Panel side length between sawcut contraction joints. Closer joints reduce random cracking and curling. Rule of thumb 24h–36h; check ACI 360R Fig. 6.6 for the concrete's shrinkage. Panels should be square or up to 1.5:1.", ar: "طول ضلع اللوح بين فواصل التحكم المقطوعة. الفواصل المتقاربة تقلل الشقوق العشوائية والتقوس. القاعدة العملية 24h–36h، وراجع الشكل 6.6 حسب انكماش الخلطة. الألواح مربعة أو بنسبة حتى 1.5:1.", ref: "ACI 360R-10 §6.1, Fig. 6.6, §7.4" },
  jTransfer: { t: "Load transfer at joints", en: "Dowels force both panel edges to deflect together. ACI 360R recommends positive load transfer where joints may open more than 0.6–0.9 mm under wheel traffic. With dowels the edge and corner stresses are reduced by the COE joint factor 0.75; aggregate interlock gets no reduction.", ar: "الدسرات تجبر حافتي اللوحين على الهبوط معاً. يوصي ACI 360R بنقل حمل إيجابي حيث قد ينفتح الفاصل أكثر من 0.6–0.9 mm تحت حركة العجلات. مع الدسرات يُخفض إجهاد الحافة والركن بمعامل COE 0.75، أما تعشيق الركام فلا يخفض.", ref: "ACI 360R-10 §6.2, §7.2.3, §7.3" },
  jCut: { t: "Sawcut method", en: "Conventional wet saw: depth at least h/4, cut as soon as the concrete can be sawn without ravelling. Early-entry dry saw: at least 25 mm deep, cut within 1–4 hours of finishing.", ar: "القطع التقليدي: بعمق لا يقل عن h/4 وفور قدرة الخرسانة على تحمل القطع دون تفتت. القطع المبكر: بعمق 25 mm على الأقل خلال 1–4 ساعات من التشطيب.", ref: "ACI 360R-10 §6.3 · ACI 302.1R" },
  rType: { t: "Reinforcement type", en: "Plain: thickness carries the loads, joints control shrinkage. Crack-width control: steel sized by subgrade drag between joints. Continuous: at least 0.5% steel lets you omit contraction joints. Shrinkage-compensating: at least 0.15% steel (ACI 223). Reinforcement does not increase the uncracked load capacity.", ar: "بدون تسليح: السماكة تتحمل الأحمال والفواصل تتحكم في الانكماش. للتحكم في عرض الشقوق: يُصمم التسليح باحتكاك التربة بين الفواصل. مستمر: 0.5% على الأقل ويسمح بإلغاء فواصل التحكم. تعويض الانكماش: 0.15% على الأقل. التسليح لا يرفع قدرة البلاطة غير المتشققة.", ref: "ACI 360R-10 Ch. 8, §8.2, §8.3, §9.3.2" },
  rFy: { t: "Steel yield strength fy", en: "Grade of bars or welded wire reinforcement, e.g. 420 MPa.", ar: "رتبة حديد التسليح أو الشبك الملحوم، مثلاً 420 MPa.", ref: "ASTM A615 / A1064" },
  rFs: { t: "Working stress ratio fs / fy", en: "Steel working stress for the drag equation, commonly 2/3 to 3/4 of fy.", ar: "إجهاد التشغيل للحديد في معادلة الاحتكاك، عادة 2/3 إلى 3/4 من fy.", ref: "Subgrade drag method" },
  rMu: { t: "Subgrade friction coefficient μ", en: "1.5 is common on granular base. On polyethylene: one sheet 0.5–0.75, two sheets 0.30.", ar: "1.5 شائع على أساس حبيبي. فوق البولي إيثيلين: طبقة واحدة 0.5–0.75، وطبقتان 0.30.", ref: "ACI 360R-10 §9.3.1, §10.3.2" },
  rCover: { t: "Top cover", en: "Place the steel as close to the top as cover allows; 38–51 mm (1.5–2 in.) is common to limit bar shadowing and subsidence cracking.", ar: "يوضع الحديد أقرب ما يمكن للسطح العلوي مع غطاء 38–51 mm لتجنب ظهور خطوط الأسياخ وشقوق الهبوط.", ref: "ACI 360R-10 §8.3" },
  cGrad: { t: "Equivalent curling gradient", en: "Top-to-bottom temperature or moisture difference per 25 mm. Enclosed slabs: 1.7–3.4 °C per 25 mm upward curl.", ar: "فرق الحرارة أو الرطوبة المكافئ بين الوجهين لكل 25 mm. البلاطات المغلقة: 1.7–3.4 °C لكل 25 mm (تقوس لأعلى).", ref: "ACI 360R-10 §14.13" },
  cAlpha: { t: "Thermal coefficient α", en: "Coefficient of thermal expansion, about 10 × 10⁻⁶ /°C for normal concrete; lower with limestone aggregate.", ar: "معامل التمدد الحراري، حوالي 10 × 10⁻⁶ لكل °C للخرسانة العادية، وأقل مع ركام الحجر الجيري.", ref: "ACI 360R-10 §14.13" },
  lX: { t: "Building length X", en: "Overall slab length used for the joint layout drawing.", ar: "الطول الكلي للبلاطة المستخدم في رسم مخطط الفواصل.", ref: "—" },
  lY: { t: "Building width Y", en: "Overall slab width used for the joint layout drawing.", ar: "العرض الكلي للبلاطة المستخدم في رسم مخطط الفواصل.", ref: "—" },
  lBx: { t: "Column bay X", en: "Column spacing in X. Joints are aligned with column lines and each bay is divided into equal panels.", ar: "بحر الأعمدة في اتجاه X. تُحاذى الفواصل مع خطوط الأعمدة ويُقسم كل بحر إلى ألواح متساوية.", ref: "ACI 360R-10 §6.1, Fig. 6.1" },
  lBy: { t: "Column bay Y", en: "Column spacing in Y.", ar: "بحر الأعمدة في اتجاه Y.", ref: "ACI 360R-10 §6.1" },
  lStrip: { t: "Pour strip width", en: "Number of bays per placement strip. Construction joints are drawn on the column lines that bound each strip.", ar: "عدد البحور في كل شريط صب. تُرسم فواصل الصب على خطوط الأعمدة التي تحد كل شريط.", ref: "ACI 360R-10 §6.1.3" },
  oL: { t: "Radius of relative stiffness ℓ", en: "ℓ = [E·h³ / 12(1−ν²)k]^0.25. Large for a stiff slab on soft soil. Loads closer than about 4ℓ to an edge are not interior loads.", ar: "ℓ = [E·h³ / 12(1−ν²)k]^0.25. تكون كبيرة لبلاطة جاسئة على تربة ضعيفة. الأحمال الأقرب من 4ℓ للحافة لا تعتبر داخلية.", ref: "ACI 360R-10 Eq. 7-3" },
  oSigma: { t: "Flexural stress σ", en: "Maximum tensile stress from the Westergaard (or Rice / Hetenyi) solution plus the contribution of adjacent loads. For concentrated loads (wheels, posts) the tool multiplies the result by a model factor of 1.05 so that it is never thinner than the PCA design charts of ACI 360R Appendix 1.", ar: "أقصى إجهاد شد من حل Westergaard (أو Rice / Hetenyi) مضافاً إليه تأثير الأحمال المجاورة. للأحمال المركزة (العجلات وقوائم الرفوف) تضرب الأداة النتيجة في معامل نموذج 1.05 حتى لا تعطي سماكة أقل من منحنيات PCA في الملحق 1 من ACI 360R.", ref: "ACI 360R-10 Eq. 7-2 to 7-6, App. 1" },
  oHreq: { t: "Required thickness per case", en: "Smallest thickness (5 mm steps) at which every check of the load case has a utilisation of 1.0 or less.", ar: "أصغر سماكة (بخطوات 5 mm) تكون عندها كل فحوص الحالة بنسبة استغلال 1.0 أو أقل.", ref: "—" },
  oPunch: { t: "Punching shear at posts", en: "Plain-concrete two-way shear: φVn = 0.6 × min(0.11 + 0.22/β, 0.22)·√f'c·bo·h, with h reduced by 50 mm for concrete cast against soil and bo at h/2 from the plate. The soil pressure inside the perimeter is deducted.", ar: "القص الثاقب للخرسانة غير المسلحة: φVn = 0.6 × min(0.11 + 0.22/β, 0.22)·√f'c·bo·h، مع تخفيض h بمقدار 50 mm للخرسانة المصبوبة على التربة، والمحيط bo على بعد h/2 من اللوح. يُخصم ضغط التربة داخل المحيط.", ref: "ACI 318-19 §14.5.1.7, Table 14.5.5.1" },
  oBear: { t: "Bearing under base plate", en: "φBn = 0.6 × 0.85·f'c·A1·√(A2/A1), with √(A2/A1) taken as 2 because the slab surrounds the plate on all sides.", ar: "φBn = 0.6 × 0.85·f'c·A1·√(A2/A1)، مع أخذ √(A2/A1) = 2 لأن البلاطة تحيط باللوح من كل الجوانب.", ref: "ACI 318-19 §14.5.6" },
  oGov: { t: "Governing thickness", en: "The largest required thickness of all load cases, not less than the minimum, rounded up.", ar: "أكبر سماكة مطلوبة من بين كل حالات التحميل، ولا تقل عن الحد الأدنى، مقربة لأعلى.", ref: "—" },
};

(function () {
var root = document.getElementById('cm-sog');
if (!root || root.__cm) return; root.__cm = 1;
var $ = function (s) { return root.querySelector(s); };
var $$ = function (s) { return Array.prototype.slice.call(root.querySelectorAll(s)); };
var STORE = 'cm-sog-v2';
var SITE = (/civilmaker/i.test(location.hostname) ? location.hostname.replace(/^www\./, '') : 'civilmaker');
// Link printed in the PDF. On the blog it is the page that hosts the tool; elsewhere TOOL_URL_FALLBACK.
var TOOL_URL_FALLBACK = 'https://www.civilmaker.com/';
var TOOL_URL = /^https?:/.test(location.protocol) &amp;&amp; !/claude|localhost/i.test(location.hostname) ? location.href.split('#')[0] : TOOL_URL_FALLBACK;

function SAMPLE() {
  return {
    conc: { fc: 35, morMode: 'manual', mor: 4.5, Emode: 'auto', E: 27800, nu: 0.15, gamma: 24 },
    soil: { k: 40 },
    design: { h: 220, hMin: 150, round: 10 },
    loads: [
      { id: 1, type: 'wheel', name: '3 t forklift, front axle, interior', P: 45, press: 1.0, s: 900, impact: 1.0, loc: 'interior', sfMode: 'fatigue', sf: 1.7, reps: 500000 },
      { id: 2, type: 'wheel', name: '3 t forklift crossing a doweled joint', P: 45, press: 1.0, s: 900, impact: 1.0, loc: 'edge', sfMode: 'fatigue', sf: 1.7, reps: 500000 },
      { id: 3, type: 'post', name: 'Selective pallet rack upright', P: 60, bx: 100, by: 100, sx: 1000, sy: 2700, loc: 'interior', sfMode: 'manual', sf: 1.7, reps: 100000, LF: 1.6 },
      { id: 4, type: 'uniform', name: 'Floor-stacked storage beside aisle', w: 30, aisle: 3.5, variable: 'true', sf: 1.7 },
      { id: 5, type: 'line', name: 'Non-bearing block partition', w: 15, sf: 1.7 }
    ],
    joints: { s: 5, transfer: 'dowel', cut: 'conv' },
    reinf: { type: 'drag', fy: 420, fsRatio: 0.67, mu: 1.5, cover: 50 },
    curl: { grad: 1.7, alpha: 10 },
    layout: { X: 60, Y: 40, bx: 10, by: 8, strip: 1 }
  };
}
function merge(a, b) { for (var k in b) { if (b[k] &amp;&amp; typeof b[k] === 'object' &amp;&amp; !Array.isArray(b[k]) &amp;&amp; a[k]) merge(a[k], b[k]); else a[k] = b[k]; } return a; }
var S = SAMPLE();
try { var raw = localStorage.getItem(STORE); if (raw) S = merge(SAMPLE(), JSON.parse(raw)); } catch (e) {}
function nextId() { return S.loads.reduce(function (m, l) { return Math.max(m, l.id || 0); }, 0) + 1; }

var f = function (x, d) { d = d == null ? 2 : d; return (x == null || !isFinite(x)) ? '—' : Number(x).toLocaleString('en-US', { minimumFractionDigits: d, maximumFractionDigits: d }); };
var esc = function (s) { return String(s == null ? '' : s).replace(/[&amp;&lt;&gt;"]/g, function (c) { return { '&amp;': '&amp;amp;', '&lt;': '&amp;lt;', '&gt;': '&amp;gt;', '"': '&amp;quot;' }[c]; }); };
function getP(o, p) { return p.split('.').reduce(function (a, k) { return a == null ? a : a[k]; }, o); }
function setP(o, p, v) { var ks = p.split('.'); var t = o; for (var i = 0; i &lt; ks.length - 1; i++) t = t[ks[i]]; t[ks[ks.length - 1]] = v; }

// ---------------- field schema ----------------
var F = {
  conc: [
    { p: 'conc.fc', h: 'fc', l: "Compressive strength f'c", u: 'MPa', st: 1 },
    { p: 'conc.morMode', h: 'morMode', l: 'Modulus of rupture source', o: [['auto', "Auto 0.62√f'c (ACI 318)"], ['manual', 'Tested value']] },
    { p: 'conc.mor', h: 'mor', l: 'Modulus of rupture MOR (tested)', u: 'MPa', st: 0.1, show: function () { return S.conc.morMode === 'manual'; } },
    { p: 'conc.Emode', h: 'E', l: 'Elastic modulus source', o: [['auto', "Auto 4700√f'c"], ['manual', 'Manual']] },
    { p: 'conc.E', h: 'E', l: 'Elastic modulus E', u: 'MPa', st: 500, show: function () { return S.conc.Emode === 'manual'; } },
    { p: 'conc.nu', h: 'nu', l: "Poisson's ratio ν", u: '–', st: 0.01 },
    { p: 'conc.gamma', h: 'gamma', l: 'Unit weight γ', u: 'kN/m³', st: 0.5 }
  ],
  soil: [{ p: 'soil.k', h: 'k', l: 'Modulus of subgrade reaction k', u: 'MN/m³', st: 1 }],
  des: [
    { p: 'design.h', h: 'h', l: 'Design thickness h', u: 'mm', st: 5 },
    { p: 'design.hMin', h: 'hMin', l: 'Minimum thickness', u: 'mm', st: 5 },
    { p: 'design.round', h: 'round', l: 'Round thickness up to', u: 'mm', st: 5 }
  ],
  joint: [
    { p: 'joints.s', h: 'jS', l: 'Contraction joint spacing', u: 'm', st: 0.25 },
    { p: 'joints.transfer', h: 'jTransfer', l: 'Load transfer at joints', o: [['dowel', 'Round / square dowels'], ['plate', 'Plate dowels'], ['agg', 'Aggregate interlock only']] },
    { p: 'joints.cut', h: 'jCut', l: 'Sawcut method', o: [['conv', 'Conventional (h/4)'], ['early', 'Early-entry (≥ 25 mm)']] }
  ],
  reinf: [
    { p: 'reinf.type', h: 'rType', l: 'Reinforcement type', o: [['none', 'Plain (unreinforced)'], ['drag', 'Crack-width control (subgrade drag)'], ['cont', 'Continuous, no contraction joints'], ['shc', 'Shrinkage-compensating concrete']] },
    { p: 'reinf.fy', h: 'rFy', l: 'Yield strength fy', u: 'MPa', st: 10, show: function () { return S.reinf.type !== 'none'; } },
    { p: 'reinf.fsRatio', h: 'rFs', l: 'Working stress fs / fy', u: '–', st: 0.01, show: function () { return S.reinf.type === 'drag'; } },
    { p: 'reinf.mu', h: 'rMu', l: 'Friction coefficient μ', u: '–', st: 0.1, show: function () { return S.reinf.type === 'drag'; } },
    { p: 'reinf.cover', h: 'rCover', l: 'Top cover', u: 'mm', st: 5, show: function () { return S.reinf.type !== 'none'; } }
  ],
  curl: [
    { p: 'curl.grad', h: 'cGrad', l: 'Equivalent gradient', u: '°C/25mm', st: 0.1 },
    { p: 'curl.alpha', h: 'cAlpha', l: 'Thermal coefficient α', u: '×10⁻⁶/°C', st: 0.5 }
  ],
  lay: [
    { p: 'layout.X', h: 'lX', l: 'Building length X', u: 'm', st: 1 },
    { p: 'layout.Y', h: 'lY', l: 'Building width Y', u: 'm', st: 1 },
    { p: 'layout.bx', h: 'lBx', l: 'Column bay X', u: 'm', st: 0.5 },
    { p: 'layout.by', h: 'lBy', l: 'Column bay Y', u: 'm', st: 0.5 },
    { p: 'layout.strip', h: 'lStrip', l: 'Pour strip width (bays)', u: 'bays', st: 1 }
  ]
};
var LF = {
  wheel: [
    { k: 'P', h: 'wP', l: 'Wheel load P (one wheel)', u: 'kN', st: 1 },
    { k: 'press', h: 'wPress', l: 'Tire contact pressure', u: 'MPa', st: 0.1 },
    { k: 's', h: 'wS', l: 'Wheel spacing s (0 = single)', u: 'mm', st: 10 },
    { k: 'impact', h: 'wImpact', l: 'Impact factor', u: '×', st: 0.05 },
    { k: 'loc', h: 'loc', l: 'Load location', o: [['interior', 'Interior'], ['edge', 'Edge / joint'], ['corner', 'Corner']] },
    { k: 'sfMode', h: 'sfMode', l: 'Factor of safety', o: [['fatigue', 'From repetitions (fatigue)'], ['manual', 'Manual (Table 5.2)']] },
    { k: 'reps', h: 'reps', l: 'Load repetitions (design life)', u: 'passes', st: 1000, show: function (L) { return L.sfMode === 'fatigue'; } },
    { k: 'sf', h: 'sf', l: 'Factor of safety SF', u: '–', st: 0.1, show: function (L) { return L.sfMode !== 'fatigue'; } }
  ],
  post: [
    { k: 'P', h: 'pP', l: 'Post load P', u: 'kN', st: 1 },
    { k: 'bx', h: 'pBx', l: 'Base plate width bx', u: 'mm', st: 5 },
    { k: 'by', h: 'pBy', l: 'Base plate length by', u: 'mm', st: 5 },
    { k: 'sx', h: 'pSx', l: 'Short post spacing x', u: 'mm', st: 10 },
    { k: 'sy', h: 'pSy', l: 'Long post spacing y', u: 'mm', st: 10 },
    { k: 'loc', h: 'loc', l: 'Load location', o: [['interior', 'Interior'], ['edge', 'Edge / joint'], ['corner', 'Corner']] },
    { k: 'sfMode', h: 'sfMode', l: 'Factor of safety', o: [['manual', 'Manual (Table 5.2)'], ['fatigue', 'From repetitions (fatigue)']] },
    { k: 'reps', h: 'reps', l: 'Load repetitions', u: 'cycles', st: 1000, show: function (L) { return L.sfMode === 'fatigue'; } },
    { k: 'sf', h: 'sf', l: 'Factor of safety SF', u: '–', st: 0.1, show: function (L) { return L.sfMode !== 'fatigue'; } },
    { k: 'LF', h: 'pLF', l: 'Load factor (punching)', u: '×', st: 0.1 }
  ],
  uniform: [
    { k: 'w', h: 'uW', l: 'Uniform load w', u: 'kPa', st: 1 },
    { k: 'variable', h: 'uVar', l: 'Storage layout', o: [['true', 'Variable (critical aisle)'], ['false', 'Fixed (actual aisle)']] },
    { k: 'aisle', h: 'uAisle', l: 'Aisle width', u: 'm', st: 0.1, show: function (L) { return String(L.variable) === 'false'; } },
    { k: 'sf', h: 'sf', l: 'Factor of safety SF', u: '–', st: 0.1 }
  ],
  line: [
    { k: 'w', h: 'lW', l: 'Line load w', u: 'kN/m', st: 1 },
    { k: 'sf', h: 'sf', l: 'Factor of safety SF', u: '–', st: 0.1 }
  ]
};

function iBtn(h) { return '&lt;button type="button" class="cm-i" data-help="' + h + '" aria-label="Explain" aria-expanded="false"&gt;i&lt;/button&gt;'; }
function fieldHTML(def, val, attrs) {
  var ctl;
  if (def.o) ctl = '&lt;div class="cm-ctl"&gt;&lt;select ' + attrs + '&gt;' + def.o.map(function (o) { return '&lt;option value="' + o[0] + '"' + (String(val) === o[0] ? ' selected' : '') + '&gt;' + esc(o[1]) + '&lt;/option&gt;'; }).join('') + '&lt;/select&gt;&lt;/div&gt;';
  else ctl = '&lt;div class="cm-ctl"&gt;&lt;input type="number" inputmode="decimal" step="' + (def.st || 'any') + '" value="' + esc(val) + '" ' + attrs + '&gt;' + (def.u ? '&lt;span class="cm-u"&gt;' + def.u + '&lt;/span&gt;' : '') + '&lt;/div&gt;';
  return '&lt;div class="cm-f"&gt;&lt;div class="cm-fl"&gt;&lt;span&gt;' + esc(def.l) + '&lt;/span&gt;' + iBtn(def.h) + '&lt;/div&gt;' + ctl + '&lt;div class="cm-pop" hidden&gt;&lt;/div&gt;&lt;/div&gt;';
}
function outHTML(label, val, unit, h, extra) {
  return '&lt;div class="cm-f cm-out"&gt;&lt;div class="cm-fl"&gt;&lt;span&gt;' + esc(label) + '&lt;/span&gt;' + (h ? iBtn(h) : '') + '&lt;/div&gt;&lt;div class="cm-val"&gt;&lt;span&gt;' + val + '&lt;/span&gt;&lt;small&gt;' + (unit || '') + '&lt;/small&gt;&lt;/div&gt;' + (extra || '') + '&lt;div class="cm-pop" hidden&gt;&lt;/div&gt;&lt;/div&gt;';
}
function renderFields(id, list) {
  var box = $('#' + id); if (!box) return;
  box.innerHTML = list.filter(function (d) { return !d.show || d.show(); }).map(function (d) {
    return fieldHTML(d, getP(S, d.p), 'data-p="' + d.p + '" aria-label="' + esc(d.l) + '" id="cm-' + d.p.replace('.', '-') + '"');
  }).join('');
}

// ---------------- calculations ----------------
function mat() {
  var c = S.conc;
  return { E: c.Emode === 'manual' ? +c.E : 4700 * Math.sqrt(+c.fc), MOR: c.morMode === 'manual' ? +c.mor : 0.62 * Math.sqrt(+c.fc), nu: +c.nu, fc: +c.fc, k: +S.soil.k * 1e-3, kMN: +S.soil.k };
}
var CAL = 1.05; // model factor on concentrated-load stresses: makes ACI 360R App. 1 PCA chart examples conservative
var SF_MIN = 1.4, SF_WHEEL_MIN = 1.7;
function ltf() { return S.joints.transfer === 'agg' ? 1.0 : 0.75; }
function sfOf(L) {
  if ((L.type === 'wheel' || L.type === 'post') &amp;&amp; L.sfMode === 'fatigue') { var sr = SOG.stressRatioFor(+L.reps); var sf0 = 1 / sr, sf1 = Math.max(sf0, SF_WHEEL_MIN); return { sf: sf1, sr: sr, src: 'Table 5.3: ' + f(+L.reps, 0) + ' reps → ratio ' + f(sr, 2) + (sf1 &gt; sf0 ? ', raised to 1.70 min' : '') }; }
  var m = +L.sf, sfu = Math.max(isFinite(m) ? m : 0, SF_MIN);
  return { sf: sfu, sr: 1 / sfu, src: 'manual, Table 5.2' + (sfu &gt; m || !isFinite(m) ? ' (raised to 1.40 min)' : '') };
}
function analyse(L, h, M) {
  var s = sfOf(L), fall = M.MOR / s.sf;
  var r = { sf: s.sf, sfSrc: s.src, fall: fall, checks: [] };
  if (L.type === 'wheel' || L.type === 'post') {
    var P = +L.P * 1000 * (L.type === 'wheel' ? (+L.impact || 1) : 1);
    var A = L.type === 'wheel' ? P / +L.press : +L.bx * +L.by;
    var a = Math.sqrt(A / Math.PI);
    var others = L.type === 'wheel' ? (+L.s &gt; 0 ? [{ x: +L.s, y: 0 }] : []) : [{ x: +L.sx, y: 0 }, { x: 0, y: +L.sy }, { x: +L.sx, y: +L.sy }];
    var g = SOG.groupStress({ P: P, a: a, h: h, E: M.E, nu: M.nu, k: M.k, others: others, location: L.loc, ltf: ltf() });
    r.P = P; r.A = A; r.a = a; r.g = g; r.sigma = g.sigma * CAL;
    r.checks.push({ n: 'Flexural stress (' + L.loc + ')', d: r.sigma, c: fall, u: 'MPa', h: 'oSigma' });
    if (L.type === 'post') {
      var p = SOG.punching({ P: P, LF: Math.max(+L.LF || 0, 1.2), bx: +L.bx, by: +L.by, h: h, fc: M.fc, l: g.l });
      r.p = p;
      r.checks.push({ n: 'Punching shear Vu ≤ φVn', d: p.Vu / 1000, c: p.phiVn / 1000, u: 'kN', h: 'oPunch' });
      r.checks.push({ n: 'Bearing Pu ≤ φBn', d: p.Pu / 1000, c: p.phiBn / 1000, u: 'kN', h: 'oBear' });
    }
  } else if (L.type === 'uniform') {
    var w = +L.w * 1e-3;
    var u = SOG.uniformAisle({ w: w, h: h, E: M.E, k: M.k, aisle: +L.aisle * 1000, variable: String(L.variable) !== 'false' });
    r.u = u; r.sigma = u.sigma; r.wAllow = u.sigma &gt; 0 ? fall / (u.sigma / w) * 1000 : Infinity;
    r.checks.push({ n: 'Top tension at aisle centre', d: u.sigma, c: fall, u: 'MPa', h: 'oSigma' });
  } else if (L.type === 'line') {
    var ln = SOG.lineLoad({ wl: +L.w, h: h, E: M.E, k: M.k });
    r.ln = ln; r.sigma = ln.sigma; r.wAllow = fall / (ln.sigma / +L.w);
    r.checks.push({ n: 'Bottom tension under line load', d: ln.sigma, c: fall, u: 'MPa', h: 'oSigma' });
  }
  r.ratio = Math.max.apply(null, r.checks.map(function (c) { return c.d / c.c; }));
  return r;
}
function requiredH(L, M) { for (var h = 75; h &lt;= 800; h += 5) if (analyse(L, h, M).ratio &lt;= 1) return h; return Infinity; }
function solve(st) {
  var keep = S; if (st) S = st;
  var M = mat(), h = +S.design.h;
  var rows = S.loads.map(function (L) { return { L: L, at: analyse(L, h, M), hReq: requiredH(L, M) }; });
  var hGov0 = Math.max.apply(null, [+S.design.hMin].concat(rows.map(function (r) { return r.hReq; })));
  var rd = +S.design.round || 10;
  var hGov = hGov0 === Infinity ? Infinity : Math.ceil(hGov0 / rd) * rd;
  var gov = null; rows.forEach(function (r) { if (!gov || r.hReq &gt; gov.hReq) gov = r; });
  var hD = h;
  var res = { M: M, h: h, rows: rows, hGov: hGov, gov: gov, ok: h &gt;= hGov, J: jointsCalc(hD), R: reinfCalc(hD), C: curlCalc(hD, M), Lay: layoutCalc(), warn: validate(M) };
  S = keep; return res;
}
function validate(M) {
  var w = [];
  if (S.conc.morMode === 'manual' &amp;&amp; M.MOR &gt; 0.83 * Math.sqrt(M.fc)) w.push('Tested MOR ' + f(M.MOR, 2) + ' MPa exceeds 0.83√f\'c (' + f(0.83 * Math.sqrt(M.fc), 2) + ' MPa). Confirm with ASTM C78 results.');
  if (M.kMN &lt; 10 || M.kMN &gt; 200) w.push('k = ' + f(M.kMN, 0) + ' MN/m³ is outside the usual 10–200 range. Check the geotechnical report.');
  if (M.fc &lt; 20) w.push("f'c below 20 MPa is not recommended for industrial floors.");
  if (+S.joints.s * 1000 &gt; 36 * +S.design.h) w.push('Joint spacing exceeds 36h; expect more random cracking and curling.');
  if (S.joints.transfer === 'agg' &amp;&amp; S.loads.some(function (L) { return L.type === 'wheel'; })) w.push('Wheel traffic crosses joints with aggregate interlock only; ACI 360R §7.3 recommends dowels.');
  S.loads.forEach(function (L) { if (L.sfMode !== 'fatigue' &amp;&amp; +L.sf &lt; 1.7 &amp;&amp; (L.type === 'wheel' || L.type === 'post')) w.push(esc(L.name) + ': SF below 1.7 (Table 5.2 common range 1.7–2.0).'); });
  return w;
}
function jointsCalc(h) {
  return { lo: 24 * h / 1000, hi: 36 * h / 1000, s: +S.joints.s, cut: S.joints.cut === 'early' ? 25 : Math.ceil(h / 4 / 5) * 5, dw: SOG.dowels(h), h: h };
}
function bars(As) {
  var list = [10, 12, 14, 16, 20];
  for (var i = 0; i &lt; list.length; i++) { var d = list[i], ab = Math.PI * d * d / 4; var sp = Math.min(300, Math.floor(ab * 1000 / As / 25) * 25); if (sp &gt;= 150) return { d: d, sp: sp, prov: ab * 1000 / sp }; }
  var d2 = 20, ab2 = Math.PI * 100, sp2 = Math.max(100, Math.floor(ab2 * 1000 / As / 25) * 25); return { d: d2, sp: sp2, prov: ab2 * 1000 / sp2 };
}
function reinfCalc(h) {
  var R = S.reinf, fy = +R.fy;
  if (R.type === 'none') return { type: 'none' };
  if (R.type === 'drag') { var W = +S.conc.gamma * h, L = +S.joints.s, fs = +R.fsRatio * fy, Fd = +R.mu * W * L / 2, As = Fd / fs; return { type: 'drag', W: W, L: L, fs: fs, F: Fd, As: As, b: bars(As), h: h }; }
  var rho = R.type === 'cont' ? 0.005 : 0.0015; var As2 = rho * h * 1000; return { type: R.type, rho: rho, As: As2, b: bars(As2), h: h };
}
function curlCalc(h, M) {
  var dT = +S.curl.grad * h / 25, l = SOG.radiusRelStiffness(M.E, h, M.nu, M.k), C = SOG.bradburyC(+S.joints.s * 1000, l);
  var base = M.E * (+S.curl.alpha * 1e-6) * dT / 2;
  return { dT: dT, l: l, C: C, Ll: +S.joints.s * 1000 / l, interior: base * C * (1 + M.nu) / (1 - M.nu * M.nu), edge: base * C };
}
function layoutCalc() {
  var Y = S.layout, X = +Y.X, Yy = +Y.Y, bx = +Y.bx, by = +Y.by, s = +S.joints.s;
  if (!(X &gt; 0 &amp;&amp; Yy &gt; 0 &amp;&amp; bx &gt; 0 &amp;&amp; by &gt; 0 &amp;&amp; s &gt; 0)) return null;
  var nbx = Math.ceil(X / bx - 1e-9), nby = Math.ceil(Yy / by - 1e-9), nx = Math.ceil(bx / s - 1e-9), ny = Math.ceil(by / s - 1e-9);
  var px = bx / nx, py = by / ny;
  return { X: X, Y: Yy, bx: bx, by: by, nbx: nbx, nby: nby, nx: nx, ny: ny, px: px, py: py, asp: Math.max(px, py) / Math.min(px, py), strip: Math.max(1, Math.round(+Y.strip || 1)), panels: nbx * nx * nby * ny };
}

// ---------------- SVG drawing helpers ----------------
var uid = 0;
function defs() {
  uid++; var a = 'cma' + uid, h = 'cmh' + uid;
  return { a: a, h: h, s: '&lt;defs&gt;&lt;marker id="' + a + '" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"&gt;&lt;path d="M0,0 L10,5 L0,10 z" class="cm-s-redf"/&gt;&lt;/marker&gt;' +
    '&lt;marker id="' + a + 'd" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="7" markerHeight="7" orient="auto"&gt;&lt;path d="M5,0 L5,10" stroke="currentColor" class="cm-s-line"/&gt;&lt;/marker&gt;' +
    '&lt;pattern id="' + h + '" width="7" height="7" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"&gt;&lt;rect width="7" height="7" class="cm-s-soil"/&gt;&lt;line x1="0" y1="0" x2="0" y2="7" class="cm-s-thin"/&gt;&lt;/pattern&gt;&lt;/defs&gt;' };
}
function T(x, y, s, cls, anchor, extra) { return '&lt;text x="' + x + '" y="' + y + '" class="' + (cls || 'cm-t-s') + '" text-anchor="' + (anchor || 'middle') + '"' + (extra || '') + '&gt;' + esc(s) + '&lt;/text&gt;'; }
function arrow(D, x1, y1, x2, y2) { return '&lt;line x1="' + x1 + '" y1="' + y1 + '" x2="' + x2 + '" y2="' + y2 + '" class="cm-s-red" marker-end="url(#' + D.a + ')"/&gt;'; }
function dimH(x1, x2, y, label, cls) {
  return '&lt;line x1="' + x1 + '" y1="' + y + '" x2="' + x2 + '" y2="' + y + '" class="cm-s-thin"/&gt;&lt;line x1="' + x1 + '" y1="' + (y - 5) + '" x2="' + x1 + '" y2="' + (y + 5) + '" class="cm-s-thin"/&gt;&lt;line x1="' + x2 + '" y1="' + (y - 5) + '" x2="' + x2 + '" y2="' + (y + 5) + '" class="cm-s-thin"/&gt;' + T((x1 + x2) / 2, y - 4, label, cls || 'cm-t-s');
}
function dimV(x, y1, y2, label, side) {
  var tx = side === 'l' ? x - 5 : x + 5;
  return '&lt;line x1="' + x + '" y1="' + y1 + '" x2="' + x + '" y2="' + y2 + '" class="cm-s-thin"/&gt;&lt;line x1="' + (x - 5) + '" y1="' + y1 + '" x2="' + (x + 5) + '" y2="' + y1 + '" class="cm-s-thin"/&gt;&lt;line x1="' + (x - 5) + '" y1="' + y2 + '" x2="' + (x + 5) + '" y2="' + y2 + '" class="cm-s-thin"/&gt;' + T(tx, (y1 + y2) / 2 + 3, label, 'cm-t-s', side === 'l' ? 'end' : 'start');
}
function springs(x1, x2, y, hgt) {
  var s = '', n = Math.max(4, Math.round((x2 - x1) / 26));
  for (var i = 0; i &lt;= n; i++) { var x = x1 + (x2 - x1) * i / n, z = 'M' + x + ',' + y; var st = hgt / 6; for (var j = 1; j &lt;= 5; j++) z += ' L' + (x + (j % 2 ? 4 : -4)) + ',' + (y + st * j); z += ' L' + x + ',' + (y + hgt); s += '&lt;path d="' + z + '" class="cm-s-thin"/&gt;'; }
  return s;
}
function svg(w, h, body, D, label) { return '&lt;svg viewBox="0 0 ' + w + ' ' + h + '" role="img" aria-label="' + esc(label) + '" xmlns="http://www.w3.org/2000/svg"&gt;' + D.s + body + '&lt;/svg&gt;'; }
function sectionSlab(D, x1, x2, y, t) { return '&lt;rect x="' + x1 + '" y="' + y + '" width="' + (x2 - x1) + '" height="' + t + '" class="cm-s-slab"/&gt;' + '&lt;rect x="' + x1 + '" y="' + (y + t) + '" width="' + (x2 - x1) + '" height="34" fill="url(#' + D.h + ')"/&gt;' + springs(x1 + 8, x2 - 8, y + t, 30); }

function diagWheel(L, at, h) {
  var D = defs(), W = 420, H = 270, b = '';
  var s = Math.max(0, +L.s || 0), a = at ? at.a : 100, P = +L.P;
  var span = Math.max(s + 2 * a, 600), sc = Math.min(230 / span, 0.3), r = Math.max(5, a * sc);
  b += T(12, 16, 'PLAN', 'cm-t-b', 'start');
  b += '&lt;rect x="20" y="24" width="380" height="136" class="cm-s-bg"/&gt;';
  var cy = 92, cx1, cx2;
  if (L.loc === 'interior') { cx1 = 210 - s * sc / 2; cx2 = 210 + s * sc / 2; b += T(390, 40, 'interior: &gt; 4ℓ from edges', 'cm-t-m', 'end'); }
  else if (L.loc === 'edge') { b += '&lt;line x1="20" y1="150" x2="400" y2="150" class="cm-s-joint"/&gt;' + T(396, 146, 'joint / free edge', 'cm-t-m', 'end'); cy = 150 - r - 1; cx1 = 210 - s * sc / 2; cx2 = 210 + s * sc / 2; }
  else { b += '&lt;line x1="20" y1="150" x2="400" y2="150" class="cm-s-joint"/&gt;&lt;line x1="380" y1="24" x2="380" y2="160" class="cm-s-joint"/&gt;' + T(374, 40, 'corner', 'cm-t-m', 'end'); cy = 150 - r - 1; cx2 = 380 - r - 1; cx1 = cx2 - s * sc; }
  if (s &gt; 0) b += '&lt;line x1="' + cx1 + '" y1="' + cy + '" x2="' + cx2 + '" y2="' + cy + '" class="cm-s-line" stroke-dasharray="2 3"/&gt;';
  if (s &gt; 0) b += '&lt;circle cx="' + cx1 + '" cy="' + cy + '" r="' + r + '" class="cm-s-wheel"/&gt;';
  b += '&lt;circle cx="' + cx2 + '" cy="' + cy + '" r="' + r + '" class="cm-s-wheel"/&gt;';
  var cc = (s &gt; 0 &amp;&amp; L.loc !== 'corner') ? cx1 : cx2;
  b += '&lt;circle cx="' + cc + '" cy="' + cy + '" r="' + (r + 6) + '" class="cm-s-brand" stroke-dasharray="3 2"/&gt;' + T(cc, cy - r - 10, 'critical wheel', 'cm-t-br');
  if (s &gt; 0) b += dimH(cx1, cx2, cy + r + 18 &gt; 150 ? cy - r - 26 : cy + r + 18, 's = ' + f(s, 0) + ' mm');
  b += T(30, 40, 'contact radius a = ' + f(a, 0) + ' mm (A = P / pressure)', 'cm-t-m', 'start');
  // elevation
  b += T(12, 182, 'SECTION', 'cm-t-b', 'start');
  var y0 = 210, t = 16, xs1 = s &gt; 0 ? 210 - Math.min(s * sc, 200) / 2 : 210, xs2 = s &gt; 0 ? 210 + Math.min(s * sc, 200) / 2 : 210;
  b += sectionSlab(D, 20, 400, y0, t);
  b += arrow(D, xs1, 178, xs1, y0 - 2) + T(xs1 - 6, 190, 'P = ' + f(P, 0) + ' kN', 'cm-t-r', 'end');
  if (s &gt; 0) b += arrow(D, xs2, 178, xs2, y0 - 2) + T(xs2 + 6, 190, 'P', 'cm-t-r', 'start');
  b += T(30, y0 + t - 4, 'h = ' + f(h, 0) + ' mm', 'cm-t-s', 'start');
  b += T(390, 262, 'k = ' + f(+S.soil.k, 0) + ' MN/m³ (Winkler springs)', 'cm-t-m', 'end');
  return svg(W, H, b, D, 'Forklift wheel load diagram');
}
function diagPost(L, at, h) {
  var D = defs(), W = 420, H = 280, b = '';
  var sx = +L.sx || 1000, sy = +L.sy || 2700, bx = +L.bx || 100, by = +L.by || 100;
  var sc = Math.min(200 / sy, 80 / sx);
  b += T(12, 16, 'PLAN · posts on a grid x × y', 'cm-t-b', 'start');
  var ox = 110, oy = 56, pts = [[0, 0], [sy, 0], [0, sx], [sy, sx]];
  b += '&lt;rect x="20" y="24" width="380" height="140" class="cm-s-bg"/&gt;';
  var heff = Math.max(h - 50, 0);
  pts.forEach(function (p, i) {
    var x = ox + p[0] * sc, y = oy + p[1] * sc, pw = Math.max(8, bx * sc), ph = Math.max(8, by * sc);
    if (i === 0) { var cw = pw + Math.max(10, heff * sc), ch = ph + Math.max(10, heff * sc); b += '&lt;rect x="' + (x - cw / 2) + '" y="' + (y - ch / 2) + '" width="' + cw + '" height="' + ch + '" class="cm-s-red" stroke-dasharray="3 2"/&gt;'; }
    b += '&lt;rect x="' + (x - pw / 2) + '" y="' + (y - ph / 2) + '" width="' + pw + '" height="' + ph + '" class="cm-s-plate"/&gt;';
  });
  b += dimH(ox, ox + sy * sc, oy + sx * sc + 26, 'y = ' + f(sy, 0) + ' mm');
  b += dimV(ox - 30, oy, oy + sx * sc, 'x = ' + f(sx, 0), 'l').replace(/text-anchor="end"/, 'text-anchor="end"');
  b += T(ox + 22, oy - 18, 'critical post · punching perimeter at h/2', 'cm-t-r', 'start');
  b += T(ox + sy * sc + 8, oy + sx * sc / 2 + 3, 'plate ' + f(bx, 0) + '×' + f(by, 0), 'cm-t-m', 'start');
  // elevation
  b += T(12, 186, 'SECTION · upright on base plate', 'cm-t-b', 'start');
  var y0 = 232, t = 18, xc = 210;
  b += sectionSlab(D, 20, 400, y0, t);
  b += '&lt;rect x="' + (xc - 6) + '" y="180" width="12" height="' + (y0 - 184) + '" class="cm-s-steel" opacity=".8"/&gt;';
  b += '&lt;rect x="' + (xc - 20) + '" y="' + (y0 - 4) + '" width="40" height="4" class="cm-s-steel"/&gt;';
  b += '&lt;line x1="' + (xc - 20) + '" y1="' + y0 + '" x2="' + (xc - 20 - t) + '" y2="' + (y0 + t) + '" class="cm-s-red" stroke-dasharray="3 2"/&gt;&lt;line x1="' + (xc + 20) + '" y1="' + y0 + '" x2="' + (xc + 20 + t) + '" y2="' + (y0 + t) + '" class="cm-s-red" stroke-dasharray="3 2"/&gt;';
  b += arrow(D, xc + 34, 180, xc + 34, y0 - 8) + T(xc + 40, 196, 'P = ' + f(+L.P, 0) + ' kN', 'cm-t-r', 'start');
  b += T(xc - 46, y0 + 12, 'shear cone', 'cm-t-m', 'end');
  return svg(W, H, b, D, 'Rack post load diagram');
}
function diagUniform(L, at) {
  var D = defs(), W = 420, H = 230, b = '';
  var crit = at &amp;&amp; at.u ? at.u.critAisle / 1000 : 0, aisle = String(L.variable) !== 'false' ? crit : +L.aisle;
  b += T(12, 16, 'SECTION · storage on both sides of an aisle', 'cm-t-b', 'start');
  var y0 = 130, t = 16;
  b += sectionSlab(D, 20, 400, y0, t);
  b += '&lt;rect x="24" y="64" width="122" height="' + (y0 - 66) + '" class="cm-s-fill"/&gt;&lt;rect x="274" y="64" width="122" height="' + (y0 - 66) + '" class="cm-s-fill"/&gt;';
  for (var x = 34; x &lt;= 140; x += 18) b += arrow(D, x, 40, x, 62);
  for (var x2 = 284; x2 &lt;= 390; x2 += 18) b += arrow(D, x2, 40, x2, 62);
  b += T(85, 34, 'w = ' + f(+L.w, 0) + ' kPa', 'cm-t-r') + T(335, 34, 'w', 'cm-t-r');
  b += dimH(146, 274, 100, 'aisle = ' + f(aisle, 2) + ' m', 'cm-t-br');
  b += '&lt;path d="M204,' + y0 + ' l6,9 l6,-9" class="cm-s-red"/&gt;' + T(210, y0 - 6, 'top tension / crack line', 'cm-t-r');
  b += '&lt;path d="M20,' + (y0 + t + 7) + ' C80,' + (y0 + t + 12) + ' 140,' + (y0 + t + 12) + ' 170,' + (y0 + t + 6) + ' S 250,' + (y0 + t - 2) + ' 250,' + (y0 + t + 6) + ' S 340,' + (y0 + t + 12) + ' 400,' + (y0 + t + 7) + '" class="cm-s-brand" stroke-dasharray="4 3"/&gt;';
  b += T(210, 222, String(L.variable) !== 'false' ? 'variable layout: critical aisle π/(2λ) = 2.209ℓ' : 'fixed layout: actual aisle width', 'cm-t-m');
  return svg(W, H, b, D, 'Uniform load diagram');
}
function diagLine(L) {
  var D = defs(), W = 420, H = 210, b = '';
  b += T(12, 16, 'SECTION · line load (interior)', 'cm-t-b', 'start');
  var y0 = 120, t = 16;
  b += sectionSlab(D, 20, 400, y0, t);
  b += '&lt;rect x="196" y="46" width="28" height="' + (y0 - 46) + '" class="cm-s-fill"/&gt;';
  b += arrow(D, 210, 24, 210, 44) + T(232, 36, 'w = ' + f(+L.w, 0) + ' kN/m', 'cm-t-r', 'start');
  b += '&lt;path d="M20,' + (y0 + t + 4) + ' C120,' + (y0 + t + 4) + ' 170,' + (y0 + t + 16) + ' 210,' + (y0 + t + 16) + ' S 300,' + (y0 + t + 4) + ' 400,' + (y0 + t + 4) + '" class="cm-s-brand" stroke-dasharray="4 3"/&gt;';
  b += T(210, 200, 'max bottom tension under the load: M = w / 4λ', 'cm-t-m');
  return svg(W, H, b, D, 'Line load diagram');
}
function diagFor(L, at, h) { return L.type === 'wheel' ? diagWheel(L, at, h) : L.type === 'post' ? diagPost(L, at, h) : L.type === 'uniform' ? diagUniform(L, at) : diagLine(L); }

// joint details
function detJ1(R) {
  var D = defs(), b = '', h = R.J.h, cut = R.J.cut, t = 90, y0 = 50, sc = t / h;
  b += T(12, 18, 'J1 · SAWCUT CONTRACTION JOINT', 'cm-t-b', 'start');
  b += '&lt;rect x="20" y="' + y0 + '" width="380" height="' + t + '" class="cm-s-slab"/&gt;&lt;rect x="20" y="' + (y0 + t) + '" width="380" height="26" fill="url(#' + D.h + ')"/&gt;';
  var cd = Math.max(8, cut * sc);
  b += '&lt;rect x="207" y="' + y0 + '" width="6" height="' + cd + '" class="cm-s-bg"/&gt;&lt;rect x="207" y="' + y0 + '" width="6" height="6" class="cm-s-fill"/&gt;';
  b += '&lt;path d="M210,' + (y0 + cd) + ' l-3,10 l5,10 l-4,12 l4,12 l-3,' + (t - cd - 44) + '" class="cm-s-red"/&gt;';
  if (S.joints.transfer !== 'agg') { var dy = y0 + t / 2, dl = 130; b += '&lt;rect x="' + (210 - dl / 2) + '" y="' + (dy - 3) + '" width="' + dl + '" height="6" class="cm-s-steel"/&gt;&lt;rect x="210" y="' + (dy - 4) + '" width="' + dl / 2 + '" height="8" class="cm-s-red" stroke-dasharray="2 2"/&gt;' + T(210, dy + 22, S.joints.transfer === 'plate' ? 'plate dowel, mid-depth' : 'smooth dowel at mid-depth', 'cm-t-s'); }
  b += dimV(410, y0, y0 + t, 'h = ' + f(h, 0), 'l'); b += dimV(196, y0, y0 + cd, 'cut ' + f(cut, 0), 'l');
  b += T(300, y0 - 8, 'joint sealant / filler', 'cm-t-m') + T(60, y0 + t + 46, 'base', 'cm-t-m');
  b += T(110, y0 + t + 46, 'induced crack forms below the cut', 'cm-t-r', 'start');
  return svg(420, 200, b, D, 'Sawcut contraction joint detail');
}
function detJ2(R) {
  var D = defs(), b = '', h = R.J.h, t = 90, y0 = 50;
  b += T(12, 18, 'J2 · DOWELED CONSTRUCTION JOINT', 'cm-t-b', 'start');
  b += '&lt;rect x="20" y="' + y0 + '" width="188" height="' + t + '" class="cm-s-slab"/&gt;&lt;rect x="212" y="' + y0 + '" width="188" height="' + t + '" class="cm-s-slab"/&gt;&lt;rect x="20" y="' + (y0 + t) + '" width="380" height="26" fill="url(#' + D.h + ')"/&gt;';
  b += '&lt;line x1="210" y1="' + y0 + '" x2="210" y2="' + (y0 + t) + '" class="cm-s-line"/&gt;';
  var dy = y0 + t / 2;
  if (S.joints.transfer !== 'agg') { b += '&lt;rect x="140" y="' + (dy - 3) + '" width="140" height="6" class="cm-s-steel"/&gt;&lt;rect x="210" y="' + (dy - 5) + '" width="74" height="10" class="cm-s-red" stroke-dasharray="2 2"/&gt;' + T(246, dy + 22, 'sleeve / bond breaker side', 'cm-t-r'); }
  b += T(114, y0 - 8, 'POUR 1', 'cm-t-m') + T(306, y0 - 8, 'POUR 2', 'cm-t-m');
  var dw = R.J.dw; b += T(210, 182, dw.note ? 'h = ' + f(h, 0) + ' mm: ' + dw.note.replace(/[^\x00-\x7F]+/g, '').trim() : 'Table 6.1: ' + (dw.roundEn || '') , 'cm-t-s');
  b += dimV(410, y0, y0 + t, 'h', 'l');
  return svg(420, 200, b, D, 'Construction joint detail');
}
function detJ3() {
  var D = defs(), b = '';
  b += T(12, 18, 'J3 · ISOLATION JOINT AT COLUMN (plan)', 'cm-t-b', 'start');
  b += '&lt;rect x="20" y="28" width="380" height="160" class="cm-s-slab" opacity=".5"/&gt;';
  var cx = 210, cy = 108;
  b += '&lt;line x1="20" y1="' + cy + '" x2="400" y2="' + cy + '" class="cm-s-joint"/&gt;&lt;line x1="' + cx + '" y1="28" x2="' + cx + '" y2="188" class="cm-s-joint"/&gt;';
  b += '&lt;rect x="' + (cx - 46) + '" y="' + (cy - 46) + '" width="92" height="92" transform="rotate(45 ' + cx + ' ' + cy + ')" class="cm-s-bg"/&gt;';
  b += '&lt;rect x="' + (cx - 46) + '" y="' + (cy - 46) + '" width="92" height="92" transform="rotate(45 ' + cx + ' ' + cy + ')" fill="none" stroke-width="5" class="cm-s-fill" style="stroke:var(--cm-warn);fill:none"/&gt;';
  b += '&lt;rect x="' + (cx - 16) + '" y="' + (cy - 16) + '" width="32" height="32" class="cm-s-wheel"/&gt;';
  b += T(cx, cy + 4, 'COL', 'cm-t-s', 'middle', ' style="fill:#fff"');
  b += T(300, 48, 'diamond boxout, preformed filler full depth', 'cm-t-m') + T(96, 182, 'sawcuts meet the diamond corners', 'cm-t-m');
  return svg(420, 200, b, D, 'Isolation joint at column');
}
function detJ4(R) {
  var D = defs(), b = '', dw = R.J.dw, sp = dw.sRound || 300;
  b += T(12, 18, 'J4 · DOWEL LAYOUT ALONG A JOINT (plan)', 'cm-t-b', 'start');
  b += '&lt;rect x="20" y="30" width="380" height="140" class="cm-s-slab" opacity=".5"/&gt;';
  b += '&lt;line x1="20" y1="100" x2="400" y2="100" class="cm-s-joint"/&gt;&lt;line x1="80" y1="30" x2="80" y2="170" class="cm-s-joint"/&gt;';
  var sc = 0.11, x0 = 80 + 300 * sc;
  for (var x = x0; x &lt; 395; x += sp * sc) b += '&lt;rect x="' + (x - 2) + '" y="76" width="4" height="48" class="cm-s-steel"/&gt;';
  b += dimH(80, x0, 140, '≥ 300 mm', 'cm-t-r') + dimH(x0, x0 + sp * sc, 60, f(sp, 0) + ' mm c/c');
  b += T(240, 186, 'no round dowels within 300 mm (plate: 150 mm) of a joint intersection', 'cm-t-m');
  return svg(420, 200, b, D, 'Dowel layout plan');
}
function diagLayout(Ly) {
  var D = defs();
  if (!Ly) return '&lt;p class="cm-note" style="padding:12px"&gt;Enter valid dimensions.&lt;/p&gt;';
  var W = 760, pad = 34, sc = Math.min((W - 2 * pad) / Ly.X, 440 / Ly.Y), H = Ly.Y * sc + 2 * pad;
  var xs = function (v) { return pad + v * sc; }, ys = function (v) { return pad + v * sc; }, b = '';
  b += '&lt;rect x="' + xs(0) + '" y="' + ys(0) + '" width="' + Ly.X * sc + '" height="' + Ly.Y * sc + '" class="cm-s-slab" style="opacity:.45"/&gt;';
  var i, j;
  for (i = 0; i &lt; Ly.nbx; i++) for (j = 1; j &lt; Ly.nx; j++) { var x = i * Ly.bx + j * Ly.px; if (x &lt; Ly.X) b += '&lt;line x1="' + xs(x) + '" y1="' + ys(0) + '" x2="' + xs(x) + '" y2="' + ys(Ly.Y) + '" class="cm-s-joint" style="stroke:var(--cm-steel)"/&gt;'; }
  for (i = 0; i &lt; Ly.nby; i++) for (j = 1; j &lt; Ly.ny; j++) { var y = i * Ly.by + j * Ly.py; if (y &lt; Ly.Y) b += '&lt;line x1="' + xs(0) + '" y1="' + ys(y) + '" x2="' + xs(Ly.X) + '" y2="' + ys(y) + '" class="cm-s-joint" style="stroke:var(--cm-steel)"/&gt;'; }
  for (i = 1; i &lt; Ly.nbx; i++) { var xx = i * Ly.bx, cj = i % Ly.strip === 0; b += '&lt;line x1="' + xs(xx) + '" y1="' + ys(0) + '" x2="' + xs(xx) + '" y2="' + ys(Ly.Y) + '" ' + (cj ? 'class="cm-s-line" style="stroke-width:2.6"' : 'class="cm-s-joint" style="stroke:var(--cm-steel)"') + '/&gt;'; }
  for (i = 1; i &lt; Ly.nby; i++) { var yy = i * Ly.by; b += '&lt;line x1="' + xs(0) + '" y1="' + ys(yy) + '" x2="' + xs(Ly.X) + '" y2="' + ys(yy) + '" class="cm-s-joint" style="stroke:var(--cm-steel)"/&gt;'; }
  b += '&lt;rect x="' + xs(0) + '" y="' + ys(0) + '" width="' + Ly.X * sc + '" height="' + Ly.Y * sc + '" fill="none" class="cm-s-line" style="stroke-width:2"/&gt;';
  var d = Math.max(5, 0.55 * sc);
  for (i = 0; i &lt;= Ly.nbx; i++) for (j = 0; j &lt;= Ly.nby; j++) {
    var cx = xs(Math.min(i * Ly.bx, Ly.X)), cy = ys(Math.min(j * Ly.by, Ly.Y));
    if (i &gt; 0 &amp;&amp; i &lt; Ly.nbx &amp;&amp; j &gt; 0 &amp;&amp; j &lt; Ly.nby) b += '&lt;rect x="' + (cx - d) + '" y="' + (cy - d) + '" width="' + 2 * d + '" height="' + 2 * d + '" transform="rotate(45 ' + cx + ' ' + cy + ')" fill="none" style="stroke:var(--cm-warn);stroke-width:2"/&gt;';
    b += '&lt;rect x="' + (cx - 3.5) + '" y="' + (cy - 3.5) + '" width="7" height="7" class="cm-s-wheel"/&gt;';
  }
  // J4: dowels along construction joints (and every joint crossed by wheel traffic)
  if (S.joints.transfer !== 'agg') {
    var dsp = 1.2;
    for (i = 1; i &lt; Ly.nbx; i++) { if (i % Ly.strip) continue; var xj = xs(i * Ly.bx);
      for (var yv = 0.6; yv &lt; Ly.Y - 0.3; yv += dsp) { var yb = Math.floor(yv / Ly.by), yr = yv - yb * Ly.by; if (yr &lt; 0.3 || Ly.by - yr &lt; 0.3) continue; b += '&lt;line x1="' + (xj - 4) + '" y1="' + ys(yv) + '" x2="' + (xj + 4) + '" y2="' + ys(yv) + '" class="cm-s-red" style="stroke-width:1.4"/&gt;'; } }
    if (Ly.nbx &gt; 1) { var xj4 = xs(Ly.bx * Ly.strip), yj4 = ys(Ly.by * 0.5); b += '&lt;line x1="' + (xj4 + 6) + '" y1="' + yj4 + '" x2="' + (xj4 + 26) + '" y2="' + (yj4 - 14) + '" class="cm-s-red"/&gt;' + T(xj4 + 28, yj4 - 16, 'J4 dowels', 'cm-t-r', 'start'); }
  }
  // tags
  b += T(xs(Ly.px / 2), ys(Ly.py) + 4, 'J1', 'cm-t-br');
  if (Ly.nbx &gt; 1) b += T(xs(Ly.bx * Ly.strip) + 10, ys(Ly.by * 1.5), 'J2', 'cm-t-b', 'start');
  if (Ly.nbx &gt; 1 &amp;&amp; Ly.nby &gt; 1) b += T(xs(Ly.bx) + d + 12, ys(Ly.by) - d, 'J3', 'cm-t-b', 'start');
  b += T(xs(Ly.X / 2), ys(Ly.Y) + 22, 'X = ' + f(Ly.X, 1) + ' m', 'cm-t-m') + T(xs(0) - 10, ys(Ly.Y / 2), 'Y = ' + f(Ly.Y, 1) + ' m', 'cm-t-m', 'middle', ' transform="rotate(-90 ' + (xs(0) - 10) + ' ' + ys(Ly.Y / 2) + ')"');
  return svg(W, H, b, D, 'Joint layout plan');
}

// ---------------- rendering ----------------
function pill(r) { return r &lt;= 0.9 ? '&lt;i class="cm-pill cm-ok"&gt;OK ' + f(r, 2) + '&lt;/i&gt;' : r &lt;= 1 ? '&lt;i class="cm-pill cm-warn"&gt;LIMIT ' + f(r, 2) + '&lt;/i&gt;' : '&lt;i class="cm-pill cm-bad"&gt;FAIL ' + f(r, 2) + '&lt;/i&gt;'; }
function barColor(r) { return r &lt;= 0.9 ? 'var(--cm-ok)' : r &lt;= 1 ? 'var(--cm-warn)' : 'var(--cm-bad)'; }
function hTxt(h) { return h === Infinity ? '&gt; 800' : String(h); }
var TN = { wheel: 'Wheels', post: 'Rack posts', uniform: 'Uniform', line: 'Line load' };

function renderSummary(R) {
  var worst = R.rows.reduce(function (m, r) { return Math.max(m, r.at.ratio); }, 0);
  $('#cm-sum').innerHTML =
    '&lt;div&gt;&lt;div class="cm-l"&gt;Required thickness&lt;/div&gt;&lt;div class="cm-v cm-big"&gt;' + hTxt(R.hGov) + ' mm&lt;/div&gt;&lt;div class="cm-l" style="text-transform:none;letter-spacing:0"&gt;from the loads, independent of design h&lt;/div&gt;&lt;/div&gt;' +
    '&lt;div&gt;&lt;div class="cm-l"&gt;Design thickness h&lt;/div&gt;&lt;div class="cm-v"&gt;' + f(R.h, 0) + ' mm ' + (R.ok ? '&lt;i class="cm-pill cm-ok"&gt;≥ required&lt;/i&gt;' : '&lt;i class="cm-pill cm-bad"&gt;too thin&lt;/i&gt;') + '&lt;/div&gt;' + (R.ok || R.hGov === Infinity ? '' : '&lt;button type="button" class="cm-btn" data-usereq="1" style="margin-top:4px"&gt;Use ' + R.hGov + ' mm&lt;/button&gt;') + '&lt;/div&gt;' +
    '&lt;div&gt;&lt;div class="cm-l"&gt;Governing case&lt;/div&gt;&lt;div class="cm-v" style="font-size:13px"&gt;' + (R.gov ? esc(R.gov.L.name) : '—') + '&lt;/div&gt;&lt;/div&gt;' +
    '&lt;div&gt;&lt;div class="cm-l"&gt;Worst utilisation at h&lt;/div&gt;&lt;div class="cm-v"&gt;' + (R.rows.length ? pill(worst) : '—') + '&lt;/div&gt;&lt;/div&gt;';
  $('#cm-warn').innerHTML = R.warn.length ? '&lt;b&gt;Check:&lt;/b&gt;&lt;ul&gt;' + R.warn.map(function (w) { return '&lt;li&gt;' + w + '&lt;/li&gt;'; }).join('') + '&lt;/ul&gt;' : '';
  $('#cm-warn').hidden = !R.warn.length;
}
function renderMatOut(R) {
  $('#cm-o-conc').innerHTML = outHTML('MOR used', f(R.M.MOR, 2), 'MPa', 'mor') + outHTML('E used', f(R.M.E, 0), 'MPa', 'E') + outHTML('ℓ at design h', f(SOG.radiusRelStiffness(R.M.E, R.h, R.M.nu, R.M.k), 0), 'mm', 'oL');
}
function loadCardHTML(L) {
  var fields = LF[L.type].filter(function (d) { return !d.show || d.show(L); }).map(function (d) {
    return fieldHTML(d, L[d.k], 'data-l="' + L.id + '" data-k="' + d.k + '" aria-label="' + esc(d.l) + '" id="cm-l' + L.id + '-' + d.k + '"');
  }).join('');
  return '&lt;div class="cm-card cm-load" data-id="' + L.id + '"&gt;&lt;h3&gt;&lt;span class="cm-tag"&gt;' + TN[L.type] + '&lt;/span&gt;&lt;input class="cm-name" data-l="' + L.id + '" data-k="name" value="' + esc(L.name) + '" aria-label="Load case name" id="cm-l' + L.id + '-name"&gt;&lt;span class="cm-st"&gt;&lt;/span&gt;&lt;button type="button" class="cm-btn cm-ghost" data-del="' + L.id + '" style="color:var(--cm-muted)"&gt;Delete&lt;/button&gt;&lt;/h3&gt;' +
    '&lt;div class="cm-in"&gt;&lt;div class="cm-lgrid"&gt;&lt;div&gt;&lt;div class="cm-sub" style="margin-top:0"&gt;Inputs&lt;/div&gt;&lt;div class="cm-grid"&gt;' + fields + '&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="cm-sub" style="margin-top:0"&gt;Load diagram&lt;/div&gt;&lt;div class="cm-diag"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;' +
    '&lt;div class="cm-sub"&gt;Results&lt;/div&gt;&lt;div class="cm-res"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';
}
function renderLoadsStructure() {
  $('#cm-loads').innerHTML = S.loads.map(loadCardHTML).join('') || '&lt;p class="cm-note"&gt;No load cases. Add one with the buttons above.&lt;/p&gt;';
}
function loadResultHTML(row) {
  var L = row.L, at = row.at;
  var chk = at.checks.map(function (c) {
    var r = c.d / c.c;
    return '&lt;div class="cm-chk"&gt;&lt;div class="cm-ct"&gt;&lt;span&gt;' + esc(c.n) + '&lt;/span&gt;' + iBtn(c.h) + '&lt;/div&gt;&lt;div class="cm-nums"&gt;' + f(c.d, 2) + ' / ' + f(c.c, 2) + ' ' + c.u + '&lt;/div&gt;&lt;div class="cm-bar"&gt;&lt;i style="width:' + Math.min(100, r * 100) + '%;background:' + barColor(r) + '"&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;' + pill(r) + '&lt;/div&gt;&lt;div class="cm-pop" hidden&gt;&lt;/div&gt;&lt;/div&gt;';
  }).join('');
  var o = outHTML('Required h, this case', hTxt(row.hReq), 'mm', 'oHreq') + outHTML('Factor of safety', f(at.sf, 2), at.sfSrc.indexOf('Table 5.3') === 0 ? 'Table 5.3' : 'manual', 'sfMode') + outHTML('Allowable MOR/SF', f(at.fall, 2), 'MPa', 'sf');
  if (at.g) o += outHTML('ℓ', f(at.g.l, 0), 'mm', 'oL') + outHTML('Contact radius a / b', f(at.a, 0) + ' / ' + f(at.g.b, 0), 'mm', L.type === 'wheel' ? 'wPress' : 'pBx') + outHTML('σ single load', f(at.g.single, 2), 'MPa', 'oSigma') + outHTML('Δσ adjacent loads', f(at.g.add, 2), 'MPa', 'oSigma');
  if (at.u) o += outHTML('Critical aisle π/2λ', f(at.u.critAisle / 1000, 2), 'm', 'uVar') + outHTML('Allowable w at design h', f(at.wAllow, 1), 'kPa', 'uW');
  if (at.ln) o += outHTML('Allowable w at design h', f(at.wAllow, 1), 'kN/m', 'lW');
  if (at.p) o += outHTML('h_eff for shear', f(at.p.he, 0), 'mm', 'oPunch') + outHTML('Perimeter bo', f(at.p.bo, 0), 'mm', 'oPunch');
  return '&lt;div class="cm-checks"&gt;' + chk + '&lt;/div&gt;&lt;div class="cm-grid" style="margin-top:8px"&gt;' + o + '&lt;/div&gt;';
}
function renderLoadsResults(R) {
  R.rows.forEach(function (row) {
    var card = root.querySelector('.cm-load[data-id="' + row.L.id + '"]'); if (!card) return;
    card.querySelector('.cm-res').innerHTML = loadResultHTML(row);
    card.querySelector('.cm-diag').innerHTML = diagFor(row.L, row.at, R.h);
    card.querySelector('.cm-st').innerHTML = pill(row.at.ratio);
  });
}
function renderJointsOut(R) {
  var J = R.J, dw = J.dw;
  $('#cm-o-joint').innerHTML = outHTML('Recommended 24h–36h', f(J.lo, 2) + '–' + f(J.hi, 2), 'm', 'jS') + outHTML('Selected spacing', f(J.s, 2) + (J.s &gt; J.hi ? ' ⚠' : ''), 'm', 'jS') +
    outHTML('Sawcut depth', f(J.cut, 0), 'mm', 'jCut') + outHTML('Edge/corner factor', f(ltf(), 2), '×', 'jTransfer') +
    outHTML('Dowels (Table 6.1)', dw.note ? 'see note' : dw.roundEn, 'mm', 'jTransfer') + outHTML('Dowel spacing', dw.note ? '—' : dw.sRound + ' / ' + dw.sSquare + ' / ' + dw.sPlate, 'rnd/sq/plate', 'jTransfer');
  var Rf = R.R, h = '';
  if (Rf.type === 'none') { $('#cm-o-reinf').innerHTML = outHTML('Reinforcement', 'None', '', 'rType'); $('#cm-n-reinf').textContent = 'Plain slab: thickness carries the loads and closely spaced joints control shrinkage. Reinforcement would not raise the uncracked capacity (ACI 360R §8.2).'; return; }
  if (Rf.type === 'drag') h += outHTML('Slab weight W', f(Rf.W / 1000, 2), 'kN/m²', 'gamma') + outHTML('Drag force F = μWL/2', f(Rf.F / 1000, 2), 'kN/m', 'rMu');
  else h += outHTML('Minimum steel ratio', f(Rf.rho * 100, 2), '%', 'rType');
  h += outHTML('Required As (each way)', f(Rf.As, 0), 'mm²/m', 'rType') + outHTML('Provide', 'T' + Rf.b.d + ' @ ' + Rf.b.sp, 'mm', 'rType') + outHTML('Provided As', f(Rf.b.prov, 0), 'mm²/m', 'rType');
  $('#cm-o-reinf').innerHTML = h;
  $('#cm-n-reinf').textContent = Rf.type === 'shc' ? 'Place at one third of the depth from the top (ACI 223).' : 'Place in the top of the slab with ' + f(+S.reinf.cover, 0) + ' mm cover. ' + (Rf.type === 'cont' ? 'Continuous steel allows contraction joints to be omitted in that direction; expect fine, closely spaced cracks.' : 'Drag force uses the same form as ACI 360R Eq. 10-1, divided by fs.');
}
function renderCurlOut(R) {
  var C = R.C;
  $('#cm-o-curl').innerHTML = outHTML('Δt across slab', f(C.dT, 1), '°C', 'cGrad') + outHTML('Bradbury C (L/ℓ = ' + f(C.Ll, 2) + ')', f(C.C, 3), '', 'cGrad') +
    outHTML('Interior curling stress', f(C.interior, 2), 'MPa', 'cGrad', '&lt;div&gt;' + pill(C.interior / R.M.MOR) + '&lt;/div&gt;') + outHTML('Edge curling stress', f(C.edge, 2), 'MPa', 'cGrad');
}
function renderLayout(R) {
  var Ly = R.Lay;
  $('#cm-o-lay').innerHTML = Ly ? outHTML('Panel size', f(Ly.px, 2) + ' × ' + f(Ly.py, 2), 'm', 'jS') + outHTML('Aspect ratio (≤ 1.5)', f(Ly.asp, 2), '', 'jS', '&lt;div&gt;' + (Ly.asp &lt;= 1.5 ? '&lt;i class="cm-pill cm-ok"&gt;OK&lt;/i&gt;' : '&lt;i class="cm-pill cm-bad"&gt;&gt; 1.5&lt;/i&gt;') + '&lt;/div&gt;') + outHTML('Panels per bay', Ly.nx + ' × ' + Ly.ny, '', 'lBx') + outHTML('Total panels', String(Ly.panels), '', 'lX') : '';
  $('#cm-lay-svg').innerHTML = diagLayout(Ly);
  $('#cm-jd').innerHTML = jointDetailsHTML(R);
}
function jointDetailsHTML(R) {
  var J = R.J, dw = J.dw;
  var tx = {
    j1: 'Sawcut contraction joint. A saw cut ' + f(J.cut, 0) + ' mm deep (' + (S.joints.cut === 'early' ? 'early-entry, at least 25 mm' : 'conventional, at least h/4') + ') makes a weakened plane so the shrinkage crack forms under the cut. Spacing ' + f(J.s, 2) + ' m. ' + (S.joints.transfer === 'agg' ? 'Load transfer by aggregate interlock only, which becomes ineffective once the joint opens more than about 0.6 mm.' : 'Dowels at mid-depth with a bond breaker on one side let the joint open but keep both edges level under wheels.') + ' Fill or seal joints exposed to hard-wheeled traffic with semi-rigid epoxy or polyurea once shrinkage has slowed (ACI 360R §6.1.2, §6.3).',
    j2: 'Construction joint at the edge of a placement, normally on a column line or at a contraction-joint position. Use ' + (dw.note ? 'dowels designed for this thickness' : dw.roundEn + ' round dowels at ' + dw.sRound + ' mm') + ', aligned and supported so they stay parallel to the slab surface and to each other. The free-sliding side gets a sleeve or bond breaker (ACI 360R §6.1.3, Table 6.1).',
    j3: 'Isolation joint. Separates the slab from columns, walls, pits and equipment bases so the slab can move vertically and horizontally. Use preformed filler for the full depth, or slightly below the slab. A diamond or circular boxout lets contraction sawcuts meet its corners and avoids re-entrant cracks (ACI 360R §6.1.1, Fig. 6.1).',
    j4: 'Dowel layout. Use dowel baskets in sawcut joints. Keep round dowels at least 300 mm from joint intersections and plate dowels at least 150 mm, because the largest shrinkage movement happens at the corners (ACI 360R §6.2).'
  };
  function card(t, svgS, p) { return '&lt;div class="cm-card"&gt;&lt;h3&gt;' + t + '&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-diag"&gt;' + svgS + '&lt;/div&gt;&lt;p class="cm-note" style="margin-top:6px"&gt;' + p + '&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;'; }
  return card('J1 · Contraction joint', detJ1(R), tx.j1) + card('J2 · Construction joint', detJ2(R), tx.j2) + card('J3 · Isolation joint', detJ3(R), tx.j3) + card('J4 · Dowel placement', detJ4(R), tx.j4);
}

// ---------------- report ----------------
function eqText(row, R) {
  var L = row.L, at = row.at, M = R.M, h = R.h, e = '';
  if (at.g) {
    e = 'ℓ = [E·h³ / 12(1−ν²)k]^0.25 = [' + f(M.E, 0) + '·' + h + '³ / 12·' + f(1 - M.nu * M.nu, 4) + '·' + f(M.k, 4) + ']^0.25 = ' + f(at.g.l, 1) + ' mm   (Eq. 7-3)\n' +
      'a = √(A/π) = √(' + f(at.A, 0) + '/π) = ' + f(at.a, 1) + ' mm ;  b = ' + (at.a &lt; 1.724 * h ? '√(1.6a²+h²) − 0.675h' : 'a') + ' = ' + f(at.g.b, 1) + ' mm\n' +
      'σi = 0.316·P/h²·[4·log(ℓ/b) + 1.069] = 0.316·' + f(at.P, 0) + '/' + h + '²·[4·log(' + f(at.g.l, 1) + '/' + f(at.g.b, 1) + ') + 1.069] = ' + f(at.g.si, 3) + ' MPa   (Eq. 7-4)\n';
    if (L.loc === 'edge') e += 'σe = 0.572·P/h²·[4·log(ℓ/b) + 0.359] = ' + f(at.g.single, 3) + ' MPa   (Eq. 7-5)\n';
    if (L.loc === 'corner') e += 'σc = 3P/h²·[1 − (a√2/ℓ)^0.6] = ' + f(at.g.single, 3) + ' MPa   (Eq. 7-2)\n';
    e += 'Δσ adjacent loads (plate on Winkler foundation, Kelvin functions) = ' + f(at.g.add, 3) + ' MPa\n';
    e += 'σ = ' + CAL.toFixed(2) + ' × ' + (L.loc === 'interior' ? '(σi + Δσ)' : L.loc === 'edge' ? 'σe·(1 + Δσ/σi)·' + f(ltf(), 2) : 'σc·' + f(ltf(), 2)) + ' = ' + f(at.sigma, 3) + ' MPa  ≤  MOR/SF = ' + f(M.MOR, 2) + '/' + f(at.sf, 2) + ' = ' + f(at.fall, 3) + ' MPa';
    if (at.p) e += '\nh_eff = h − 50 = ' + f(at.p.he, 0) + ' mm ;  bo = ' + f(at.p.bo, 0) + ' mm ;  β = ' + f(at.p.beta, 2) + ' ;  q0 = P/(8ℓ²) = ' + f(at.p.q0, 4) + ' MPa\n' +
      'Vu = LF·(P − q0·A_crit) = ' + f(at.p.Vu / 1000, 1) + ' kN  ≤  φVn = 0.6·' + f(at.p.coef, 3) + '·√f\'c·bo·h_eff = ' + f(at.p.phiVn / 1000, 1) + ' kN   (ACI 318 Table 14.5.5.1)\n' +
      'Pu = ' + f(at.p.Pu / 1000, 1) + ' kN  ≤  φBn = 0.6·0.85·f\'c·A1·2 = ' + f(at.p.phiBn / 1000, 1) + ' kN   (ACI 318 §14.5.6)';
  } else if (at.u) {
    e = 'λ = [k / 4EI]^0.25, I = h³/12  →  λ = ' + f(at.u.lam * 1000, 4) + ' 1/m ;  critical aisle = π/(2λ) = ' + f(at.u.critAisle / 1000, 2) + ' m\n' +
      'Mc = w/(2λ²)·e^(−λa)·sin(λa) = ' + f(at.u.M / 1000, 3) + ' kN·m/m   (Eq. 7-6, ' + (String(L.variable) !== 'false' ? 'a = critical half aisle' : 'a = ' + f(+L.aisle / 2, 2) + ' m') + ')\n' +
      'σ = 6Mc/h² = ' + f(at.sigma, 3) + ' MPa  ≤  ' + f(at.fall, 3) + ' MPa ;  w_allow = ' + f(at.wAllow, 1) + ' kPa';
  } else if (at.ln) {
    e = 'λ = [k / 4EI]^0.25 = ' + f(at.ln.lam * 1000, 4) + ' 1/m ;  M = w/(4λ) = ' + f(at.ln.M / 1000, 3) + ' kN·m/m   (Hetenyi)\n' +
      'σ = 6M/h² = ' + f(at.sigma, 3) + ' MPa  ≤  ' + f(at.fall, 3) + ' MPa ;  w_allow = ' + f(at.wAllow, 1) + ' kN/m';
  }
  return e;
}
var DISCLAIMER = 'Disclaimer: This calculation was produced with the civilmaker SOG Designer, a design aid based on ACI 360R-10 and ACI 318-19. It is provided as is, without warranty of any kind. The user is responsible for verifying all inputs, assumptions and results, and for compliance with the governing codes and project specifications. The results must be reviewed and approved by a qualified, licensed structural engineer before use. civilmaker and its authors accept no liability for any loss or damage arising from the use of this tool or its results.';
var DISCLAIMER_AR = 'إخلاء مسؤولية: هذه المذكرة ناتجة عن أداة civilmaker لتصميم البلاطات الأرضية، وهي أداة مساعدة مبنية على ACI 360R-10 وACI 318-19 وتُقدم كما هي دون أي ضمان. المستخدم مسؤول عن التحقق من المدخلات والفرضيات والنتائج ومطابقتها للكود ومواصفات المشروع، ويجب مراجعتها واعتمادها من مهندس إنشائي مختص قبل الاستخدام. لا يتحمل civilmaker أو مؤلفوه أي مسؤولية عن أي خسارة أو ضرر ينتج عن استخدام الأداة أو نتائجها.';
function reportBody(R) {
  var M = R.M, J = R.J, Rf = R.R, dw = J.dw;
  var rows = R.rows.map(function (row, i) {
    return '&lt;div class="rp-case"&gt;&lt;h3&gt;' + (i + 1) + '. ' + esc(row.L.name) + ' &lt;span class="muted"&gt;(' + TN[row.L.type] + (row.L.loc ? ', ' + row.L.loc : '') + ')&lt;/span&gt;&lt;/h3&gt;' +
      '&lt;div class="rp-fig"&gt;' + diagFor(row.L, row.at, R.h) + '&lt;/div&gt;&lt;pre class="cm-eq"&gt;' + esc(eqText(row, R)) + '&lt;/pre&gt;' +
      '&lt;p&gt;Utilisation at h = ' + f(R.h, 0) + ' mm: &lt;b&gt;' + f(row.at.ratio, 2) + '&lt;/b&gt; · SF = ' + f(row.at.sf, 2) + ' (' + esc(row.at.sfSrc) + ') · required thickness for this case: &lt;b&gt;' + hTxt(row.hReq) + ' mm&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;';
  }).join('');
  var reinfTxt = Rf.type === 'none' ? 'None (plain slab)' : 'As = ' + f(Rf.As, 0) + ' mm²/m each way → T' + Rf.b.d + ' @ ' + Rf.b.sp + ' mm (' + f(Rf.b.prov, 0) + ' mm²/m), ' + (Rf.type === 'shc' ? 'at h/3 from top' : 'top, cover ' + f(+S.reinf.cover, 0) + ' mm');
  return '&lt;div class="rp-top"&gt;&lt;div&gt;&lt;div class="muted" style="font-size:11px;letter-spacing:.06em;text-transform:uppercase"&gt;Calculation report · slab-on-ground&lt;/div&gt;&lt;div style="font-size:20px;font-weight:700"&gt;Industrial Slab-on-Ground Design&lt;/div&gt;&lt;div class="muted"&gt;ACI 360R-10 · ACI 318-19&lt;/div&gt;&lt;/div&gt;&lt;div class="muted" style="text-align:right;font-size:12px"&gt;&lt;a href="' + esc(TOOL_URL) + '" style="color:#0088ff;font-weight:700;text-decoration:none"&gt;' + esc(SITE) + '&lt;/a&gt;&lt;br&gt;Date: ' + new Date().toISOString().slice(0, 10) + '&lt;/div&gt;&lt;/div&gt;' +
    '&lt;h2&gt;1. Summary&lt;/h2&gt;&lt;table class="cm-t"&gt;&lt;tbody&gt;' +
    '&lt;tr&gt;&lt;td&gt;Required thickness (all load cases)&lt;/td&gt;&lt;td class="n"&gt;&lt;b&gt;' + hTxt(R.hGov) + ' mm&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design thickness&lt;/td&gt;&lt;td class="n"&gt;&lt;b&gt;' + f(R.h, 0) + ' mm&lt;/b&gt; ' + (R.ok ? '(adequate)' : '(INADEQUATE: less than required)') + '&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;Governing case&lt;/td&gt;&lt;td&gt;' + (R.gov ? esc(R.gov.L.name) : '—') + '&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;Contraction joint spacing&lt;/td&gt;&lt;td class="n"&gt;' + f(J.s, 2) + ' m (24h–36h = ' + f(J.lo, 2) + '–' + f(J.hi, 2) + ' m)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sawcut depth&lt;/td&gt;&lt;td class="n"&gt;' + f(J.cut, 0) + ' mm&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;Dowels&lt;/td&gt;&lt;td&gt;' + (dw.note ? 'outside Table 6.1, design dowels' : dw.roundEn + ' round @ ' + dw.sRound + ' mm') + '&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reinforcement&lt;/td&gt;&lt;td&gt;' + reinfTxt + '&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;' +
    '&lt;h2&gt;2. Inputs&lt;/h2&gt;&lt;table class="cm-t"&gt;&lt;tbody&gt;' +
    '&lt;tr&gt;&lt;td&gt;f\'c&lt;/td&gt;&lt;td class="n"&gt;' + f(M.fc, 1) + ' MPa&lt;/td&gt;&lt;td&gt;MOR&lt;/td&gt;&lt;td class="n"&gt;' + f(M.MOR, 2) + ' MPa ' + (S.conc.morMode === 'auto' ? '(0.62√f\'c)' : '(tested)') + '&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;E&lt;/td&gt;&lt;td class="n"&gt;' + f(M.E, 0) + ' MPa&lt;/td&gt;&lt;td&gt;ν&lt;/td&gt;&lt;td class="n"&gt;' + f(M.nu, 2) + '&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;k&lt;/td&gt;&lt;td class="n"&gt;' + f(M.kMN, 1) + ' MN/m³&lt;/td&gt;&lt;td&gt;Design h&lt;/td&gt;&lt;td class="n"&gt;' + f(R.h, 0) + ' mm&lt;/td&gt;&lt;/tr&gt;' +
    '&lt;tr&gt;&lt;td&gt;Joint load transfer&lt;/td&gt;&lt;td&gt;' + esc(S.joints.transfer) + ' (factor ' + f(ltf(), 2) + ')&lt;/td&gt;&lt;td&gt;Minimum h&lt;/td&gt;&lt;td class="n"&gt;' + f(+S.design.hMin, 0) + ' mm&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;' +
    '&lt;h2&gt;3. Load cases&lt;/h2&gt;' + (rows || '&lt;p&gt;No load cases.&lt;/p&gt;') +
    '&lt;h2&gt;4. Joints&lt;/h2&gt;&lt;div class="rp-fig2"&gt;' + detJ1(R) + detJ2(R) + '&lt;/div&gt;' +
    '&lt;h2&gt;5. Curling (advisory)&lt;/h2&gt;&lt;p&gt;Δt = ' + f(R.C.dT, 1) + ' °C, C = ' + f(R.C.C, 3) + ', interior σ = ' + f(R.C.interior, 2) + ' MPa, edge σ = ' + f(R.C.edge, 2) + ' MPa (Westergaard–Bradbury, §14.13).&lt;/p&gt;' +
    '&lt;h2&gt;6. References&lt;/h2&gt;&lt;p&gt;ACI 360R-10 Guide to Design of Slabs-on-Ground: Eq. 7-2 to 7-6, Tables 5.2, 5.3, 6.1, Ch. 6, 8, 9, 10, 14. ACI 318-19 Building Code Requirements for Structural Concrete, Ch. 14. ACI 302.1R Guide to Concrete Floor and Slab Construction. Hetenyi (1946) Beams on Elastic Foundation. Rice (1957).&lt;/p&gt;' +
    '&lt;h2&gt;7. Disclaimer&lt;/h2&gt;&lt;p&gt;Tool: &lt;a href="' + esc(TOOL_URL) + '"&gt;' + esc(TOOL_URL) + '&lt;/a&gt;&lt;/p&gt;&lt;p class="rp-disc"&gt;' + DISCLAIMER + '&lt;/p&gt;&lt;p class="rp-disc" dir="rtl" style="text-align:right"&gt;' + DISCLAIMER_AR + '&lt;/p&gt;';
}
function reportDoc(R) {
  var css = getComputedStyle(root), v = function (n) { return css.getPropertyValue(n).trim(); };
  var vars = ['--cm-brand', '--cm-dark', '--cm-ink', '--cm-muted', '--cm-line', '--cm-soft', '--cm-steel', '--cm-soil', '--cm-conc', '--cm-warn', '--cm-bad', '--cm-bg', '--cm-ok'];
  var light = { '--cm-bg': '#ffffff', '--cm-soft': '#f6f8fa', '--cm-line': '#e3e6ea', '--cm-ink': '#2c2f34', '--cm-muted': '#6b7178', '--cm-steel': '#0b5cad', '--cm-conc': '#c9cdd2', '--cm-soil': '#b08a5a', '--cm-warn': '#c27803', '--cm-bad': '#e0313b', '--cm-ok': '#16a34a', '--cm-brand': '#0088ff', '--cm-dark': '#1f2024' };
  var root_css = ':root{' + vars.map(function (k) { return k + ':' + light[k]; }).join(';') + '}';
  var svgCss = Array.prototype.slice.call(root.querySelectorAll('style')).map(function (s) { return s.textContent; }).join('\n').split('\n').filter(function (l) { return /^\.cm-s-|^\.cm-t-/.test(l.trim()); }).join('\n');
  return '&lt;!doctype html&gt;&lt;html lang="en"&gt;&lt;head&gt;&lt;meta charset="utf-8"&gt;&lt;title&gt;SOG Calculation Report — ' + esc(SITE) + '&lt;/title&gt;&lt;style&gt;' + root_css + svgCss +
    'body{font-family:Arial,Helvetica,sans-serif;color:#2c2f34;font-size:12px;margin:0;padding:24px 28px}h2{font-size:15px;border-bottom:2px solid #0088ff;padding-bottom:3px;margin:22px 0 8px}h3{font-size:13px;margin:14px 0 6px}.muted{color:#6b7178}' +
    'table.cm-t{border-collapse:collapse;width:100%}table.cm-t td{border-bottom:1px solid #e3e6ea;padding:5px 6px;vertical-align:top}td.n{font-family:Consolas,monospace;text-align:right;white-space:nowrap}' +
    '.cm-eq{font-family:Consolas,monospace;font-size:10.5px;background:#f6f8fa;border:1px solid #e3e6ea;padding:7px 9px;white-space:pre-wrap;margin:6px 0}.rp-top{display:flex;justify-content:space-between;border-bottom:3px solid #1f2024;padding-bottom:8px}' +
    '.rp-fig svg{width:360px;height:auto;display:block}.rp-fig2{display:flex;gap:10px;flex-wrap:wrap}.rp-fig2 svg{width:330px;height:auto}.rp-case{page-break-inside:avoid;break-inside:avoid}.rp-disc{font-size:10.5px;color:#444;border:1px solid #e3e6ea;padding:8px;background:#fafafa}' +
    '.wm{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;pointer-events:none;z-index:0}.wm span{transform:rotate(-32deg);font-size:96px;font-weight:800;color:#0088ff;opacity:.07;letter-spacing:.04em;white-space:nowrap}' +
    '.ft{position:fixed;bottom:0;left:0;right:0;font-size:9.5px;color:#6b7178;border-top:1px solid #e3e6ea;padding:4px 28px;display:flex;justify-content:space-between;background:#fff}main{position:relative;z-index:1}@page{margin:14mm 12mm 16mm}' +
    '&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;div class="wm"&gt;&lt;span&gt;' + esc(SITE) + '&lt;/span&gt;&lt;/div&gt;&lt;div class="ft"&gt;&lt;span&gt;&lt;a href="' + esc(TOOL_URL) + '" style="color:#0088ff;text-decoration:none"&gt;' + esc(SITE) + ' · SOG Designer&lt;/a&gt; · ' + esc(TOOL_URL) + '&lt;/span&gt;&lt;span&gt;Design aid only, verify before use. See disclaimer.&lt;/span&gt;&lt;/div&gt;&lt;main&gt;' + reportBody(R) + '&lt;/main&gt;&lt;/body&gt;&lt;/html&gt;';
}
function renderReport(R) { $('#cm-rep').innerHTML = '&lt;div style="position:relative;overflow:hidden"&gt;&lt;div aria-hidden="true" style="position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none"&gt;&lt;span style="transform:rotate(-32deg);font-size:72px;font-weight:800;color:var(--cm-brand);opacity:.07;white-space:nowrap"&gt;' + esc(SITE) + '&lt;/span&gt;&lt;/div&gt;&lt;div style="position:relative" class="cm-repin"&gt;' + reportBody(R).replace(/&lt;h2&gt;/g, '&lt;h3 class="cm-exh" style="margin-top:14px"&gt;').replace(/&lt;\/h2&gt;/g, '&lt;/h3&gt;').replace(/class="rp-disc"/g, 'class="cm-note"') + '&lt;/div&gt;&lt;/div&gt;'; }
function printReport() {
  var R = solve(), html = reportDoc(R);
  var fr = document.createElement('iframe');
  fr.setAttribute('aria-hidden', 'true'); fr.style.cssText = 'position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden';
  document.body.appendChild(fr);
  var d = fr.contentWindow.document; d.open(); d.write(html); d.close();
  setTimeout(function () { try { fr.contentWindow.focus(); fr.contentWindow.print(); } catch (e) { $('#cm-pdf-note').textContent = 'Printing is blocked in this preview. Use the tool on civilmaker or open the saved HTML file.'; } setTimeout(function () { fr.remove(); }, 60000); }, 400);
}

// ---------------- worked example ----------------
function exampleHTML() {
  var ex = SAMPLE(), R = solve(ex);
  var Sbak = S; S = ex; // diagrams &amp; labels read S
  function item(key, extra, title) {
    var H = CM_HELP[key] || { t: title, en: '', ar: '', ref: '' };
    return '&lt;div class="cm-exitem" id="cmx-' + key + '"&gt;&lt;h4&gt;' + esc(title || H.t) + '&lt;/h4&gt;&lt;div class="cm-bi"&gt;&lt;div&gt;' + esc(H.en) + '&lt;/div&gt;&lt;div dir="rtl" lang="ar"&gt;' + esc(H.ar) + '&lt;/div&gt;&lt;/div&gt;&lt;div class="cm-refl"&gt;Code reference · المرجع: ' + esc(H.ref) + '&lt;/div&gt;' + (extra ? '&lt;div class="cm-exv"&gt;' + extra + '&lt;/div&gt;' : '') + '&lt;/div&gt;';
  }
  function val(t) { return '&lt;div class="cm-note"&gt;&lt;b&gt;Example · المثال:&lt;/b&gt; ' + t + '&lt;/div&gt;'; }
  var M = R.M, r = function (i) { return R.rows[i]; };
  var w1 = r(0), w2 = r(1), p3 = r(2), u4 = r(3), l5 = r(4);
  var out = '';
  out += '&lt;div class="cm-card"&gt;&lt;h3&gt;About this example · عن هذا المثال&lt;/h3&gt;&lt;div class="cm-in"&gt;&lt;div class="cm-bi" style="display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px"&gt;&lt;div&gt;A warehouse slab on medium clay carries a 3-tonne forklift, selective pallet racking, floor-stacked goods and block partitions. Every input below is explained with its code basis, followed by the value used and the result the calculator gives. The same data loads with “Reset to example”.&lt;/div&gt;&lt;div dir="rtl" lang="ar"&gt;بلاطة مستودع على تربة طينية متوسطة تتحمل رافعة شوكية 3 طن ورفوف منصات انتقائية وبضائع مرصوصة على الأرض وجدران بلوك. كل مدخل أدناه مشروح مع أساسه في الكود، ثم القيمة المستخدمة والنتيجة التي تعطيها الحاسبة. نفس البيانات تُحمّل بزر «Reset to example».&lt;/div&gt;&lt;/div&gt;' +
      '&lt;blockquote class="cm-q"&gt;“Slabs are normally designed to remain uncracked due to applied loads with a factor of safety of 1.4 to 2.0 relative to the modulus of rupture.” — ACI 360R-10 §7.1&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;';
  out += '&lt;h3 class="cm-exh"&gt;1 · Concrete · الخرسانة&lt;/h3&gt;';
  out += item('fc', val("f'c = " + ex.conc.fc + ' MPa'));
  out += item('morMode', val('Tested value selected · قيمة مختبرية'));
  out += item('mor', val('MOR = ' + f(M.MOR, 2) + ' MPa (auto would give 0.62√35 = ' + f(0.62 * Math.sqrt(35), 2) + ' MPa)'));
  out += item('E', val('E = 4700√35 = ' + f(M.E, 0) + ' MPa'));
  out += item('nu', val('ν = 0.15'));
  out += item('gamma', val('γ = 24 kN/m³'));
  out += '&lt;h3 class="cm-exh"&gt;2 · Subgrade · التربة&lt;/h3&gt;';
  out += item('k', val('k = 40 MN/m³ (medium clay)'));
  out += item('oL', '&lt;pre class="cm-eq"&gt;ℓ = [' + f(M.E, 0) + ' × 220³ / (12 × (1 − 0.15²) × 0.040)]^0.25 = ' + f(SOG.radiusRelStiffness(M.E, 220, M.nu, M.k), 0) + ' mm&lt;/pre&gt;');
  out += '&lt;h3 class="cm-exh"&gt;3 · Design criteria · معايير التصميم&lt;/h3&gt;';
  out += item('h', val('h = 220 mm')) + item('hMin', val('150 mm')) + item('round', val('10 mm'));
  out += '&lt;h3 class="cm-exh"&gt;4 · Forklift wheels · عجلات الرافعة&lt;/h3&gt;';
  out += '&lt;div class="cm-diag"&gt;' + diagWheel(w1.L, w1.at, 220) + '&lt;/div&gt;';
  out += item('wP', val('P = 45 kN per front wheel')) + item('wPress', val('1.0 MPa → A = 45,000 / 1.0 = 45,000 mm², a = ' + f(w1.at.a, 1) + ' mm')) + item('wS', val('s = 900 mm')) + item('wImpact', val('1.0 (no impact)')) + item('loc', val('Case 1 interior, case 2 at a doweled joint (edge)'));
  out += item('sfMode', val('From repetitions')) + item('reps', val('500,000 passes → Table 5.3 stress ratio 0.50 → SF = 2.00'));
  out += item('oSigma', '&lt;pre class="cm-eq"&gt;' + esc(eqText(w1, R)) + '&lt;/pre&gt;&lt;pre class="cm-eq" style="margin-top:6px"&gt;' + esc(eqText(w2, R)) + '&lt;/pre&gt;' + val('Interior utilisation ' + f(w1.at.ratio, 2) + ', required h = ' + hTxt(w1.hReq) + ' mm · Edge utilisation ' + f(w2.at.ratio, 2) + ', required h = ' + hTxt(w2.hReq) + ' mm'), 'Result: wheel stresses · النتيجة: إجهادات العجلات');
  out += '&lt;h3 class="cm-exh"&gt;5 · Rack posts · قوائم الرفوف&lt;/h3&gt;';
  out += '&lt;div class="cm-diag"&gt;' + diagPost(p3.L, p3.at, 220) + '&lt;/div&gt;';
  out += item('pP', val('P = 60 kN')) + item('pBx', val('100 mm')) + item('pBy', val('100 mm → a = √(10,000/π) = ' + f(p3.at.a, 1) + ' mm')) + item('pSx', val('x = 1000 mm')) + item('pSy', val('y = 2700 mm')) + item('sf', val('SF = 1.7 (Table 5.2) → allowable = 4.50 / 1.7 = ' + f(p3.at.fall, 2) + ' MPa')) + item('pLF', val('LF = 1.6'));
  out += item('oPunch', '&lt;pre class="cm-eq"&gt;' + esc(eqText(p3, R)) + '&lt;/pre&gt;' + val('Utilisation ' + f(p3.at.ratio, 2) + ', required h = ' + hTxt(p3.hReq) + ' mm'));
  out += item('oBear');
  out += '&lt;h3 class="cm-exh"&gt;6 · Uniform load · الحمل الموزع&lt;/h3&gt;';
  out += '&lt;div class="cm-diag"&gt;' + diagUniform(u4.L, u4.at) + '&lt;/div&gt;';
  out += item('uW', val('w = 30 kPa')) + item('uVar', val('Variable layout → critical aisle = ' + f(u4.at.u.critAisle / 1000, 2) + ' m')) + item('uAisle', val('3.5 m (used only for fixed layout)'));
  out += '&lt;blockquote class="cm-q"&gt;“Recognizing that the aisle width cannot always be predicted exactly, Rice suggests that a ‘critical aisle width’ be used.” — ACI 360R-10 §7.2, Case 4&lt;/blockquote&gt;';
  out += item('oSigma', '&lt;pre class="cm-eq"&gt;' + esc(eqText(u4, R)) + '&lt;/pre&gt;', 'Result: aisle moment · النتيجة: عزم الممر');
  out += '&lt;h3 class="cm-exh"&gt;7 · Line load · الحمل الخطي&lt;/h3&gt;';
  out += '&lt;div class="cm-diag"&gt;' + diagLine(l5.L) + '&lt;/div&gt;';
  out += item('lW', '&lt;pre class="cm-eq"&gt;' + esc(eqText(l5, R)) + '&lt;/pre&gt;');
  out += '&lt;h3 class="cm-exh"&gt;8 · Joints · الفواصل&lt;/h3&gt;';
  out += item('jS', val('5.0 m; 24h–36h for h = ' + f(R.J.h, 0) + ' mm gives ' + f(R.J.lo, 2) + '–' + f(R.J.hi, 2) + ' m')) + item('jTransfer', val('Dowels → edge factor 0.75; Table 6.1: ' + (R.J.dw.roundEn || R.J.dw.note))) + item('jCut', val('Conventional → depth = h/4 = ' + f(R.J.cut, 0) + ' mm'));
  out += '&lt;blockquote class="cm-q"&gt;“Positive load-transfer devices, such as dowels, should be used for joints subjected to wheel traffic where the joint is expected to open more than 0.025 to 0.035 in. (0.6 to 0.9 mm).” — ACI 360R-10 §7.3&lt;/blockquote&gt;';
  out += '&lt;h3 class="cm-exh"&gt;9 · Reinforcement · التسليح&lt;/h3&gt;';
  out += item('rType', val('Crack-width control by subgrade drag')) + item('rFy', val('420 MPa')) + item('rFs', val('0.67 → fs = ' + f(R.R.fs, 0) + ' MPa')) + item('rMu', val('μ = 1.5')) + item('rCover', val('50 mm'));
  out += item('oGov', '&lt;pre class="cm-eq"&gt;W = 24 × ' + f(R.R.h / 1000, 3) + ' = ' + f(R.R.W / 1000, 2) + ' kN/m²\nF = μ·W·L/2 = 1.5 × ' + f(R.R.W / 1000, 2) + ' × 5.0 / 2 = ' + f(R.R.F / 1000, 2) + ' kN/m\nAs = F / fs = ' + f(R.R.F, 0) + ' / ' + f(R.R.fs, 0) + ' = ' + f(R.R.As, 0) + ' mm²/m  →  T' + R.R.b.d + ' @ ' + R.R.b.sp + ' mm&lt;/pre&gt;', 'Result: reinforcement · النتيجة: التسليح');
  out += '&lt;h3 class="cm-exh"&gt;10 · Curling · التقوس&lt;/h3&gt;';
  out += item('cGrad', val('1.7 °C per 25 mm → Δt = ' + f(R.C.dT, 1) + ' °C')) + item('cAlpha', val('10 × 10⁻⁶ /°C → interior σ = ' + f(R.C.interior, 2) + ' MPa, C = ' + f(R.C.C, 3)));
  out += '&lt;h3 class="cm-exh"&gt;11 · Layout inputs · مدخلات المخطط&lt;/h3&gt;';
  out += item('lX', val('60 m')) + item('lY', val('40 m')) + item('lBx', val('10 m → 2 panels of 5.0 m')) + item('lBy', val('8 m → 2 panels of 4.0 m')) + item('lStrip', val('1 bay per pour strip'));
  out += '&lt;h3 class="cm-exh"&gt;12 · Outputs · المخرجات&lt;/h3&gt;';
  out += item('oHreq', val(R.rows.map(function (x) { return esc(x.L.name) + ': ' + hTxt(x.hReq) + ' mm'; }).join(' · ')));
  out += item('oGov', val('Governing thickness = &lt;b&gt;' + hTxt(R.hGov) + ' mm&lt;/b&gt; (' + esc(R.gov.L.name) + ')'), 'Governing thickness · السماكة الحاكمة');
  out += '&lt;div class="cm-exitem"&gt;&lt;h4&gt;References · المراجع&lt;/h4&gt;&lt;div class="cm-note"&gt;ACI 360R-10, Guide to Design of Slabs-on-Ground · ACI 318-19, Building Code Requirements for Structural Concrete, Ch. 14 · ACI 302.1R-15, Guide to Concrete Floor and Slab Construction · ACI 223R, Shrinkage-Compensating Concrete · PCA (2001) Concrete Floors on Ground, EB075 · Westergaard (1926) · Rice (1957) · Hetenyi (1946) Beams on Elastic Foundation · Packard (1976).&lt;/div&gt;&lt;/div&gt;';
  S = Sbak;
  return out;
}

function renderVerify() {
  function w1(h) { return SOG.groupStress({ P: 11200, a: Math.sqrt(25 / Math.PI), h: h, E: 4e6, nu: 0.15, k: 200, others: [{ x: 40, y: 0 }], location: 'interior', ltf: 1 }).sigma * CAL; }
  function p1(h) { return SOG.groupStress({ P: 15500, a: Math.sqrt(36 / Math.PI), h: h, E: 4e6, nu: 0.15, k: 100, others: [{ x: 40, y: 0 }, { x: 0, y: 100 }, { x: 40, y: 100 }], location: 'interior', ltf: 1 }).sigma * CAL; }
  function sv(fn, t) { for (var h = 4; h &lt;= 20; h += 0.01) if (fn(h) &lt;= t) return h; return NaN; }
  var hw = sv(w1, 335), hp = sv(p1, 407);
  var u = SOG.uniformAisle({ w: 1, h: 5, E: 4e6, k: 50, variable: true }), u2 = SOG.uniformAisle({ w: 1, h: 10, E: 4e6, k: 200, variable: false, aisle: 144 });
  var pct = function (a, b) { return (a &gt; b ? '+' : '') + f((a - b) / b * 100, 1) + ' %'; };
  var rows = [
    ['A1.2 · 22.4 kip axle, single wheels, 25 in², 40 in spacing, k = 200 pci, 335 psi', '7.75 in (PCA chart)', f(hw, 2) + ' in', pct(hw, 7.75)],
    ['A1.3 · 15.5 kip post, 36 in² plate, x = 40 in, y = 100 in, k = 100 pci, 407 psi', '8.25 in (PCA chart)', f(hp, 2) + ' in', pct(hp, 8.25)],
    ['Table A1.2 · h = 5 in, k = 50 pci, 300 psi, critical aisle', '610 psf, 5.6 ft', f(300 / u.sigma * 144, 0) + ' psf, ' + f(u.critAisle / 12, 1) + ' ft', pct(300 / u.sigma * 144, 610)],
    ['Table A1.2 · h = 10 in, k = 200 pci, 300 psi, 12 ft aisle', '2330 psf', f(300 / u2.sigma * 144, 0) + ' psf', pct(300 / u2.sigma * 144, 2330)]
  ];
  $('#cm-ver').innerHTML = '&lt;table class="cm-t"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Example&lt;/th&gt;&lt;th&gt;ACI 360R&lt;/th&gt;&lt;th style="text-align:right"&gt;This tool&lt;/th&gt;&lt;th style="text-align:right"&gt;Diff.&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;' + rows.map(function (r) { return '&lt;tr&gt;&lt;td&gt;' + r[0] + '&lt;/td&gt;&lt;td&gt;' + r[1] + '&lt;/td&gt;&lt;td class="n"&gt;' + r[2] + '&lt;/td&gt;&lt;td class="n"&gt;' + r[3] + '&lt;/td&gt;&lt;/tr&gt;'; }).join('') + '&lt;/tbody&gt;&lt;/table&gt;&lt;p class="cm-note" style="margin-top:8px"&gt;Wheel and post stresses include a model factor of 1.05, so both chart examples now come out slightly thicker (conservative) than the PCA chart readings. Uniform loads match the PCA tables to within 0.3 %.&lt;/p&gt;';
}

// ---------------- events ----------------
var R0 = null;
function refresh(structure) {
  if (structure) { renderFields('cm-f-conc', F.conc); renderFields('cm-f-soil', F.soil); renderFields('cm-f-des', F.des); renderFields('cm-f-joint', F.joint); renderFields('cm-f-reinf', F.reinf); renderFields('cm-f-curl', F.curl); renderFields('cm-f-lay', F.lay); renderLoadsStructure(); }
  var R = solve(); R0 = R;
  renderSummary(R); renderMatOut(R); renderLoadsResults(R); renderJointsOut(R); renderCurlOut(R); renderLayout(R); renderReport(R);
  try { localStorage.setItem(STORE, JSON.stringify(S)); } catch (e) {}
  var jb = $('#cm-json'); if (document.activeElement !== jb) jb.value = JSON.stringify(S, null, 1);
}
var timer = null;
function onValue(el, isSel) {
  var v = el.type === 'number' ? (el.value === '' ? '' : +el.value) : el.value;
  if (el.dataset.p) { setP(S, el.dataset.p, v); }
  else if (el.dataset.l) { var L = S.loads.filter(function (x) { return String(x.id) === el.dataset.l; })[0]; if (!L) return; L[el.dataset.k] = v; }
  else return;
  clearTimeout(timer);
  if (isSel) refresh(true); else timer = setTimeout(function () { refresh(false); }, 120);
}
root.addEventListener('input', function (e) { var el = e.target; if (el.tagName === 'INPUT' &amp;&amp; (el.dataset.p || el.dataset.l)) onValue(el, false); });
root.addEventListener('change', function (e) { var el = e.target; if (el.tagName === 'SELECT' &amp;&amp; (el.dataset.p || el.dataset.l)) onValue(el, true); });
function showTab(t) {
  $$('#cm-tabs button').forEach(function (b) { b.setAttribute('aria-selected', String(b.dataset.t === t)); });
  $$('section[data-tab]').forEach(function (s) { s.hidden = s.dataset.tab !== t; });
  if (t === 'example' &amp;&amp; !$('#cm-ex').innerHTML) $('#cm-ex').innerHTML = exampleHTML();
}
root.addEventListener('click', function (e) {
  var b = e.target.closest('button,a'); if (!b || !root.contains(b)) return;
  if (b.dataset.t) { showTab(b.dataset.t); return; }
  if (b.dataset.usereq) { var Rq = solve(); if (isFinite(Rq.hGov)) { S.design.h = Rq.hGov; refresh(true); } return; }
  if (b.dataset.help) {
    var box = b.closest('.cm-f,.cm-chk'), pop = box &amp;&amp; box.querySelector('.cm-pop'); if (!pop) return;
    var open = pop.hidden; $$('.cm-pop').forEach(function (p) { p.hidden = true; }); $$('.cm-i').forEach(function (i) { i.setAttribute('aria-expanded', 'false'); });
    if (open) { var H = CM_HELP[b.dataset.help]; pop.innerHTML = esc(H.en) + '&lt;span class="cm-ref"&gt;' + esc(H.ref) + '&lt;/span&gt;&lt;a data-goto="' + b.dataset.help + '" role="button" tabindex="0"&gt;Full explanation + Arabic → Worked Example&lt;/a&gt;'; pop.hidden = false; b.setAttribute('aria-expanded', 'true'); }
    return;
  }
  if (b.dataset.goto) {
    showTab('example'); var tg = root.querySelector('#cmx-' + b.dataset.goto);
    if (tg) { tg.scrollIntoView({ behavior: 'smooth', block: 'start' }); tg.classList.add('cm-flash'); setTimeout(function () { tg.classList.remove('cm-flash'); }, 1800); }
    return;
  }
  if (b.dataset.del) { S.loads = S.loads.filter(function (l) { return String(l.id) !== b.dataset.del; }); refresh(true); return; }
  if (b.dataset.add) {
    var d = { wheel: { name: 'New wheel load', P: 40, press: 1.0, s: 900, impact: 1, loc: 'interior', sfMode: 'fatigue', sf: 1.7, reps: 500000 },
      post: { name: 'New rack post', P: 50, bx: 100, by: 100, sx: 1000, sy: 2700, loc: 'interior', sfMode: 'manual', sf: 1.7, reps: 100000, LF: 1.6 },
      uniform: { name: 'New uniform load', w: 20, aisle: 3, variable: 'true', sf: 1.7 }, line: { name: 'New line load', w: 10, sf: 1.7 } }[b.dataset.add];
    d.id = nextId(); d.type = b.dataset.add; S.loads.push(d); refresh(true); return;
  }
  if (b.id === 'cm-reset') { S = SAMPLE(); refresh(true); return; }
  if (b.id === 'cm-pdf') { printReport(); return; }
  if (b.id === 'cm-save') {
    try { var blob = new Blob([JSON.stringify(S, null, 1)], { type: 'application/json' }); var a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'sog-project.json'; document.body.appendChild(a); a.click(); a.remove(); }
    catch (er) { showTab('verify'); }
    return;
  }
  if (b.id === 'cm-open') { $('#cm-file').click(); return; }
  if (b.id === 'cm-copy') { var v = $('#cm-json').value; (navigator.clipboard ? navigator.clipboard.writeText(v) : Promise.reject()).then(function () { $('#cm-jmsg').textContent = 'Copied'; }).catch(function () { $('#cm-json').select(); $('#cm-jmsg').textContent = 'Select the text and copy it manually'; }); return; }
  if (b.id === 'cm-imp') { try { S = merge(SAMPLE(), JSON.parse($('#cm-json').value)); refresh(true); $('#cm-jmsg').textContent = 'Imported'; } catch (er) { $('#cm-jmsg').textContent = 'That text is not a valid project'; } return; }
});
root.addEventListener('keydown', function (e) { if (e.key === 'Enter' &amp;&amp; e.target.dataset &amp;&amp; e.target.dataset.goto) e.target.click(); });
$('#cm-file').addEventListener('change', function (e) {
  var file = e.target.files[0]; if (!file) return; var rd = new FileReader();
  rd.onload = function () { try { S = merge(SAMPLE(), JSON.parse(rd.result)); S.loads = JSON.parse(rd.result).loads || S.loads; refresh(true); } catch (er) { showTab('verify'); $('#cm-jmsg').textContent = 'That file is not a valid project'; } };
  rd.readAsText(file); e.target.value = '';
});
try { if (window.self !== window.top &amp;&amp; !/civilmaker|blogspot|blogger/i.test(location.hostname)) $('#cm-pdf-note').textContent = 'In this preview the print dialog may be blocked. On civilmaker or from the saved HTML file it opens normally.'; } catch (e) {}
renderVerify(); refresh(true);
})();

//]]&gt;
&lt;/script&gt;
&lt;/div&gt;

&lt;article class="cm-seo" dir="rtl" lang="ar"&gt;
&lt;h2&gt;حاسبة تصميم البلاطات الأرضية للمصانع والمستودعات طبقاً لـ ACI 360R-10&lt;/h2&gt;
&lt;p&gt;أداة مجانية لتصميم &lt;b&gt;البلاطات الأرضية (Slab on Grade)&lt;/b&gt; في المصانع والمستودعات ومراكز التوزيع. تحسب الأداة &lt;b&gt;سماكة البلاطة الخرسانية الأرضية&lt;/b&gt; المطلوبة تحت &lt;b&gt;أحمال عجلات الرافعة الشوكية (Forklift)&lt;/b&gt; و&lt;b&gt;قوائم الرفوف (Rack posts)&lt;/b&gt; والأحمال الموزعة وأحمال الخط، وتتحقق من &lt;b&gt;القص الثاقب&lt;/b&gt; وتحمّل الارتكاز، ثم تصمم &lt;b&gt;فواصل الانكماش&lt;/b&gt; وفواصل الإنشاء والعزل والدسرات (Dowels) والتسليح، وتصدر &lt;b&gt;مذكرة حسابية PDF&lt;/b&gt; جاهزة.&lt;/p&gt;
&lt;p&gt;المعادلات مأخوذة من &lt;b&gt;ACI 360R-10 Guide to Design of Slabs-on-Ground&lt;/b&gt; (Westergaard وPCA وRice وHetenyi) ومن &lt;b&gt;ACI 318-19&lt;/b&gt; الفصل 14 للخرسانة غير المسلحة، وتمت مطابقة النتائج مع أمثلة الملحق الأول في الكود.&lt;/p&gt;

&lt;h3&gt;ماذا تحسب الأداة؟&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;السماكة المطلوبة للبلاطة لكل حالة تحميل، والحالة الحاكمة.&lt;/li&gt;
&lt;li&gt;إجهاد الانحناء تحت العجلات والقوائم مع تأثير الأحمال المجاورة ومعامل نقل الحمل عند الفواصل.&lt;/li&gt;
&lt;li&gt;معامل الأمان من جدول الكلال PCA حسب عدد مرات مرور الرافعة.&lt;/li&gt;
&lt;li&gt;تباعد فواصل الانكماش ومخطط الفواصل وتفاصيل J1 إلى J4 بقطاعات توضيحية.&lt;/li&gt;
&lt;li&gt;تسليح مقاومة الاحتكاك مع التربة (Subgrade drag) والتسليح المستمر وفحص التقوس.&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- AD 2: mid article (Rebar Page1 display) --&gt;
&lt;div class="cm-ad" id="cm-ad-mid"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;&lt;/div&gt;

&lt;h3&gt;طريقة الاستخدام&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;أدخل مقاومة الخرسانة f'c ومعامل رد فعل التربة k من تقرير التربة.&lt;/li&gt;
&lt;li&gt;أضف حالات التحميل: عجلات الرافعة الشوكية، قوائم الرفوف، الحمل الموزع، حمل الخط.&lt;/li&gt;
&lt;li&gt;اقرأ &lt;b&gt;السماكة المطلوبة&lt;/b&gt; في الشريط العلوي، ثم اختر &lt;b&gt;سماكة التصميم h&lt;/b&gt; التي ستنفذها (أو اضغط زر الاعتماد).&lt;/li&gt;
&lt;li&gt;راجع الفواصل والتسليح ومخطط الفواصل، ثم اطبع المذكرة الحسابية PDF.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="NCZM8P_G0oY" width="600" height="498" src="https://www.youtube.com/embed/NCZM8P_G0oY"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h3&gt;أسئلة شائعة&lt;/h3&gt;
&lt;details&gt;&lt;summary&gt;كيف أحسب سماكة بلاطة المستودع تحت الرافعة الشوكية؟&lt;/summary&gt;&lt;p&gt;تُحسب السماكة بحيث لا يتجاوز إجهاد الشد الناتج عن حمل العجلة قيمة معاير الانكسار مقسوماً على معامل الأمان (MOR / SF)، باستخدام معادلة Westergaard المعدلة في ACI 360R-10 مع تأثير العجلة المجاورة. الأداة تبحث عن أقل سماكة تحقق ذلك تلقائياً.&lt;/p&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;ما تباعد فواصل الانكماش في البلاطات الأرضية؟&lt;/summary&gt;&lt;p&gt;يوصي ACI 360R بتباعد لا يزيد عادة عن 24 إلى 36 ضعف سماكة البلاطة للبلاطات غير المسلحة، مع ألواح مربعة قدر الإمكان ونسبة أضلاع لا تتجاوز 1.5. الأداة تقترح التباعد وتنبه إذا تجاوزت 36h.&lt;/p&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;ما قيمة معامل الأمان المناسبة؟&lt;/summary&gt;&lt;p&gt;جدول 5.2 في ACI 360R يعطي عادة 1.7 إلى 2.0، والحد الأدنى 1.4. للأحمال المتحركة المتكررة يُستخدم جدول الكلال 5.3. الأداة لا تقبل قيمة أقل من 1.4 وتنبه تحت 1.7.&lt;/p&gt;&lt;/details&gt;
&lt;details&gt;&lt;summary&gt;هل الأداة بديل عن المهندس المصمم؟&lt;/summary&gt;&lt;p&gt;لا. الأداة وسيلة مساعدة للتصميم، ويجب مراجعة النتائج واعتمادها من مهندس إنشائي مؤهل.&lt;/p&gt;&lt;/details&gt;

&lt;h3&gt;كلمات مفتاحية&lt;/h3&gt;
&lt;ul class="cm-kw"&gt;
&lt;li&gt;تصميم البلاطات الأرضية&lt;/li&gt;&lt;li&gt;سماكة بلاطة المستودع&lt;/li&gt;&lt;li&gt;أرضيات المصانع الخرسانية&lt;/li&gt;&lt;li&gt;أحمال الرافعة الشوكية&lt;/li&gt;&lt;li&gt;قوائم الرفوف&lt;/li&gt;&lt;li&gt;فواصل الانكماش&lt;/li&gt;&lt;li&gt;الدسرات Dowels&lt;/li&gt;&lt;li&gt;معامل رد فعل التربة k&lt;/li&gt;&lt;li&gt;ACI 360R-10&lt;/li&gt;&lt;li&gt;Slab on Grade&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="cm-en" dir="ltr" lang="en"&gt;
&lt;h2&gt;Slab on Grade Design Calculator (ACI 360R-10)&lt;/h2&gt;
&lt;p&gt;Free online &lt;b&gt;slab-on-ground design calculator&lt;/b&gt; for &lt;b&gt;industrial floor slab thickness&lt;/b&gt;, warehouse floors and factory floors. It checks forklift wheel loads, rack post loads, uniform and line loads with Westergaard, PCA, Rice and Hetenyi methods from ACI 360R-10, adds ACI 318-19 punching shear and bearing checks for rack posts, designs contraction, construction and isolation joints with dowels, and prints a PDF calculation report.&lt;/p&gt;
&lt;/div&gt;
&lt;/article&gt;

&lt;!-- AD 3: end of article (Rebar Page1 display) --&gt;
&lt;div class="cm-ad" id="cm-ad-end"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
&lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;&lt;/div&gt;

&lt;script type="application/ld+json"&gt;
{"@context":"https://schema.org","@graph":[
{"@type":"SoftwareApplication","name":"SOG Designer · civilmaker","applicationCategory":"EngineeringApplication","operatingSystem":"Web browser","inLanguage":["en","ar"],"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"description":"Free slab-on-ground (industrial floor) design calculator to ACI 360R-10: forklift wheel, rack post, uniform and line loads, punching shear, joints, dowels, reinforcement and PDF report.","publisher":{"@type":"Organization","name":"civilmaker"}},
{"@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"كيف أحسب سماكة بلاطة المستودع تحت الرافعة الشوكية؟","acceptedAnswer":{"@type":"Answer","text":"تُحسب السماكة بحيث لا يتجاوز إجهاد الشد تحت العجلة قيمة MOR / SF باستخدام معادلة Westergaard المعدلة في ACI 360R-10 مع تأثير العجلة المجاورة."}},
{"@type":"Question","name":"ما تباعد فواصل الانكماش في البلاطات الأرضية؟","acceptedAnswer":{"@type":"Answer","text":"عادة 24 إلى 36 ضعف سماكة البلاطة للبلاطات غير المسلحة، مع ألواح مربعة قدر الإمكان ونسبة أضلاع لا تتجاوز 1.5."}},
{"@type":"Question","name":"ما قيمة معامل الأمان المناسبة لتصميم البلاطات الأرضية؟","acceptedAnswer":{"@type":"Answer","text":"جدول 5.2 في ACI 360R يعطي 1.7 إلى 2.0 عادة والحد الأدنى 1.4، وللأحمال المتكررة يستخدم جدول الكلال 5.3."}},
{"@type":"Question","name":"هل الأداة بديل عن المهندس المصمم؟","acceptedAnswer":{"@type":"Answer","text":"لا، هي وسيلة مساعدة ويجب مراجعة النتائج من مهندس إنشائي مؤهل."}}]}
]}
&lt;/script&gt;

&lt;!-- ===== end civilmaker · SOG Designer ===== --&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGJslE4UNKVgpS9B7hiHuk8TJjyRfA1fLH1ZQ27PtDY3Zdo0UqeKJqHeCXIEGM8pBUPqKMVlJKTR5qfo5XbQ1yOX6SgfwYFqy6AUInDFzCOEuzpXBgqZ0WeUoYOBaN8AL9HB7nO1v9WgtucHDPTXs8JrhA58xsSKYolQtHRbhTQUMH6J0XBSh0MtxNFjQt/s72-c/%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A3%D8%B1%D8%B6%D9%8A%D8%A9%20%D9%81%D9%8A%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%88%D8%AF%D8%B9%D8%A7%D8%AA.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>حسابات معاملات احمال وضغط الرياح اونلاين مجانا طبقا لكود ASCE 7-22 مع نوتة حسابية PDF </title><link>https://www.civilmaker.com/2026/10/wind-load-calculator-asce.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Thu, 15 Oct 2026 11:58:11 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3427471358497169347</guid><description>
&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5njVsbwyJx4Pv2I5L_BMNz_36htwPCZRt1sXyZWYeIbslh1TS3ahGrkQj3lchWg-FsqN4uzu8p6qrY-E4OpJKhyphenhyphenpZGgzEGsLpACqRSvTVgSe_WPCnIYUOF09I5QPw5pn6doNxegKu0l5e2KmPKSULXI5Kj83_fDWCXXXq_Ei-aHqOZlhA-U0ahZzsX3W/s1536/Wind%20Load%20ASCE.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="600" data-original-height="1024" data-original-width="1536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5njVsbwyJx4Pv2I5L_BMNz_36htwPCZRt1sXyZWYeIbslh1TS3ahGrkQj3lchWg-FsqN4uzu8p6qrY-E4OpJKhyphenhyphenpZGgzEGsLpACqRSvTVgSe_WPCnIYUOF09I5QPw5pn6doNxegKu0l5e2KmPKSULXI5Kj83_fDWCXXXq_Ei-aHqOZlhA-U0ahZzsX3W/s600/Wind%20Load%20ASCE.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;حاسبة أحمال الرياح ASCE 7-22&lt;/strong&gt; أداة مجانية أونلاين لحساب ضغوط الرياح على المباني بالوحدات المترية، وتعطيك النتائج فورًا مع رسومات توضيحية لمناطق الضغط على الحوائط والسقف. أدخل بيانات الموقع والمبنى، ثم انتقل بين التبويبات لترى معاملات الرياح، وضغوط الهيكل الرئيسي بالطريقة الاتجاهية والطريقة المبسطة للمباني المنخفضة، وضغوط التكسيات C&amp;amp;C.&lt;/p&gt;
&lt;!-- Wind Load Calculator ASCE 7-22 | civilmaker --&gt;
&lt;!-- ADS: the 3 ins tags below use ad unit 7152045289; to use other units change data-ad-slot. Unfilled ads hide their box. --&gt;
&lt;div id="wcalc-host" dir="rtl" data-map-i="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjbpzUYD55aILCNEm4KJ_Vrm7NzMqo6ekJWvA3zNNMo-nkg1JPKf-HO5B-OAECNyOn8CN7TKzwZorPlIOBN6yuAK7hsj-rZz1anpM-N9fatQv8LtnlwNY5NGiXU9u9kRSpxKcTZU2EYzmUVY3DlCLGzTgc2R1pb1CNjMxUPxAiR4DfKmbEodLJ6QtrcR3B/s1237/map-risk-I.jpg" data-map-ii="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEMkcn0RDmi7Ly9ng3fleml_kB6ovkbNw6IFTasNcFhFTVzS40eV23Gfo2_9AXjViJAKwchLA0ZxF12iYuco0uUOy1kkTCmkjDhRfO4XOK1XbsEoghQdVAvVC4QT2eOpfx-sCI4jU0opbBqoO4Qu9KFzOlc46VlJdcDLL5gYFP6jm_pJX6pug-_UeJnb2y/s1237/map-risk-II.jpg" data-map-iii="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV-X98StA30Njv6hwUPS21qjFav63jRKt2YtmsLBNMkahR4xzQweyterWOjlbznBsIRWwEnrhCK6a83rWjcOhq2HP8CnD6Zuo844yrCc7Y34x2RIKvlbsX5dOur6Vzg8IHciNckq7Ji2L03R-GUFZ26n4arVFmaNMxdgq2m4YBCBVLGUw0lFuYS8SMrXOP/s1237/map-risk-III-IV.jpg"&gt;
  &lt;!-- ad 1: under the calculator title --&gt;
  &lt;div slot="ad-top"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&lt;/div&gt;
  &lt;!-- ad 2: between the results summary and the tabs --&gt;
  &lt;div slot="ad-mid"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&lt;/div&gt;
  &lt;!-- ad 3: after the results, before the disclaimer --&gt;
  &lt;div slot="ad-bottom"&gt;&lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="wcalc-code" style="display:none"&gt;InVzZSBzdHJpY3QiOwppZihIT1NULnNoYWRvd1Jvb3QpcmV0dXJuOwpjb25zdCBTUj1IT1NULmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KTsKaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3Y2FsYy1mb250cyIpKXtjb25zdCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtsLmlkPSJ3Y2FsYy1mb250cyI7bC5yZWw9InN0eWxlc2hlZXQiO2wuaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1UYWphd2FsOndnaHRANDAwOzUwMDs3MDA7ODAwJmZhbWlseT1JQk0rUGxleCtNb25vOndnaHRANDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwIjtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGwpO30KaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3Y2FsYy1nY3NzIikpe2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtnLmlkPSJ3Y2FsYy1nY3NzIjtnLnRleHRDb250ZW50PSIjd2NhbGMtaG9zdHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y2xlYXI6Ym90aH1AbWVkaWEgcHJpbnR7QHBhZ2V7c2l6ZTpBNDttYXJnaW46MTJtbSAxMG1tfWh0bWwsYm9keXtiYWNrZ3JvdW5kOiNmZmYhaW1wb3J0YW50fS53Yy1ub3ByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LndjLXBhe2Zsb2F0Om5vbmUhaW1wb3J0YW50O3dpZHRoOmF1dG8haW1wb3J0YW50O21heC13aWR0aDpub25lIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmYhaW1wb3J0YW50O3Bvc2l0aW9uOnN0YXRpYyFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0iO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZyk7fQpTUi5pbm5lckhUTUw9IjxzdHlsZT4iKyI6aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO2RpcmVjdGlvbjpydGw7dGV4dC1hbGlnbjpyaWdodH1cbjpob3N0ey0tYmc6I2YzZjVmNzsgLS1wYW5lbDojZmZmZmZmOyAtLWluazojMTQyMTJlOyAtLW11dGVkOiM1YjZiN2E7IC0tbGluZTojZDllMGU3O1xuICAtLWFjY2VudDojMGY2ZTdhOyAtLWFjY2VudC1zb2Z0OiNlMmYxZjI7IC0td2FybjojYTE1YzAwOyAtLXdhcm4tc29mdDojZmRmMWRmOyAtLWJhZDojYjMyNjFlO1xuICAtLWNoYXJ0LWZpbGw6cmdiYSgxNSwxMTAsMTIyLC4xNCk7XG4gIC0tZi11aTpcIklCTSBQbGV4IFNhbnMgQXJhYmljXCIsc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixUYWhvbWEsc2Fucy1zZXJpZjtcbiAgLS1mLW51bTpcIklCTSBQbGV4IE1vbm9cIix1aS1tb25vc3BhY2UsQ29uc29sYXMsbW9ub3NwYWNlO31cbip7Ym94LXNpemluZzpib3JkZXItYm94fVxuLndyYXB7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0taW5rKTtmb250LWZhbWlseTp2YXIoLS1mLXVpKTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjU1fVxuLndyYXB7bWF4LXdpZHRoOjEyODBweDttYXJnaW46MCBhdXRvO3BhZGRpbmctaW5saW5lOjE2cHg7cGFkZGluZy1ibG9jazoyMHB4IDQwcHh9XG5oZWFkZXIudG9we2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtwYWRkaW5nLWJvdHRvbToxNHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHZhcigtLWluayk7bWFyZ2luLWJvdHRvbToxOHB4fVxuaGVhZGVyLnRvcCBoMXttYXJnaW46MDtmb250LXNpemU6MS41NXJlbTtmb250LXdlaWdodDo3MDA7dGV4dC13cmFwOmJhbGFuY2V9XG5oZWFkZXIudG9wIC5zdWJ7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZTouOXJlbX1cbi5jb2RlLXRhZ3tmb250LWZhbWlseTp2YXIoLS1mLW51bSk7Zm9udC1zaXplOi44cmVtO2JvcmRlcjoxcHggc29saWQgdmFyKC0taW5rKTtwYWRkaW5nOjNweCA4cHg7bGV0dGVyLXNwYWNpbmc6LjA0ZW19XG4uZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDM2MHB4KSBtaW5tYXgoMCwxZnIpO2dhcDoyMHB4O2FsaWduLWl0ZW1zOnN0YXJ0fVxuQG1lZGlhIChtYXgtd2lkdGg6OTAwcHgpey5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfX1cbi5yYWlse2JhY2tncm91bmQ6dmFyKC0tcGFuZWwpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzo0cHggMTZweCAxNnB4fVxuZmllbGRzZXR7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luOjA7cGFkZGluZzoxMnB4IDAgNHB4O2Rpc3BsYXk6Z3JpZDtnYXA6OHB4fVxuZmllbGRzZXQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDowfVxubGVnZW5ke2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6LjgycmVtO2xldHRlci1zcGFjaW5nOi4wNmVtO2NvbG9yOnZhcigtLWFjY2VudCk7cGFkZGluZzowO21hcmdpbi1ib3R0b206NnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1cbi5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIDEyMHB4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyfVxuLnJvdyBsYWJlbHtmb250LXNpemU6Ljg4cmVtfVxuLnJvdyBsYWJlbCBzbWFsbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6Ljc0cmVtO2ZvbnQtZmFtaWx5OnZhcigtLWYtbnVtKTtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246cmlnaHR9XG5pbnB1dCxzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWYtbnVtKTtmb250LXNpemU6LjlyZW07d2lkdGg6MTAwJTtwYWRkaW5nOjVweCA3cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1pbmspO2JvcmRlci1yYWRpdXM6MnB4fVxuaW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fVxuc2VsZWN0e2ZvbnQtZmFtaWx5OnZhcigtLWYtdWkpfVxuLmhpbnR7Zm9udC1zaXplOi43OHJlbTtjb2xvcjp2YXIoLS1tdXRlZCl9XG4ubWFpbnttaW4td2lkdGg6MDtkaXNwbGF5OmdyaWQ7Z2FwOjE2cHh9XG4udGFic3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX1cbi50YWJzIGJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1zaXplOi45cmVtO2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCB0cmFuc3BhcmVudDtwYWRkaW5nOjhweCAxMnB4O2NvbG9yOnZhcigtLW11dGVkKTtjdXJzb3I6cG9pbnRlcn1cbi50YWJzIGJ1dHRvblthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXXtjb2xvcjp2YXIoLS1pbmspO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tYWNjZW50KTtmb250LXdlaWdodDo2MDB9XG4udGFicyBidXR0b24gLmNoe2ZvbnQtZmFtaWx5OnZhcigtLWYtbnVtKTtmb250LXNpemU6Ljc1cmVtO21hcmdpbi1pbmxpbmUtc3RhcnQ6NHB4fVxuLmtwaXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDEzMHB4LDFmcikpO2dhcDoxMHB4fVxuLmtwaXtiYWNrZ3JvdW5kOnZhcigtLXBhbmVsKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MTBweCAxMnB4fVxuLmtwaSAua3tmb250LXNpemU6Ljc2cmVtO2NvbG9yOnZhcigtLW11dGVkKX1cbi5rcGkgLnZ7Zm9udC1mYW1pbHk6dmFyKC0tZi1udW0pO2ZvbnQtc2l6ZToxLjI1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246cmlnaHR9XG4ua3BpIC51e2ZvbnQtc2l6ZTouNzJyZW07Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtZmFtaWx5OnZhcigtLWYtbnVtKX1cbi5rcGkuaGx7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQtc29mdCl9XG5zZWN0aW9uLmNhcmR7YmFja2dyb3VuZDp2YXIoLS1wYW5lbCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjE0cHggMTZweDttaW4td2lkdGg6MH1cbnNlY3Rpb24uY2FyZCBoMntmb250LXNpemU6MS4wMnJlbTttYXJnaW46MCAwIDEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7ZmxleC13cmFwOndyYXB9XG5zZWN0aW9uLmNhcmQgaDIgLnJlZntmb250LWZhbWlseTp2YXIoLS1mLW51bSk7Zm9udC1zaXplOi43NXJlbTtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC13ZWlnaHQ6NDAwfVxuLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcikgbWlubWF4KDAsMWZyKTtnYXA6MTZweH1cbkBtZWRpYSAobWF4LXdpZHRoOjcwMHB4KXsudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpfX1cbi50Ymx7b3ZlcmZsb3cteDphdXRvfVxudGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7Zm9udC1mYW1pbHk6dmFyKC0tZi1udW0pO2ZvbnQtc2l6ZTouODRyZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zO2RpcmVjdGlvbjpsdHJ9XG50aCx0ZHtwYWRkaW5nOjVweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSk7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXB9XG50aHtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZTouNzZyZW07Ym9yZGVyLWJvdHRvbToxLjVweCBzb2xpZCB2YXIoLS1pbmspfVxudHIuaCB0ZHtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudC1zb2Z0KTtmb250LXdlaWdodDo2MDB9XG4uY2FsY3tkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246bGVmdDtmb250LWZhbWlseTp2YXIoLS1mLW51bSk7Zm9udC1zaXplOi44NHJlbTtkaXNwbGF5OmdyaWQ7Z2FwOjRweH1cbi5jYWxjIC5lcXtwYWRkaW5nOjJweCAwfVxuLmNhbGMgLmVxIGJ7Y29sb3I6dmFyKC0tYWNjZW50KTtmb250LXdlaWdodDo2MDB9XG4uY2FsYyAubm90ZXtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOi43OHJlbX1cbi5mbGFne2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLXNvZnQpO2NvbG9yOnZhcigtLWluayk7Ym9yZGVyLWlubGluZS1zdGFydDozcHggc29saWQgdmFyKC0td2Fybik7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6Ljg0cmVtfVxuLmZsYWcgYntjb2xvcjp2YXIoLS13YXJuKX1cbi5wZW5kaW5ne2JvcmRlcjoxcHggZGFzaGVkIHZhcigtLWxpbmUpO3BhZGRpbmc6MjJweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1tdXRlZCk7ZGlzcGxheTpncmlkO2dhcDo2cHh9XG4ucGVuZGluZyBzdHJvbmd7Y29sb3I6dmFyKC0taW5rKTtmb250LXNpemU6MXJlbX1cbi5tYXAgaW1ne3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtkaXNwbGF5OmJsb2NrfVxuLm1hcCBmaWdjYXB0aW9ue2ZvbnQtc2l6ZTouNzhyZW07Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi10b3A6NnB4fVxuc3ZnIHRleHR7ZmlsbDp2YXIoLS1tdXRlZCk7Zm9udC1mYW1pbHk6dmFyKC0tZi1udW0pO2ZvbnQtc2l6ZToxMXB4fVxuLnJlcG9ydHtkaXJlY3Rpb246bHRyO3RleHQtYWxpZ246bGVmdDtmb250LWZhbWlseTp2YXIoLS1mLW51bSk7Zm9udC1zaXplOi44MnJlbTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MTJweDttYXgtaGVpZ2h0OjUyMHB4O292ZXJmbG93OmF1dG87bWFyZ2luOjB9XG4uYnRue2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6Ljg2cmVtO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1wYW5lbCk7Ym9yZGVyOjA7cGFkZGluZzo3cHggMTRweDtjdXJzb3I6cG9pbnRlcjtib3JkZXItcmFkaXVzOjJweH1cbi5idG4uZ2hvc3R7YmFja2dyb3VuZDpub25lO2NvbG9yOnZhcigtLWFjY2VudCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1hY2NlbnQpfVxuLmJhcntkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9XG4uZXJye2NvbG9yOnZhcigtLWJhZCk7Zm9udC1zaXplOi44cmVtfVxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey50YWJzIGJ1dHRvbnt0cmFuc2l0aW9uOmNvbG9yIC4xNXMsYm9yZGVyLWNvbG9yIC4xNXN9fVxuOmhvc3R7LS1iZzojZmZmZmZmOyAtLXBhbmVsOiNmZmZmZmY7IC0taW5rOiMyZjJmMzM7IC0tbXV0ZWQ6IzY1NjU2ODsgLS1saW5lOiNlNWU1ZTU7XG4gIC0tYWNjZW50OiMwNjY5ZmY7IC0tYWNjZW50LXNvZnQ6I2U4ZjFmZjsgLS1maWVsZDojZjdmOGZhOyAtLXJlZDojZjc0ZjRmOyAtLW5hdjojMWYyMDI0OyAtLW5hdi1pbms6I2U3ZTdlODtcbiAgLS1jaGFydC1maWxsOnJnYmEoNiwxMDUsMjU1LC4xMCk7XG4gIC0tZi11aTpcIlRhamF3YWxcIixzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFRhaG9tYSxzYW5zLXNlcmlmO31cbi53cmFwe2ZvbnQtc2l6ZToxNXB4fVxuLndyYXB7cGFkZGluZy1ibG9jazowIDQwcHh9XG5oZWFkZXIudG9we2JhY2tncm91bmQ6dmFyKC0tbmF2KTtjb2xvcjp2YXIoLS1uYXYtaW5rKTtib3JkZXI6MDttYXJnaW46MCAtMTZweCAyMHB4O3BhZGRpbmc6MTRweCAyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1cbmhlYWRlci50b3AgaDF7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDB9XG5oZWFkZXIudG9wIC5zdWJ7Y29sb3I6I2I5YjliZH1cbi5jb2RlLXRhZ3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtib3JkZXI6MDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtd2VpZ2h0OjYwMH1cbi5yYWlsLHNlY3Rpb24uY2FyZCwua3Bpe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4fVxuLnJhaWx7cGFkZGluZzo0cHggMTZweCAxNnB4fVxubGVnZW5ke2NvbG9yOnZhcigtLXJlZCk7Zm9udC1zaXplOi45NXJlbTtsZXR0ZXItc3BhY2luZzowO3RleHQtdHJhbnNmb3JtOm5vbmV9XG5pbnB1dCxzZWxlY3R7Ym9yZGVyLXJhZGl1czo2cHh9XG4udGFic3tnYXA6NnB4O2JvcmRlci1ib3R0b206MDtiYWNrZ3JvdW5kOnZhcigtLW5hdik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6NnB4fVxuLnRhYnMgYnV0dG9ue2NvbG9yOnZhcigtLW5hdi1pbmspO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6OXB4IDE2cHg7Zm9udC13ZWlnaHQ6NjAwfVxuLnRhYnMgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDgpfVxuLnRhYnMgYnV0dG9uW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmO2JvcmRlcjowfVxuc2VjdGlvbi5jYXJkIGgye2NvbG9yOnZhcigtLXJlZCk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxLjE1cmVtO3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLWJvdHRvbToxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcn1cbnNlY3Rpb24uY2FyZCBoMiAucmVme2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6Ljc0cmVtO2ZvbnQtZmFtaWx5OnZhcigtLWYtdWkpO2ZvbnQtd2VpZ2h0OjUwMH1cbi5rcGkuaGx7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQtc29mdCl9XG4udml6e2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLXBhbmVsKX1cbi5zZWcgYnV0dG9ue2JvcmRlci1yYWRpdXM6NnB4fVxuLnNlZyBidXR0b25bYXJpYS1wcmVzc2VkPVwidHJ1ZVwiXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX1cbi5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIWltcG9ydGFudDtnYXA6MTZweH1cbi5pbmJveHtiYWNrZ3JvdW5kOnZhcigtLXBhbmVsKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweH1cbi5pbmJveCBzdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1yZWQpO2ZvbnQtc2l6ZToxLjA1cmVtfVxuLmluYm94IHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfVxuLmluYm94IHN1bW1hcnk6OmFmdGVye2NvbnRlbnQ6XCLYpdiu2YHYp9ihIOKWslwiO2ZvbnQtc2l6ZTouOHJlbTtjb2xvcjojZmZmO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjNweCAxMHB4O2ZvbnQtd2VpZ2h0OjYwMH1cbi5pbmJveDpub3QoW29wZW5dKSBzdW1tYXJ5OjphZnRlcntjb250ZW50Olwi2KrYudiv2YrZhCDYp9mE2KjZitin2YbYp9iqIOKWvFwifVxuLmluYm94IC5zdW1oaW50e2ZvbnQtZmFtaWx5OnZhcigtLWYtbnVtKTtmb250LXNpemU6Ljc4cmVtO2NvbG9yOnZhcigtLW11dGVkKTtmb250LXdlaWdodDo0MDA7ZGlyZWN0aW9uOmx0cjtmbGV4OjE7dGV4dC1hbGlnbjpsZWZ0fVxuLmluYm94W29wZW5dIC5zdW1oaW50e2Rpc3BsYXk6bm9uZX1cbi5yYWlse2JvcmRlcjowIWltcG9ydGFudDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKSFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czowIDAgMTJweCAxMnB4O2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKSBtaW5tYXgoMCwxZnIpO2dyaWQtdGVtcGxhdGUtYXJlYXM6XCJhIGNcIiBcImIgYlwiO2dhcDoxMnB4O3BhZGRpbmc6MTJweH1cbi5yYWlsIC5nYXtncmlkLWFyZWE6YX1cbi5yYWlsIC5nY3tncmlkLWFyZWE6Y31cbi5yYWlsIC5nYntncmlkLWFyZWE6Yn1cbi5yYWlsIGZpZWxkc2V0LC5yYWlsIGZpZWxkc2V0OmZpcnN0LWNoaWxke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSk7Z2FwOjhweDthbGlnbi1jb250ZW50OnN0YXJ0O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxMnB4IDEycHg7bWFyZ2luOjA7bWluLXdpZHRoOjB9XG4ucmFpbCAuZ2J7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LG1pbm1heCgwLDFmcikpfVxuLnJhaWwgbGVnZW5ke2Zsb2F0OmxlZnQ7Z3JpZC1jb2x1bW46MS8tMTt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOThyZW07bWFyZ2luOjAgMCAycHg7cGFkZGluZzowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweH1cbi5yYWlsIGxlZ2VuZDo6YmVmb3Jle2NvbnRlbnQ6XCJcIjt3aWR0aDo0cHg7aGVpZ2h0OjE2cHg7YmFja2dyb3VuZDp2YXIoLS1yZWQpO2JvcmRlci1yYWRpdXM6MnB4fVxuLnJhaWwgLnJvdywucmFpbCAucm93LmNoa3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7bWluLXdpZHRoOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjdweCA5cHggOXB4O2JhY2tncm91bmQ6dmFyKC0tZmllbGQpfVxuLnJhaWwgLnJvdy53aWRle2dyaWQtY29sdW1uOjEvLTF9XG4ucmFpbCAucm93e3Bvc2l0aW9uOnJlbGF0aXZlfVxuLnJhaWwgLnJvdyBsYWJlbHtwYWRkaW5nLWlubGluZS1lbmQ6MjJweH1cbi5pbmZve3Bvc2l0aW9uOmFic29sdXRlO3RvcDo2cHg7aW5zZXQtaW5saW5lLWVuZDo2cHg7d2lkdGg6MThweDtoZWlnaHQ6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtmb250OjcwMCAxMnB4LzE4cHggdmFyKC0tZi11aSk7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljg1fVxuLmluZm86aG92ZXIsLmluZm86Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjE7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50LXNvZnQpfVxuI3BhbmVSIHNlY3Rpb24uY2FyZHtzY3JvbGwtbWFyZ2luLXRvcDoxNnB4fVxuQGtleWZyYW1lcyBmbGFzaHswJXtib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1hY2NlbnQpfTEwMCV7Ym94LXNoYWRvdzowIDAgMCAwIHRyYW5zcGFyZW50fX1cbnNlY3Rpb24uY2FyZC5mbGFzaHthbmltYXRpb246Zmxhc2ggMS44cyBlYXNlLW91dH1cbi5yYWlsIC5yb3cgbGFiZWx7Zm9udC1zaXplOi44NXJlbTtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWluLWhlaWdodDowO2hlaWdodDphdXRvfVxuLnJhaWwgLnJvdyBsYWJlbCBzbWFsbHt0ZXh0LWFsaWduOnN0YXJ0O2RpcmVjdGlvbjpsdHI7dW5pY29kZS1iaWRpOnBsYWludGV4dDtmb250LXNpemU6LjdyZW07d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMDAlfVxuLnJhaWwgLnJvdyBpbnB1dCwucmFpbCAucm93IHNlbGVjdHtoZWlnaHQ6MzRweDtiYWNrZ3JvdW5kOnZhcigtLXBhbmVsKX1cbi5yYWlsIC5oaW50e2dyaWQtY29sdW1uOjEvLTE7bWFyZ2luOjA7cGFkZGluZzo2cHggMTBweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudC1zb2Z0KTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6Ljc4cmVtfVxuLnJhaWwgI3RvcG9Cb3g6bm90KFtoaWRkZW5dKSwucmFpbCAjcmlCb3g6bm90KFtoaWRkZW5dKSwucmFpbCAjZmxleEJveDpub3QoW2hpZGRlbl0pe2Rpc3BsYXk6Y29udGVudHN9XG5AbWVkaWEgKG1heC13aWR0aDo3MDBweCl7LnJhaWx7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcik7Z3JpZC10ZW1wbGF0ZS1hcmVhczpcImFcIiBcImNcIiBcImJcIn1cbi5yYWlsIC5nYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9fVxuLmtwaXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTEycHgsMWZyKSkhaW1wb3J0YW50fVxuLmtwaSAudntmb250LXNpemU6MS4xcmVtfVxuLmJ0bntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOjZweH1cbi5oYnRuc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7ZmxleC13cmFwOndyYXB9XG4ucGJ0bntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6Ljg2cmVtO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4zNSk7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggMTJweDtjdXJzb3I6cG9pbnRlcn1cbi5wYnRuOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSl9XG4uZGlzY3ttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMnB4IDE2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItaW5saW5lLXN0YXJ0OjRweCBzb2xpZCB2YXIoLS1yZWQpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOnZhcigtLWZpZWxkKTtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOi44MnJlbTtsaW5lLWhlaWdodDoxLjd9XG4uZGlzYyBie2NvbG9yOnZhcigtLXJlZCl9XG4ucGhlYWR7ZGlzcGxheTpub25lfVxuLmFkc2xvdHttYXJnaW46MTZweCAwO3BhZGRpbmc6NnB4IDhweCA4cHg7Ym9yZGVyOjFweCBkYXNoZWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6dmFyKC0tZmllbGQpO3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OmhpZGRlbn1cbi5tYWluPi5hZHNsb3R7bWFyZ2luOjB9XG4uYWRzbG90IC5hZGxibHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTouNjhyZW07Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206NHB4O2xldHRlci1zcGFjaW5nOi4wMmVtfVxuLndtYXJre2Rpc3BsYXk6bm9uZX1cbltoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9XG5AbWVkaWEgcHJpbnR7Omhvc3R7LS1iZzojZmZmOy0tcGFuZWw6I2ZmZjstLWluazojMjIyOy0tbXV0ZWQ6IzU1NTstLWxpbmU6I2NmY2ZjZjstLWFjY2VudDojMDY2OWZmOy0tYWNjZW50LXNvZnQ6I2U4ZjFmZjstLWZpZWxkOiNmN2Y4ZmE7LS1yZWQ6I2Q5M2MzYzstLW5hdjojMWYyMDI0Oy0tbmF2LWluazojZTdlN2U4Oy0tY2hhcnQtZmlsbDpyZ2JhKDYsMTA1LDI1NSwuMTApO2NvbG9yLXNjaGVtZTpsaWdodH1cbi53cmFwe2JhY2tncm91bmQ6I2ZmZiFpbXBvcnRhbnR9XG4ud3JhcHttYXgtd2lkdGg6bm9uZTtwYWRkaW5nOjA7Zm9udC1zaXplOjEycHh9XG4ud3JhcCAqey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O3ByaW50LWNvbG9yLWFkanVzdDpleGFjdH1cbmhlYWRlci50b3B7bWFyZ2luOjAgMCAxMHB4O2JvcmRlci1yYWRpdXM6OHB4fVxuLnBidG4sLmluYm94LC50YWJzLC5pbmZvLC5zZWcsLnRpcHMsLmludHJvLHNlY3Rpb24uY2FyZC5tYXAsLm1haW4+LmhpbnQsW2RhdGEtcGFuZT1cInJlZlwiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVxuW2RhdGEtcGFuZV06bm90KFtkYXRhLXBhbmU9XCJyZWZcIl0pW2hpZGRlbl17ZGlzcGxheTpncmlkIWltcG9ydGFudH1cbltkYXRhLXBhbmU9XCJwXCJdLFtkYXRhLXBhbmU9XCJkXCJdLFtkYXRhLXBhbmU9XCJlXCJdLFtkYXRhLXBhbmU9XCJjXCJde2JyZWFrLWJlZm9yZTpwYWdlfVxuLmtwaXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg2LG1pbm1heCgwLDFmcikpIWltcG9ydGFudH1cbi5rcGl7cGFkZGluZzo4cHh9XG4ucGhlYWQgLnBtZXRhIHNwYW46Zmlyc3QtY2hpbGR7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLXJlZCk7Zm9udC1zaXplOjFyZW19XG5bZGF0YS1wYW5lXTo6YmVmb3Jle2NvbnRlbnQ6YXR0cihkYXRhLXB0aXRsZSk7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEuMTVyZW07Y29sb3I6dmFyKC0taW5rKTtib3JkZXItYm90dG9tOjJweCBzb2xpZCB2YXIoLS1pbmspO3BhZGRpbmctYm90dG9tOjRweH1cbi5waGVhZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEycHh9XG4ucGhlYWQgdGFibGV7ZGlyZWN0aW9uOnJ0bDtmb250LXNpemU6Ljc4cmVtfVxuLnBoZWFkIHRke3doaXRlLXNwYWNlOm5vcm1hbDt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6M3B4IDZweH1cbi5waGVhZCB0ZC5re2NvbG9yOnZhcigtLW11dGVkKTtmb250LWZhbWlseTp2YXIoLS1mLXVpKTt3aWR0aDoyMiV9XG4ucGhlYWQgLnBtZXRhe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6LjhyZW07Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206NnB4fVxuLm1haW4sLmRpcmdyaWR7Z2FwOjEwcHh9XG4udml6LC5rcGlzLC5rcGksLmZsYWcsdHIsc3ZnLC5kaXNje2JyZWFrLWluc2lkZTphdm9pZH1cbnNlY3Rpb24uY2FyZHticmVhay1pbnNpZGU6YXV0bztwYWRkaW5nOjEwcHggMTJweH1cbnNlY3Rpb24uY2FyZCBoMnticmVhay1hZnRlcjphdm9pZH1cbi52aXosLnRibHtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH1cbi52aXogc3Zne21pbi13aWR0aDowIWltcG9ydGFudDttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31cbi52aXpyb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcikgbWlubWF4KDAsMmZyKSFpbXBvcnRhbnR9XG4udHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIG1pbm1heCgwLDFmcikhaW1wb3J0YW50fVxudGFibGV7Zm9udC1zaXplOi43NHJlbX1cbnRoLHRke3BhZGRpbmc6M3B4IDVweH1cbi5kaXNje21hcmdpbi10b3A6MTJweDtmb250LXNpemU6Ljc1cmVtfVxuZm9vdGVyLmRpc2N7ZGlzcGxheTpub25lIWltcG9ydGFudH1cbi5hZHNsb3R7ZGlzcGxheTpub25lIWltcG9ydGFudH1cbi53bWFya3tkaXNwbGF5OmZsZXghaW1wb3J0YW50O3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjUwfVxuLndtYXJrIHNwYW57dHJhbnNmb3JtOnJvdGF0ZSgtMzJkZWcpO2ZvbnQ6ODAwIDEyMHB4LzEgdmFyKC0tZi11aSk7Y29sb3I6cmdiYSg2LDEwNSwyNTUsLjA5KTtsZXR0ZXItc3BhY2luZzouMDNlbTt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlyZWN0aW9uOmx0cn19XG4ucm93LmNoa3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKSBhdXRvfVxuLnJvdy5jaGsgaW5wdXR7d2lkdGg6YXV0b31cbmgzLnN1Yntmb250LXNpemU6Ljg2cmVtO21hcmdpbjoxNHB4IDAgNnB4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LXdlaWdodDo2MDB9XG4ucGlsbHtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LWZhbWlseTp2YXIoLS1mLW51bSk7Zm9udC1zaXplOi43NHJlbTtwYWRkaW5nOjFweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O21hcmdpbi1pbmxpbmUtZW5kOjRweH1cbi5waWxsLm9re2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudCl9XG4ucGlsbC5ub3tib3JkZXItY29sb3I6dmFyKC0td2Fybik7Y29sb3I6dmFyKC0td2Fybil9XG50ZC5uZWd7Y29sb3I6dmFyKC0tYmFkKX1cbnRkLnBvc3tjb2xvcjp2YXIoLS1hY2NlbnQpfVxuLmxlZ2VuZHtmb250LXNpemU6Ljc4cmVtO2NvbG9yOnZhcigtLW11dGVkKTttYXJnaW4tdG9wOjhweH1cbi5kaXJncmlke2Rpc3BsYXk6Z3JpZDtnYXA6MTZweH1cbi5pbnRyb3ttYXJnaW46MCAwIDRweDtwYWRkaW5nOjEwcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1pbmxpbmUtc3RhcnQ6NHB4IHNvbGlkIHZhcigtLXJlZCk7YmFja2dyb3VuZDp2YXIoLS1wYW5lbCk7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOi45NXJlbX1cbi50Ymwud3JhcCB0ZHt3aGl0ZS1zcGFjZTpub3JtYWw7bWluLXdpZHRoOjkwcHg7dGV4dC1hbGlnbjpsZWZ0fVxuLnRpcHN7bWFyZ2luOjA7cGFkZGluZzoxMHB4IDE0cHggMTBweCAxNHB4O2JvcmRlcjoxcHggZGFzaGVkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZTouODRyZW07Y29sb3I6dmFyKC0tbXV0ZWQpO2xpc3Qtc3R5bGU6bm9uZX1cbi50aXBzIGxpe21hcmdpbjoycHggMH1cbi50aXBzIGxpOjpiZWZvcmV7Y29udGVudDpcIuKAoiBcIjtjb2xvcjp2YXIoLS1hY2NlbnQpfVxuLnZpentib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4O21hcmdpbjoxMHB4IDA7YmFja2dyb3VuZDp2YXIoLS1iZyk7b3ZlcmZsb3cteDphdXRvfVxuLnZpenJvd3tkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcikgbWlubWF4KDAsMmZyKTtnYXA6MTBweH1cbi52aXpyb3cgLnZpenttYXJnaW46MH1cbkBtZWRpYSAobWF4LXdpZHRoOjkwMHB4KXsudml6cm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fVxuLnNlZ3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW46NnB4IDB9XG4uc2VnIGJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1zaXplOi44cmVtO3BhZGRpbmc6NHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tcGFuZWwpO2NvbG9yOnZhcigtLWluayk7Y3Vyc29yOnBvaW50ZXJ9XG4uc2VnIGJ1dHRvblthcmlhLXByZXNzZWQ9XCJ0cnVlXCJde2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2ZvbnQtd2VpZ2h0OjYwMH1cbi53cmFwe2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWluayk7Zm9udC1mYW1pbHk6dmFyKC0tZi11aSk7Zm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MS41NX1cbmltZ3ttYXgtd2lkdGg6MTAwJX0iKyI8L3N0eWxlPiIrIjxkaXYgY2xhc3M9XCJ3cmFwXCIgaWQ9XCJ3Y2FsY1wiIGRpcj1cInJ0bFwiIGxhbmc9XCJhclwiPlxuPGhlYWRlciBjbGFzcz1cInRvcFwiPlxuICA8ZGl2PlxuICAgIDxoMT7Yrdin2LPYqNipINij2K3Zhdin2YQg2KfZhNix2YrYp9itPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwic3ViXCI+2LbYutmI2Lcg2KfZhNix2YrYp9itINi52YTZiSDYp9mE2YXYqNin2YbZijog2KfZhNmG2LjYp9mFINin2YTYpdmG2LTYp9im2Yog2KfZhNix2KbZitiz2Yog2YjYp9mE2KrZg9iz2YrYp9iq2Iwg2KjYp9mE2YjYrdiv2KfYqiDYp9mE2YXYqtix2YrYqTwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImhidG5zXCI+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwYnRuXCIgaWQ9XCJwcmludEJ0blwiIHRpdGxlPVwi2LfYqNin2LnYqSDYp9mE2YbYqtin2KbYrCDYo9mIINit2YHYuNmH2KcgUERGXCI+PHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PHBhdGggZD1cIk02IDlWM2gxMnY2TTYgMThINGExIDEgMCAwIDEtMS0xdi02YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFoLTJNNyAxNGgxMHY3SDd6XCIgc3R5bGU9XCJmaWxsOm5vbmU7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWpvaW46cm91bmRcIi8+PC9zdmc+2LfYqNin2LnYqSAvIFBERjwvYnV0dG9uPjxzcGFuIGNsYXNzPVwiY29kZS10YWdcIj5BU0NFL1NFSSA3LTIyPC9zcGFuPjwvZGl2PlxuPC9oZWFkZXI+XG48ZGl2IGNsYXNzPVwiYWRzbG90XCIgZGF0YS1hZD1cInRvcFwiIGhpZGRlbj48c3BhbiBjbGFzcz1cImFkbGJsXCI+2KXYudmE2KfZhjwvc3Bhbj48c2xvdCBuYW1lPVwiYWQtdG9wXCI+PC9zbG90PjwvZGl2PlxuPGRpdiBjbGFzcz1cInBoZWFkXCIgaWQ9XCJwaGVhZFwiPjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuPGRldGFpbHMgY2xhc3M9XCJpbmJveFwiIGlkPVwiaW5ib3hcIiBvcGVuPjxzdW1tYXJ5PjxzcGFuPtio2YrYp9mG2KfYqiDYp9mE2YXYqNmG2Ykg2YjYp9mE2YXZiNmC2Lk8L3NwYW4+PHNwYW4gY2xhc3M9XCJzdW1oaW50XCIgaWQ9XCJzdW1oaW50XCI+PC9zcGFuPjwvc3VtbWFyeT5cbjxmb3JtIGNsYXNzPVwicmFpbFwiIGlkPVwiZlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICA8ZmllbGRzZXQgY2xhc3M9XCJnYVwiPlxuICAgIDxsZWdlbmQ+2KfZhNix2YrYp9itINmI2KfZhNmF2YjZgti5PC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJyaXNrXCI+2YHYptipINin2YTYrti32YjYsdipPHNtYWxsPlJpc2sgQ2F0ZWdvcnk8L3NtYWxsPjwvbGFiZWw+PHNlbGVjdCBpZD1cInJpc2tcIj48b3B0aW9uIHZhbHVlPVwiSVwiPkk8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiSUlcIiBzZWxlY3RlZD5JSTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJJSUlcIj5JSUk8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiSVZcIj5JVjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiVlwiPtin2YTYs9ix2LnYqSDYp9mE2KPYs9in2LPZitipIFY8c21hbGw+bS9zIMK3IDMtcyBndXN0PC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cIlZcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuNVwiIHZhbHVlPVwiNTBcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cImV4cFwiPtmB2KbYqSDYp9mE2KrYudix2LY8c21hbGw+RXhwb3N1cmUgwqcyNi43PC9zbWFsbD48L2xhYmVsPjxzZWxlY3QgaWQ9XCJleHBcIj48b3B0aW9uPkI8L29wdGlvbj48b3B0aW9uIHNlbGVjdGVkPkM8L29wdGlvbj48b3B0aW9uPkQ8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cImVsZXZcIj7ZhdmG2LPZiNioINin2YTZhdmI2YLYuTxzbWFsbD56ZSDCtyBtPC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cImVsZXZcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjEwXCIgdmFsdWU9XCI2MDBcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cImtlT25lXCI+2YXYudin2YXZhCBLZTxzbWFsbD7CpzI2Ljk8L3NtYWxsPjwvbGFiZWw+PHNlbGVjdCBpZD1cImtlT25lXCI+PG9wdGlvbiB2YWx1ZT1cImNhbGNcIiBzZWxlY3RlZD7Yrdiz2Kgg2KfZhNmF2YbYs9mI2Kg8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwib25lXCI+S2UgPSAxLjA8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cInRvcG9cIj7Yp9mE2KrYttin2LHZitizPHNtYWxsPkZpZy4gMjYuOC0xPC9zbWFsbD48L2xhYmVsPjxzZWxlY3QgaWQ9XCJ0b3BvXCI+PG9wdGlvbiB2YWx1ZT1cIm5vbmVcIiBzZWxlY3RlZD7Yo9ix2LYg2YXYs9iq2YjZitipPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cInJpZGdlXCI+2KrZhCDYt9mI2YTZiiBSaWRnZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJlc2NcIj7YrNix2YEgRXNjYXJwbWVudDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJoaWxsXCI+2KrZhCDZhdmG2YHYsdivIEhpbGw8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICA8ZGl2IGlkPVwidG9wb0JveFwiIGhpZGRlbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwidEhcIj7Yp9ix2KrZgdin2Lkg2KfZhNiq2YQgSDxzbWFsbD5tPC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cInRIXCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIxXCIgdmFsdWU9XCIzMFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJ0TGhcIj7Yp9mE2YXYs9in2YHYqSBMaDxzbWFsbD5tPC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cInRMaFwiIHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMVwiIHZhbHVlPVwiODBcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwidHhcIj7Yp9mE2KjYudivINi52YYg2KfZhNmC2YXYqSB4PHNtYWxsPm08L3NtYWxsPjwvbGFiZWw+PGlucHV0IGlkPVwidHhcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjFcIiB2YWx1ZT1cIjIwXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cInRTaWRlXCI+2YXZiNmC2Lkg2KfZhNmF2KjZhtmJPHNtYWxsPnJlbGF0aXZlIHRvIGNyZXN0PC9zbWFsbD48L2xhYmVsPjxzZWxlY3QgaWQ9XCJ0U2lkZVwiPjxvcHRpb24gdmFsdWU9XCJ1cFwiPtmC2KjZhCDYp9mE2YLZhdipPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImRvd25cIiBzZWxlY3RlZD7YqNi52K8g2KfZhNmC2YXYqTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoaW50XCI+2KfZgtix2KMgViDZhdmGINiu2LHZiti32Kkg2KfZhNmF2YjZgti5INmE2YbZgdizINmB2KbYqSDYp9mE2K7Yt9mI2LHYqSAo2KrYqNmI2YrYqCDYp9mE2YXYudin2YXZhNin2KopLjwvZGl2PlxuICA8L2ZpZWxkc2V0PlxuXG4gIDxmaWVsZHNldCBjbGFzcz1cImdjXCI+XG4gICAgPGxlZ2VuZD7Yqti12YbZitmBINin2YTYpdi62YTYp9mCINmI2KfZhNiq2YPYs9mK2KfYqjwvbGVnZW5kPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiZW5jbFwiPtiq2LXZhtmK2YEg2KfZhNil2LrZhNin2YI8c21hbGw+VGFibGUgMjYuMTMtMTwvc21hbGw+PC9sYWJlbD48c2VsZWN0IGlkPVwiZW5jbFwiPjxvcHRpb24gdmFsdWU9XCJlbmNcIiBzZWxlY3RlZD7Zhdi62YTZgjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJwZVwiPtmF2LrZhNmCINis2LLYptmK2KfZizwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJwb1wiPtmF2YHYqtmI2K0g2KzYstim2YrYp9mLPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJnTW9kZVwiPtmG2YjYuSDYp9mE2YXZhti02KM8c21hbGw+wqcyNi4xMTwvc21hbGw+PC9sYWJlbD48c2VsZWN0IGlkPVwiZ01vZGVcIj48b3B0aW9uIHZhbHVlPVwiMDg1XCIgc2VsZWN0ZWQ+2LXZhNioIEcgPSAwLjg1PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cInJpZ2lkXCI+2LXZhNio2IwgRyDZhdit2LPZiNioPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImZsZXhcIj7Zhdix2YYgR2Y8L29wdGlvbj48L3NlbGVjdD48L2Rpdj5cbiAgICA8ZGl2IGlkPVwicmlCb3hcIiBoaWRkZW4+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cIlZpXCI+2KfZhNit2KzZhSDYp9mE2K/Yp9iu2YTZiiBWaTxzbWFsbD5twrMgwrcgMCA9IG5vbmU8L3NtYWxsPjwvbGFiZWw+PGlucHV0IGlkPVwiVmlcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjEwXCIgdmFsdWU9XCIwXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cIkFvZ1wiPtmF2LPYp9it2Kkg2KfZhNmB2KrYrdin2KogQW9nPHNtYWxsPm3Csjwvc21hbGw+PC9sYWJlbD48aW5wdXQgaWQ9XCJBb2dcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjFcIiB2YWx1ZT1cIjIwXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cImZsZXhCb3hcIiBoaWRkZW4+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+PGxhYmVsIGZvcj1cIm4xXCI+2KfZhNiq2LHYr9ivINin2YTYt9io2YrYudmKIG4xPHNtYWxsPkh6PC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cIm4xXCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjAxXCIgdmFsdWU9XCIwLjZcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiYmV0YVwiPtmG2LPYqNipINin2YTYqtiu2YXZitivIM6yPHNtYWxsPmUuZy4gMC4wMTU8L3NtYWxsPjwvbGFiZWw+PGlucHV0IGlkPVwiYmV0YVwiIHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4wMDVcIiB2YWx1ZT1cIjAuMDE1XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyB3aWRlXCI+PGxhYmVsIGZvcj1cImFyZWFzXCI+2KfZhNmF2LPYp9it2KfYqiDYp9mE2YHYudin2YTYqSDZhNmE2KrZg9iz2YrYp9iqIEE8c21hbGw+bcKyIMK3IGNvbW1hIHNlcGFyYXRlZDwvc21hbGw+PC9sYWJlbD48aW5wdXQgaWQ9XCJhcmVhc1wiIHZhbHVlPVwiMSwgNSwgMTAsIDI1XCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhpbnRcIj5BID0g2KfZhNio2K3YsSDDlyDYp9mE2LnYsdi2INin2YTZhdit2YXZkdmE2Iwg2YjZhNinINmK2YLZhCDYp9mE2LnYsdi2INi52YYg2KvZhNirINin2YTYqNit2LEuPC9kaXY+XG4gIDwvZmllbGRzZXQ+XG5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiZ2JcIj5cbiAgICA8bGVnZW5kPtmH2YbYr9iz2Kkg2KfZhNmF2KjZhtmJPC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJyb29mXCI+2LTZg9mEINin2YTYs9mC2YE8c21hbGw+Um9vZiB0eXBlPC9zbWFsbD48L2xhYmVsPjxzZWxlY3QgaWQ9XCJyb29mXCI+PG9wdGlvbiB2YWx1ZT1cImZsYXRcIj7Zhdiz2KrZiNmNIEZsYXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiZ2FibGVcIiBzZWxlY3RlZD7YrNmF2YTZiNmG2YogR2FibGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiaGlwXCI+2YfYsdmF2YogSGlwPC9vcHRpb24+PC9zZWxlY3Q+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJ0aGV0YVwiPtmF2YrZhCDYp9mE2LPZgtmBIM64PHNtYWxsPmRlZ3JlZXM8L3NtYWxsPjwvbGFiZWw+PGlucHV0IGlkPVwidGhldGFcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuNVwiIHZhbHVlPVwiNlwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiaGVcIj7Yp9ix2KrZgdin2Lkg2KfZhNi32YbZgSBoZTxzbWFsbD5lYXZlIGhlaWdodCDCtyBtPC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cImhlXCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjFcIiB2YWx1ZT1cIjkuMlwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiTHJcIj7Yp9mE2LfZiNmEIExyPHNtYWxsPmFsb25nIHJpZGdlIMK3IG08L3NtYWxsPjwvbGFiZWw+PGlucHV0IGlkPVwiTHJcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cIjAuMVwiIHZhbHVlPVwiODEuOVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwiV1wiPtin2YTYqNit2LEgVzxzbWFsbD5hY3Jvc3MgcmlkZ2UgwrcgbTwvc21hbGw+PC9sYWJlbD48aW5wdXQgaWQ9XCJXXCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCIwLjFcIiB2YWx1ZT1cIjQwXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJocFwiPtin2LHYqtmB2KfYuSDYp9mE2KjYp9ix2KfYqNmK2Ko8c21hbGw+bSDCtyAwID0gbm9uZTwvc21hbGw+PC9sYWJlbD48aW5wdXQgaWQ9XCJocFwiIHR5cGU9XCJudW1iZXJcIiBzdGVwPVwiMC4xXCIgdmFsdWU9XCIwXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjxsYWJlbCBmb3I9XCJvaFwiPtio2LHZiNiyINin2YTYs9mC2YE8c21hbGw+T3Zlcmhhbmc8L3NtYWxsPjwvbGFiZWw+PHNlbGVjdCBpZD1cIm9oXCI+PG9wdGlvbiB2YWx1ZT1cIjBcIiBzZWxlY3RlZD7ZhNinINmK2YjYrNivPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIjFcIj7ZitmI2KzYrzwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48bGFiZWwgZm9yPVwibGV2ZWxzXCI+2YXZhtin2LPZitioINin2YTYt9mI2KfYqNmCPHNtYWxsPm0gwrcgY29tbWEgc2VwYXJhdGVkPC9zbWFsbD48L2xhYmVsPjxpbnB1dCBpZD1cImxldmVsc1wiIHZhbHVlPVwiMywgNlwiPjwvZGl2PlxuICA8L2ZpZWxkc2V0PlxuPC9mb3JtPlxuPC9kZXRhaWxzPlxuXG48ZGl2IGNsYXNzPVwibWFpblwiPlxuICA8ZGl2IGNsYXNzPVwia3Bpc1wiIGlkPVwia3Bpc1wiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWRzbG90XCIgZGF0YS1hZD1cIm1pZFwiIGhpZGRlbj48c3BhbiBjbGFzcz1cImFkbGJsXCI+2KXYudmE2KfZhjwvc3Bhbj48c2xvdCBuYW1lPVwiYWQtbWlkXCI+PC9zbG90PjwvZGl2PlxuICA8bmF2IGNsYXNzPVwidGFic1wiIHJvbGU9XCJ0YWJsaXN0XCIgaWQ9XCJ0YWJzXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiIGRhdGEtdD1cInBcIiBhcmlhLXNlbGVjdGVkPVwidHJ1ZVwiPtin2YTZhdi52KfZhdmE2KfYqjwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIiBkYXRhLXQ9XCJkXCIgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCI+2KfZhNi32LHZitmC2Kkg2KfZhNin2KrYrNin2YfZitipICjYp9mE2LnYp9mF2KkpPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiIGRhdGEtdD1cImVcIiBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIj7Yp9mE2YXYqNin2YbZiiDYp9mE2YXZhtiu2YHYttipICjYp9mE2YXYqNiz2LfYqSk8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiByb2xlPVwidGFiXCIgZGF0YS10PVwiY1wiIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiPtin2YTYqtmD2LPZitin2KogQyZhbXA7QzwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIiBkYXRhLXQ9XCJyZWZcIiBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIj7Zhdix2KzYuSDYp9mE2YPZiNivPC9idXR0b24+XG4gIDwvbmF2PlxuXG4gIDxkaXYgZGF0YS1wYW5lPVwicFwiIGNsYXNzPVwibWFpblwiPlxuICAgIDxwIGNsYXNzPVwiaW50cm9cIj7Yo9iv2K7ZhCDYqNmK2KfZhtin2Kog2KfZhNmF2YjZgti5INmI2KfZhNmF2KjZhtmJINmF2YYg2KfZhNmE2YjYrdipINio2KfZhNij2LnZhNmJ2Iwg2YjZh9mG2Kcg2KrYuNmH2LEg2YXYudin2YXZhNin2Kog2KfZhNix2YrYp9itINmI2LbYuti3INin2YTYs9ix2LnYqSBxeiDYudmE2Ykg2YPZhCDYp9ix2KrZgdin2LkuPC9wPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZFwiPjxoMj7YtNmD2YQg2KfZhNmF2KjZhtmJINmI2KfZhNmF2K/YrtmE2KfYqiA8c3BhbiBjbGFzcz1cInJlZlwiPtmK2KrYrdiv2Ksg2YXYuSDZg9mEINiq2LnYr9mK2YQ8L3NwYW4+PC9oMj48ZGl2IGNsYXNzPVwidml6XCIgaWQ9XCJibGRTa2V0Y2hcIj48L2Rpdj48L3NlY3Rpb24+XG4gICAgPGRpdiBjbGFzcz1cInR3b1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkXCI+PGgyPti22LrYtyDYp9mE2LPYsdi52Kkg2LnZhNmJINin2YTYp9ix2KrZgdin2LkgPHNwYW4gY2xhc3M9XCJyZWZcIj5FcS4gMjYuMTAtMTwvc3Bhbj48L2gyPjxkaXYgY2xhc3M9XCJ0YmxcIiBpZD1cInF6VGFibGVcIj48L2Rpdj48L3NlY3Rpb24+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmRcIj48aDI+2YXZhtit2YbZiSBxeiA8c3BhbiBjbGFzcz1cInJlZlwiPmtOL23Csjwvc3Bhbj48L2gyPjxkaXYgaWQ9XCJxekNoYXJ0XCI+PC9kaXY+PC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0d29cIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZFwiPjxoMj7Yrti32YjYp9iqINin2YTYrdiz2KfYqCA8c3BhbiBjbGFzcz1cInJlZlwiPkNoLiAyNjwvc3Bhbj48L2gyPjxkaXYgY2xhc3M9XCJjYWxjXCIgaWQ9XCJzdGVwc1wiPjwvZGl2Pjwvc2VjdGlvbj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZFwiPjxoMj7Yp9mE2LbYuti3INin2YTYr9in2K7ZhNmKINmI2KfZhNmH2KjYqSA8c3BhbiBjbGFzcz1cInJlZlwiPsKnMjYuMTEsIMKnMjYuMTM8L3NwYW4+PC9oMj48ZGl2IGNsYXNzPVwiY2FsY1wiIGlkPVwiZ3N0ZXBzXCI+PC9kaXY+PC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCBtYXBcIj48aDI+2K7YsdmK2LfYqSDYs9ix2LnYqSDYp9mE2LHZitin2K0g2YTZhNmF2YXZhNmD2KkgKNmF2LHYrNi5KSA8c3BhbiBjbGFzcz1cInJlZlwiIGlkPVwibWFwUmVmXCI+PC9zcGFuPjwvaDI+XG4gICAgICA8ZmlndXJlIHN0eWxlPVwibWFyZ2luOjBcIj48aW1nIGlkPVwibWFwSW1nXCIgYWx0PVwi2K7YsdmK2LfYqSDYs9ix2LnYqSDYp9mE2LHZitin2K0g2KfZhNmC2LXZiNmJINmE2YTZhdmF2YTZg9ipINin2YTYudix2KjZitipINin2YTYs9i52YjYr9mK2Kkg2K3Ys9ioINmB2KbYqSDYp9mE2K7Yt9mI2LHYqVwiPjxmaWdjYXB0aW9uIGlkPVwibWFwQ2FwXCI+PC9maWdjYXB0aW9uPjwvZmlndXJlPlxuICAgICAgPGRpdiBjbGFzcz1cImZsYWdcIiBpZD1cIm1hcEVyclwiIGhpZGRlbj48Yj4hPC9iPjxzcGFuPtiq2LnYsNmR2LEg2KrYrdmF2YrZhCDYtdmI2LHYqSDYp9mE2K7YsdmK2LfYqS4g2KrYo9mD2K8g2KPZhiDYp9mE2LHYp9io2Lcg2YXYqNin2LTYsSDZhNi12YjYsdipICjZitio2K/YoyDYutin2YTYqNmL2Kcg2KjZgCBodHRwczovL2Jsb2dnZXIuZ29vZ2xldXNlcmNvbnRlbnQuY29tKSDZiNmE2YrYsyDYsdin2KjYtyDYtdmB2K3YqSDYo9mIINix2KfYqNi3INmF2LTYp9ix2YPYqS48L3NwYW4+PC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGRhdGEtcGFuZT1cImRcIiBoaWRkZW4gY2xhc3M9XCJkaXJncmlkXCIgaWQ9XCJwYW5lRFwiPjwvZGl2PlxuICA8ZGl2IGRhdGEtcGFuZT1cImVcIiBoaWRkZW4gY2xhc3M9XCJkaXJncmlkXCIgaWQ9XCJwYW5lRVwiPjwvZGl2PlxuICA8ZGl2IGRhdGEtcGFuZT1cImNcIiBoaWRkZW4gY2xhc3M9XCJkaXJncmlkXCIgaWQ9XCJwYW5lQ1wiPjwvZGl2PlxuICA8ZGl2IGRhdGEtcGFuZT1cInJlZlwiIGhpZGRlbiBjbGFzcz1cImRpcmdyaWRcIiBpZD1cInBhbmVSXCI+PC9kaXY+XG5cbiAgPHAgY2xhc3M9XCJoaW50XCI+2KfZhNmF2LHYrdmE2Kkg2KfZhNmC2KfYr9mF2Kk6INin2YTZgdi12YQgMjkgKNin2YTYo9iz2YjYp9ix2Iwg2KfZhNmE2KfZgdiq2KfYqtiMINin2YTZhdi52K/Yp9iqINmB2YjZgiDYp9mE2LPYt9itKSDZiNin2YTZhdio2KfZhtmKINin2YTZhdmB2KrZiNit2KkuPC9wPlxuPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhZHNsb3RcIiBkYXRhLWFkPVwiYm90dG9tXCIgaGlkZGVuPjxzcGFuIGNsYXNzPVwiYWRsYmxcIj7Ypdi52YTYp9mGPC9zcGFuPjxzbG90IG5hbWU9XCJhZC1ib3R0b21cIj48L3Nsb3Q+PC9kaXY+XG48ZGl2IGNsYXNzPVwid21hcmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48c3Bhbj5jaXZpbG1ha2VyPC9zcGFuPjwvZGl2PlxuPGZvb3RlciBjbGFzcz1cImRpc2NcIiByb2xlPVwibm90ZVwiPjxiPtil2K7ZhNin2KEg2YXYs9ik2YjZhNmK2Kk6PC9iPiDZh9iw2Ycg2KfZhNit2KfYs9io2Kkg2KPYr9in2Kkg2YXYs9in2LnYr9ipINmE2YTZhdmH2YbYr9izINmF2KjZhtmK2Kkg2LnZhNmJIEFTQ0UvU0VJIDctMjLYjCDZiNiq2Y/Yudix2LYg2YbYqtin2KbYrNmH2Kcg2YTZhNin2LPYqtix2LTYp9ivINmI2YTYpyDYqti62YbZiiDYudmGINin2YTYsdis2YjYuSDYpdmE2Ykg2YbYtSDYp9mE2YPZiNivLiDYqtmC2Lkg2YXYs9ik2YjZhNmK2Kkg2KfZhNiq2K3ZgtmCINmF2YYg2KfZhNmF2K/YrtmE2KfYqiDZiNin2YTZhtiq2KfYptisINmI2KfYudiq2YXYp9iv2YfYpyDZgdmKINin2YTYqti12YXZitmFINi52YTZiSDYp9mE2YXZh9mG2K/YsyDYp9mE2YXYtdmF2YUg2YjYrdiv2YfYjCDZiNmE2Kcg2YrYqtit2YXZhCDYp9mE2YXZiNmC2Lkg2KPZiiDZhdiz2KTZiNmE2YrYqSDYudmGINin2LPYqtiu2K/Yp9mF2YfYpy48L2Zvb3Rlcj5cbjwvZGl2PiI7Ci8qID09PT09IEFTQ0UgNy0yMiB3aW5kIGNhbGN1bGF0aW9uIGVuZ2luZSAoU0kpLiBQdXJlIGZ1bmN0aW9ucywgbm8gRE9NLiA9PT09PSAqLwpjb25zdCBGVDIgPSAxMC43NjM5OyAvLyBmdMKyIHBlciBtwrIKCi8vIFRhYmxlIDI2LjExLTEgKFNJKQpjb25zdCBFWFAgPSB7CiAgQjoge2FscGhhOiA3LjUsICB6ZzogMTAwMCwgYzogMC4zMCwgbDogOTcuNTQsICBlcHM6IDEvMy4wLCB6bWluOiA5LjE0LCBiQmFyOiAwLjQ3LCBhQmFyOiAxLzQuNX0sCiAgQzoge2FscGhhOiA5LjgsICB6ZzogNzUwLCAgYzogMC4yMCwgbDogMTUyLjQwLCBlcHM6IDEvNS4wLCB6bWluOiA0LjU3LCBiQmFyOiAwLjY2LCBhQmFyOiAxLzYuNH0sCiAgRDoge2FscGhhOiAxMS41LCB6ZzogNTkwLCAgYzogMC4xNSwgbDogMTk4LjEyLCBlcHM6IDEvOC4wLCB6bWluOiAyLjEzLCBiQmFyOiAwLjc4LCBhQmFyOiAxLzguMH0KfTsKLy8gVGFibGUgMjYuMTAtMQpjb25zdCBLWl9aID0gWzQuNiw2LjEsNy42LDkuMSwxMi4yLDE1LjIsMTguMywyMS4zLDI0LjQsMjcuNCwzMC41LDM2LjYsNDIuNyw0OC44LDU0LjksNjEuMCw3Ni4yLDkxLjQsMTA2LjcsMTIxLjksMTM3LjIsMTUyLjRdOwpjb25zdCBLWl9UID0gewogIEI6IFswLjU3LDAuNjIsMC42NiwwLjcwLDAuNzQsMC43OSwwLjgzLDAuODYsMC45MCwwLjkyLDAuOTUsMS4wMCwxLjA0LDEuMDgsMS4xMSwxLjE0LDEuMjEsMS4yNywxLjMzLDEuMzgsMS40MiwxLjQ2XSwKICBDOiBbMC44NSwwLjkwLDAuOTQsMC45OCwxLjA0LDEuMDksMS4xMywxLjE3LDEuMjEsMS4yNCwxLjI2LDEuMzEsMS4zNCwxLjM5LDEuNDEsMS40NCwxLjUxLDEuNTcsMS42MiwxLjY2LDEuNzAsMS43NF0sCiAgRDogWzEuMDMsMS4wOCwxLjEyLDEuMTYsMS4yMiwxLjI3LDEuMzEsMS4zNCwxLjM4LDEuNDAsMS40MywxLjQ4LDEuNTIsMS41NSwxLjU4LDEuNjEsMS42OCwxLjczLDEuNzgsMS44MiwxLjg2LDEuODldCn07Ci8vIFRhYmxlIDI2LjEzLTEKY29uc3QgR0NQSSA9IHtlbmM6IDAuMTgsIHBlOiAwLjU1LCBwbzogMC4xOCwgb3BlbjogMH07CmNvbnN0IEVOQ0xfTkFNRSA9IHtlbmM6ICJFbmNsb3NlZCIsIHBlOiAiUGFydGlhbGx5IGVuY2xvc2VkIiwgcG86ICJQYXJ0aWFsbHkgb3BlbiIsIG9wZW46ICJPcGVuIn07Ci8vIEZpZy4gMjYuOC0xCmNvbnN0IFRPUE8gPSB7CiAgcmlkZ2U6IHtuYW1lOiAiMi1EIHJpZGdlIiwgazE6IHtCOiAxLjMwLCBDOiAxLjQ1LCBEOiAxLjU1fSwgZ2FtbWE6IDMuMCwgbXU6IHt1cDogMS41LCBkb3duOiAxLjV9fSwKICBlc2M6ICAge25hbWU6ICIyLUQgZXNjYXJwbWVudCIsIGsxOiB7QjogMC43NSwgQzogMC44NSwgRDogMC45NX0sIGdhbW1hOiAyLjUsIG11OiB7dXA6IDEuNSwgZG93bjogNC4wfX0sCiAgaGlsbDogIHtuYW1lOiAiMy1EIGF4aXN5bW1ldHJpYyBoaWxsIiwgazE6IHtCOiAwLjk1LCBDOiAxLjA1LCBEOiAxLjE1fSwgZ2FtbWE6IDQuMCwgbXU6IHt1cDogMS41LCBkb3duOiAxLjV9fQp9Owpjb25zdCBLRF9CTERHID0gMC44NTsgLy8gVGFibGUgMjYuNi0xLCBNV0ZSUyBhbmQgQyZDIG9mIGJ1aWxkaW5ncwoKZnVuY3Rpb24gbGVycCh4LCB4cywgeXMpIHsKICBpZiAoeCA8PSB4c1swXSkgcmV0dXJuIHlzWzBdOwogIGZvciAobGV0IGkgPSAxOyBpIDwgeHMubGVuZ3RoOyBpKyspIGlmICh4IDw9IHhzW2ldKSByZXR1cm4geXNbaS0xXSArICh5c1tpXS15c1tpLTFdKSAqICh4LXhzW2ktMV0pIC8gKHhzW2ldLXhzW2ktMV0pOwogIHJldHVybiB5c1t5cy5sZW5ndGgtMV07Cn0KZnVuY3Rpb24ga3pGb3JtdWxhKHosIGUpIHsgY29uc3QgRSA9IEVYUFtlXTsgY29uc3QgenogPSBNYXRoLm1heCh6LCA0LjYpOyByZXR1cm4genogPj0gRS56ZyA/IDIuNDEgOiAyLjQxICogTWF0aC5wb3coenovRS56ZywgMi9FLmFscGhhKTsgfQovLyBvcHQuY2gyODogZm9vdG5vdGUgKiBvZiBUYWJsZSAyNi4xMC0xIChFeHBvc3VyZSBCLCB6IDwgOS4xIG0g4oaSIDAuNzApCmZ1bmN0aW9uIEt6KHosIGUsIG9wdCA9IHt9KSB7CiAgaWYgKG9wdC5jaDI4ICYmIGUgPT09ICJCIiAmJiB6IDwgOS4xKSByZXR1cm4gMC43MDsKICBpZiAoeiA+IDE1Mi40KSByZXR1cm4ga3pGb3JtdWxhKHosIGUpOwogIHJldHVybiBsZXJwKHosIEtaX1osIEtaX1RbZV0pOwp9CmZ1bmN0aW9uIEtlKGVsZXYsIG1vZGUpIHsgcmV0dXJuIG1vZGUgPT09ICJvbmUiID8gMSA6IE1hdGguZXhwKC0wLjAwMDExOSAqIGVsZXYpOyB9CmZ1bmN0aW9uIHRvcG8oeiwgcykgewogIGlmIChzLnRvcG8gPT09ICJub25lIikgcmV0dXJuIHtLenQ6IDF9OwogIGNvbnN0IFQgPSBUT1BPW3MudG9wb10sIHJhdGlvID0gcy5IIC8gcy5MaDsKICBsZXQgciA9IHJhdGlvLCBMaCA9IHMuTGg7CiAgaWYgKHJhdGlvID4gMC41KSB7IHIgPSAwLjU7IExoID0gMiAqIHMuSDsgfQogIGNvbnN0IEsxID0gVC5rMVtzLmV4cF0gKiByLCBtdSA9IFQubXVbcy5zaWRlXTsKICBjb25zdCBLMiA9IE1hdGgubWF4KDAsIDEgLSBNYXRoLmFicyhzLngpIC8gKG11ICogTGgpKTsKICBjb25zdCBLMyA9IE1hdGgubWF4KDAsIE1hdGguZXhwKC1ULmdhbW1hICogeiAvIExoKSk7CiAgY29uc3QgYXBwbGllcyA9IHJhdGlvID49IDAuMiAmJiBzLkggPj0gKHMuZXhwID09PSAiQiIgPyAxOCA6IDQuNSk7CiAgY29uc3QgS3p0ID0gYXBwbGllcyA/IE1hdGgucG93KDEgKyBLMSpLMipLMywgMikgOiAxOwogIHJldHVybiB7SzEsIEsyLCBLMywgS3p0LCByYXRpbywgTGgsIG11LCBnYW1tYTogVC5nYW1tYSwgYXBwbGllc307Cn0KZnVuY3Rpb24gcXooeiwgcywgb3B0KSB7IHJldHVybiAwLjYxMyAqIEt6KHosIHMuZXhwLCBvcHQpICogdG9wbyh6LCBzKS5LenQgKiBzLmtlICogcy5WICogcy5WOyB9IC8vIE4vbcKyCgpmdW5jdGlvbiBndXN0KHMsIEIsIEwpIHsKICBjb25zdCBFID0gRVhQW3MuZXhwXSwgaCA9IHMuaDsKICBjb25zdCB6YiA9IE1hdGgubWF4KDAuNipoLCBFLnptaW4pOwogIGNvbnN0IEl6ID0gRS5jICogTWF0aC5wb3coMTAvemIsIDEvNik7CiAgY29uc3QgTHogPSBFLmwgKiBNYXRoLnBvdyh6Yi8xMCwgRS5lcHMpOwogIGNvbnN0IFEgPSBNYXRoLnNxcnQoMSAvICgxICsgMC42MyAqIE1hdGgucG93KChCK2gpL0x6LCAwLjYzKSkpOwogIGNvbnN0IG8gPSB7emIsIEl6LCBMeiwgUSwgZ1E6IDMuNCwgZ3Y6IDMuNH07CiAgby5HcmlnaWQgPSAwLjkyNSAqICgxICsgMS43KjMuNCpJeipRKSAvICgxICsgMS43KjMuNCpJeik7CiAgaWYgKHMuZ01vZGUgPT09ICJmbGV4IikgewogICAgY29uc3QgbjEgPSBzLm4xLCBiZXRhID0gcy5iZXRhOwogICAgY29uc3QgVnogPSBFLmJCYXIgKiBNYXRoLnBvdyh6Yi8xMCwgRS5hQmFyKSAqIHMuVjsKICAgIGNvbnN0IE4xID0gbjEgKiBMeiAvIFZ6OwogICAgY29uc3QgUm4gPSA3LjQ3ICogTjEgLyBNYXRoLnBvdygxICsgMTAuMypOMSwgNS8zKTsKICAgIGNvbnN0IFJsID0gZXRhID0+IGV0YSA+IDAgPyAxL2V0YSAtICgxIC0gTWF0aC5leHAoLTIqZXRhKSkgLyAoMipldGEqZXRhKSA6IDE7CiAgICBjb25zdCBSaCA9IFJsKDQuNipuMSpoL1Z6KSwgUkIgPSBSbCg0LjYqbjEqQi9WeiksIFJMID0gUmwoMTUuNCpuMSpML1Z6KTsKICAgIGNvbnN0IFIgPSBNYXRoLnNxcnQoKDEvYmV0YSkgKiBSbiAqIFJoICogUkIgKiAoMC41MyArIDAuNDcqUkwpKTsKICAgIGNvbnN0IGxnID0gTWF0aC5zcXJ0KDIgKiBNYXRoLmxvZygzNjAwKm4xKSk7CiAgICBjb25zdCBnUiA9IGxnICsgMC41NzcvbGc7CiAgICBjb25zdCBHZiA9IDAuOTI1ICogKDEgKyAxLjcqSXoqTWF0aC5zcXJ0KDMuNCozLjQqUSpRICsgZ1IqZ1IqUipSKSkgLyAoMSArIDEuNyozLjQqSXopOwogICAgT2JqZWN0LmFzc2lnbihvLCB7VnosIE4xLCBSbiwgUmgsIFJCLCBSTCwgUiwgZ1IsIEdmfSk7CiAgfQogIG8uRyA9IHMuZ01vZGUgPT09ICIwODUiID8gMC44NSA6IHMuZ01vZGUgPT09ICJyaWdpZCIgPyBvLkdyaWdpZCA6IG8uR2Y7CiAgcmV0dXJuIG87Cn0KCi8qIC0tLS0tLS0tLS0gZ2VvbWV0cnkgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBnZW9tZXRyeShzKSB7CiAgY29uc3QgdGggPSBzLnJvb2YgPT09ICJmbGF0IiA/IDAgOiBzLnRoZXRhOwogIGNvbnN0IHJpc2UgPSBzLnJvb2YgPT09ICJmbGF0IiA/IDAgOiAocy5XLzIpICogTWF0aC50YW4odGgqTWF0aC5QSS8xODApOwogIGNvbnN0IHJpZGdlID0gcy5oZSArIHJpc2U7CiAgY29uc3QgaCA9IHRoIDw9IDEwID8gcy5oZSA6IHMuaGUgKyByaXNlLzI7CiAgcmV0dXJuIHt0aGV0YTogdGgsIHJpc2UsIHJpZGdlLCBoLCBoZTogcy5oZSwgbGVhc3Q6IE1hdGgubWluKHMuTHIsIHMuVyl9Owp9CgovKiAtLS0tLS0tLS0tIENoYXB0ZXIgMjc6IEZpZy4gMjcuMy0xIC0tLS0tLS0tLS0gKi8KY29uc3QgV1dfQU5HID0gWzEwLDE1LDIwLDI1LDMwLDM1LDQ1LDYwXTsKY29uc3QgV1dfTkVHID0gW1stMC43LC0wLjUsLTAuMywtMC4yLC0wLjIsMCwwLDBdLFstMC45LC0wLjcsLTAuNCwtMC4zLC0wLjIsLTAuMiwwLDBdLFstMS4zLC0xLjAsLTAuNywtMC41LC0wLjMsLTAuMiwwLDBdXTsKY29uc3QgV1dfUE9TID0gW1stMC4xOCwwLDAuMiwwLjMsMC4zLDAuNCwwLjQsMC42XSxbLTAuMTgsLTAuMTgsMCwwLjIsMC4yLDAuMywwLjQsMC42XSxbLTAuMTgsLTAuMTgsLTAuMTgsMCwwLjIsMC4yLDAuMywwLjZdXTsKY29uc3QgSEwgPSBbMC4yNSwgMC41LCAxLjBdOwpjb25zdCBMVyA9IFtbLTAuMywtMC41LC0wLjZdLFstMC41LC0wLjUsLTAuNl0sWy0wLjcsLTAuNiwtMC42XV07CmZ1bmN0aW9uIGJ5SEwociwgcm93c0F0VGhldGEpIHsgcmV0dXJuIGxlcnAociwgSEwsIHJvd3NBdFRoZXRhKTsgfQpmdW5jdGlvbiBjcExlZXdhcmRXYWxsKExCKSB7IHJldHVybiBsZXJwKExCLCBbMSwyLDRdLCBbLTAuNSwtMC4zLC0wLjJdKTsgfQpmdW5jdGlvbiBjcFdpbmR3YXJkUm9vZih0aGV0YSwgcikgewogIGlmICh0aGV0YSA+IDgwKSByZXR1cm4ge25lZzogbnVsbCwgcG9zOiAwLjh9OwogIGlmICh0aGV0YSA+IDYwKSByZXR1cm4ge25lZzogbnVsbCwgcG9zOiAwLjAxKnRoZXRhfTsKICBjb25zdCBuZWcgPSBieUhMKHIsIFdXX05FRy5tYXAocm93ID0+IGxlcnAodGhldGEsIFdXX0FORywgcm93KSkpOwogIGNvbnN0IHBvcyA9IGJ5SEwociwgV1dfUE9TLm1hcChyb3cgPT4gbGVycCh0aGV0YSwgV1dfQU5HLCByb3cpKSk7CiAgcmV0dXJuIHtuZWc6IE1hdGguYWJzKG5lZykgPCAxZS05ID8gbnVsbCA6IG5lZywgcG9zfTsKfQpmdW5jdGlvbiBjcExlZXdhcmRSb29mKHRoZXRhLCByKSB7IHJldHVybiBieUhMKHIsIExXLm1hcChyb3cgPT4gbGVycCh0aGV0YSwgWzEwLDE1LDIwXSwgcm93KSkpOyB9Ci8vIE5vcm1hbCB0byByaWRnZSDOuDwxMCBhbmQgcGFyYWxsZWwgdG8gcmlkZ2U6IHpvbmVzIGJ5IGRpc3RhbmNlIGZyb20gd2luZHdhcmQgZWRnZQpmdW5jdGlvbiBjcEZsYXRab25lcyhoLCBMLCByKSB7CiAgY29uc3QgbWFya3MgPSBbMCwgaC8yLCBoLCAyKmhdLmZpbHRlcih4ID0+IHggPCBMKTsKICBjb25zdCBsb3cgPSB4ID0+IHggPCBoLzIgPyAtMC45IDogeCA8IGggPyAtMC45IDogeCA8IDIqaCA/IC0wLjUgOiAtMC4zOwogIGNvbnN0IGhpZ2ggPSB4ID0+IHggPCBoLzIgPyAtMS4zIDogLTAuNzsKICBjb25zdCByciA9IE1hdGgubWluKE1hdGgubWF4KHIsIDAuNSksIDEuMCksIHQgPSAocnIgLSAwLjUpIC8gMC41OwogIGNvbnN0IHB0cyA9IFsuLi5uZXcgU2V0KFsuLi5tYXJrcywgTF0pXS5zb3J0KChhLGIpID0+IGEtYik7CiAgY29uc3Qgem9uZXMgPSBbXTsKICBmb3IgKGxldCBpID0gMDsgaSA8IHB0cy5sZW5ndGggLSAxOyBpKyspIHsKICAgIGNvbnN0IG1pZCA9IChwdHNbaV0gKyBwdHNbaSsxXSkgLyAyOwogICAgem9uZXMucHVzaCh7ZnJvbTogcHRzW2ldLCB0bzogcHRzW2krMV0sIGNwOiBsb3cobWlkKSooMS10KSArIGhpZ2gobWlkKSp0LCBhbHQ6IC0wLjE4fSk7CiAgfQogIC8vIG1lcmdlIGVxdWFsIG5laWdoYm91cnMKICByZXR1cm4gem9uZXMucmVkdWNlKChhLCB6KSA9PiB7IGNvbnN0IHAgPSBhW2EubGVuZ3RoLTFdOyBpZiAocCAmJiBNYXRoLmFicyhwLmNwIC0gei5jcCkgPCAxZS05KSBwLnRvID0gei50bzsgZWxzZSBhLnB1c2goey4uLnp9KTsgcmV0dXJuIGE7IH0sIFtdKTsKfQoKZnVuY3Rpb24gY2gyNyhzLCBnKSB7CiAgY29uc3Qgb3V0ID0ge2RpcnM6IFtdfTsKICBjb25zdCBkaXJzID0gWwogICAge2tleTogIlgiLCBuYW1lOiAiV2luZCBub3JtYWwgdG8gcmlkZ2UiLCBCOiBzLkxyLCBMOiBzLlcsIG5vcm1hbDogdHJ1ZX0sCiAgICB7a2V5OiAiWSIsIG5hbWU6ICJXaW5kIHBhcmFsbGVsIHRvIHJpZGdlIiwgQjogcy5XLCBMOiBzLkxyLCBub3JtYWw6IGZhbHNlfQogIF07CiAgY29uc3QgcWggPSBxeihnLmgsIHMpOwogIGNvbnN0IGdwaSA9IEdDUElbcy5lbmNsXSAqIHMuUmk7CiAgZm9yIChjb25zdCBkIG9mIGRpcnMpIHsKICAgIGNvbnN0IEcgPSBndXN0KHMsIGQuQiwgZC5MKS5HOwogICAgY29uc3QgciA9IGcuaCAvIGQuTCwgTEIgPSBkLkwgLyBkLkI7CiAgICBjb25zdCB3YWxscyA9IFsKICAgICAge3N1cmY6ICJXaW5kd2FyZCB3YWxsIiwgY3A6IDAuOCwgcTogInF6In0sCiAgICAgIHtzdXJmOiAiTGVld2FyZCB3YWxsIiwgY3A6IGNwTGVld2FyZFdhbGwoTEIpLCBxOiAicWgifSwKICAgICAge3N1cmY6ICJTaWRlIHdhbGxzIiwgY3A6IC0wLjcsIHE6ICJxaCJ9CiAgICBdOwogICAgZm9yIChjb25zdCB3IG9mIHdhbGxzKSB7CiAgICAgIGNvbnN0IHF2ID0gcWg7IC8vIHdpbmR3YXJkIHdhbGwgc2hvd24gYXQgeiA9IGg7IHByb2ZpbGUgYmVsb3cgdXNlcyBxegogICAgICB3LmV4dCA9IHF2ICogS0RfQkxERyAqIEcgKiB3LmNwOwogICAgICB3LnBQb3MgPSB3LmV4dCAtIHFoKktEX0JMREcqZ3BpOyB3LnBOZWcgPSB3LmV4dCArIHFoKktEX0JMREcqZ3BpOwogICAgfQogICAgbGV0IHJvb2YgPSBbXTsKICAgIGlmIChkLm5vcm1hbCAmJiBnLnRoZXRhID49IDEwKSB7CiAgICAgIGNvbnN0IHd3ID0gY3BXaW5kd2FyZFJvb2YoZy50aGV0YSwgciksIGx3ID0gY3BMZWV3YXJkUm9vZihnLnRoZXRhLCByKTsKICAgICAgaWYgKHd3Lm5lZyAhPT0gbnVsbCkgcm9vZi5wdXNoKHtzdXJmOiAiV2luZHdhcmQgc2xvcGUgKOKIkikiLCBjcDogd3cubmVnLCBzaWRlOiAid3cifSk7CiAgICAgIHJvb2YucHVzaCh7c3VyZjogd3cubmVnICE9PSBudWxsID8gIldpbmR3YXJkIHNsb3BlICgrKSIgOiAiV2luZHdhcmQgc2xvcGUiLCBjcDogd3cucG9zLCBzaWRlOiAid3ciLCBhbHQ6IHd3Lm5lZyAhPT0gbnVsbH0pOwogICAgICByb29mLnB1c2goe3N1cmY6ICJMZWV3YXJkIHNsb3BlIiwgY3A6IGx3LCBzaWRlOiAibHcifSk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGNvbnN0IHogb2YgY3BGbGF0Wm9uZXMoZy5oLCBkLkwsIHIpKSB7CiAgICAgICAgcm9vZi5wdXNoKHtzdXJmOiBgJHt6LmZyb20udG9GaXhlZCgyKX0gdG8gJHt6LnRvLnRvRml4ZWQoMil9IG1gLCBjcDogei5jcCwgZnJvbTogei5mcm9tLCB0bzogei50b30pOwogICAgICAgIHJvb2YucHVzaCh7c3VyZjogYCR7ei5mcm9tLnRvRml4ZWQoMil9IHRvICR7ei50by50b0ZpeGVkKDIpfSBtIChhbHQuKWAsIGNwOiB6LmFsdCwgZnJvbTogei5mcm9tLCB0bzogei50bywgYWx0OiB0cnVlfSk7CiAgICAgIH0KICAgIH0KICAgIGZvciAoY29uc3QgcnIgb2Ygcm9vZikgeyByci5leHQgPSBxaCpLRF9CTERHKkcqcnIuY3A7IHJyLnBQb3MgPSByci5leHQgLSBxaCpLRF9CTERHKmdwaTsgcnIucE5lZyA9IHJyLmV4dCArIHFoKktEX0JMREcqZ3BpOyB9CgogICAgLy8gd2luZHdhcmQgcHJvZmlsZSBhbmQgc3RvcnkgZm9yY2VzICh3YWxscyBvbmx5OyBpbnRlcm5hbCBwcmVzc3VyZSBjYW5jZWxzKQogICAgY29uc3QgbHYgPSBbLi4ubmV3IFNldChbLi4ucy5sZXZlbHMuZmlsdGVyKHogPT4geiA+IDAgJiYgeiA8IGcuaGUpLCBnLmhlXSldLnNvcnQoKGEsYikgPT4gYS1iKTsKICAgIGNvbnN0IHBsID0gcWggKiBLRF9CTERHICogRyAqIHdhbGxzWzFdLmNwOyAvLyBsZWV3YXJkIChuZWdhdGl2ZSkKICAgIGNvbnN0IHJvd3MgPSBsdi5tYXAoKHosIGkpID0+IHsKICAgICAgY29uc3QgYmVsb3cgPSBpID09PSAwID8gMCA6IChsdltpLTFdICsgeikgLyAyOwogICAgICBjb25zdCBhYm92ZSA9IGkgPT09IGx2Lmxlbmd0aC0xID8gZy5oZSA6ICh6ICsgbHZbaSsxXSkgLyAyOwogICAgICBjb25zdCB6TWlkID0gKGJlbG93ICsgYWJvdmUpIC8gMjsgLy8gcHJlc3N1cmUgZXZhbHVhdGVkIGF0IGJhbmQgY2VudHJlIGlzIGFwcHJveGltYXRlZCBieSBsZXZlbCBoZWlnaHQKICAgICAgY29uc3QgcHcgPSBxeih6LCBzKSAqIEtEX0JMREcgKiBHICogMC44OwogICAgICBjb25zdCB0cmliID0gYWJvdmUgLSBiZWxvdzsKICAgICAgcmV0dXJuIHt6LCB0cmliLCBwdywgcGwsIEY6IChwdyAtIHBsKSAqIGQuQiAqIHRyaWIgLyAxMDAwLCB6TWlkfTsKICAgIH0pOwogICAgLy8gcm9vZiBwcm9qZWN0aW9uIChub3JtYWwgdG8gcmlkZ2Ugb25seSBmb3IgZ2FibGUvaGlwKQogICAgLy8gcm9vZjogZ2FibGUtZW5kIHRyaWFuZ2xlIGFjdHMgYXMgd2FsbCAocGFyYWxsZWwpOyByb29mIHNsb3BlcyBnaXZlIGEgaG9yaXpvbnRhbCBjb21wb25lbnQgKG5vcm1hbCwgzrgg4omlIDEwwrApCiAgICBsZXQgcm9vZkYgPSAwLCByb29mQXJlYSA9IDAsIHJvb2ZOb3RlID0gIiI7CiAgICBpZiAoZy5yaXNlID4gMCkgewogICAgICByb29mQXJlYSA9IGQubm9ybWFsID8gZC5CICogZy5yaXNlIDogZC5CICogZy5yaXNlIC8gMjsKICAgICAgaWYgKCFkLm5vcm1hbCkgewogICAgICAgIGNvbnN0IHpjID0gZy5oZSArIGcucmlzZSAvIDM7CiAgICAgICAgcm9vZkYgPSAocXooemMsIHMpICogS0RfQkxERyAqIEcgKiAwLjggLSBwbCkgKiByb29mQXJlYSAvIDEwMDA7CiAgICAgICAgcm9vZk5vdGUgPSAiZ2FibGUtZW5kIHRyaWFuZ2xlIGFzIHdhbGwsIHF6IGF0IGNlbnRyb2lkIjsKICAgICAgfSBlbHNlIGlmIChnLnRoZXRhID49IDEwKSB7CiAgICAgICAgY29uc3Qgd3cgPSByb29mLmZpbHRlcih4ID0+IHguc3VyZi5zdGFydHNXaXRoKCJXaW5kd2FyZCIpKS5yZWR1Y2UoKG0sIHgpID0+IE1hdGgubWF4KG0sIHguZXh0KSwgLUluZmluaXR5KTsKICAgICAgICBjb25zdCBsdyA9IHJvb2YuZmluZCh4ID0+IHguc3VyZiA9PT0gIkxlZXdhcmQgc2xvcGUiKS5leHQ7CiAgICAgICAgcm9vZkYgPSAod3cgLSBsdykgKiBkLkIgKiBnLnJpc2UgLyAxMDAwOwogICAgICAgIHJvb2ZOb3RlID0gImhvcml6b250YWwgY29tcG9uZW50IG9mIHJvb2Ygc2xvcGUgcHJlc3N1cmVzIjsKICAgICAgfSBlbHNlIHJvb2ZOb3RlID0gIs64IDwgMTDCsDogcm9vZiBwcmVzc3VyZXMgYWN0IG5lYXItdmVydGljYWxseSwgaG9yaXpvbnRhbCBjb21wb25lbnQgbmVnbGVjdGVkIjsKICAgIH0KICAgIGxldCBwYXJGID0gMDsKICAgIGlmIChzLmhwID4gMCkgewogICAgICBjb25zdCBxcCA9IHF6KGcucmlkZ2UgKyBzLmhwLCBzKTsKICAgICAgcGFyRiA9IHFwICogS0RfQkxERyAqICgxLjUgKyAxLjApICogZC5CICogcy5ocCAvIDEwMDA7CiAgICAgIG91dC5xcCA9IHFwOwogICAgfQogICAgY29uc3QgViA9IHJvd3MucmVkdWNlKChhLCB4KSA9PiBhICsgeC5GLCAwKSArIHJvb2ZGICsgcGFyRjsKICAgIGNvbnN0IFZtaW4gPSAoMC43NyAqIGQuQiAqIGcuaGUgKyAwLjM4ICogcm9vZkFyZWEgKyAwLjc3ICogZC5CICogcy5ocCk7CiAgICBvdXQuZGlycy5wdXNoKHsuLi5kLCBHLCByLCBMQiwgd2FsbHMsIHJvb2YsIHJvd3MsIHJvb2ZGLCByb29mQXJlYSwgcm9vZk5vdGUsIHBhckYsIFYsIFZtaW59KTsKICB9CiAgb3V0LnFoID0gcWg7IG91dC5ncGkgPSBncGk7CiAgaWYgKHMuaHAgPiAwKSB7CiAgICBvdXQucHAgPSB7d3c6IG91dC5xcCAqIEtEX0JMREcgKiAxLjUsIGx3OiBvdXQucXAgKiBLRF9CTERHICogLTEuMH07CiAgfQogIHJldHVybiBvdXQ7Cn0KCi8qIC0tLS0tLS0tLS0gQ2hhcHRlciAyODogRmlnLiAyOC4zLTEgLyAyOC4zLTIgLS0tLS0tLS0tLSAqLwpjb25zdCBHQ1BGX0FORyA9IFs1LCAyMCwgMzAsIDQ1LCA5MF07CmNvbnN0IEdDUEYxID0geyAvLyB6b25lcyAxLDIsMyw0LDFFLDJFLDNFLDRFIGF0IDAtNSwyMCwzMC00NSw5MAogIHJvd3M6IFtbMC40MCwtMC42OSwtMC4zNywtMC4yOSwwLjYxLC0xLjA3LC0wLjUzLC0wLjQzXSxbMC41MywtMC42OSwtMC40OCwtMC40MywwLjgwLC0xLjA3LC0wLjY5LC0wLjY0XSwKICAgICAgICAgWzAuNTYsMC4yMSwtMC40MywtMC4zNywwLjY5LDAuMjcsLTAuNTMsLTAuNDhdLFswLjU2LDAuMjEsLTAuNDMsLTAuMzcsMC42OSwwLjI3LC0wLjUzLC0wLjQ4XSwKICAgICAgICAgWzAuNTYsMC41NiwtMC4zNywtMC4zNywwLjY5LDAuNjksLTAuNDgsLTAuNDhdXSwKICB6b25lczogWyIxIiwiMiIsIjMiLCI0IiwiMUUiLCIyRSIsIjNFIiwiNEUiXQp9Owpjb25zdCBHQ1BGMiA9IHt6b25lczogWyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCIxRSIsIjJFIiwiM0UiLCI0RSIsIjVFIiwiNkUiXSwgdmFsczogWy0wLjQ1LC0wLjY5LC0wLjM3LC0wLjQ1LDAuNDAsLTAuMjksLTAuNDgsLTEuMDcsLTAuNTMsLTAuNDgsMC42MSwtMC40M119Owpjb25zdCBHQ1BGMyA9IHt6b25lczogWyIxVCIsIjJUIiwiM1QiLCI0VCJdLCByb3dzOiBbWzAuMTAsLTAuMTcsLTAuMDksLTAuMDddLFswLjEzLC0wLjE3LC0wLjEyLC0wLjExXSxbMC4xNCwwLjA1LC0wLjExLC0wLjA5XSxbMC4xNCwwLjA1LC0wLjExLC0wLjA5XSxbMC4xNCwwLjE0LC0wLjA5LC0wLjA5XV19Owpjb25zdCBHQ1BGNCA9IHt6b25lczogWyI1VCIsIjZUIl0sIHZhbHM6IFswLjEwLC0wLjA3XX07CmZ1bmN0aW9uIGNoMjgocywgZykgewogIGNvbnN0IG9rID0gZy5oIDw9IDE4LjMgJiYgZy5oIDw9IGcubGVhc3Q7CiAgbGV0IGEgPSBNYXRoLm1pbigwLjEqZy5sZWFzdCwgMC40KmcuaCk7CiAgYSA9IE1hdGgubWF4KGEsIDAuMDQqZy5sZWFzdCwgMC45KTsKICBpZiAoZy50aGV0YSA8PSA3ICYmIGcubGVhc3QgPiA5MCkgYSA9IE1hdGgubWluKGEsIDAuOCpnLmgpOwogIGNvbnN0IGtoID0gS3ooZy5oLCBzLmV4cCwge2NoMjg6IHRydWV9KTsKICBjb25zdCBxaCA9IDAuNjEzICoga2ggKiB0b3BvKGcuaCwgcykuS3p0ICogcy5rZSAqIHMuViAqIHMuVjsKICBjb25zdCBncGkgPSBHQ1BJW3MuZW5jbF0gKiBzLlJpOwogIGNvbnN0IGNvbCA9IGkgPT4gbGVycChnLnRoZXRhLCBHQ1BGX0FORywgR0NQRjEucm93cy5tYXAociA9PiByW2ldKSk7CiAgY29uc3QgbWsgPSAoem9uZSwgZ2MpID0+ICh7em9uZSwgZ2MsIHBQb3M6IHFoKktEX0JMREcqKGdjIC0gZ3BpKSwgcE5lZzogcWgqS0RfQkxERyooZ2MgKyBncGkpfSk7CiAgY29uc3QgY2FzZTEgPSBHQ1BGMS56b25lcy5tYXAoKHosIGkpID0+IG1rKHosIGNvbChpKSkpOwogIGNvbnN0IGNhc2UyID0gR0NQRjIuem9uZXMubWFwKCh6LCBpKSA9PiBtayh6LCBHQ1BGMi52YWxzW2ldKSk7CiAgY29uc3QgY2FzZTMgPSBHQ1BGMy56b25lcy5tYXAoKHosIGkpID0+IG1rKHosIGxlcnAoZy50aGV0YSwgR0NQRl9BTkcsIEdDUEYzLnJvd3MubWFwKHIgPT4gcltpXSkpKSk7CiAgY29uc3QgY2FzZTQgPSBHQ1BGNC56b25lcy5tYXAoKHosIGkpID0+IG1rKHosIEdDUEY0LnZhbHNbaV0pKTsKICBjb25zdCB6MmxlbiA9IHtYOiBNYXRoLm1pbigwLjUqcy5XLCAyLjUqcy5oZSksIFk6IE1hdGgubWluKDAuNSpzLkxyLCAyLjUqcy5oZSl9OwogIGxldCBwcCA9IG51bGw7CiAgaWYgKHMuaHAgPiAwKSB7IGNvbnN0IHFwID0gcXooZy5yaWRnZSArIHMuaHAsIHMpOyBwcCA9IHtxcCwgd3c6IHFwKktEX0JMREcqMS41LCBsdzogcXAqS0RfQkxERyotMS4wfTsgfQogIHJldHVybiB7b2ssIGEsIGtoLCBxaCwgZ3BpLCBjYXNlMSwgY2FzZTIsIGNhc2UzLCBjYXNlNCwgejJsZW4sIHBwfTsKfQoKLyogLS0tLS0tLS0tLSBDaGFwdGVyIDMwOiBDJkMgLS0tLS0tLS0tLSAqLwovLyBDdXJ2ZXM6IGJyZWFrcG9pbnRzIFtBX2Z0MiwgR0NwXTsgY29uc3RhbnQgb3V0c2lkZSwgbG9nLWxpbmVhciBiZXR3ZWVuLgpmdW5jdGlvbiBjdXJ2ZShBX20yLCBwdHMpIHsKICBjb25zdCBBID0gQV9tMiAqIEZUMjsKICBpZiAoQSA8PSBwdHNbMF1bMF0pIHJldHVybiBwdHNbMF1bMV07CiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwdHMubGVuZ3RoOyBpKyspIHsKICAgIGlmIChBIDw9IHB0c1tpXVswXSkgewogICAgICBjb25zdCBbYTEsIGcxXSA9IHB0c1tpLTFdLCBbYTIsIGcyXSA9IHB0c1tpXTsKICAgICAgcmV0dXJuIGcxICsgKGcyIC0gZzEpICogTWF0aC5sb2cxMChBL2ExKSAvIE1hdGgubG9nMTAoYTIvYTEpOwogICAgfQogIH0KICByZXR1cm4gcHRzW3B0cy5sZW5ndGgtMV1bMV07Cn0KY29uc3QgQ0MgPSB7CiAgd2FsbExvdzogeyI0KyI6IFtbMTAsMS4wXSxbNTAwLDAuN11dLCAiNSsiOiBbWzEwLDEuMF0sWzUwMCwwLjddXSwgIjTiiJIiOiBbWzEwLC0xLjFdLFs1MDAsLTAuOF1dLCAiNeKIkiI6IFtbMTAsLTEuNF0sWzUwMCwtMC44XV19LAogIHdhbGxIaWdoOiB7IjQrIjogW1syMCwwLjldLFs1MDAsMC42XV0sICI1KyI6IFtbMjAsMC45XSxbNTAwLDAuNl1dLCAiNOKIkiI6IFtbMjAsLTAuOV0sWzUwMCwtMC43XV0sICI14oiSIjogW1syMCwtMS44XSxbNTAwLC0xLjBdXX0sCiAgcm9vZkhpZ2g6IHsiMSsiOiBudWxsLCAiMeKIkiI6IFtbMTAsLTEuNF0sWzUwMCwtMC45XV0sICIy4oiSIjogW1sxMCwtMi4zXSxbNTAwLC0xLjZdXSwgIjPiiJIiOiBbWzEwLC0zLjJdLFs1MDAsLTIuM11dfSwKICBBOiB7ZmlnOiAiMzAuMy0yQSIsIHBvczogW1sxMCwwLjNdLFsxMDAsMC4yXV0sIG5lZzogeyIxJyI6IFtbMTAwLC0wLjldLFsxMDAwLC0wLjRdXSwgIjEiOiBbWzEwLC0xLjddLFs1MDAsLTEuMF1dLCAiMiI6IFtbMTAsLTIuM10sWzUwMCwtMS40XV0sICIzIjogW1sxMCwtMy4yXSxbNTAwLC0xLjRdXX0sCiAgICAgIG9oOiB7IjEvMSciOiBbWzEwLC0xLjddLFsxMDAsLTEuNl0sWzUwMCwtMS4wXV0sICIyIjogW1sxMCwtMi4zXSxbNTAwLC0xLjFdXSwgIjMiOiBbWzEwLC0zLjJdLFs1MDAsLTEuMV1dfX0sCiAgQjoge2ZpZzogIjMwLjMtMkIiLCBwb3M6IFtbMTAsMC42XSxbMjAwLDAuM11dLCBuZWc6IHsiMSI6IFtbMTAsLTIuMF0sWzMwMCwtMC41XV0sICIyIjogW1sxMCwtMi43XSxbMjAwLC0xLjBdXSwgIjMiOiBbWzEwLC0zLjZdLFsxMDAsLTEuOF1dfX0sCiAgQzoge2ZpZzogIjMwLjMtMkMiLCBwb3M6IFtbMTAsMC42XSxbMjAwLDAuM11dLCBuZWc6IHsiMSI6IFtbMTAsLTEuNV0sWzIwMCwtMC44XV0sICIyIjogW1sxMCwtMi41XSxbMTAwLC0xLjJdXSwgIjMiOiBbWzEwLC0zLjBdLFsxMDAsLTEuNF1dfX0sCiAgRDoge2ZpZzogIjMwLjMtMkQiLCBwb3M6IFtbMTAsMC45XSxbMjAwLDAuNV1dLCBuZWc6IHsiMSI6IFtbMTAsLTEuOF0sWzEwMCwtMC44XV0sICIyIjogW1sxMCwtMi4wXSxbMjAwLC0xLjBdXSwgIjMiOiBbWzEwLC0yLjVdLFsyMDAsLTEuMF1dfX0sCiAgRToge2ZpZzogIjMwLjMtMkUiLCBwb3M6IFtbMTAsMC43XSxbMTAwLDAuM11dLCBuZWc6IHsiMSI6IFtbMTAsLTEuOF0sWzIwMCwtMC44XV0sICIyIjogW1sxMCwtMi40XSxbMjAwLC0xLjNdXSwgIjMiOiBbWzEwLC0yLjZdLFsyMDAsLTEuNF1dfX0sCiAgRjoge2ZpZzogIjMwLjMtMkYiLCBwb3M6IFtbMTAsMC43XSxbMTAwLDAuM11dLCBuZWc6IHsiMSI6IFtbMTAsLTEuNF0sWzEwMCwtMC44XV0sICIyIjogW1sxMCwtMi4wXSxbMTAwLC0xLjBdXSwgIjMiOiBbWzEwLC0yLjBdLFsxMDAsLTEuMF1dfX0sCiAgRzoge2ZpZzogIjMwLjMtMkciLCBwb3M6IFtbMTAsMC43XSxbMTAwLDAuM11dLCBuZWc6IHsiMSI6IFtbMTAsLTEuNV0sWzEwMCwtMC43XV0sICIyIjogW1sxMCwtMS44XSxbMTAwLC0wLjhdXSwgIjMiOiBbWzEwLC0yLjRdLFsxMDAsLTEuMF1dfX0KfTsKZnVuY3Rpb24gcm9vZkZpZyhzLCBnKSB7CiAgY29uc3QgdCA9IGcudGhldGE7CiAgaWYgKHMucm9vZiA9PT0gImZsYXQiIHx8IHQgPD0gNykgcmV0dXJuIHtmaWc6IENDLkEsIGxhYmVsOiAiMzAuMy0yQSJ9OwogIGlmIChzLnJvb2YgPT09ICJnYWJsZSIpIHsKICAgIGlmICh0IDw9IDIwKSByZXR1cm4ge2ZpZzogQ0MuQiwgbGFiZWw6ICIzMC4zLTJCIn07CiAgICBpZiAodCA8PSAyNykgcmV0dXJuIHtmaWc6IENDLkMsIGxhYmVsOiAiMzAuMy0yQyJ9OwogICAgaWYgKHQgPD0gNDUpIHJldHVybiB7ZmlnOiBDQy5ELCBsYWJlbDogIjMwLjMtMkQifTsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAodCA8PSAyMCkgcmV0dXJuIHtmaWc6IENDLkUsIGxhYmVsOiAiMzAuMy0yRSJ9OwogIGlmICh0IDw9IDI3KSByZXR1cm4ge2ZpZzogQ0MuRiwgbGFiZWw6ICIzMC4zLTJGIn07CiAgaWYgKHQgPD0gNDUpIHJldHVybiB7aW50ZXJwOiAodCAtIDI3KSAvIDE4LCBsYWJlbDogIjMwLjMtMkYvRyAoaW50ZXJwb2xhdGVkKSJ9OwogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIGNoMzAocywgZywgYXJlYXMpIHsKICBjb25zdCBncGkgPSBHQ1BJW3MuZW5jbF0gKiBzLlJpOwogIGNvbnN0IGxvdyA9IGcuaCA8PSAxOC4zOwogIGNvbnN0IHJlcyA9IHtsb3csIGdwaSwgcm93czogW10sIG5vdGVzOiBbXX07CiAgY29uc3QgTUlOID0gNzcwOwogIGlmIChsb3cpIHsKICAgIGNvbnN0IHFoID0gcXooZy5oLCBzKTsKICAgIHJlcy5xaCA9IHFoOwogICAgbGV0IGEgPSBNYXRoLm1heChNYXRoLm1pbigwLjEqZy5sZWFzdCwgMC40KmcuaCksIDAuMDQqZy5sZWFzdCwgMC45KTsKICAgIGlmIChnLnRoZXRhIDw9IDcgJiYgZy5sZWFzdCA+IDkwKSBhID0gTWF0aC5taW4oYSwgMC44KmcuaCk7CiAgICByZXMuYSA9IGE7CiAgICBjb25zdCB3YWxsUmVkID0gZy50aGV0YSA8PSAxMCA/IDAuOSA6IDEuMDsKICAgIGlmICh3YWxsUmVkIDwgMSkgcmVzLm5vdGVzLnB1c2goIldhbGwgKEdDcCkgcmVkdWNlZCBieSAxMCUgZm9yIM64IOKJpCAxMMKwIChGaWcuIDMwLjMtMSBub3RlIDUpLiIpOwogICAgY29uc3QgcmYgPSByb29mRmlnKHMsIGcpOwogICAgcmVzLmZpZyA9IHJmID8gcmYubGFiZWwgOiAibi9hIjsKICAgIGNvbnN0IHBhcmFwZXQgPSBzLmhwID49IDAuOSAmJiBnLnRoZXRhIDw9IDc7CiAgICBpZiAocGFyYXBldCkgcmVzLm5vdGVzLnB1c2goIlBhcmFwZXQg4omlIDAuOSBtIHdpdGggzrgg4omkIDfCsDogcm9vZiBab25lIDMgbmVnYXRpdmUgPSBab25lIDI7IFpvbmVzIDIgYW5kIDMgcG9zaXRpdmUgPSB3YWxsIFpvbmVzIDQgYW5kIDUgKEZpZy4gMzAuMy0yQSBub3RlIDUpLiIpOwogICAgZm9yIChjb25zdCBBIG9mIGFyZWFzKSB7CiAgICAgIGNvbnN0IHJvdyA9IHtBLCBpdGVtczogW119OwogICAgICBjb25zdCBwdXNoID0gKHpvbmUsIGdjLCBxID0gcWgpID0+IHsKICAgICAgICBjb25zdCBwMSA9IHEqS0RfQkxERyooZ2MgLSBncGkpLCBwMiA9IHEqS0RfQkxERyooZ2MgKyBncGkpOwogICAgICAgIGNvbnN0IGNyaXQgPSBNYXRoLmFicyhwMSkgPj0gTWF0aC5hYnMocDIpID8gcDEgOiBwMjsKICAgICAgICBjb25zdCBkZXMgPSBNYXRoLnNpZ24oY3JpdCB8fCBnYykgKiBNYXRoLm1heChNYXRoLmFicyhjcml0KSwgTUlOKTsKICAgICAgICByb3cuaXRlbXMucHVzaCh7em9uZSwgZ2MsIHA6IGNyaXQsIGRlc30pOwogICAgICB9OwogICAgICBmb3IgKGNvbnN0IHogb2YgWyI0KyIsIjTiiJIiLCI1KyIsIjXiiJIiXSkgcHVzaCgiV2FsbCAiICsgeiwgY3VydmUoQSwgQ0Mud2FsbExvd1t6XSkgKiB3YWxsUmVkKTsKICAgICAgaWYgKHJmKSB7CiAgICAgICAgY29uc3QgZmlnID0gcmYuZmlnOwogICAgICAgIGNvbnN0IHZhbCA9IChrZXksIEEpID0+IHsKICAgICAgICAgIGlmIChyZi5pbnRlcnAgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjb25zdCBmID0ga2V5ID09PSAicG9zIiA/IGN1cnZlKEEsIENDLkYucG9zKSA6IGN1cnZlKEEsIENDLkYubmVnW2tleV0pOwogICAgICAgICAgICBjb25zdCBnZyA9IGtleSA9PT0gInBvcyIgPyBjdXJ2ZShBLCBDQy5HLnBvcykgOiBjdXJ2ZShBLCBDQy5HLm5lZ1trZXldKTsKICAgICAgICAgICAgcmV0dXJuIGYgKyAoZ2cgLSBmKSAqIHJmLmludGVycDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBrZXkgPT09ICJwb3MiID8gY3VydmUoQSwgZmlnLnBvcykgOiBjdXJ2ZShBLCBmaWcubmVnW2tleV0pOwogICAgICAgIH07CiAgICAgICAgcHVzaCgiUm9vZiBhbGwgem9uZXMgKyIsIHZhbCgicG9zIiwgQSkpOwogICAgICAgIGNvbnN0IHpvbmVzID0gcmYubGFiZWwgPT09ICIzMC4zLTJBIiA/IFsiMSciLCIxIiwiMiIsIjMiXSA6IFsiMSIsIjIiLCIzIl07CiAgICAgICAgZm9yIChjb25zdCB6IG9mIHpvbmVzKSB7CiAgICAgICAgICBsZXQgZ2MgPSB2YWwoeiwgQSk7CiAgICAgICAgICBpZiAocGFyYXBldCAmJiB6ID09PSAiMyIpIGdjID0gdmFsKCIyIiwgQSk7CiAgICAgICAgICBwdXNoKCJSb29mICIgKyB6ICsgIiDiiJIiLCBnYyk7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJhcGV0KSB7IHB1c2goIlJvb2YgMiwzICsgKHBhcmFwZXQpIiwgY3VydmUoQSwgQ0Mud2FsbExvd1siNSsiXSkgKiB3YWxsUmVkKTsgfQogICAgICAgIGlmIChyZi5sYWJlbCA9PT0gIjMwLjMtMkEiICYmIHMub3ZlcmhhbmcpIGZvciAoY29uc3QgeiBvZiBPYmplY3Qua2V5cyhDQy5BLm9oKSkgcHVzaCgiT3ZlcmhhbmcgIiArIHogKyAiIOKIkiIsIGN1cnZlKEEsIENDLkEub2hbel0pKTsKICAgICAgfQogICAgICByZXMucm93cy5wdXNoKHJvdyk7CiAgICB9CiAgICBpZiAocy5vdmVyaGFuZyAmJiByZiAmJiByZi5sYWJlbCAhPT0gIjMwLjMtMkEiKSByZXMubm90ZXMucHVzaCgiT3ZlcmhhbmdzIGZvciDOuCA+IDfCsDogY29tYmluZSB0b3AgKHJvb2YpIGFuZCBib3R0b20gKHdhbGwpIHN1cmZhY2VzIHBlciBTZWN0aW9uIDMwLjcgYW5kIEZpZy4gMzAuNy0xLiIpOwogICAgaWYgKCFyZikgcmVzLm5vdGVzLnB1c2goIlJvb2YgYW5nbGUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgRmlncy4gMzAuMy0yQeKAk0cuIik7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHFoID0gcXooZy5oLCBzKTsKICAgIHJlcy5xaCA9IHFoOwogICAgY29uc3QgYSA9IE1hdGgubWF4KDAuMSpnLmxlYXN0LCAwLjkpOwogICAgcmVzLmEgPSBhOyByZXMuZmlnID0gIjMwLjQtMSI7CiAgICBjb25zdCBwYXJhcGV0ID0gcy5ocCA+PSAwLjkgJiYgZy50aGV0YSA8PSAxMDsKICAgIGlmIChnLnRoZXRhID4gNykgcmVzLm5vdGVzLnB1c2goIkZpZy4gMzAuNC0xIHJvb2YgY29lZmZpY2llbnRzIGFyZSBmb3Igzrgg4omkIDfCsDsgZm9yIG90aGVyIHJvb2ZzIHVzZSBGaWdzLiAzMC4zLTJB4oCTSSB3aXRoIHFoIChub3RlIDYpLiIpOwogICAgaWYgKHBhcmFwZXQpIHJlcy5ub3Rlcy5wdXNoKCJQYXJhcGV0IOKJpSAwLjkgbSB3aXRoIM64IOKJpCAxMMKwOiByb29mIFpvbmUgMyB0cmVhdGVkIGFzIFpvbmUgMiAoRmlnLiAzMC40LTEgbm90ZSA3KS4iKTsKICAgIGZvciAoY29uc3QgQSBvZiBhcmVhcykgewogICAgICBjb25zdCByb3cgPSB7QSwgaXRlbXM6IFtdfTsKICAgICAgY29uc3QgcHVzaCA9ICh6b25lLCBnYywgcWV4dCkgPT4gewogICAgICAgIGNvbnN0IHAxID0gcWV4dCpLRF9CTERHKmdjIC0gcWgqS0RfQkxERypncGksIHAyID0gcWV4dCpLRF9CTERHKmdjICsgcWgqS0RfQkxERypncGk7CiAgICAgICAgY29uc3QgY3JpdCA9IE1hdGguYWJzKHAxKSA+PSBNYXRoLmFicyhwMikgPyBwMSA6IHAyOwogICAgICAgIHJvdy5pdGVtcy5wdXNoKHt6b25lLCBnYywgcDogY3JpdCwgZGVzOiBNYXRoLnNpZ24oY3JpdCB8fCBnYykgKiBNYXRoLm1heChNYXRoLmFicyhjcml0KSwgTUlOKX0pOwogICAgICB9OwogICAgICBwdXNoKCJXYWxsIDQsNSArIChhdCBoLCBxeiA9IHFoKSIsIGN1cnZlKEEsIENDLndhbGxIaWdoWyI0KyJdKSwgcWgpOwogICAgICBwdXNoKCJXYWxsIDQg4oiSIiwgY3VydmUoQSwgQ0Mud2FsbEhpZ2hbIjTiiJIiXSksIHFoKTsKICAgICAgcHVzaCgiV2FsbCA1IOKIkiIsIGN1cnZlKEEsIENDLndhbGxIaWdoWyI14oiSIl0pLCBxaCk7CiAgICAgIHB1c2goIlJvb2YgMSDiiJIiLCBjdXJ2ZShBLCBDQy5yb29mSGlnaFsiMeKIkiJdKSwgcWgpOwogICAgICBwdXNoKCJSb29mIDIg4oiSIiwgY3VydmUoQSwgQ0Mucm9vZkhpZ2hbIjLiiJIiXSksIHFoKTsKICAgICAgcHVzaCgiUm9vZiAzIOKIkiIsIGN1cnZlKEEsIHBhcmFwZXQgPyBDQy5yb29mSGlnaFsiMuKIkiJdIDogQ0Mucm9vZkhpZ2hbIjPiiJIiXSksIHFoKTsKICAgICAgcmVzLnJvd3MucHVzaChyb3cpOwogICAgfQogICAgLy8gcG9zaXRpdmUgd2FsbCBwcmVzc3VyZSB2YXJpZXMgd2l0aCBxegogICAgY29uc3QgQTAgPSBhcmVhc1swXTsKICAgIHJlcy53YWxsUHJvZmlsZSA9IHMubGV2ZWxzLmZpbHRlcih6ID0+IHogPD0gZy5oKS5jb25jYXQoW2cuaF0pLm1hcCh6ID0+IHsKICAgICAgY29uc3QgcSA9IHF6KHosIHMpLCBnYyA9IGN1cnZlKEEwLCBDQy53YWxsSGlnaFsiNCsiXSk7CiAgICAgIHJldHVybiB7eiwgcSwgcDogcSpLRF9CTERHKmdjICsgcWgqS0RfQkxERypncGl9OwogICAgfSk7CiAgfQogIHJldHVybiByZXM7Cn0KCmlmICh0eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIikgbW9kdWxlLmV4cG9ydHMgPSB7RVhQLCBLeiwgS2UsIHRvcG8sIHF6LCBndXN0LCBnZW9tZXRyeSwgY2gyNywgY2gyOCwgY2gzMCwgY3VydmUsIENDLCBjcFdpbmR3YXJkUm9vZiwgY3BMZWV3YXJkUm9vZiwgY3BGbGF0Wm9uZXMsIEdDUEksIEtEX0JMREcsIEVOQ0xfTkFNRSwgVE9QT307CgovKiAtLS0tLS0tLS0tIElsbHVzdHJhdGl2ZSBkcmF3aW5ncyAoU1ZHKSAtLS0tLS0tLS0tICovCmNvbnN0IERSID0gKCgpID0+IHsKICBjb25zdCBEMlIgPSBNYXRoLlBJIC8gMTgwLCBBWCA9IDI0ICogRDJSLCBBWSA9IDM0ICogRDJSOwogIGNvbnN0IGN4ID0gTWF0aC5jb3MoQVgpLCBzeCA9IE1hdGguc2luKEFYKSwgY3kgPSBNYXRoLmNvcyhBWSksIHN5ID0gTWF0aC5zaW4oQVkpOwogIGNvbnN0IFAgPSAoW3gsIHksIHpdKSA9PiBbeCAqIGN4IC0geSAqIGN5LCAtKHggKiBzeCArIHkgKiBzeSkgLSB6XTsKICBjb25zdCBGID0gKHgsIGQgPSAzKSA9PiBOdW1iZXIuaXNGaW5pdGUoeCkgPyB4LnRvRml4ZWQoZCkgOiAi4oCTIjsKICBjb25zdCBrcCA9IHggPT4gRih4IC8gMTAwMCwgMyk7CiAgY29uc3QgZXNjID0gdCA9PiBTdHJpbmcodCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7CiAgY29uc3QgRk9OVCA9ICdmb250LWZhbWlseT0iSUJNIFBsZXggTW9ubywgdWktbW9ub3NwYWNlLCBtb25vc3BhY2UiJzsKCiAgLyogY29sb3VyIHNjYWxlOiBibHVlID0gcHJlc3N1cmUgdG93YXJkIHRoZSBzdXJmYWNlLCB3YXJtID0gc3VjdGlvbiAqLwogIGNvbnN0IG1peCA9IChhLCBiLCB0KSA9PiBhLm1hcCgodiwgaSkgPT4gTWF0aC5yb3VuZCh2ICsgKGJbaV0gLSB2KSAqIHQpKTsKICBjb25zdCBORUcgPSBbWzI1MSwgMjMzLCAxNjBdLCBbMjM4LCAxNjAsIDYwXSwgWzE5NiwgODQsIDM4XSwgWzEyOCwgMzYsIDI0XV07CiAgY29uc3QgUE9TID0gW1sxNzgsIDIwMiwgMjM2XSwgWzcwLCAxMTIsIDE3OF0sIFsyNCwgNTAsIDEwNF1dOwogIGZ1bmN0aW9uIHJhbXAoc3RvcHMsIHQpIHsKICAgIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSkgKiAoc3RvcHMubGVuZ3RoIC0gMSk7CiAgICBjb25zdCBpID0gTWF0aC5taW4oTWF0aC5mbG9vcih0KSwgc3RvcHMubGVuZ3RoIC0gMik7CiAgICByZXR1cm4gbWl4KHN0b3BzW2ldLCBzdG9wc1tpICsgMV0sIHQgLSBpKTsKICB9CiAgZnVuY3Rpb24gY29sKHYsIHZtYXgpIHsKICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzRmluaXRlKHYpKSByZXR1cm4ge2ZpbGw6ICJyZ2IoMTkwLDE5MCwxOTApIiwgaW5rOiAiIzIyMiJ9OwogICAgY29uc3QgdCA9IDAuMTggKyAwLjgyICogTWF0aC5taW4oMSwgTWF0aC5hYnModikgLyAodm1heCB8fCAxKSk7CiAgICBjb25zdCBjID0gcmFtcCh2ID49IDAgPyBQT1MgOiBORUcsIHQpOwogICAgY29uc3QgbHVtID0gMC4yOTkgKiBjWzBdICsgMC41ODcgKiBjWzFdICsgMC4xMTQgKiBjWzJdOwogICAgcmV0dXJuIHtmaWxsOiBgcmdiKCR7Y30pYCwgaW5rOiBsdW0gPiAxNTAgPyAiIzFhMWExYSIgOiAiI2ZmZiJ9OwogIH0KCiAgLyogcG9seWdvbiBjbGlwcGluZyBvbiBvbmUgY29vcmRpbmF0ZToga2VlcCBsbyDiiaQgcFtheF0g4omkIGhpICovCiAgZnVuY3Rpb24gY2xpcEhhbGYocG9seSwgYXgsIHYsIGtlZXBHcmVhdGVyKSB7CiAgICBjb25zdCBvdXQgPSBbXSwgaW5zaWRlID0gcCA9PiBrZWVwR3JlYXRlciA/IHBbYXhdID49IHYgLSAxZS05IDogcFtheF0gPD0gdiArIDFlLTk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHkubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYSA9IHBvbHlbaV0sIGIgPSBwb2x5WyhpICsgMSkgJSBwb2x5Lmxlbmd0aF0sIGlhID0gaW5zaWRlKGEpLCBpYiA9IGluc2lkZShiKTsKICAgICAgaWYgKGlhKSBvdXQucHVzaChhKTsKICAgICAgaWYgKGlhICE9PSBpYikgeyBjb25zdCB0ID0gKHYgLSBhW2F4XSkgLyAoYltheF0gLSBhW2F4XSk7IG91dC5wdXNoKGEubWFwKChxLCBrKSA9PiBxICsgKGJba10gLSBxKSAqIHQpKTsgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9CiAgY29uc3QgY2xpcCA9IChwb2x5LCBheCwgbG8sIGhpKSA9PiB7CiAgICBsZXQgcCA9IGNsaXBIYWxmKHBvbHksIGF4LCBsbywgdHJ1ZSk7IGlmIChwLmxlbmd0aCA+IDIpIHAgPSBjbGlwSGFsZihwLCBheCwgaGksIGZhbHNlKTsKICAgIGlmIChwLmxlbmd0aCA8IDMpIHJldHVybiBudWxsOwogICAgY29uc3QgdiA9IHAubWFwKHEgPT4gcVtheF0pOyByZXR1cm4gTWF0aC5tYXgoLi4udikgLSBNYXRoLm1pbiguLi52KSA+IDFlLTYgPyBwIDogbnVsbDsKICB9OwoKICAvKiBidWlsZGluZyBzdXJmYWNlcyBpbiAzRDogeCA9IGFjcm9zcyBzcGFuICgwLi5XKSwgeSA9IGFsb25nIHJpZGdlICgwLi5MciksIHogPSB1cCAqLwogIGZ1bmN0aW9uIHNoZWxsKHMsIGcpIHsKICAgIGNvbnN0IFcgPSBzLlcsIEwgPSBzLkxyLCBoZSA9IHMuaGUsIHJkID0gZy5yaWRnZSwgZmxhdCA9IHMucm9vZiA9PT0gImZsYXQiIHx8IGcucmlzZSA8PSAxZS05OwogICAgY29uc3QgZiA9IFtdOwogICAgZi5wdXNoKHt0YWc6ICJ4VyIsIGdycDogMCwgcHRzOiBbW1csIDAsIDBdLCBbVywgTCwgMF0sIFtXLCBMLCBoZV0sIFtXLCAwLCBoZV1dfSk7CiAgICBjb25zdCBlbmRXYWxsID0geSA9PiBmbGF0IHx8IHMucm9vZiA9PT0gImhpcCIgPyBbWzAsIHksIDBdLCBbVywgeSwgMF0sIFtXLCB5LCBoZV0sIFswLCB5LCBoZV1dIDogW1swLCB5LCAwXSwgW1csIHksIDBdLCBbVywgeSwgaGVdLCBbVyAvIDIsIHksIHJkXSwgWzAsIHksIGhlXV07CiAgICBmLnB1c2goe3RhZzogInlMIiwgZ3JwOiAwLCBwdHM6IGVuZFdhbGwoTCkucmV2ZXJzZSgpfSk7CiAgICBpZiAoZmxhdCkgZi5wdXNoKHt0YWc6ICJyZiIsIGdycDogMSwgcHRzOiBbWzAsIDAsIGhlXSwgW1csIDAsIGhlXSwgW1csIEwsIGhlXSwgWzAsIEwsIGhlXV19KTsKICAgIGVsc2UgaWYgKHMucm9vZiA9PT0gImdhYmxlIikgewogICAgICBmLnB1c2goe3RhZzogInItIiwgZ3JwOiAxLCBwdHM6IFtbMCwgMCwgaGVdLCBbVyAvIDIsIDAsIHJkXSwgW1cgLyAyLCBMLCByZF0sIFswLCBMLCBoZV1dfSk7CiAgICAgIGYucHVzaCh7dGFnOiAicisiLCBncnA6IDEsIHB0czogW1tXIC8gMiwgMCwgcmRdLCBbVywgMCwgaGVdLCBbVywgTCwgaGVdLCBbVyAvIDIsIEwsIHJkXV19KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHkxID0gTWF0aC5taW4oVyAvIDIsIEwgLyAyKSwgeTIgPSBMIC0geTE7CiAgICAgIGYucHVzaCh7dGFnOiAiZUwiLCBncnA6IDEsIHB0czogW1swLCBMLCBoZV0sIFtXLCBMLCBoZV0sIFtXIC8gMiwgeTIsIHJkXV19KTsKICAgICAgZi5wdXNoKHt0YWc6ICJyKyIsIGdycDogMSwgcHRzOiBbW1cgLyAyLCB5MSwgcmRdLCBbVywgMCwgaGVdLCBbVywgTCwgaGVdLCBbVyAvIDIsIHkyLCByZF1dfSk7CiAgICAgIGYucHVzaCh7dGFnOiAici0iLCBncnA6IDEsIHB0czogW1swLCAwLCBoZV0sIFtXIC8gMiwgeTEsIHJkXSwgW1cgLyAyLCB5MiwgcmRdLCBbMCwgTCwgaGVdXX0pOwogICAgICBmLnB1c2goe3RhZzogImUwIiwgZ3JwOiAxLCBwdHM6IFtbMCwgMCwgaGVdLCBbVywgMCwgaGVdLCBbVyAvIDIsIHkxLCByZF1dfSk7CiAgICB9CiAgICBmLnB1c2goe3RhZzogIngwIiwgZ3JwOiAyLCBwdHM6IFtbMCwgMCwgMF0sIFswLCBMLCAwXSwgWzAsIEwsIGhlXSwgWzAsIDAsIGhlXV19KTsKICAgIGYucHVzaCh7dGFnOiAieTAiLCBncnA6IDIsIHB0czogZW5kV2FsbCgwKX0pOwogICAgaWYgKHMuaHAgPiAwKSB7CiAgICAgIGNvbnN0IHQgPSBoZSwgdSA9IGhlICsgcy5ocDsKICAgICAgZi5wdXNoKHt0YWc6ICJweDAiLCBncnA6IDIsIHB0czogW1swLCAwLCB0XSwgWzAsIEwsIHRdLCBbMCwgTCwgdV0sIFswLCAwLCB1XV0sIHBhcjogdHJ1ZX0pOwogICAgICBmLnB1c2goe3RhZzogInB4VyIsIGdycDogMCwgcHRzOiBbW1csIDAsIHRdLCBbVywgTCwgdF0sIFtXLCBMLCB1XSwgW1csIDAsIHVdXSwgcGFyOiB0cnVlfSk7CiAgICAgIGlmIChmbGF0KSB7CiAgICAgICAgZi5wdXNoKHt0YWc6ICJweTAiLCBncnA6IDIsIHB0czogW1swLCAwLCB0XSwgW1csIDAsIHRdLCBbVywgMCwgdV0sIFswLCAwLCB1XV0sIHBhcjogdHJ1ZX0pOwogICAgICAgIGYucHVzaCh7dGFnOiAicHlMIiwgZ3JwOiAwLCBwdHM6IFtbMCwgTCwgdF0sIFtXLCBMLCB0XSwgW1csIEwsIHVdLCBbMCwgTCwgdV1dLCBwYXI6IHRydWV9KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGY7CiAgfQogIGNvbnN0IGlzUm9vZiA9IHQgPT4gdCA9PT0gInJmIiB8fCB0ID09PSAici0iIHx8IHQgPT09ICJyKyIgfHwgdCA9PT0gImUwIiB8fCB0ID09PSAiZUwiOwoKICAvKiBwcm9qZWN0aW9uIGZpdCAqLwogIGZ1bmN0aW9uIGZpdHRlcihwdHMyLCB4MCwgeTAsIHcsIGgpIHsKICAgIGxldCBhID0gSW5maW5pdHksIGIgPSAtSW5maW5pdHksIGMgPSBJbmZpbml0eSwgZCA9IC1JbmZpbml0eTsKICAgIGZvciAoY29uc3QgW3UsIHZdIG9mIHB0czIpIHsgYSA9IE1hdGgubWluKGEsIHUpOyBiID0gTWF0aC5tYXgoYiwgdSk7IGMgPSBNYXRoLm1pbihjLCB2KTsgZCA9IE1hdGgubWF4KGQsIHYpOyB9CiAgICBjb25zdCBrID0gTWF0aC5taW4odyAvIChiIC0gYSB8fCAxKSwgaCAvIChkIC0gYyB8fCAxKSk7CiAgICBjb25zdCBveCA9IHgwICsgKHcgLSAoYiAtIGEpICogaykgLyAyIC0gYSAqIGssIG95ID0geTAgKyAoaCAtIChkIC0gYykgKiBrKSAvIDIgLSBjICogazsKICAgIHJldHVybiAoW3UsIHZdKSA9PiBbb3ggKyB1ICogaywgb3kgKyB2ICoga107CiAgfQogIGNvbnN0IHBzdHIgPSBwdHMgPT4gcHRzLm1hcChwID0+IHBbMF0udG9GaXhlZCgxKSArICIsIiArIHBbMV0udG9GaXhlZCgxKSkuam9pbigiICIpOwogIGNvbnN0IGNlbnQgPSBwdHMgPT4geyBsZXQgYSA9IDAsIHggPSAwLCB5ID0gMDsgZm9yIChsZXQgaSA9IDA7IGkgPCBwdHMubGVuZ3RoOyBpKyspIHsgY29uc3QgcCA9IHB0c1tpXSwgcSA9IHB0c1soaSArIDEpICUgcHRzLmxlbmd0aF0sIGMgPSBwWzBdICogcVsxXSAtIHFbMF0gKiBwWzFdOyBhICs9IGM7IHggKz0gKHBbMF0gKyBxWzBdKSAqIGM7IHkgKz0gKHBbMV0gKyBxWzFdKSAqIGM7IH0gcmV0dXJuIE1hdGguYWJzKGEpIDwgMWUtOSA/IFtwdHNbMF1bMF0sIHB0c1swXVsxXSwgMF0gOiBbeCAvICgzICogYSksIHkgLyAoMyAqIGEpLCBNYXRoLmFicyhhIC8gMildOyB9OwogIGNvbnN0IHR4dCA9ICh4LCB5LCB0LCBvID0ge30pID0+IGA8dGV4dCB4PSIke3gudG9GaXhlZCgxKX0iIHk9IiR7eS50b0ZpeGVkKDEpfSIgJHtGT05UfSBmb250LXNpemU9IiR7by5zaXplIHx8IDExfSIgdGV4dC1hbmNob3I9IiR7by5hbmNob3IgfHwgIm1pZGRsZSJ9InN0eWxlPSJmaWxsOiR7by5maWxsIHx8ICJ2YXIoLS1pbmspIn0iJHtvLndlaWdodCA/IGAgZm9udC13ZWlnaHQ9IiR7by53ZWlnaHR9ImAgOiAiIn0+JHtlc2ModCl9PC90ZXh0PmA7CgogIGZ1bmN0aW9uIGFycm93SGVhZCh4MSwgeTEsIHgyLCB5Miwgc2l6ZSA9IDcpIHsKICAgIGNvbnN0IGEgPSBNYXRoLmF0YW4yKHkyIC0geTEsIHgyIC0geDEpOwogICAgcmV0dXJuIGAke3gyfSwke3kyfSAkeyh4MiAtIHNpemUgKiBNYXRoLmNvcyhhIC0gMC40NSkpLnRvRml4ZWQoMSl9LCR7KHkyIC0gc2l6ZSAqIE1hdGguc2luKGEgLSAwLjQ1KSkudG9GaXhlZCgxKX0gJHsoeDIgLSBzaXplICogTWF0aC5jb3MoYSArIDAuNDUpKS50b0ZpeGVkKDEpfSwkeyh5MiAtIHNpemUgKiBNYXRoLnNpbihhICsgMC40NSkpLnRvRml4ZWQoMSl9YDsKICB9CiAgY29uc3QgbGluZSA9IChhLCBiLCBvID0gIiIpID0+IGA8bGluZSB4MT0iJHthWzBdLnRvRml4ZWQoMSl9IiB5MT0iJHthWzFdLnRvRml4ZWQoMSl9IiB4Mj0iJHtiWzBdLnRvRml4ZWQoMSl9IiB5Mj0iJHtiWzFdLnRvRml4ZWQoMSl9IiAke28gfHwgJ3N0eWxlPSJzdHJva2U6dmFyKC0taW5rKSInfS8+YDsKICBjb25zdCBhcnJvdyA9IChhLCBiLCBvID0ge30pID0+IGA8bGluZSB4MT0iJHthWzBdLnRvRml4ZWQoMSl9IiB5MT0iJHthWzFdLnRvRml4ZWQoMSl9IiB4Mj0iJHtiWzBdLnRvRml4ZWQoMSl9IiB5Mj0iJHtiWzFdLnRvRml4ZWQoMSl9IiBzdHlsZT0ic3Ryb2tlOiR7by5jIHx8ICJ2YXIoLS1pbmspIn0iIHN0cm9rZS13aWR0aD0iJHtvLncgfHwgMS4yfSIvPjxwb2x5Z29uIHBvaW50cz0iJHthcnJvd0hlYWQoYVswXSwgYVsxXSwgYlswXSwgYlsxXSwgby5zIHx8IDcpfSIgc3R5bGU9ImZpbGw6JHtvLmMgfHwgInZhcigtLWluaykifSIvPmA7CiAgZnVuY3Rpb24gZGltKGEsIGIsIGxhYmVsLCBvZmYgPSAxNCkgewogICAgY29uc3QgZHggPSBiWzBdIC0gYVswXSwgZHkgPSBiWzFdIC0gYVsxXSwgTCA9IE1hdGguaHlwb3QoZHgsIGR5KSB8fCAxLCBueCA9IC1keSAvIEwgKiBvZmYsIG55ID0gZHggLyBMICogb2ZmOwogICAgY29uc3QgQSA9IFthWzBdICsgbngsIGFbMV0gKyBueV0sIEIgPSBbYlswXSArIG54LCBiWzFdICsgbnldOwogICAgbGV0IGFuZyA9IE1hdGguYXRhbjIoZHksIGR4KSAqIDE4MCAvIE1hdGguUEk7IGlmIChhbmcgPiA5MCkgYW5nIC09IDE4MDsgaWYgKGFuZyA8IC05MCkgYW5nICs9IDE4MDsKICAgIGNvbnN0IGFyID0gYW5nICogTWF0aC5QSSAvIDE4MCwgdXAgPSBbTWF0aC5zaW4oYXIpLCAtTWF0aC5jb3MoYXIpXSwgdHkgPSAobnggKiB1cFswXSArIG55ICogdXBbMV0pID49IDAgPyAtNSA6IDEzOwogICAgY29uc3QgbSA9IFsoQVswXSArIEJbMF0pIC8gMiwgKEFbMV0gKyBCWzFdKSAvIDJdOwogICAgcmV0dXJuIGA8ZyBvcGFjaXR5PSIuODUiPiR7bGluZShhLCBBLCAnc3R5bGU9InN0cm9rZTp2YXIoLS1tdXRlZCkiIHN0cm9rZS13aWR0aD0iLjYiJyl9JHtsaW5lKGIsIEIsICdzdHlsZT0ic3Ryb2tlOnZhcigtLW11dGVkKSIgc3Ryb2tlLXdpZHRoPSIuNiInKX0ke2Fycm93KG0ubWFwKCh2LCBpKSA9PiAoQVtpXSArIEJbaV0pIC8gMiksIEEsIHtjOiAidmFyKC0tbXV0ZWQpIiwgczogNSwgdzogLjh9KX0ke2Fycm93KG0ubWFwKCh2LCBpKSA9PiAoQVtpXSArIEJbaV0pIC8gMiksIEIsIHtjOiAidmFyKC0tbXV0ZWQpIiwgczogNSwgdzogLjh9KX08dGV4dCBwYWludC1vcmRlcj0ic3Ryb2tlIiBzdHlsZT0ic3Ryb2tlOnZhcigtLWJnKTtzdHJva2Utd2lkdGg6M3B4O2ZpbGw6dmFyKC0taW5rKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoJHttWzBdLnRvRml4ZWQoMSl9LCR7bVsxXS50b0ZpeGVkKDEpfSkgcm90YXRlKCR7YW5nLnRvRml4ZWQoMSl9KSIgZHk9IiR7dHl9IiAke0ZPTlR9IGZvbnQtc2l6ZT0iMTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiPiR7ZXNjKGxhYmVsKX08L3RleHQ+PC9nPmA7CiAgfQogIGNvbnN0IHN2ZyA9ICh3LCBoLCBib2R5LCBsYWJlbCkgPT4gYDxzdmcgdmlld0JveD0iMCAwICR7d30gJHtofSIgd2lkdGg9IjEwMCUiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iJHtlc2MobGFiZWwpfSIgc3R5bGU9ImRpcmVjdGlvbjpsdHI7ZGlzcGxheTpibG9jazttaW4td2lkdGg6JHtNYXRoLnJvdW5kKHcgKiAuNjgpfXB4Ij4ke2JvZHl9PC9zdmc+YDsKCiAgLyogbGVnZW5kIGJsb2NrLCBQcm9rb24gc3R5bGUgKi8KICBmdW5jdGlvbiBsZWdlbmQoaXRlbXMsIHgsIHksIHcgPSAyMzApIHsKICAgIGxldCBvID0gIiI7CiAgICBpdGVtcy5mb3JFYWNoKChpdCwgaSkgPT4gewogICAgICBjb25zdCB5eSA9IHkgKyBpICogMjY7CiAgICAgIG8gKz0gYDxyZWN0IHg9IiR7eH0iIHk9IiR7eXl9IiB3aWR0aD0iMzAiIGhlaWdodD0iMjIiIGZpbGw9IiR7aXQuZmlsbH0iIHN0cm9rZT0icmdiYSgwLDAsMCwuMjUpIi8+YDsKICAgICAgbyArPSB0eHQoeCArIDM4LCB5eSArIDE1LCBpdC50ZXh0LCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMS41fSk7CiAgICB9KTsKICAgIHJldHVybiBvOwogIH0KCiAgLyogM0Qgem9uZWQgdmlldzogem9uZXMgPSBbe3RhZywgcG9seSwga2V5fV07IHZhbHM6IGtleSAtPiB7diwgdGV4dH07ICovCiAgZnVuY3Rpb24gdmlldzNkKHMsIGcsIHpvbmVzLCB2YWxzLCBvcHQpIHsKICAgIGNvbnN0IFdkID0gNzIwLCBIdCA9IDM4MCwgbGVnVyA9IG9wdC5sZWdXIHx8IDI1MDsKICAgIGNvbnN0IGFsbCA9IFtdOwogICAgZm9yIChjb25zdCB6IG9mIHpvbmVzKSBhbGwucHVzaCguLi56LnBvbHkubWFwKFApKTsKICAgIGNvbnN0IGFycm93UHRzID0gd2luZEFycm93M2Qocywgb3B0LndpbmQpOwogICAgYWxsLnB1c2goLi4uYXJyb3dQdHMubWFwKFApKTsKICAgIGNvbnN0IFQgPSBmaXR0ZXIoYWxsLCBsZWdXICsgMTAsIDMwLCBXZCAtIGxlZ1cgLSAyMCwgSHQgLSA1MCk7CiAgICBjb25zdCB2bWF4ID0gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyh2YWxzKS5tYXAodiA9PiBNYXRoLmFicyh2LnYgfHwgMCkpLCAxZS05KTsKICAgIGNvbnN0IGRlcHRoID0geiA9PiB7IGNvbnN0IGMgPSB6LnBvbHkucmVkdWNlKChhLCBwKSA9PiBbYVswXSArIHBbMF0sIGFbMV0gKyBwWzFdXSwgWzAsIDBdKS5tYXAodiA9PiB2IC8gei5wb2x5Lmxlbmd0aCk7IHJldHVybiBjWzBdICogc3ggKyBjWzFdICogc3k7IH07CiAgICBjb25zdCBzb3J0ZWQgPSB6b25lcy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IGEuZ3JwIC0gYi5ncnAgfHwgZGVwdGgoYikgLSBkZXB0aChhKSk7CiAgICBsZXQgbyA9ICIiOwogICAgZm9yIChjb25zdCB6IG9mIHNvcnRlZCkgewogICAgICBjb25zdCB2ID0gdmFsc1t6LmtleV0sIGMgPSBjb2wodiA/IHYudiA6IG51bGwsIHZtYXgpLCBzcCA9IHoucG9seS5tYXAocCA9PiBUKFAocCkpKTsKICAgICAgbyArPSBgPHBvbHlnb24gcG9pbnRzPSIke3BzdHIoc3ApfSIgZmlsbD0iJHtjLmZpbGx9IiBmaWxsLW9wYWNpdHk9IiR7ei5ncnAgPT09IDIgPyAuODIgOiAuOX0iIHN0cm9rZT0icmdiYSgyMCwyMCwyMCwuNTUpIiBzdHJva2Utd2lkdGg9Ii44Ii8+YDsKICAgIH0KICAgIGZvciAoY29uc3QgeiBvZiBzb3J0ZWQpIHsKICAgICAgaWYgKHouZ3JwID09PSAwICYmICFvcHQubGFiZWxCYWNrKSBjb250aW51ZTsKICAgICAgY29uc3Qgc3AgPSB6LnBvbHkubWFwKHAgPT4gVChQKHApKSksIGMgPSBjZW50KHNwKSwgdiA9IHZhbHNbei5rZXldOwogICAgICBpZiAoY1syXSA8IDkwMCB8fCAhdikgY29udGludWU7CiAgICAgIG8gKz0gdHh0KGNbMF0sIGNbMV0gKyA0LCB6LmxhYmVsICE9PSB1bmRlZmluZWQgPyB6LmxhYmVsIDogKHYuc2hvcnQgfHwgei5rZXkpLCB7ZmlsbDogY29sKHYudiwgdm1heCkuaW5rLCBzaXplOiAxMSwgd2VpZ2h0OiA2MDB9KTsKICAgIH0KICAgIGNvbnN0IGFwID0gYXJyb3dQdHMubWFwKHAgPT4gVChQKHApKSk7CiAgICBvICs9IGA8cG9seWdvbiBwb2ludHM9IiR7cHN0cihhcCl9IiBmaWxsPSJub25lIiBzdHlsZT0ic3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4zIi8+YDsKICAgIG8gKz0gdHh0KDEwLCAxOCwgb3B0LnRpdGxlLCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMi41LCB3ZWlnaHQ6IDYwMH0pOwogICAgY29uc3QgaXRlbXMgPSBPYmplY3QuZW50cmllcyh2YWxzKS5maWx0ZXIoKFtrXSkgPT4gem9uZXMuc29tZSh6ID0+IHoua2V5ID09PSBrKSkuc29ydCgoYSwgYikgPT4gKGFbMV0udiA/PyAwKSAtIChiWzFdLnYgPz8gMCkpLm1hcCgoW2ssIHZdKSA9PiAoe2ZpbGw6IGNvbCh2LnYsIHZtYXgpLmZpbGwsIHRleHQ6IHYudGV4dH0pKTsKICAgIG8gKz0gbGVnZW5kKGl0ZW1zLCAxMCwgMzQpOwogICAgY29uc3QgSGYgPSBNYXRoLm1heChIdCwgNzAgKyBpdGVtcy5sZW5ndGggKiAyNik7CiAgICBpZiAob3B0LmZvb3QpIG8gKz0gdHh0KDEwLCBIZiAtIDgsIG9wdC5mb290LCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMC41fSk7CiAgICByZXR1cm4gc3ZnKFdkLCBIZiwgbywgb3B0LnRpdGxlKTsKICB9CiAgZnVuY3Rpb24gd2luZEFycm93M2QocywgZGlyKSB7CiAgICBjb25zdCBXID0gcy5XLCBMID0gcy5Mciwgc2MgPSBNYXRoLm1pbihXLCBMKSAqIDAuMTgsIGdhcCA9IE1hdGgubWF4KFcsIEwpICogMC4xNDsKICAgIGNvbnN0IHNoYXBlID0gW1stMSwgLS4zNV0sIFswLCAtLjM1XSwgWzAsIC0uOF0sIFsxLCAwXSwgWzAsIC44XSwgWzAsIC4zNV0sIFstMSwgLjM1XV07CiAgICBpZiAoZGlyID09PSAieCIpIHJldHVybiBzaGFwZS5tYXAoKFt1LCB2XSkgPT4gWy1nYXAgLSBzYyAqIDEuMiArIHUgKiBzYywgTCAvIDIgKyB2ICogc2MsIDBdKTsKICAgIHJldHVybiBzaGFwZS5tYXAoKFt1LCB2XSkgPT4gW1cgLyAyICsgdiAqIHNjLCAtZ2FwIC0gc2MgKiAxLjIgKyB1ICogc2MsIDBdKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gaW5wdXQgc2tldGNoIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBidWlsZGluZyhzLCBnKSB7CiAgICBjb25zdCBmID0gc2hlbGwocywgZyksIFdkID0gNzIwLCBIdCA9IDMzMDsKICAgIGNvbnN0IGFsbCA9IFtdOyBmLmZvckVhY2goeCA9PiBhbGwucHVzaCguLi54LnB0cy5tYXAoUCkpKTsKICAgIGNvbnN0IFcgPSBzLlcsIEwgPSBzLkxyOwogICAgY29uc3QgYXggPSB3aW5kQXJyb3czZChzLCAieCIpLCBheSA9IHdpbmRBcnJvdzNkKHMsICJ5Iik7CiAgICBhbGwucHVzaCguLi5heC5tYXAoUCksIC4uLmF5Lm1hcChQKSk7CiAgICBjb25zdCBUID0gZml0dGVyKGFsbCwgMzAsIDIwLCA0MDAsIEh0IC0gNDApOwogICAgY29uc3QgZGVwdGggPSB6ID0+IHsgY29uc3QgYyA9IHoucHRzLnJlZHVjZSgoYSwgcCkgPT4gW2FbMF0gKyBwWzBdLCBhWzFdICsgcFsxXV0sIFswLCAwXSkubWFwKHYgPT4gdiAvIHoucHRzLmxlbmd0aCk7IHJldHVybiBjWzBdICogc3ggKyBjWzFdICogc3k7IH07CiAgICBsZXQgbyA9ICIiOwogICAgZm9yIChjb25zdCB6IG9mIGYuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLmdycCAtIGIuZ3JwIHx8IGRlcHRoKGIpIC0gZGVwdGgoYSkpKSB7CiAgICAgIGNvbnN0IHNwID0gei5wdHMubWFwKHAgPT4gVChQKHApKSk7CiAgICAgIG8gKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtwc3RyKHNwKX0iIHN0eWxlPSJmaWxsOnZhcigtLWNoYXJ0LWZpbGwpO3N0cm9rZTp2YXIoLS1pbmspIiBmaWxsLW9wYWNpdHk9IiR7aXNSb29mKHoudGFnKSA/IC45NSA6IC43NX0iIHN0cm9rZS13aWR0aD0iLjkiLz5gOwogICAgfQogICAgY29uc3QgUSA9IHAgPT4gVChQKHApKTsKICAgIG8gKz0gZGltKFEoWzAsIDAsIDBdKSwgUShbVywgMCwgMF0pLCAiVyA9ICIgKyBGKFcsIDEpICsgIiBtIiwgMTgpOwogICAgbyArPSBkaW0oUShbMCwgTCwgMF0pLCBRKFswLCAwLCAwXSksICJMciA9ICIgKyBGKEwsIDEpICsgIiBtIiwgMTgpOwogICAgbyArPSBkaW0oUShbMCwgMCwgMF0pLCBRKFswLCAwLCBzLmhlXSksICJoZSA9ICIgKyBGKHMuaGUsIDIpLCAtMTYpOwogICAgbyArPSBgPHBvbHlnb24gcG9pbnRzPSIke3BzdHIoYXgubWFwKFEpKX0iIGZpbGw9Im5vbmUiIHN0eWxlPSJzdHJva2U6dmFyKC0tYWNjZW50KSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz5gICsgdHh0KC4uLlEoWy1NYXRoLm1heChXLCBMKSAqIC4xNCAtIE1hdGgubWluKFcsIEwpICogLjIyLCBMIC8gMiArIE1hdGgubWluKFcsIEwpICogLjMsIDBdKSwgIlggwrcgMMKwIiwge2ZpbGw6ICJ2YXIoLS1hY2NlbnQpIn0pOwogICAgbyArPSBgPHBvbHlnb24gcG9pbnRzPSIke3BzdHIoYXkubWFwKFEpKX0iIGZpbGw9Im5vbmUiIHN0eWxlPSJzdHJva2U6dmFyKC0tYWNjZW50KSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz5gICsgdHh0KC4uLlEoW1cgLyAyIC0gTWF0aC5taW4oVywgTCkgKiAuMywgLU1hdGgubWF4KFcsIEwpICogLjE0IC0gTWF0aC5taW4oVywgTCkgKiAuMywgMF0pLCAiWSDCtyA5MMKwIiwge2ZpbGw6ICJ2YXIoLS1hY2NlbnQpIiwgYW5jaG9yOiAiZW5kIn0pOwogICAgLyogY3Jvc3Mtc2VjdGlvbiAqLwogICAgY29uc3QgeDAgPSA0NzAsIHcgPSAyMzAsIHRvcCA9IDQwLCBoZ3QgPSBIdCAtIDkwOwogICAgY29uc3QgelRvcCA9IGcucmlkZ2UgKyAocy5ocCB8fCAwKSwgayA9IE1hdGgubWluKHcgLyBXLCBoZ3QgLyAoelRvcCAqIDEuMDUpKTsKICAgIGNvbnN0IFggPSB4ID0+IHgwICsgKHcgLSBXICogaykgLyAyICsgeCAqIGssIFkgPSB6ID0+IHRvcCArIGhndCAtIHogKiBrOwogICAgY29uc3QgcHJvZiA9IHMucm9vZiA9PT0gImZsYXQiIHx8IGcucmlzZSA8PSAxZS05ID8gW1swLCAwXSwgWzAsIHMuaGVdLCBbVywgcy5oZV0sIFtXLCAwXV0gOiBbWzAsIDBdLCBbMCwgcy5oZV0sIFtXIC8gMiwgZy5yaWRnZV0sIFtXLCBzLmhlXSwgW1csIDBdXTsKICAgIG8gKz0gdHh0KHgwICsgdyAvIDIsIDE4LCAiU2VjdGlvbiBhY3Jvc3Mgc3BhbiIsIHtzaXplOiAxMiwgd2VpZ2h0OiA2MDB9KTsKICAgIG8gKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtwc3RyKHByb2YubWFwKChbeCwgel0pID0+IFtYKHgpLCBZKHopXSkpfSIgc3R5bGU9ImZpbGw6dmFyKC0tY2hhcnQtZmlsbCk7c3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4yIi8+YDsKICAgIGlmIChzLmhwID4gMCkgbyArPSBgPHJlY3QgeD0iJHtYKDApIC0gM30iIHk9IiR7WShzLmhlICsgcy5ocCl9IiB3aWR0aD0iMyIgaGVpZ2h0PSIke3MuaHAgKiBrfSIgc3R5bGU9ImZpbGw6dmFyKC0taW5rKSIvPjxyZWN0IHg9IiR7WChXKX0iIHk9IiR7WShzLmhlICsgcy5ocCl9IiB3aWR0aD0iMyIgaGVpZ2h0PSIke3MuaHAgKiBrfSIgc3R5bGU9ImZpbGw6dmFyKC0taW5rKSIvPmA7CiAgICBvICs9IGxpbmUoW1goLVcgKiAuMDgpLCBZKDApXSwgW1goVyAqIDEuMDgpLCBZKDApXSwgJ3N0eWxlPSJzdHJva2U6dmFyKC0taW5rKSIgc3Ryb2tlLXdpZHRoPSIxLjUiJyk7CiAgICBmb3IgKGNvbnN0IHogb2Ygcy5sZXZlbHMuZmlsdGVyKHogPT4geiA+IDAgJiYgeiA8IHMuaGUpKSBvICs9IGxpbmUoW1goMCksIFkoeildLCBbWChXKSwgWSh6KV0sICdzdHlsZT0ic3Ryb2tlOnZhcigtLW11dGVkKSIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIicpICsgdHh0KFgoVykgLSA0LCBZKHopIC0gMywgIisiICsgRih6LCAyKSwge2FuY2hvcjogImVuZCIsIHNpemU6IDEwfSk7CiAgICBvICs9IGxpbmUoW1goMCksIFkoZy5oKV0sIFtYKFcgKiAxLjEyKSwgWShnLmgpXSwgJ3N0eWxlPSJzdHJva2U6dmFyKC0tYWNjZW50KSIgc3Ryb2tlLWRhc2hhcnJheT0iNSAzIicpICsgdHh0KFgoVyAqIDEuMTIpICsgMiwgWShnLmgpICsgNCwgImggIiArIEYoZy5oLCAyKSwge2FuY2hvcjogInN0YXJ0Iiwgc2l6ZTogMTAuNSwgZmlsbDogInZhcigtLWFjY2VudCkifSk7CiAgICBvICs9IGRpbShbWCgwKSwgWSgwKV0sIFtYKFcpLCBZKDApXSwgIlciLCAxNik7CiAgICBvICs9IGRpbShbWCgwKSwgWShzLmhlKV0sIFtYKDApLCBZKDApXSwgImhlIiwgMTQpOwogICAgaWYgKGcucmlzZSA+IDApIHsKICAgICAgbyArPSB0eHQoWChXIC8gNCksIFkocy5oZSArIGcucmlzZSAvIDQpICsgMTYsICLOuCA9ICIgKyBGKGcudGhldGEsIDEpICsgIsKwIiwge3NpemU6IDEwLjV9KTsKICAgICAgbyArPSB0eHQoWChXIC8gMiksIFkoZy5yaWRnZSkgLSA2LCAicmlkZ2UgIiArIEYoZy5yaWRnZSwgMiksIHtzaXplOiAxMC41fSk7CiAgICB9CiAgICByZXR1cm4gc3ZnKFdkLCBIdCwgbywgIkJ1aWxkaW5nIGdlb21ldHJ5Iik7CiAgfQoKICAvKiAtLS0tLS0tLS0tIENoYXB0ZXIgMjcgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIHpvbmVzMjcocywgZywgZCkgewogICAgY29uc3QgZiA9IHNoZWxsKHMsIGcpLCBaID0gW10sIHZhbHMgPSB7fTsKICAgIGNvbnN0IHByaW0gPSBkLnJvb2YuZmlsdGVyKHIgPT4gIXIuYWx0KTsKICAgIGNvbnN0IHdhbGxLZXkgPSB7WDoge3gwOiAwLCB4VzogMSwgeTA6IDIsIHlMOiAyfSwgWToge3kwOiAwLCB5TDogMSwgeDA6IDIsIHhXOiAyfX1bZC5rZXldOwogICAgY29uc3QgbmFtZXMgPSBbIldpbmR3YXJkIHdhbGwiLCAiTGVld2FyZCB3YWxsIiwgIlNpZGUgd2FsbCJdOwogICAgZC53YWxscy5mb3JFYWNoKCh3LCBpKSA9PiB2YWxzWyJ3IiArIGldID0ge3Y6IHcuZXh0LCB0ZXh0OiBgJHtuYW1lc1tpXX06ICR7a3Aody5leHQpfSBrUGFgLCBzaG9ydDoga3Aody5leHQpfSk7CiAgICBwcmltLmZvckVhY2goKHIsIGkpID0+IHZhbHNbInIiICsgaV0gPSB7djogci5leHQsIHRleHQ6IGAke3Iuc2lkZSA/IChyLnNpZGUgPT09ICJ3dyIgPyAiV2luZHdhcmQgc2xvcGUiIDogIkxlZXdhcmQgc2xvcGUiKSA6ICJSb29mICIgKyBGKHIuZnJvbSwgMSkgKyAi4oCTIiArIEYoci50bywgMSkgKyAiIG0ifTogJHtrcChyLmV4dCl9IGtQYWAsIHNob3J0OiBrcChyLmV4dCl9KTsKICAgIGZvciAoY29uc3QgZmMgb2YgZikgewogICAgICBpZiAoZmMucGFyKSBjb250aW51ZTsKICAgICAgaWYgKHdhbGxLZXlbZmMudGFnXSAhPT0gdW5kZWZpbmVkKSB7IFoucHVzaCh7Li4uZmMsIHBvbHk6IGZjLnB0cywga2V5OiAidyIgKyB3YWxsS2V5W2ZjLnRhZ119KTsgY29udGludWU7IH0KICAgICAgaWYgKCFpc1Jvb2YoZmMudGFnKSkgY29udGludWU7CiAgICAgIGlmIChwcmltWzBdICYmIHByaW1bMF0uc2lkZSkgewogICAgICAgIGNvbnN0IGsgPSBmYy50YWcgPT09ICJyLSIgPyBwcmltLmZpbmRJbmRleChyID0+IHIuc2lkZSA9PT0gInd3IikgOiBmYy50YWcgPT09ICJyKyIgPyBwcmltLmZpbmRJbmRleChyID0+IHIuc2lkZSA9PT0gImx3IikgOiAtMTsKICAgICAgICBaLnB1c2goey4uLmZjLCBwb2x5OiBmYy5wdHMsIGtleTogayA+PSAwID8gInIiICsgayA6ICJoaXBlbmQifSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgYXggPSBkLmtleSA9PT0gIlgiID8gMCA6IDE7CiAgICAgICAgcHJpbS5mb3JFYWNoKChyLCBpKSA9PiB7IGNvbnN0IHAgPSBjbGlwKGZjLnB0cywgYXgsIHIuZnJvbSwgci50byk7IGlmIChwKSBaLnB1c2goey4uLmZjLCBwb2x5OiBwLCBrZXk6ICJyIiArIGl9KTsgfSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChaLnNvbWUoeiA9PiB6LmtleSA9PT0gImhpcGVuZCIpKSB2YWxzLmhpcGVuZCA9IHt2OiBudWxsLCBzaG9ydDogIuKAlCIsIHRleHQ6ICJIaXAgZW5kczogbm90IHRhYnVsYXRlZCBpbiBGaWcuIDI3LjMtMSJ9OwogICAgcmV0dXJuIHtaLCB2YWxzfTsKICB9CiAgZnVuY3Rpb24gZDNfMjcocywgZywgZCkgewogICAgY29uc3Qge1osIHZhbHN9ID0gem9uZXMyNyhzLCBnLCBkKTsKICAgIHJldHVybiB2aWV3M2QocywgZywgWiwgdmFscywge3dpbmQ6IGQua2V5ID09PSAiWCIgPyAieCIgOiAieSIsIHRpdGxlOiBgV2luZCBkaXJlY3Rpb24gJHtkLmtleSA9PT0gIlgiID8gIjDCsCIgOiAiOTDCsCJ9IMK3IGV4dGVybmFsIHByZXNzdXJlIHHCt0tkwrdHwrdDcGAsIGZvb3Q6ICJBZGQgaW50ZXJuYWwgcHJlc3N1cmUg4oiTIHFowrdLZMK3KEdDcGkpIHRvIGV2ZXJ5IHN1cmZhY2UuIn0pOwogIH0KCiAgLyogaGF0Y2hlZCBiYW5kIGFsb25nIGEgc3RyYWlnaHQgc2NyZWVuIHNlZ21lbnQ7IHRoKHUpIGdpdmVzIHRoaWNrbmVzcyBpbiBweCwgbiA9IG91dHdhcmQgdW5pdCBub3JtYWwgKi8KICBmdW5jdGlvbiBiYW5kKGEsIGIsIG4sIHRoLCBjLCBzdGVwID0gNikgewogICAgY29uc3QgTCA9IE1hdGguaHlwb3QoYlswXSAtIGFbMF0sIGJbMV0gLSBhWzFdKSwgTiA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoTCAvIHN0ZXApKTsKICAgIGNvbnN0IGJhc2UgPSBbXSwgb3V0ZXIgPSBbXTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE47IGkrKykgewogICAgICBjb25zdCB1ID0gaSAvIE4sIHAgPSBbYVswXSArIChiWzBdIC0gYVswXSkgKiB1LCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIHVdLCB0ID0gdGgodSk7CiAgICAgIGJhc2UucHVzaChwKTsgb3V0ZXIucHVzaChbcFswXSArIG5bMF0gKiB0LCBwWzFdICsgblsxXSAqIHRdKTsKICAgIH0KICAgIGxldCBvID0gYDxwb2x5Z29uIHBvaW50cz0iJHtwc3RyKFsuLi5iYXNlLCAuLi5vdXRlci5yZXZlcnNlKCldKX0iIGZpbGw9IiR7Y30iIGZpbGwtb3BhY2l0eT0iLjE2IiBzdHJva2U9IiR7Y30iIHN0cm9rZS13aWR0aD0iMSIvPmA7CiAgICBvdXRlci5yZXZlcnNlKCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOOyBpKyspIG8gKz0gYDxsaW5lIHgxPSIke2Jhc2VbaV1bMF0udG9GaXhlZCgxKX0iIHkxPSIke2Jhc2VbaV1bMV0udG9GaXhlZCgxKX0iIHgyPSIke291dGVyW2ldWzBdLnRvRml4ZWQoMSl9IiB5Mj0iJHtvdXRlcltpXVsxXS50b0ZpeGVkKDEpfSIgc3Ryb2tlPSIke2N9IiBzdHJva2Utd2lkdGg9Ii43Ii8+YDsKICAgIHJldHVybiBvOwogIH0KICBjb25zdCBSRUQgPSAiI2MwMzkyYiIsIEJMVUUgPSAiIzJkNWZhOCI7CgogIGZ1bmN0aW9uIHNlY3Rpb24yNyhzLCBnLCBkKSB7CiAgICBjb25zdCBXZCA9IDcyMCwgSHQgPSAzMjAsIFgwID0gMTIwLCBXYSA9IDQ4MCwgdG9wID0gNTYsIEhhID0gMjAwOwogICAgY29uc3QgTGQgPSBkLmtleSA9PT0gIlgiID8gcy5XIDogcy5MciwgRyA9IGQuRzsKICAgIGNvbnN0IGhpcCA9IHMucm9vZiA9PT0gImhpcCIsIGZsYXQgPSBzLnJvb2YgPT09ICJmbGF0IiB8fCBnLnJpc2UgPD0gMWUtOTsKICAgIGxldCBwcm9mOwogICAgaWYgKGZsYXQpIHByb2YgPSBbWzAsIHMuaGVdLCBbTGQsIHMuaGVdXTsKICAgIGVsc2UgaWYgKGQua2V5ID09PSAiWCIpIHByb2YgPSBbWzAsIHMuaGVdLCBbTGQgLyAyLCBnLnJpZGdlXSwgW0xkLCBzLmhlXV07CiAgICBlbHNlIGlmIChoaXApIHsgY29uc3QgciA9IE1hdGgubWluKHMuVyAvIDIsIExkIC8gMik7IHByb2YgPSBbWzAsIHMuaGVdLCBbciwgZy5yaWRnZV0sIFtMZCAtIHIsIGcucmlkZ2VdLCBbTGQsIHMuaGVdXTsgfQogICAgZWxzZSBwcm9mID0gW1swLCBnLnJpZGdlXSwgW0xkLCBnLnJpZGdlXV07CiAgICBjb25zdCB3YWxsVG9wID0gcHJvZlswXVsxXTsKICAgIGNvbnN0IHpNYXggPSBNYXRoLm1heChnLnJpZGdlLCBzLmhlKSAqIDEuMDsKICAgIGNvbnN0IGsgPSBNYXRoLm1pbihXYSAvIExkLCBIYSAvIHpNYXgpOwogICAgY29uc3QgWCA9IHQgPT4gWDAgKyAoV2EgLSBMZCAqIGspIC8gMiArIHQgKiBrLCBZID0geiA9PiB0b3AgKyBIYSAtIHogKiBrOwogICAgY29uc3QgYWxsID0gWy4uLmQud2FsbHMubWFwKHcgPT4gTWF0aC5hYnMody5leHQpKSwgLi4uZC5yb29mLmZpbHRlcihyID0+ICFyLmFsdCkubWFwKHIgPT4gTWF0aC5hYnMoci5leHQpKSwgcXood2FsbFRvcCwgcykgKiBLRF9CTERHICogRyAqIDAuOF07CiAgICBjb25zdCBwayA9IDQ2IC8gTWF0aC5tYXgoLi4uYWxsLCAxKTsKICAgIGxldCBvID0gdHh0KDEwLCAxOCwgYFNlY3Rpb24gYWxvbmcgd2luZCAke2Qua2V5ID09PSAiWCIgPyAiKDDCsCwgbm9ybWFsIHRvIHJpZGdlKSIgOiAiKDkwwrAsIHBhcmFsbGVsIHRvIHJpZGdlKSJ9IMK3IHByZXNzdXJlcyBpbiBrUGFgLCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMi41LCB3ZWlnaHQ6IDYwMH0pOwogICAgY29uc3Qgb3V0bGluZSA9IFtbMCwgMF0sIC4uLnByb2YsIFtMZCwgMF1dOwogICAgbyArPSBgPHBvbHlnb24gcG9pbnRzPSIke3BzdHIob3V0bGluZS5tYXAoKFt0LCB6XSkgPT4gW1godCksIFkoeildKSl9IiBzdHlsZT0iZmlsbDp2YXIoLS1jaGFydC1maWxsKTtzdHJva2U6dmFyKC0taW5rKSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz5gOwogICAgaWYgKGQua2V5ID09PSAiWSIgJiYgIWZsYXQgJiYgIWhpcCkgbyArPSBsaW5lKFtYKDApLCBZKHMuaGUpXSwgW1goTGQpLCBZKHMuaGUpXSwgJ3N0eWxlPSJzdHJva2U6dmFyKC0tbXV0ZWQpIiBzdHJva2UtZGFzaGFycmF5PSI0IDMiJyk7CiAgICBvICs9IGxpbmUoW1goMCkgLSA3MCwgWSgwKV0sIFtYKExkKSArIDcwLCBZKDApXSwgJ3N0eWxlPSJzdHJva2U6dmFyKC0taW5rKSIgc3Ryb2tlLXdpZHRoPSIxLjYiJyk7CiAgICAvKiB3aW5kd2FyZCB3YWxsOiBwcm9maWxlIHdpdGggaGVpZ2h0ICovCiAgICBjb25zdCBwdyA9IHogPT4gcXooTWF0aC5tYXgoeiwgMC4wMSksIHMpICogS0RfQkxERyAqIEcgKiAwLjg7CiAgICBvICs9IGJhbmQoW1goMCksIFkod2FsbFRvcCldLCBbWCgwKSwgWSgwKV0sIFstMSwgMF0sIHUgPT4gcHcod2FsbFRvcCAqICgxIC0gdSkpICogcGssIEJMVUUpOwogICAgbyArPSB0eHQoWCgwKSAtIHB3KHdhbGxUb3ApICogcGsgLSA2LCBZKHdhbGxUb3ApIC0gNiwga3AocHcod2FsbFRvcCkpLCB7YW5jaG9yOiAiZW5kIiwgZmlsbDogQkxVRSwgc2l6ZTogMTF9KTsKICAgIG8gKz0gdHh0KFgoMCkgLSBwdygwKSAqIHBrIC0gNiwgWSgwKSAtIDYsIGtwKHB3KDApKSwge2FuY2hvcjogImVuZCIsIGZpbGw6IEJMVUUsIHNpemU6IDExfSk7CiAgICBvICs9IHR4dChYKDApIC0gNTIsIFkod2FsbFRvcCAvIDIpLCAiQ3AgMC44Iiwge3NpemU6IDEwLjUsIGFuY2hvcjogImVuZCJ9KTsKICAgIC8qIGxlZXdhcmQgd2FsbCAqLwogICAgY29uc3QgbHcgPSBkLndhbGxzWzFdLmV4dCwgbHdUb3AgPSBwcm9mW3Byb2YubGVuZ3RoIC0gMV1bMV07CiAgICBvICs9IGJhbmQoW1goTGQpLCBZKGx3VG9wKV0sIFtYKExkKSwgWSgwKV0sIFsxLCAwXSwgKCkgPT4gTWF0aC5hYnMobHcpICogcGssIGx3IDwgMCA/IFJFRCA6IEJMVUUpOwogICAgbyArPSB0eHQoWChMZCkgKyBNYXRoLmFicyhsdykgKiBwayArIDYsIFkobHdUb3AgLyAyKSwga3AobHcpLCB7YW5jaG9yOiAic3RhcnQiLCBmaWxsOiBsdyA8IDAgPyBSRUQgOiBCTFVFfSk7CiAgICBvICs9IHR4dChYKExkKSArIE1hdGguYWJzKGx3KSAqIHBrICsgNiwgWShsd1RvcCAvIDIpICsgMTUsICJDcCAiICsgRihkLndhbGxzWzFdLmNwLCAyKSwge2FuY2hvcjogInN0YXJ0Iiwgc2l6ZTogMTAuNX0pOwogICAgLyogcm9vZiB6b25lcyAqLwogICAgY29uc3QgenIgPSB0ID0+IHsgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9mLmxlbmd0aCAtIDE7IGkrKykgeyBjb25zdCBbdDEsIHoxXSA9IHByb2ZbaV0sIFt0MiwgejJdID0gcHJvZltpICsgMV07IGlmICh0IDw9IHQyICsgMWUtOSkgcmV0dXJuIHoxICsgKHoyIC0gejEpICogKHQgLSB0MSkgLyAoKHQyIC0gdDEpIHx8IDEpOyB9IHJldHVybiBwcm9mW3Byb2YubGVuZ3RoIC0gMV1bMV07IH07CiAgICBjb25zdCBwcmltID0gZC5yb29mLmZpbHRlcihyID0+ICFyLmFsdCk7CiAgICBjb25zdCBzZWdzID0gcHJpbS5tYXAociA9PiByLnNpZGUgPyB7ZnJvbTogci5zaWRlID09PSAid3ciID8gMCA6IExkIC8gMiwgdG86IHIuc2lkZSA9PT0gInd3IiA/IExkIC8gMiA6IExkLCByfSA6IHtmcm9tOiByLmZyb20sIHRvOiByLnRvLCByfSk7CiAgICBmb3IgKGNvbnN0IHNnIG9mIHNlZ3MpIHsKICAgICAgY29uc3QgYnJrID0gW3NnLmZyb20sIC4uLnByb2YubWFwKHAgPT4gcFswXSkuZmlsdGVyKHQgPT4gdCA+IHNnLmZyb20gKyAxZS05ICYmIHQgPCBzZy50byAtIDFlLTkpLCBzZy50b107CiAgICAgIGNvbnN0IGMgPSBzZy5yLmV4dCA8IDAgPyBSRUQgOiBCTFVFLCB0aCA9IE1hdGguYWJzKHNnLnIuZXh0KSAqIHBrOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyay5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgICBjb25zdCBBID0gW1goYnJrW2ldKSwgWSh6cihicmtbaV0pKV0sIEIgPSBbWChicmtbaSArIDFdKSwgWSh6cihicmtbaSArIDFdKSldOwogICAgICAgIGNvbnN0IGR4ID0gQlswXSAtIEFbMF0sIGR5ID0gQlsxXSAtIEFbMV0sIEwgPSBNYXRoLmh5cG90KGR4LCBkeSkgfHwgMTsKICAgICAgICBvICs9IGJhbmQoQSwgQiwgW2R5IC8gTCwgLWR4IC8gTF0sICgpID0+IHRoLCBjKTsKICAgICAgfQogICAgICBjb25zdCB0bSA9IChzZy5mcm9tICsgc2cudG8pIC8gMiwgcG0gPSBbWCh0bSksIFkoenIodG0pKSAtIHRoIC0gOF07CiAgICAgIG8gKz0gdHh0KHBtWzBdLCBwbVsxXSwga3Aoc2cuci5leHQpLCB7ZmlsbDogYywgc2l6ZTogMTF9KTsKICAgICAgbyArPSB0eHQocG1bMF0sIHBtWzFdIC0gMTMsICJDcCAiICsgRihzZy5yLmNwLCAyKSwge3NpemU6IDEwfSk7CiAgICAgIG8gKz0gbGluZShbWChzZy50byksIFkoenIoc2cudG8pKSArIDNdLCBbWChzZy50byksIFkoenIoc2cudG8pKSAtIDRdLCAnc3R5bGU9InN0cm9rZTp2YXIoLS1tdXRlZCkiJyk7CiAgICB9CiAgICAvKiBzdG9yeSBmb3JjZXMgKi8KICAgIGZvciAoY29uc3QgciBvZiBkLnJvd3MpIHsKICAgICAgY29uc3QgeSA9IFkoci56KSwgeGEgPSBYKExkICogMC4yKSwgeGIgPSBYKExkICogMC4yKSArIDQ2OwogICAgICBvICs9IGxpbmUoW1goMCksIHldLCBbWChMZCksIHldLCAnc3R5bGU9InN0cm9rZTp2YXIoLS1tdXRlZCkiIHN0cm9rZS1kYXNoYXJyYXk9IjIgNCInKTsKICAgICAgbyArPSBhcnJvdyhbeGEsIHldLCBbeGIsIHldLCB7YzogInZhcigtLWFjY2VudCkiLCB3OiAyLCBzOiA5fSk7CiAgICAgIG8gKz0gdHh0KHhiICsgNiwgeSArIDQsIGBGID0gJHtGKHIuRiwgMSl9IGtOIEAgJHtGKHIueiwgMil9IG1gLCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMC41fSk7CiAgICB9CiAgICBvICs9IHR4dChYKExkIC8gMiksIFkoMCkgKyAzNCwgYEJhc2Ugc2hlYXIgViA9ICR7RihkLlYsIDEpfSBrTiAgwrcgICR7ZC5rZXkgPT09ICJYIiA/ICJCID0gTHIiIDogIkIgPSBXIn0gPSAke0YoZC5CLCAxKX0gbWAsIHtzaXplOiAxMS41LCB3ZWlnaHQ6IDYwMH0pOwogICAgLyogd2luZCBhcnJvdyAqLwogICAgbyArPSBgPHBvbHlnb24gcG9pbnRzPSIke3BzdHIoW1sxOCwgdG9wICsgNDBdLCBbNTIsIHRvcCArIDQwXSwgWzUyLCB0b3AgKyAzMF0sIFs3MiwgdG9wICsgNTBdLCBbNTIsIHRvcCArIDcwXSwgWzUyLCB0b3AgKyA2MF0sIFsxOCwgdG9wICsgNjBdXSl9IiBmaWxsPSJub25lIiBzdHlsZT0ic3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4zIi8+YDsKICAgIG8gKz0gdHh0KDEwLCBIdCAtIDEwLCAiQmx1ZTogcHJlc3N1cmUgdG93YXJkIHN1cmZhY2UgwrcgcmVkOiBzdWN0aW9uLiBFeHRlcm5hbCBwcmVzc3VyZSBvbmx5LiIsIHthbmNob3I6ICJzdGFydCIsIHNpemU6IDEwLjV9KTsKICAgIHJldHVybiBzdmcoV2QsIEh0LCBvLCAiUHJlc3N1cmUgc2VjdGlvbiIpOwogIH0KCiAgZnVuY3Rpb24gcGxhbjI3KHMsIGcsIGQpIHsKICAgIGNvbnN0IFdkID0gMzYwLCBIdCA9IDM2MCwgcGFkID0gNzgsIFcgPSBzLlcsIEwgPSBzLkxyOwogICAgY29uc3QgayA9IE1hdGgubWluKChXZCAtIDIgKiBwYWQpIC8gVywgKEh0IC0gMiAqIHBhZCAtIDEwKSAvIEwpOwogICAgY29uc3QgeDAgPSAoV2QgLSBXICogaykgLyAyLCB5MCA9IChIdCAtIEwgKiBrKSAvIDIgKyA4OwogICAgY29uc3QgWCA9IHggPT4geDAgKyB4ICogaywgWSA9IHkgPT4geTAgKyAoTCAtIHkpICogazsKICAgIGNvbnN0IHZhbHMgPSBkLndhbGxzLm1hcCh3ID0+IHcuZXh0KSwgcGsgPSAzMiAvIE1hdGgubWF4KC4uLnZhbHMubWFwKE1hdGguYWJzKSwgMSk7CiAgICBjb25zdCBzaWRlcyA9IGQua2V5ID09PSAiWCIgPyB7eDA6IDAsIHhXOiAxLCB5MDogMiwgeUw6IDJ9IDoge3kwOiAwLCB5TDogMSwgeDA6IDIsIHhXOiAyfTsKICAgIGxldCBvID0gdHh0KFdkIC8gMiwgMTgsIGBXYWxscyDCtyAke2Qua2V5ID09PSAiWCIgPyAiMMKwIiA6ICI5MMKwIn1gLCB7c2l6ZTogMTIuNSwgd2VpZ2h0OiA2MDB9KTsKICAgIG8gKz0gYDxyZWN0IHg9IiR7WCgwKX0iIHk9IiR7WShMKX0iIHdpZHRoPSIke1cgKiBrfSIgaGVpZ2h0PSIke0wgKiBrfSIgc3R5bGU9ImZpbGw6dmFyKC0tY2hhcnQtZmlsbCk7c3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4yIi8+YDsKICAgIGlmIChzLnJvb2YgIT09ICJmbGF0IikgbyArPSBsaW5lKFtYKFcgLyAyKSwgWSgwKV0sIFtYKFcgLyAyKSwgWShMKV0sICdzdHlsZT0ic3Ryb2tlOnZhcigtLW11dGVkKSIgc3Ryb2tlLWRhc2hhcnJheT0iNiAzIicpOwogICAgY29uc3QgZ2VvID0ge3gwOiBbW1goMCksIFkoTCldLCBbWCgwKSwgWSgwKV0sIFstMSwgMF1dLCB4VzogW1tYKFcpLCBZKDApXSwgW1goVyksIFkoTCldLCBbMSwgMF1dLCB5MDogW1tYKDApLCBZKDApXSwgW1goVyksIFkoMCldLCBbMCwgMV1dLCB5TDogW1tYKFcpLCBZKEwpXSwgW1goMCksIFkoTCldLCBbMCwgLTFdXX07CiAgICBmb3IgKGNvbnN0IFt0YWcsIGldIG9mIE9iamVjdC5lbnRyaWVzKHNpZGVzKSkgewogICAgICBjb25zdCB2ID0gdmFsc1tpXSwgYyA9IHYgPCAwID8gUkVEIDogQkxVRSwgW2EsIGIsIG5dID0gZ2VvW3RhZ10sIHQgPSBNYXRoLmFicyh2KSAqIHBrOwogICAgICBvICs9IGJhbmQoYSwgYiwgbiwgKCkgPT4gdCwgYyk7CiAgICAgIGNvbnN0IG0gPSBbKGFbMF0gKyBiWzBdKSAvIDIgKyBuWzBdICogKHQgKyA4KSwgKGFbMV0gKyBiWzFdKSAvIDIgKyBuWzFdICogKHQgKyA4KV07CiAgICAgIGNvbnN0IGFuY2hvciA9IG5bMF0gPCAwID8gImVuZCIgOiBuWzBdID4gMCA/ICJzdGFydCIgOiAibWlkZGxlIjsKICAgICAgbyArPSB0eHQobVswXSwgbVsxXSArIChuWzFdID4gMCA/IDEwIDogblsxXSA8IDAgPyAtMiA6IDQpLCBrcCh2KSwge2FuY2hvciwgZmlsbDogY30pOwogICAgICBvICs9IHR4dChtWzBdLCBtWzFdICsgKG5bMV0gPiAwID8gMjMgOiBuWzFdIDwgMCA/IC0xNSA6IDE4KSwgIkNwICIgKyBGKGQud2FsbHNbaV0uY3AsIDIpLCB7YW5jaG9yLCBzaXplOiAxMH0pOwogICAgfQogICAgY29uc3QgYXggPSBkLmtleSA9PT0gIlgiID8gW1tYKDApIC0gNzAsIFkoTCAqIDAuODIpXSwgW1goMCkgLSA0MCwgWShMICogMC44MildXSA6IFtbWChXICogMC4xOCksIFkoMCkgKyA2NF0sIFtYKFcgKiAwLjE4KSwgWSgwKSArIDM4XV07CiAgICBvICs9IGFycm93KGF4WzBdLCBheFsxXSwge3c6IDIsIHM6IDl9KTsKICAgIG8gKz0gdHh0KGF4WzBdWzBdICsgKGQua2V5ID09PSAiWCIgPyAwIDogMTQpLCBheFswXVsxXSArIChkLmtleSA9PT0gIlgiID8gLTggOiAwKSwgZC5rZXkgPT09ICJYIiA/ICIwwrAiIDogIjkwwrAiLCB7YW5jaG9yOiAic3RhcnQiLCBzaXplOiAxMC41fSk7CiAgICByZXR1cm4gc3ZnKFdkLCBIdCwgbywgIldhbGwgcHJlc3N1cmVzIGluIHBsYW4iKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gQ2hhcHRlciAyOCAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gem9uZXMyOChzLCBnLCByMjgsIGNzKSB7CiAgICBjb25zdCBmID0gc2hlbGwocywgZyksIGEgPSByMjguYSwgVyA9IHMuVywgTCA9IHMuTHIsIFogPSBbXTsKICAgIGNvbnN0IGN1dCA9IChmYywgYXgsIHYpID0+IFtjbGlwKGZjLnB0cywgYXgsIC0xZTksIHYpLCBjbGlwKGZjLnB0cywgYXgsIHYsIDFlOSldOwogICAgY29uc3QgcHVzaCA9IChmYywgcG9seSwga2V5KSA9PiB7IGlmIChwb2x5KSBaLnB1c2goey4uLmZjLCBwb2x5LCBrZXl9KTsgfTsKICAgIGNvbnN0IHoyID0gTWF0aC5taW4ocjI4LnoybGVuLlgsIFcgLyAyKTsKICAgIGZvciAoY29uc3QgZmMgb2YgZikgewogICAgICBpZiAoZmMucGFyKSBjb250aW51ZTsKICAgICAgY29uc3QgdCA9IGZjLnRhZzsKICAgICAgaWYgKGNzID09PSAxIHx8IGNzID09PSAzKSB7CiAgICAgICAgY29uc3QgZmFyID0gY3MgPT09IDMgPyBMIC8gMiA6IDFlOTsKICAgICAgICBjb25zdCBzcGxpdCA9IChmYywgYmFzZSwgRWtleSwgVGtleSkgPT4gewogICAgICAgICAgcHVzaChmYywgY2xpcChmYy5wdHMsIDEsIC0xZTksIDIgKiBhKSwgRWtleSk7CiAgICAgICAgICBwdXNoKGZjLCBjbGlwKGZjLnB0cywgMSwgMiAqIGEsIGZhciksIGJhc2UpOwogICAgICAgICAgaWYgKGNzID09PSAzKSBwdXNoKGZjLCBjbGlwKGZjLnB0cywgMSwgZmFyLCAxZTkpLCBUa2V5KTsKICAgICAgICB9OwogICAgICAgIGlmICh0ID09PSAieDAiKSBzcGxpdChmYywgIjEiLCAiMUUiLCAiMVQiKTsKICAgICAgICBlbHNlIGlmICh0ID09PSAieFciKSBzcGxpdChmYywgIjQiLCAiNEUiLCAiNFQiKTsKICAgICAgICBlbHNlIGlmICh0ID09PSAieTAiIHx8IHQgPT09ICJ5TCIpIHB1c2goZmMsIGZjLnB0cywgIm5vbmUiKTsKICAgICAgICBlbHNlIGlmIChpc1Jvb2YodCkpIHsKICAgICAgICAgIGNvbnN0IFtsbywgaGldID0gY3V0KGZjLCAwLCBXIC8gMik7CiAgICAgICAgICBpZiAobG8pIHsKICAgICAgICAgICAgY29uc3QgbmVhciA9IGNsaXAobG8sIDAsIC0xZTksIHoyKSwgcmVzdCA9IGNsaXAobG8sIDAsIHoyLCAxZTkpOwogICAgICAgICAgICBjb25zdCBzdWIgPSAocG9seSwgYmFzZSwgRSwgVCkgPT4geyBpZiAoIXBvbHkpIHJldHVybjsgcHVzaChmYywgY2xpcChwb2x5LCAxLCAtMWU5LCAyICogYSksIEUpOyBwdXNoKGZjLCBjbGlwKHBvbHksIDEsIDIgKiBhLCBmYXIpLCBiYXNlKTsgaWYgKGNzID09PSAzKSBwdXNoKGZjLCBjbGlwKHBvbHksIDEsIGZhciwgMWU5KSwgVCk7IH07CiAgICAgICAgICAgIHN1YihuZWFyLCAiMiIsICIyRSIsICIyVCIpOyBzdWIocmVzdCwgIjIqIiwgIjJFKiIsICIyVCoiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChoaSkgeyBjb25zdCBzdWIgPSAocG9seSkgPT4geyBwdXNoKGZjLCBjbGlwKHBvbHksIDEsIC0xZTksIDIgKiBhKSwgIjNFIik7IHB1c2goZmMsIGNsaXAocG9seSwgMSwgMiAqIGEsIGZhciksICIzIik7IGlmIChjcyA9PT0gMykgcHVzaChmYywgY2xpcChwb2x5LCAxLCBmYXIsIDFlOSksICIzVCIpOyB9OyBzdWIoaGkpOyB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVuZCA9IChmYywgYmFzZSwgRSwgVCkgPT4gewogICAgICAgICAgcHVzaChmYywgY2xpcChmYy5wdHMsIDAsIC0xZTksIGEpLCBFKTsKICAgICAgICAgIHB1c2goZmMsIGNsaXAoZmMucHRzLCAwLCBhLCBjcyA9PT0gNCA/IFcgLyAyIDogMWU5KSwgYmFzZSk7CiAgICAgICAgICBpZiAoY3MgPT09IDQpIHB1c2goZmMsIGNsaXAoZmMucHRzLCAwLCBXIC8gMiwgMWU5KSwgVCk7CiAgICAgICAgfTsKICAgICAgICBpZiAodCA9PT0gInkwIikgZW5kKGZjLCAiNSIsICI1RSIsICI1VCIpOwogICAgICAgIGVsc2UgaWYgKHQgPT09ICJ5TCIpIGVuZChmYywgIjYiLCAiNkUiLCAiNlQiKTsKICAgICAgICBlbHNlIGlmICh0ID09PSAieDAiKSB7IHB1c2goZmMsIGNsaXAoZmMucHRzLCAxLCAtMWU5LCAyICogYSksICIxRSIpOyBwdXNoKGZjLCBjbGlwKGZjLnB0cywgMSwgMiAqIGEsIDFlOSksICIxIik7IH0KICAgICAgICBlbHNlIGlmICh0ID09PSAieFciKSB7IHB1c2goZmMsIGNsaXAoZmMucHRzLCAxLCAtMWU5LCAyICogYSksICI0RSIpOyBwdXNoKGZjLCBjbGlwKGZjLnB0cywgMSwgMiAqIGEsIDFlOSksICI0Iik7IH0KICAgICAgICBlbHNlIGlmIChpc1Jvb2YodCkpIHsKICAgICAgICAgIGNvbnN0IFtsbywgaGldID0gY3V0KGZjLCAwLCBXIC8gMik7CiAgICAgICAgICBpZiAobG8pIHsgcHVzaChmYywgY2xpcChsbywgMSwgLTFlOSwgMiAqIGEpLCAiMkUiKTsgcHVzaChmYywgY2xpcChsbywgMSwgMiAqIGEsIDFlOSksICIyIik7IH0KICAgICAgICAgIGlmIChoaSkgeyBwdXNoKGZjLCBjbGlwKGhpLCAxLCAtMWU5LCAyICogYSksICIzRSIpOyBwdXNoKGZjLCBjbGlwKGhpLCAxLCAyICogYSwgMWU5KSwgIjMiKTsgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY29uc3Qgcm93cyA9IGNzID09PSAxID8gcjI4LmNhc2UxIDogY3MgPT09IDIgPyByMjguY2FzZTIgOiBjcyA9PT0gMyA/IFsuLi5yMjguY2FzZTEsIC4uLnIyOC5jYXNlM10gOiBbLi4ucjI4LmNhc2UyLCAuLi5yMjguY2FzZTRdOwogICAgY29uc3QgYnkgPSBPYmplY3QuZnJvbUVudHJpZXMocm93cy5tYXAociA9PiBbci56b25lLCByXSkpOwogICAgY29uc3QgdmFscyA9IHt9OwogICAgZm9yIChjb25zdCB6IG9mIFopIHsKICAgICAgaWYgKHZhbHNbei5rZXldKSBjb250aW51ZTsKICAgICAgaWYgKHoua2V5ID09PSAibm9uZSIpIHsgdmFscy5ub25lID0ge3Y6IG51bGwsIHRleHQ6ICJFbmQgd2FsbHM6IG5vdCBsb2FkZWQgaW4gdGhpcyBjYXNlIn07IGNvbnRpbnVlOyB9CiAgICAgIGNvbnN0IHJlYWwgPSB6LmtleS5lbmRzV2l0aCgiKiIpID8gei5rZXkucmVwbGFjZSgiMiIsICIzIikucmVwbGFjZSgiKiIsICIiKSA6IHoua2V5OwogICAgICBjb25zdCByID0gYnlbcmVhbF07IGlmICghcikgeyB2YWxzW3oua2V5XSA9IHt2OiBudWxsLCB0ZXh0OiB6LmtleSArICI6IG4vYSJ9OyBjb250aW51ZTsgfQogICAgICB2YWxzW3oua2V5XSA9IHt2OiByLmdjLCBzaG9ydDogei5rZXkucmVwbGFjZSgiKiIsICIiKSwgdGV4dDogYCR7ei5rZXkucmVwbGFjZSgiKiIsICIiKX0ke3oua2V5LmVuZHNXaXRoKCIqIikgPyAiICgiICsgcmVhbCArICIgdmFsdWVzKSIgOiAiIn06ICR7RihyLmdjLCAyKX0g4oaSICR7a3Aoci5wUG9zKX0gLyAke2twKHIucE5lZyl9YH07CiAgICB9CiAgICByZXR1cm4ge1osIHZhbHN9OwogIH0KICBmdW5jdGlvbiBkM18yOChzLCBnLCByMjgsIGNzKSB7CiAgICBjb25zdCB7WiwgdmFsc30gPSB6b25lczI4KHMsIGcsIHIyOCwgY3MpOwogICAgZm9yIChjb25zdCB6IG9mIFopIHoubGFiZWwgPSB6LmtleSA9PT0gIm5vbmUiID8gIiIgOiB6LmtleS5yZXBsYWNlKCIqIiwgIiIpOwogICAgcmV0dXJuIHZpZXczZChzLCBnLCBaLCB2YWxzLCB7d2luZDogY3MgPT09IDEgfHwgY3MgPT09IDMgPyAieCIgOiAieSIsIGxlZ1c6IDI5MCwgbGFiZWxCYWNrOiBmYWxzZSwKICAgICAgdGl0bGU6IGBMb2FkIENhc2UgJHtjc30gwrcgR0NwZiDihpIgcCAoK0dDcGkpIC8gcCAo4oiSR0NwaSksIGtQYWAsCiAgICAgIGZvb3Q6IGBhID0gJHtGKHIyOC5hLCAyKX0gbSDCtyBFIHpvbmVzIDJhID0gJHtGKDIgKiByMjguYSwgMil9IG0ke2NzID09PSAyIHx8IGNzID09PSA0ID8gIiwgNUUvNkUgd2lkdGggYSIgOiAiIn0gwrcgcmVmZXJlbmNlIGNvcm5lciBhdCBmcm9udC4gUmVwZWF0IGZvciBlYWNoIGNvcm5lci5gfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIENoYXB0ZXIgMzAgLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIGNjKHMsIGcsIHIzMCwgYWkpIHsKICAgIGNvbnN0IHJvdyA9IHIzMC5yb3dzW2FpXTsgaWYgKCFyb3cpIHJldHVybiAiIjsKICAgIGNvbnN0IGl0ID0gbiA9PiByb3cuaXRlbXMuZmluZChpID0+IGkuem9uZSA9PT0gbik7CiAgICBjb25zdCBXZCA9IDcyMCwgSHQgPSAzODAsIFcgPSBzLlcsIEwgPSBzLkxyLCBhID0gcjMwLmEsIGggPSBnLmg7CiAgICBjb25zdCB2bWF4ID0gTWF0aC5tYXgoLi4ucm93Lml0ZW1zLm1hcChpID0+IE1hdGguYWJzKGkuZGVzKSkpOwogICAgbGV0IG8gPSB0eHQoMTAsIDE4LCBgWm9uZSBsYXlvdXQgwrcgQSA9ICR7Rihyb3cuQSwgMSl9IG3CsiDCtyBkZXNpZ24gcHJlc3N1cmUgKGtQYSwgZ292ZXJuaW5nIMKxR0NwaSwgbWluIDAuNzcpYCwge2FuY2hvcjogInN0YXJ0Iiwgc2l6ZTogMTIuNSwgd2VpZ2h0OiA2MDB9KTsKICAgIC8qIHJvb2YgcGxhbiAqLwogICAgY29uc3QgcHcgPSAzMzAsIHBoID0gSHQgLSA3MCwgayA9IE1hdGgubWluKChwdyAtIDQwKSAvIFcsIChwaCAtIDIwKSAvIEwpOwogICAgY29uc3QgeDAgPSAyMCArIChwdyAtIDQwIC0gVyAqIGspIC8gMiwgeTAgPSA0NDsKICAgIGNvbnN0IFIgPSAoeCwgeSwgdywgaGgpID0+IFt4MCArIHggKiBrLCB5MCArIHkgKiBrLCB3ICogaywgaGggKiBrXTsKICAgIGNvbnN0IHpvbmUgPSAoa2V5LCByZWN0cywgbGFiZWwpID0+IHsKICAgICAgY29uc3QgaSA9IGl0KGtleSk7IGlmICghaSkgcmV0dXJuICIiOwogICAgICBjb25zdCBjID0gY29sKGkuZGVzLCB2bWF4KTsKICAgICAgcmV0dXJuIHJlY3RzLm1hcChyID0+IHsgY29uc3QgW3gsIHksIHcsIGhoXSA9IFIoLi4ucik7IHJldHVybiB3ID4gMCAmJiBoaCA+IDAgPyBgPHJlY3QgeD0iJHt4LnRvRml4ZWQoMSl9IiB5PSIke3kudG9GaXhlZCgxKX0iIHdpZHRoPSIke3cudG9GaXhlZCgxKX0iIGhlaWdodD0iJHtoaC50b0ZpeGVkKDEpfSIgZmlsbD0iJHtjLmZpbGx9IiBzdHJva2U9InJnYmEoMCwwLDAsLjMpIiBzdHJva2Utd2lkdGg9Ii42Ii8+YCA6ICIiOyB9KS5qb2luKCIiKTsKICAgIH07CiAgICBjb25zdCBsYWIgPSAoa2V5LCB4LCB5LCB0KSA9PiB7IGNvbnN0IGkgPSBpdChrZXkpOyBpZiAoIWkpIHJldHVybiAiIjsgY29uc3QgYyA9IGNvbChpLmRlcywgdm1heCk7IHJldHVybiB0eHQoeDAgKyB4ICogaywgeTAgKyB5ICogayArIDQsIHQsIHtmaWxsOiBjLmluaywgc2l6ZTogMTEsIHdlaWdodDogNjAwfSk7IH07CiAgICBsZXQgcm9vZiA9ICIiLCBrZXlzID0gW107CiAgICBjb25zdCBmaWcgPSByMzAuZmlnOwogICAgaWYgKGZpZyA9PT0gIjMwLjMtMkEiKSB7CiAgICAgIGNvbnN0IGUgPSAwLjYgKiBoLCBjMyA9IDAuMiAqIGg7CiAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAyIOKIkiIsIFtbMCwgMCwgVywgTF1dKTsKICAgICAgaWYgKFcgPiAyICogZSAmJiBMID4gMiAqIGUpIHJvb2YgKz0gem9uZSgiUm9vZiAxIOKIkiIsIFtbZSwgZSwgVyAtIDIgKiBlLCBMIC0gMiAqIGVdXSk7CiAgICAgIGlmIChXID4gNCAqIGUgJiYgTCA+IDQgKiBlKSByb29mICs9IHpvbmUoIlJvb2YgMScg4oiSIiwgW1syICogZSwgMiAqIGUsIFcgLSA0ICogZSwgTCAtIDQgKiBlXV0pOwogICAgICBmb3IgKGNvbnN0IFtjeCwgY3ldIG9mIFtbMCwgMF0sIFsxLCAwXSwgWzAsIDFdLCBbMSwgMV1dKSB7CiAgICAgICAgY29uc3QgWCA9IGN4ID8gVyAtIGUgOiAwLCBZID0gY3kgPyBMIC0gYzMgOiAwLCBYMiA9IGN4ID8gVyAtIGMzIDogMCwgWTIgPSBjeSA/IEwgLSBlIDogMDsKICAgICAgICByb29mICs9IHpvbmUoIlJvb2YgMyDiiJIiLCBbW1gsIFksIGUsIGMzXSwgW1gyLCBZMiwgYzMsIGVdXSk7CiAgICAgIH0KICAgICAgcm9vZiArPSBsYWIoIlJvb2YgMiDiiJIiLCBXIC8gMiwgZSAvIDIsICIyIikgKyBsYWIoIlJvb2YgMSDiiJIiLCBXIC8gMiwgZSAqIDEuNSwgIjEiKSArIChXID4gNCAqIGUgJiYgTCA+IDQgKiBlID8gbGFiKCJSb29mIDEnIOKIkiIsIFcgLyAyLCBMIC8gMiwgIjEnIikgOiAiIik7CiAgICAgIGtleXMgPSBbIlJvb2YgMScg4oiSIiwgIlJvb2YgMSDiiJIiLCAiUm9vZiAyIOKIkiIsICJSb29mIDMg4oiSIl07CiAgICB9IGVsc2UgaWYgKGZpZyA9PT0gIjMwLjMtMkIiIHx8IGZpZyA9PT0gIjMwLjMtMkMiKSB7CiAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAxIOKIkiIsIFtbMCwgMCwgVywgTF1dKTsKICAgICAgcm9vZiArPSB6b25lKCJSb29mIDIg4oiSIiwgW1swLCAwLCBXLCBhXSwgWzAsIEwgLSBhLCBXLCBhXSwgW1cgLyAyIC0gYSwgMCwgMiAqIGEsIExdXSk7CiAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAzIOKIkiIsIFtbVyAvIDIgLSBhLCAwLCAyICogYSwgYV0sIFtXIC8gMiAtIGEsIEwgLSBhLCAyICogYSwgYV1dKTsKICAgICAgcm9vZiArPSBsYWIoIlJvb2YgMSDiiJIiLCBXIC8gNCwgTCAvIDIsICIxIikgKyBsYWIoIlJvb2YgMSDiiJIiLCAzICogVyAvIDQsIEwgLyAyLCAiMSIpICsgbGFiKCJSb29mIDIg4oiSIiwgVyAvIDIsIEwgLyAyLCAiMiIpOwogICAgICBrZXlzID0gWyJSb29mIDEg4oiSIiwgIlJvb2YgMiDiiJIiLCAiUm9vZiAzIOKIkiJdOwogICAgfSBlbHNlIGlmIChmaWcgPT09ICIzMC4zLTJEIikgewogICAgICByb29mICs9IHpvbmUoIlJvb2YgMSDiiJIiLCBbWzAsIDAsIFcsIExdXSk7CiAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAyIOKIkiIsIFtbMCwgMCwgVywgYV0sIFswLCBMIC0gYSwgVywgYV1dKTsKICAgICAgcm9vZiArPSB6b25lKCJSb29mIDMg4oiSIiwgW1swLCAwLCBhLCBhXSwgW1cgLSBhLCAwLCBhLCBhXSwgWzAsIEwgLSBhLCBhLCBhXSwgW1cgLSBhLCBMIC0gYSwgYSwgYV1dKTsKICAgICAgcm9vZiArPSBsYWIoIlJvb2YgMSDiiJIiLCBXIC8gNCwgTCAvIDIsICIxIikgKyBsYWIoIlJvb2YgMSDiiJIiLCAzICogVyAvIDQsIEwgLyAyLCAiMSIpOwogICAgICBrZXlzID0gWyJSb29mIDEg4oiSIiwgIlJvb2YgMiDiiJIiLCAiUm9vZiAzIOKIkiJdOwogICAgfSBlbHNlIGlmIChmaWcgPT09ICIzMC40LTEiKSB7CiAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAyIOKIkiIsIFtbMCwgMCwgVywgTF1dKTsKICAgICAgcm9vZiArPSB6b25lKCJSb29mIDEg4oiSIiwgW1thLCBhLCBXIC0gMiAqIGEsIEwgLSAyICogYV1dKTsKICAgICAgZm9yIChjb25zdCBbY3gsIGN5XSBvZiBbWzAsIDBdLCBbMSwgMF0sIFswLCAxXSwgWzEsIDFdXSkgewogICAgICAgIHJvb2YgKz0gem9uZSgiUm9vZiAzIOKIkiIsIFtbY3ggPyBXIC0gMiAqIGEgOiAwLCBjeSA/IEwgLSBhIDogMCwgMiAqIGEsIGFdLCBbY3ggPyBXIC0gYSA6IDAsIGN5ID8gTCAtIDIgKiBhIDogMCwgYSwgMiAqIGFdXSk7CiAgICAgIH0KICAgICAgcm9vZiArPSBsYWIoIlJvb2YgMSDiiJIiLCBXIC8gMiwgTCAvIDIsICIxIikgKyBsYWIoIlJvb2YgMiDiiJIiLCBXIC8gMiwgYSAvIDIsICIyIik7CiAgICAgIGtleXMgPSBbIlJvb2YgMSDiiJIiLCAiUm9vZiAyIOKIkiIsICJSb29mIDMg4oiSIl07CiAgICB9CiAgICBpZiAocm9vZikgewogICAgICBvICs9IHR4dCh4MCArIFcgKiBrIC8gMiwgMzgsIGBSb29mIHBsYW4gwrcgRmlnLiAke2ZpZ31gLCB7c2l6ZTogMTEsIHdlaWdodDogNjAwfSk7CiAgICAgIG8gKz0gcm9vZiArIGA8cmVjdCB4PSIke3gwfSIgeT0iJHt5MH0iIHdpZHRoPSIke1cgKiBrfSIgaGVpZ2h0PSIke0wgKiBrfSIgZmlsbD0ibm9uZSIgc3R5bGU9InN0cm9rZTp2YXIoLS1pbmspIiBzdHJva2Utd2lkdGg9IjEuMiIvPmA7CiAgICAgIGlmIChzLnJvb2YgIT09ICJmbGF0IikgbyArPSBsaW5lKFt4MCArIFcgLyAyICogaywgeTBdLCBbeDAgKyBXIC8gMiAqIGssIHkwICsgTCAqIGtdLCAnc3Ryb2tlPSJyZ2JhKDAsMCwwLC40NSkiIHN0cm9rZS1kYXNoYXJyYXk9IjYgMyInKTsKICAgICAgbyArPSBkaW0oW3gwLCB5MCArIEwgKiBrXSwgW3gwICsgVyAqIGssIHkwICsgTCAqIGtdLCAiVyAiICsgRihXLCAxKSwgMTQpOwogICAgfSBlbHNlIHsKICAgICAgbyArPSB0eHQoMjAgKyBwdyAvIDIsIEh0IC8gMiwgYFJvb2Ygem9uZXM6IHNlZSBGaWcuICR7ZmlnfWAsIHtzaXplOiAxMX0pOwogICAgfQogICAgLyogd2FsbCBlbGV2YXRpb24gKi8KICAgIGNvbnN0IGV4ID0gMzgwLCBldyA9IDMyMCwgZWggPSAxMjAsIGtlID0gTWF0aC5taW4oZXcgLyBMLCBlaCAvIGcuaGUpOwogICAgY29uc3QgZXkgPSA3MCwgWCA9IHggPT4gZXggKyAoZXcgLSBMICoga2UpIC8gMiArIHggKiBrZSwgWXcgPSB6ID0+IGV5ICsgZWggLSB6ICoga2U7CiAgICBjb25zdCB3NCA9IHIzMC5sb3cgPyBpdCgiV2FsbCA04oiSIikgOiBpdCgiV2FsbCA0IOKIkiIpLCB3NSA9IHIzMC5sb3cgPyBpdCgiV2FsbCA14oiSIikgOiBpdCgiV2FsbCA1IOKIkiIpOwogICAgY29uc3Qgd3AgPSByMzAubG93ID8gaXQoIldhbGwgNCsiKSA6IGl0KCJXYWxsIDQsNSArIChhdCBoLCBxeiA9IHFoKSIpOwogICAgbyArPSB0eHQoZXggKyBldyAvIDIsIDM4LCAiV2FsbCBlbGV2YXRpb24gwrcgRmlnLiAiICsgKHIzMC5sb3cgPyAiMzAuMy0xIiA6ICIzMC40LTEiKSwge3NpemU6IDExLCB3ZWlnaHQ6IDYwMH0pOwogICAgY29uc3QgcnIgPSAoeDEsIHgyLCBpKSA9PiB7IGNvbnN0IGMgPSBjb2woaS5kZXMsIHZtYXgpOyByZXR1cm4gYDxyZWN0IHg9IiR7WCh4MSkudG9GaXhlZCgxKX0iIHk9IiR7WXcoZy5oZSkudG9GaXhlZCgxKX0iIHdpZHRoPSIkeygoeDIgLSB4MSkgKiBrZSkudG9GaXhlZCgxKX0iIGhlaWdodD0iJHsoZy5oZSAqIGtlKS50b0ZpeGVkKDEpfSIgZmlsbD0iJHtjLmZpbGx9IiBzdHJva2U9InJnYmEoMCwwLDAsLjMpIiBzdHJva2Utd2lkdGg9Ii42Ii8+YDsgfTsKICAgIG8gKz0gcnIoMCwgTCwgdzQpICsgcnIoMCwgYSwgdzUpICsgcnIoTCAtIGEsIEwsIHc1KTsKICAgIG8gKz0gdHh0KFgoTCAvIDIpLCBZdyhnLmhlIC8gMikgKyA0LCAiNCIsIHtmaWxsOiBjb2wodzQuZGVzLCB2bWF4KS5pbmssIHdlaWdodDogNjAwfSkgKyB0eHQoWChhIC8gMiksIFl3KGcuaGUgLyAyKSArIDQsICI1Iiwge2ZpbGw6IGNvbCh3NS5kZXMsIHZtYXgpLmluaywgd2VpZ2h0OiA2MDAsIHNpemU6IDEwfSk7CiAgICBvICs9IGxpbmUoW1goLTIpLCBZdygwKV0sIFtYKEwgKyAyKSwgWXcoMCldLCAnc3R5bGU9InN0cm9rZTp2YXIoLS1pbmspIiBzdHJva2Utd2lkdGg9IjEuNSInKTsKICAgIG8gKz0gZGltKFtYKDApLCBZdyhnLmhlKV0sIFtYKGEpLCBZdyhnLmhlKV0sICJhID0gIiArIEYoYSwgMiksIC0xMik7CiAgICAvKiBsZWdlbmQgKi8KICAgIGNvbnN0IGl0ZW1zID0gW107CiAgICBjb25zdCBhZGQgPSAobmFtZSwgaSkgPT4geyBpZiAoaSkgaXRlbXMucHVzaCh7ZmlsbDogY29sKGkuZGVzLCB2bWF4KS5maWxsLCB0ZXh0OiBgJHtuYW1lfTogR0NwICR7RihpLmdjLCAyKX0g4oaSICR7a3AoaS5kZXMpfWB9KTsgfTsKICAgIGFkZCgiV2FsbCA0ICjiiJIpIiwgdzQpOyBhZGQoIldhbGwgNSAo4oiSKSIsIHc1KTsgYWRkKCJXYWxscyAoKykiLCB3cCk7CiAgICBmb3IgKGNvbnN0IGtrIG9mIGtleXMpIGFkZChray5yZXBsYWNlKCIg4oiSIiwgIiAo4oiSKSIpLCBpdChraykpOwogICAgYWRkKCJSb29mICgrKSIsIGl0KCJSb29mIGFsbCB6b25lcyArIikpOwogICAgbyArPSBsZWdlbmQoaXRlbXMsIGV4LCBleSArIGVoICsgMjQsIDMyMCk7CiAgICByZXR1cm4gc3ZnKFdkLCBNYXRoLm1heChIdCwgZXkgKyBlaCArIDM0ICsgaXRlbXMubGVuZ3RoICogMjYpLCBvLCAiQ29tcG9uZW50cyBhbmQgY2xhZGRpbmcgem9uZXMiKTsKICB9CgogIHJldHVybiB7YnVpbGRpbmcsIGQzXzI3LCBzZWN0aW9uMjcsIHBsYW4yNywgZDNfMjgsIGNjfTsKfSkoKTsKCi8qIC0tLS0tLS0tLS0gQ29kZSByZWZlcmVuY2UgdGFiOiB0YWJsZXMsIGNvZWZmaWNpZW50cyBhbmQgcmVkcmF3biBkaWFncmFtcyAtLS0tLS0tLS0tICovCmNvbnN0IFJFRiA9ICgoKSA9PiB7CiAgY29uc3QgRiA9ICh4LCBkID0gMikgPT4gTnVtYmVyLmlzRmluaXRlKHgpID8geC50b0ZpeGVkKGQpIDogIuKAkyI7CiAgY29uc3QgRk9OVCA9ICdmb250LWZhbWlseT0iSUJNIFBsZXggTW9ubywgdWktbW9ub3NwYWNlLCBtb25vc3BhY2UiJzsKICBjb25zdCB0ID0gKHgsIHksIHMsIG8gPSB7fSkgPT4gYDx0ZXh0IHg9IiR7eH0iIHk9IiR7eX0iICR7Rk9OVH0gZm9udC1zaXplPSIke28uc2l6ZSB8fCAxMX0iIHRleHQtYW5jaG9yPSIke28uYSB8fCAibWlkZGxlIn0iIHN0eWxlPSJmaWxsOiR7by5jIHx8ICJ2YXIoLS1pbmspIn0iJHtvLncgPyBgIGZvbnQtd2VpZ2h0PSIke28ud30iYCA6ICIifT4ke3N9PC90ZXh0PmA7CiAgY29uc3QgbG4gPSAoeDEsIHkxLCB4MiwgeTIsIHN0ID0gInZhcigtLWluaykiLCBleHRyYSA9ICIiKSA9PiBgPGxpbmUgeDE9IiR7eDF9IiB5MT0iJHt5MX0iIHgyPSIke3gyfSIgeTI9IiR7eTJ9IiBzdHlsZT0ic3Ryb2tlOiR7c3R9IiAke2V4dHJhfS8+YDsKICBjb25zdCBzdmcgPSAodywgaCwgYiwgbGFiZWwpID0+IGA8c3ZnIHZpZXdCb3g9IjAgMCAke3d9ICR7aH0iIHdpZHRoPSIxMDAlIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IiR7bGFiZWx9IiBzdHlsZT0iZGlyZWN0aW9uOmx0cjtkaXNwbGF5OmJsb2NrO21pbi13aWR0aDoke01hdGgucm91bmQodyAqIC42KX1weCI+JHtifTwvc3ZnPmA7CiAgY29uc3QgdGJsID0gKGhlYWQsIHJvd3MsIGZpcnN0ID0gdHJ1ZSwgd3JhcCA9IGZhbHNlKSA9PiBgPGRpdiBjbGFzcz0idGJsJHt3cmFwID8gIiB3cmFwIiA6ICIifSI+PHRhYmxlPjx0aGVhZD48dHI+JHtoZWFkLm1hcCgoaCwgaSkgPT4gYDx0aCR7aSA9PT0gMCAmJiBmaXJzdCA/ICcgc3R5bGU9InRleHQtYWxpZ246bGVmdCInIDogIiJ9PiR7aH08L3RoPmApLmpvaW4oIiIpfTwvdHI+PC90aGVhZD48dGJvZHk+JHtyb3dzLm1hcChyID0+IGA8dHI+JHtyLm1hcCgoYywgaSkgPT4gYDx0ZCR7aSA9PT0gMCAmJiBmaXJzdCA/ICcgc3R5bGU9InRleHQtYWxpZ246bGVmdCInIDogIiJ9PiR7Y308L3RkPmApLmpvaW4oIiIpfTwvdHI+YCkuam9pbigiIil9PC90Ym9keT48L3RhYmxlPjwvZGl2PmA7CiAgY29uc3QgSURTID0geyJUYWJsZSAyNi42LTEiOiAicmYta2QiLCAiVGFibGUgMjYuOS0xIjogInJmLWtlIiwgIlNlY3Rpb24gMjYuNyI6ICJyZi1leHAiLCAiVGFibGUgMjYuMTAtMSI6ICJyZi1reiIsICJUYWJsZSAyNi4xMS0xIjogInJmLWV4YyIsICJGaWcuIDI2LjgtMSI6ICJyZi1renQiLCAiVGFibGUgMjYuMTMtMSI6ICJyZi1nY3BpIiwgIkZpZy4gMjcuMy0xIjogInJmLWNwIiwgIkZpZ3MuIDI4LjMtMSwgMjguMy0yIjogInJmLWdjcGYiLCAiQ2guIDMwIGZpZ3VyZXMiOiAicmYtY2MiLCAiU2VjdGlvbiAyNi41LCBUYWJsZSAxLjUtMSI6ICJyZi12IiwgIlNlY3Rpb24gMjYuMTEiOiAicmYtZyIsICJDaC4gMjbigJMzMCBub3RhdGlvbiI6ICJyZi1nZW8ifTsKICBjb25zdCBjYXJkID0gKGFyLCByZWYsIGludHJvLCBib2R5KSA9PiBgPHNlY3Rpb24gY2xhc3M9ImNhcmQiIGlkPSIke0lEU1tyZWZdIHx8ICIifSI+PGgyPiR7YXJ9IDxzcGFuIGNsYXNzPSJyZWYiPiR7cmVmfTwvc3Bhbj48L2gyPiR7aW50cm8gPyBgPHAgY2xhc3M9ImhpbnQiIHN0eWxlPSJtYXJnaW46MCAwIDhweCI+JHtpbnRyb308L3A+YCA6ICIifSR7Ym9keX08L3NlY3Rpb24+YDsKICBjb25zdCBhcnJvd0RlZiA9IGA8ZGVmcz48bWFya2VyIGlkPSJyZkEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDBMMTAsNUwwLDEweiIgc3R5bGU9ImZpbGw6dmFyKC0taW5rKSIvPjwvbWFya2VyPjwvZGVmcz5gOwogIGNvbnN0IGRpbUggPSAoeDEsIHgyLCB5LCBzKSA9PiBgJHtsbih4MSwgeSwgeDIsIHksICJ2YXIoLS1tdXRlZCkiLCAnbWFya2VyLXN0YXJ0PSJ1cmwoI3JmQSkiIG1hcmtlci1lbmQ9InVybCgjcmZBKSIgc3Ryb2tlLXdpZHRoPSIuOCInKX0ke3QoKHgxICsgeDIpIC8gMiwgeSAtIDQsIHMsIHtzaXplOiAxMC41fSl9YDsKICBjb25zdCBkaW1WID0gKHgsIHkxLCB5MiwgcywgbGVmdCA9IHRydWUpID0+IGAke2xuKHgsIHkxLCB4LCB5MiwgInZhcigtLW11dGVkKSIsICdtYXJrZXItc3RhcnQ9InVybCgjcmZBKSIgbWFya2VyLWVuZD0idXJsKCNyZkEpIiBzdHJva2Utd2lkdGg9Ii44IicpfSR7dCh4ICsgKGxlZnQgPyAtNSA6IDUpLCAoeTEgKyB5MikgLyAyICsgNCwgcywge3NpemU6IDEwLjUsIGE6IGxlZnQgPyAiZW5kIiA6ICJzdGFydCJ9KX1gOwogIGNvbnN0IEdSRVkgPSBbInJnYmEoMTIwLDEyMCwxMjAsLjEwKSIsICJyZ2JhKDEyMCwxMjAsMTIwLC4yNCkiLCAicmdiYSgxMjAsMTIwLDEyMCwuNDApIiwgInJnYmEoMTIwLDEyMCwxMjAsLjU4KSJdOwoKICAvKiBLeiBjaGFydCwgdGhyZWUgZXhwb3N1cmVzICovCiAgZnVuY3Rpb24ga3pDaGFydCgpIHsKICAgIGNvbnN0IFcgPSA1MjAsIEggPSAzMDAsIHBsID0gNDYsIHByID0gMTYsIHB0ID0gMjQsIHBiID0gMzYsIHpNYXggPSAxNTIuNCwga01heCA9IDIuMDsKICAgIGNvbnN0IFggPSBrID0+IHBsICsgKFcgLSBwbCAtIHByKSAqIGsgLyBrTWF4LCBZID0geiA9PiBIIC0gcGIgLSAoSCAtIHB0IC0gcGIpICogeiAvIHpNYXg7CiAgICBsZXQgbyA9ICIiOwogICAgZm9yIChsZXQgayA9IDA7IGsgPD0ga01heCArIDFlLTk7IGsgKz0gMC41KSBvICs9IGxuKFgoayksIHB0LCBYKGspLCBIIC0gcGIsICJ2YXIoLS1saW5lKSIpICsgdChYKGspLCBIIC0gcGIgKyAxNSwgRihrLCAxKSwge3NpemU6IDEwfSk7CiAgICBmb3IgKGxldCB6ID0gMDsgeiA8PSB6TWF4OyB6ICs9IDMwKSBvICs9IGxuKHBsLCBZKHopLCBXIC0gcHIsIFkoeiksICJ2YXIoLS1saW5lKSIpICsgdChwbCAtIDYsIFkoeikgKyA0LCB6LCB7c2l6ZTogMTAsIGE6ICJlbmQifSk7CiAgICBjb25zdCBjb2xzID0ge0I6ICJ2YXIoLS1tdXRlZCkiLCBDOiAidmFyKC0tYWNjZW50KSIsIEQ6ICJ2YXIoLS1pbmspIn07CiAgICBmb3IgKGNvbnN0IGUgb2YgWyJCIiwgIkMiLCAiRCJdKSB7CiAgICAgIGNvbnN0IGQgPSBLWl9aLm1hcCgoeiwgaSkgPT4gKGkgPyAiTCIgOiAiTSIpICsgWChLWl9UW2VdW2ldKS50b0ZpeGVkKDEpICsgIiwiICsgWSh6KS50b0ZpeGVkKDEpKS5qb2luKCIiKTsKICAgICAgbyArPSBgPHBhdGggZD0iTSR7WChLWl9UW2VdWzBdKX0sJHtZKDApfUwke1goS1pfVFtlXVswXSl9LCR7WSg0LjYpfSR7ZC5yZXBsYWNlKC9eTS8sICJMIil9IiBmaWxsPSJub25lIiBzdHlsZT0ic3Ryb2tlOiR7Y29sc1tlXX0iIHN0cm9rZS13aWR0aD0iMiIvPmA7CiAgICAgIGNvbnN0IGkgPSAxNTsgbyArPSB0KFgoS1pfVFtlXVtpXSkgKyA2LCBZKEtaX1pbaV0pICsgNCwgIkV4cC4gIiArIGUsIHthOiAic3RhcnQiLCBzaXplOiAxMC41LCBjOiBjb2xzW2VdfSk7CiAgICB9CiAgICBvICs9IHQoKHBsICsgVyAtIHByKSAvIDIsIEggLSA0LCAiS3oiLCB7c2l6ZTogMTAuNX0pICsgdCgxMCwgMTQsICJ6IChtKSIsIHtzaXplOiAxMC41LCBhOiAic3RhcnQifSk7CiAgICByZXR1cm4gc3ZnKFcsIEgsIG8sICJLeiB3aXRoIGhlaWdodCBmb3IgRXhwb3N1cmVzIEIsIEMgYW5kIEQiKTsKICB9CgogIC8qIEZpZy4gMjYuOC0xIHNjaGVtYXRpYzogZXNjYXJwbWVudCBwcm9maWxlICovCiAgZnVuY3Rpb24gdG9wb1NrZXRjaCgpIHsKICAgIGNvbnN0IFcgPSA1MjAsIEggPSAyMjA7CiAgICBsZXQgbyA9IGFycm93RGVmOwogICAgY29uc3QgZyA9IDE3MCwgY3ggPSAyNTA7CiAgICBvICs9IGA8cGF0aCBkPSJNMjAsJHtnfSBMJHtjeCAtIDEyMH0sJHtnfSBDJHtjeCAtIDYwfSwke2d9ICR7Y3ggLSA0MH0sJHtnIC0gMTEwfSAke2N4fSwke2cgLSAxMTB9IEwke1cgLSAyMH0sJHtnIC0gMTEwfSIgZmlsbD0ibm9uZSIgc3R5bGU9InN0cm9rZTp2YXIoLS1pbmspIiBzdHJva2Utd2lkdGg9IjEuNiIvPmA7CiAgICBvICs9IGA8cGF0aCBkPSJNMjAsJHtnfSBMJHtjeCAtIDEyMH0sJHtnfSBDJHtjeCAtIDYwfSwke2d9ICR7Y3ggLSA0MH0sJHtnIC0gMTEwfSAke2N4fSwke2cgLSAxMTB9IEwke1cgLSAyMH0sJHtnIC0gMTEwfSBMJHtXIC0gMjB9LCR7ZyArIDMwfSBMMjAsJHtnICsgMzB9WiIgc3R5bGU9ImZpbGw6dmFyKC0tY2hhcnQtZmlsbCkiLz5gOwogICAgbyArPSBkaW1WKGN4ICsgMTQsIGcgLSAxMTAsIGcsICJIIiwgZmFsc2UpOwogICAgbyArPSBsbihjeCAtIDYwLCBnIC0gNTUsIGN4IC0gNjAsIGcgLSA1NSk7CiAgICBvICs9IGRpbUgoY3ggLSA2MCwgY3gsIGcgLSAxMjgsICJMaCIpOwogICAgbyArPSB0KGN4IC0gNjAsIGcgLSA2MCwgIkgvMiIsIHtzaXplOiAxMCwgYzogInZhcigtLW11dGVkKSJ9KTsKICAgIG8gKz0gYDxyZWN0IHg9IiR7Y3ggKyA4MH0iIHk9IiR7ZyAtIDE1MH0iIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgc3R5bGU9ImZpbGw6dmFyKC0tcGFuZWwpO3N0cm9rZTp2YXIoLS1pbmspIi8+YDsKICAgIG8gKz0gZGltSChjeCwgY3ggKyA4MCwgZyAtIDE2MCwgInggKGRvd253aW5kKSIpOwogICAgbyArPSBgPGxpbmUgeDE9IjQwIiB5MT0iJHtnIC0gODB9IiB4Mj0iMTEwIiB5Mj0iJHtnIC0gODB9IiBzdHlsZT0ic3Ryb2tlOnZhcigtLWFjY2VudCkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNyZkEpIi8+YCArIHQoNzUsIGcgLSA4OCwgIndpbmQiLCB7c2l6ZTogMTAuNSwgYzogInZhcigtLWFjY2VudCkifSk7CiAgICBvICs9IHQoVyAvIDIsIEggLSA2LCAiRXNjYXJwbWVudCBzaG93bjsgcmlkZ2UgYW5kIGhpbGwgdXNlIHRoZSBzYW1lIEgsIExoLCB4IHdpdGggdGhlaXIgb3duIEsxLCDOsywgzrwiLCB7c2l6ZTogMTAuNX0pOwogICAgcmV0dXJuIHN2ZyhXLCBILCBvLCAiVG9wb2dyYXBoaWMgZmFjdG9yIHBhcmFtZXRlcnMiKTsKICB9CgogIC8qIEZpZy4gMjcuMy0xIHNjaGVtYXRpYzogcGxhbiBhbmQgc2VjdGlvbiB3aXRoIHJvb2YgZGlzdGFuY2Ugem9uZXMgKi8KICBmdW5jdGlvbiBjcFNrZXRjaCgpIHsKICAgIGNvbnN0IFcgPSA2NDAsIEggPSAyNTA7CiAgICBsZXQgbyA9IGFycm93RGVmOwogICAgY29uc3QgeDAgPSA2MCwgeTAgPSA0MCwgdyA9IDIwMCwgaCA9IDE1MDsKICAgIG8gKz0gYDxyZWN0IHg9IiR7eDB9IiB5PSIke3kwfSIgd2lkdGg9IiR7d30iIGhlaWdodD0iJHtofSIgc3R5bGU9ImZpbGw6dmFyKC0tY2hhcnQtZmlsbCk7c3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4zIi8+YDsKICAgIG8gKz0gYDxsaW5lIHgxPSIke3gwIC0gNTB9IiB5MT0iJHt5MCArIGggLyAyfSIgeDI9IiR7eDAgLSA4fSIgeTI9IiR7eTAgKyBoIC8gMn0iIHN0eWxlPSJzdHJva2U6dmFyKC0tYWNjZW50KSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3JmQSkiLz5gOwogICAgbyArPSB0KHgwIC0gMTAsIHkwICsgaCAvIDIgLSAyMCwgIldpbmR3YXJkIiwge3NpemU6IDEwLjUsIGE6ICJlbmQifSkgKyB0KHgwIC0gMTAsIHkwICsgaCAvIDIgLSA4LCAiQ3AgMC44Iiwge3NpemU6IDEwLjUsIGE6ICJlbmQifSk7CiAgICBvICs9IHQoeDAgKyB3ICsgOCwgeTAgKyBoIC8gMiAtIDgsICJMZWV3YXJkIiwge3NpemU6IDEwLjUsIGE6ICJzdGFydCJ9KSArIHQoeDAgKyB3ICsgOCwgeTAgKyBoIC8gMiArIDYsICJDcCBieSBML0IiLCB7c2l6ZTogMTAuNSwgYTogInN0YXJ0In0pOwogICAgbyArPSB0KHgwICsgdyAvIDIsIHkwIC0gOCwgIlNpZGUgd2FsbCDCtyBDcCDiiJIwLjciLCB7c2l6ZTogMTAuNX0pICsgdCh4MCArIHcgLyAyLCB5MCArIGggKyAxNiwgIlNpZGUgd2FsbCDCtyBDcCDiiJIwLjciLCB7c2l6ZTogMTAuNX0pOwogICAgbyArPSBkaW1IKHgwLCB4MCArIHcsIHkwICsgaCArIDM0LCAiTCAoYWxvbmcgd2luZCkiKTsKICAgIG8gKz0gZGltVih4MCArIHcgKyA5MiwgeTAsIHkwICsgaCwgIkIiLCBmYWxzZSk7CiAgICBvICs9IHQoeDAgKyB3IC8gMiwgMTgsICJQTEFOIiwge3NpemU6IDExLCB3OiA2MDB9KTsKICAgIC8qIHNlY3Rpb24gd2l0aCByb29mIHpvbmVzICovCiAgICBjb25zdCBzeCA9IDM2MCwgc3kgPSA3MCwgc3cgPSAyNTAsIHNoID0gMTEwLCBoaCA9IDYwOwogICAgbyArPSB0KHN4ICsgc3cgLyAyLCAxOCwgIlNFQ1RJT04gwrcgzrggPCAxMMKwIG9yIHdpbmQg4oilIHJpZGdlIiwge3NpemU6IDExLCB3OiA2MDB9KTsKICAgIG8gKz0gYDxyZWN0IHg9IiR7c3h9IiB5PSIke3N5ICsgc2ggLSBoaH0iIHdpZHRoPSIke3N3fSIgaGVpZ2h0PSIke2hofSIgc3R5bGU9ImZpbGw6dmFyKC0tY2hhcnQtZmlsbCk7c3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4zIi8+YDsKICAgIGNvbnN0IGsgPSBzdyAvIDQuNSwgbWFya3MgPSBbMCwgMC41LCAxLCAyLCA0LjVdLCBsYWIgPSBbIjAg4oCTIGgvMiIsICJoLzIg4oCTIGgiLCAiaCDigJMgMmgiLCAiPiAyaCJdLCBzaDIgPSBbMywgMiwgMSwgMF07CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICBjb25zdCBhID0gc3ggKyBtYXJrc1tpXSAqIGssIGIgPSBzeCArIG1hcmtzW2kgKyAxXSAqIGs7CiAgICAgIG8gKz0gYDxyZWN0IHg9IiR7YX0iIHk9IiR7c3kgKyBzaCAtIGhoIC0gMTZ9IiB3aWR0aD0iJHtiIC0gYX0iIGhlaWdodD0iMTQiIHN0eWxlPSJmaWxsOiR7R1JFWVtzaDJbaV1dfTtzdHJva2U6dmFyKC0tbGluZSkiLz5gOwogICAgICBvICs9IHQoKGEgKyBiKSAvIDIsIHN5ICsgc2ggLSBoaCAtIDIyIC0gKGkgJSAyKSAqIDExLCBsYWJbaV0sIHtzaXplOiA5LjV9KTsKICAgIH0KICAgIG8gKz0gYDxsaW5lIHgxPSIke3N4IC0gNTB9IiB5MT0iJHtzeSArIHNoIC0gaGggLyAyfSIgeDI9IiR7c3ggLSA4fSIgeTI9IiR7c3kgKyBzaCAtIGhoIC8gMn0iIHN0eWxlPSJzdHJva2U6dmFyKC0tYWNjZW50KSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3JmQSkiLz5gOwogICAgbyArPSBkaW1WKHN4ICsgc3cgKyAxNCwgc3kgKyBzaCAtIGhoLCBzeSArIHNoLCAiaCIsIGZhbHNlKTsKICAgIG8gKz0gdChzeCArIHN3IC8gMiwgc3kgKyBzaCArIDIyLCAiRGlzdGFuY2UgbWVhc3VyZWQgZnJvbSB3aW5kd2FyZCBlZGdlIiwge3NpemU6IDEwLjV9KTsKICAgIHJldHVybiBzdmcoVywgSCwgbywgIkZpZy4gMjcuMy0xIHN1cmZhY2VzIGFuZCByb29mIHpvbmVzIik7CiAgfQoKICAvKiBDJkMgem9uZSBrZXlzLCByZWRyYXduICovCiAgZnVuY3Rpb24gY2NLZXkoZmlnKSB7CiAgICBjb25zdCBXID0gMzIwLCBIID0gMzEwLCB4MCA9IDUwLCB5MCA9IDQyLCB3ID0gMjAwLCBoID0gMjQwOwogICAgbGV0IG8gPSBhcnJvd0RlZiwgciA9ICh4LCB5LCB3dywgaGgsIHopID0+IGA8cmVjdCB4PSIke3h9IiB5PSIke3l9IiB3aWR0aD0iJHt3d30iIGhlaWdodD0iJHtoaH0iIHN0eWxlPSJmaWxsOiR7R1JFWVt6XX07c3Ryb2tlOnZhcigtLWxpbmUpIi8+YDsKICAgIGNvbnN0IGxibCA9ICh4LCB5LCBzKSA9PiBgPGNpcmNsZSBjeD0iJHt4fSIgY3k9IiR7eX0iIHI9IjkiIHN0eWxlPSJmaWxsOnZhcigtLXBhbmVsKTtzdHJva2U6dmFyKC0taW5rKSIgc3Ryb2tlLXdpZHRoPSIuOCIvPmAgKyB0KHgsIHkgKyA0LCBzLCB7c2l6ZTogMTB9KTsKICAgIGlmIChmaWcgPT09ICIzMC4zLTEiIHx8IGZpZyA9PT0gIjMwLjQtMXciKSB7CiAgICAgIGNvbnN0IGhoID0gMTUwLCB5eSA9IDcwLCBhID0gMjY7CiAgICAgIG8gKz0gcih4MCwgeXksIHcsIGhoLCAwKSArIHIoeDAsIHl5LCBhLCBoaCwgMikgKyByKHgwICsgdyAtIGEsIHl5LCBhLCBoaCwgMik7CiAgICAgIG8gKz0gbGJsKHgwICsgdyAvIDIsIHl5ICsgaGggLyAyLCAiNCIpICsgbGJsKHgwICsgYSAvIDIsIHl5ICsgaGggLyAyLCAiNSIpICsgbGJsKHgwICsgdyAtIGEgLyAyLCB5eSArIGhoIC8gMiwgIjUiKTsKICAgICAgbyArPSBkaW1IKHgwLCB4MCArIGEsIHl5IC0gMTAsICJhIikgKyBkaW1IKHgwICsgdyAtIGEsIHgwICsgdywgeXkgLSAxMCwgImEiKSArIGRpbVYoeDAgLSAxMiwgeXksIHl5ICsgaGgsICJoIik7CiAgICAgIG8gKz0gbG4oeDAgLSAyMCwgeXkgKyBoaCwgeDAgKyB3ICsgMjAsIHl5ICsgaGgsICJ2YXIoLS1pbmspIiwgJ3N0cm9rZS13aWR0aD0iMS42IicpOwogICAgICBvICs9IHQoVyAvIDIsIDIyLCAiV0FMTCBFTEVWQVRJT04iLCB7c2l6ZTogMTEsIHc6IDYwMH0pOwogICAgICByZXR1cm4gc3ZnKFcsIEgsIG8sICJXYWxsIHpvbmVzIik7CiAgICB9CiAgICBvICs9IHIoeDAsIHkwLCB3LCBoLCAwKTsKICAgIGlmIChmaWcgPT09ICIzMC4zLTJBIikgewogICAgICBjb25zdCBlID0gMzYsIGMgPSAxMjsKICAgICAgbyArPSByKHgwLCB5MCwgdywgaCwgMSkgKyByKHgwICsgZSwgeTAgKyBlLCB3IC0gMiAqIGUsIGggLSAyICogZSwgMCkgKyByKHgwICsgMiAqIGUsIHkwICsgMiAqIGUsIHcgLSA0ICogZSwgaCAtIDQgKiBlLCAwKTsKICAgICAgZm9yIChjb25zdCBbY3gsIGN5XSBvZiBbWzAsIDBdLCBbMSwgMF0sIFswLCAxXSwgWzEsIDFdXSkgewogICAgICAgIGNvbnN0IFggPSBjeCA/IHgwICsgdyAtIGUgOiB4MCwgWSA9IGN5ID8geTAgKyBoIC0gYyA6IHkwLCBYMiA9IGN4ID8geDAgKyB3IC0gYyA6IHgwLCBZMiA9IGN5ID8geTAgKyBoIC0gZSA6IHkwOwogICAgICAgIG8gKz0gcihYLCBZLCBlLCBjLCAzKSArIHIoWDIsIFkyLCBjLCBlLCAzKTsKICAgICAgfQogICAgICBvICs9IGA8cmVjdCB4PSIke3gwICsgMiAqIGV9IiB5PSIke3kwICsgMiAqIGV9IiB3aWR0aD0iJHt3IC0gNCAqIGV9IiBoZWlnaHQ9IiR7aCAtIDQgKiBlfSIgZmlsbD0ibm9uZSIgc3R5bGU9InN0cm9rZTp2YXIoLS1tdXRlZCkiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPmA7CiAgICAgIG8gKz0gbGJsKHgwICsgdyAvIDIsIHkwICsgZSAvIDIsICIyIikgKyBsYmwoeDAgKyB3IC8gMiwgeTAgKyBlICogMS41LCAiMSIpICsgbGJsKHgwICsgdyAvIDIsIHkwICsgaCAvIDIsICIxJyIpICsgbGJsKHgwIC0gMTQsIHkwIC0gMTAsICIzIik7CiAgICAgIG8gKz0gZGltSCh4MCArIHcgLSBlLCB4MCArIHcsIHkwIC0gOCwgIjAuNmgiKSArIGRpbVYoeDAgKyB3ICsgMTIsIHkwICsgZSwgeTAgKyAyICogZSwgIjAuNmgiLCBmYWxzZSkgKyB0KHgwIC0gNCwgeTAgKyAzMCwgIjAuMmgiLCB7c2l6ZTogMTAsIGE6ICJlbmQifSk7CiAgICB9IGVsc2UgaWYgKGZpZyA9PT0gIkIiIHx8IGZpZyA9PT0gIkMiKSB7CiAgICAgIGNvbnN0IGEgPSAxODsKICAgICAgbyArPSByKHgwLCB5MCwgdywgYSwgMSkgKyByKHgwLCB5MCArIGggLSBhLCB3LCBhLCAxKSArIHIoeDAgKyB3IC8gMiAtIGEsIHkwLCAyICogYSwgaCwgMSk7CiAgICAgIG8gKz0gcih4MCArIHcgLyAyIC0gYSwgeTAsIDIgKiBhLCBhLCAzKSArIHIoeDAgKyB3IC8gMiAtIGEsIHkwICsgaCAtIGEsIDIgKiBhLCBhLCAzKTsKICAgICAgbyArPSBsbih4MCArIHcgLyAyLCB5MCwgeDAgKyB3IC8gMiwgeTAgKyBoLCAidmFyKC0taW5rKSIsICdzdHJva2UtZGFzaGFycmF5PSI2IDMiJyk7CiAgICAgIG8gKz0gbGJsKHgwICsgdyAvIDQsIHkwICsgaCAvIDIsICIxIikgKyBsYmwoeDAgKyB3IC8gMiwgeTAgKyBoIC8gMiwgIjIiKSArIGxibCh4MCArIHcgLyAyLCB5MCAtIDEyLCAiMyIpOwogICAgICBvICs9IGRpbUgoeDAgKyB3IC8gMiwgeDAgKyB3IC8gMiArIGEsIHkwICsgaCArIDE0LCAiYSIpICsgZGltVih4MCAtIDEwLCB5MCArIGggLSBhLCB5MCArIGgsICJhIik7CiAgICB9IGVsc2UgaWYgKGZpZyA9PT0gIkQiKSB7CiAgICAgIGNvbnN0IGEgPSAxODsKICAgICAgbyArPSByKHgwLCB5MCwgdywgYSwgMSkgKyByKHgwLCB5MCArIGggLSBhLCB3LCBhLCAxKTsKICAgICAgZm9yIChjb25zdCBbY3gsIGN5XSBvZiBbWzAsIDBdLCBbMSwgMF0sIFswLCAxXSwgWzEsIDFdXSkgbyArPSByKGN4ID8geDAgKyB3IC0gYSA6IHgwLCBjeSA/IHkwICsgaCAtIGEgOiB5MCwgYSwgYSwgMyk7CiAgICAgIG8gKz0gbG4oeDAgKyB3IC8gMiwgeTAsIHgwICsgdyAvIDIsIHkwICsgaCwgInZhcigtLWluaykiLCAnc3Ryb2tlLWRhc2hhcnJheT0iNiAzIicpOwogICAgICBvICs9IGxibCh4MCArIHcgLyA0LCB5MCArIGggLyAyLCAiMSIpICsgbGJsKHgwICsgdyAvIDQsIHkwICsgYSAvIDIsICIyIikgKyBsYmwoeDAgLSAxNCwgeTAgKyBhIC8gMiwgIjMiKTsKICAgICAgbyArPSBkaW1IKHgwLCB4MCArIGEsIHkwICsgaCArIDE0LCAiYSIpICsgZGltVih4MCArIHcgKyAxMiwgeTAgKyBoIC0gYSwgeTAgKyBoLCAiYSIsIGZhbHNlKTsKICAgIH0gZWxzZSBpZiAoZmlnID09PSAiMzAuNC0xIikgewogICAgICBjb25zdCBhID0gMTg7CiAgICAgIG8gKz0gcih4MCwgeTAsIHcsIGgsIDEpICsgcih4MCArIGEsIHkwICsgYSwgdyAtIDIgKiBhLCBoIC0gMiAqIGEsIDApOwogICAgICBmb3IgKGNvbnN0IFtjeCwgY3ldIG9mIFtbMCwgMF0sIFsxLCAwXSwgWzAsIDFdLCBbMSwgMV1dKSBvICs9IHIoY3ggPyB4MCArIHcgLSAyICogYSA6IHgwLCBjeSA/IHkwICsgaCAtIGEgOiB5MCwgMiAqIGEsIGEsIDMpICsgcihjeCA/IHgwICsgdyAtIGEgOiB4MCwgY3kgPyB5MCArIGggLSAyICogYSA6IHkwLCBhLCAyICogYSwgMyk7CiAgICAgIG8gKz0gbGJsKHgwICsgdyAvIDIsIHkwICsgaCAvIDIsICIxIikgKyBsYmwoeDAgKyB3IC8gMiwgeTAgKyBhIC8gMiwgIjIiKSArIGxibCh4MCAtIDE0LCB5MCAtIDEwLCAiMyIpOwogICAgICBvICs9IGRpbUgoeDAsIHgwICsgMiAqIGEsIHkwICsgaCArIDE0LCAiMmEiKSArIGRpbVYoeDAgKyB3ICsgMTIsIHkwICsgaCAtIGEsIHkwICsgaCwgImEiLCBmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBvICs9IHQoeDAgKyB3IC8gMiwgeTAgKyBoIC8gMiwgIkhpcCByb29mOiB6b25lcyBhbG9uZyBlYXZlcywgaGlwcyBhbmQgcmlkZ2UiLCB7c2l6ZTogMTB9KSArIHQoeDAgKyB3IC8gMiwgeTAgKyBoIC8gMiArIDE2LCAiKHNlZSB0aGUgc3RhbmRhcmQgZmlndXJlKSIsIHtzaXplOiAxMH0pOwogICAgfQogICAgbyArPSBgPHJlY3QgeD0iJHt4MH0iIHk9IiR7eTB9IiB3aWR0aD0iJHt3fSIgaGVpZ2h0PSIke2h9IiBmaWxsPSJub25lIiBzdHlsZT0ic3Ryb2tlOnZhcigtLWluaykiIHN0cm9rZS13aWR0aD0iMS4zIi8+YDsKICAgIG8gKz0gdChXIC8gMiwgMTYsICJST09GIFBMQU4iLCB7c2l6ZTogMTEsIHc6IDYwMH0pOwogICAgcmV0dXJuIHN2ZyhXLCBILCBvLCAiUm9vZiB6b25lcyIpOwogIH0KCiAgLyogR0NwIGN1cnZlcyB2cyBlZmZlY3RpdmUgYXJlYSAqLwogIGZ1bmN0aW9uIGNjQ2hhcnQoc2VyaWVzLCB0aXRsZSkgewogICAgY29uc3QgVyA9IDUyMCwgSCA9IDMwMCwgcGwgPSA1MCwgcHIgPSA3MCwgcHQgPSAyMiwgcGIgPSAzODsKICAgIGNvbnN0IGFsbCA9IHNlcmllcy5mbGF0TWFwKHMgPT4gcy5wdHMubWFwKHAgPT4gcFsxXSkpOwogICAgY29uc3QgZ01pbiA9IE1hdGgubWluKDAsIC4uLmFsbCkgLSAwLjIsIGdNYXggPSBNYXRoLm1heCgwLjIsIC4uLmFsbCkgKyAwLjI7CiAgICBjb25zdCBseCA9IEEgPT4gTWF0aC5sb2cxMChBKSwgYU1pbiA9IDAuMSwgYU1heCA9IDEwMDsKICAgIGNvbnN0IFggPSBBID0+IHBsICsgKFcgLSBwbCAtIHByKSAqIChseChBKSAtIGx4KGFNaW4pKSAvIChseChhTWF4KSAtIGx4KGFNaW4pKSwgWSA9IGcgPT4gcHQgKyAoSCAtIHB0IC0gcGIpICogKGcgLSBnTWluKSAvIChnTWF4IC0gZ01pbik7CiAgICBsZXQgbyA9IHQoMTAsIDE0LCB0aXRsZSwge2E6ICJzdGFydCIsIHNpemU6IDExLjUsIHc6IDYwMH0pOwogICAgZm9yIChjb25zdCBBIG9mIFswLjEsIDAuMiwgMC41LCAxLCAyLCA1LCAxMCwgMjAsIDUwLCAxMDBdKSBvICs9IGxuKFgoQSksIHB0LCBYKEEpLCBIIC0gcGIsICJ2YXIoLS1saW5lKSIpICsgdChYKEEpLCBIIC0gcGIgKyAxNCwgQSwge3NpemU6IDkuNX0pOwogICAgZm9yIChsZXQgZyA9IE1hdGguY2VpbChnTWluICogMikgLyAyOyBnIDw9IGdNYXg7IGcgKz0gMC41KSBvICs9IGxuKHBsLCBZKGcpLCBXIC0gcHIsIFkoZyksIGcgPT09IDAgPyAidmFyKC0tbXV0ZWQpIiA6ICJ2YXIoLS1saW5lKSIpICsgdChwbCAtIDYsIFkoZykgKyA0LCBGKGcsIDEpLCB7c2l6ZTogOS41LCBhOiAiZW5kIn0pOwogICAgY29uc3QgY29scyA9IFsidmFyKC0tYWNjZW50KSIsICJ2YXIoLS1pbmspIiwgIiNjMDM5MmIiLCAiIzJkNWZhOCIsICIjYjc3OTFmIiwgIiM2YjQ2YzEiXTsKICAgIHNlcmllcy5mb3JFYWNoKChzLCBpKSA9PiB7CiAgICAgIGNvbnN0IHB0cyA9IFtdOyBmb3IgKGxldCBrID0gMDsgayA8PSA2MDsgaysrKSB7IGNvbnN0IEEgPSBhTWluICogTWF0aC5wb3coYU1heCAvIGFNaW4sIGsgLyA2MCk7IHB0cy5wdXNoKFtYKEEpLCBZKGN1cnZlKEEsIHMucHRzKSldKTsgfQogICAgICBvICs9IGA8cGF0aCBkPSIke3B0cy5tYXAoKHAsIGopID0+IChqID8gIkwiIDogIk0iKSArIHBbMF0udG9GaXhlZCgxKSArICIsIiArIHBbMV0udG9GaXhlZCgxKSkuam9pbigiIil9IiBmaWxsPSJub25lIiBzdHlsZT0ic3Ryb2tlOiR7Y29sc1tpICUgY29scy5sZW5ndGhdfSIgc3Ryb2tlLXdpZHRoPSIxLjgiJHtzLmRhc2ggPyAnIHN0cm9rZS1kYXNoYXJyYXk9IjUgMyInIDogIiJ9Lz5gOwogICAgICBjb25zdCBlID0gcHRzW3B0cy5sZW5ndGggLSAxXTsgbyArPSB0KGVbMF0gKyA0LCBlWzFdICsgNCArIChpICUgMiA/IDYgOiAtMiksIHMubmFtZSwge2E6ICJzdGFydCIsIHNpemU6IDEwLCBjOiBjb2xzW2kgJSBjb2xzLmxlbmd0aF19KTsKICAgIH0pOwogICAgbyArPSB0KChwbCArIFcgLSBwcikgLyAyLCBIIC0gNCwgIkVmZmVjdGl2ZSB3aW5kIGFyZWEgQSAobcKyLCBsb2cgc2NhbGUpIiwge3NpemU6IDEwLjV9KTsKICAgIG8gKz0gdCgxMiwgcHQgKyAxMCwgIkdDcCIsIHthOiAic3RhcnQiLCBzaXplOiAxMC41fSk7CiAgICByZXR1cm4gc3ZnKFcsIEgsIG8sIHRpdGxlKTsKICB9CiAgY29uc3QgQ0NTRVRTID0gewogICAgIjMwLjMtMSI6IHtuYW1lOiAiV2FsbHMsIGgg4omkIDE4LjMgbSAoRmlnLiAzMC4zLTEpIiwga2V5OiAiMzAuMy0xIiwgczogKCkgPT4gT2JqZWN0LmVudHJpZXMoQ0Mud2FsbExvdykubWFwKChbaywgcF0pID0+ICh7bmFtZTogIlpvbmUgIiArIGssIHB0czogcH0pKX0sCiAgICAiQSI6IHtuYW1lOiAiR2FibGUgcm9vZiDOuCDiiaQgN8KwIChGaWcuIDMwLjMtMkEpIiwga2V5OiAiMzAuMy0yQSIsIHM6ICgpID0+IFsuLi5PYmplY3QuZW50cmllcyhDQy5BLm5lZykubWFwKChbaywgcF0pID0+ICh7bmFtZTogaywgcHRzOiBwfSkpLCB7bmFtZTogImFsbCArIiwgcHRzOiBDQy5BLnBvcywgZGFzaDogMX1dfSwKICAgICJCIjoge25hbWU6ICJHYWJsZSByb29mIDfCsCA8IM64IOKJpCAyMMKwIChGaWcuIDMwLjMtMkIpIiwga2V5OiAiQiIsIHM6ICgpID0+IFsuLi5PYmplY3QuZW50cmllcyhDQy5CLm5lZykubWFwKChbaywgcF0pID0+ICh7bmFtZTogaywgcHRzOiBwfSkpLCB7bmFtZTogImFsbCArIiwgcHRzOiBDQy5CLnBvcywgZGFzaDogMX1dfSwKICAgICJDIjoge25hbWU6ICJHYWJsZSByb29mIDIwwrAgPCDOuCDiiaQgMjfCsCAoRmlnLiAzMC4zLTJDKSIsIGtleTogIkMiLCBzOiAoKSA9PiBbLi4uT2JqZWN0LmVudHJpZXMoQ0MuQy5uZWcpLm1hcCgoW2ssIHBdKSA9PiAoe25hbWU6IGssIHB0czogcH0pKSwge25hbWU6ICJhbGwgKyIsIHB0czogQ0MuQy5wb3MsIGRhc2g6IDF9XX0sCiAgICAiRCI6IHtuYW1lOiAiR2FibGUgcm9vZiAyN8KwIDwgzrgg4omkIDQ1wrAgKEZpZy4gMzAuMy0yRCkiLCBrZXk6ICJEIiwgczogKCkgPT4gWy4uLk9iamVjdC5lbnRyaWVzKENDLkQubmVnKS5tYXAoKFtrLCBwXSkgPT4gKHtuYW1lOiBrLCBwdHM6IHB9KSksIHtuYW1lOiAiYWxsICsiLCBwdHM6IENDLkQucG9zLCBkYXNoOiAxfV19LAogICAgIkUiOiB7bmFtZTogIkhpcCByb29mIDfCsCA8IM64IOKJpCAyMMKwIChGaWcuIDMwLjMtMkUpIiwga2V5OiAiaGlwIiwgczogKCkgPT4gWy4uLk9iamVjdC5lbnRyaWVzKENDLkUubmVnKS5tYXAoKFtrLCBwXSkgPT4gKHtuYW1lOiBrLCBwdHM6IHB9KSksIHtuYW1lOiAiYWxsICsiLCBwdHM6IENDLkUucG9zLCBkYXNoOiAxfV19LAogICAgIkYiOiB7bmFtZTogIkhpcCByb29mIDIwwrAgPCDOuCDiiaQgMjfCsCAoRmlnLiAzMC4zLTJGKSIsIGtleTogImhpcCIsIHM6ICgpID0+IFsuLi5PYmplY3QuZW50cmllcyhDQy5GLm5lZykubWFwKChbaywgcF0pID0+ICh7bmFtZTogaywgcHRzOiBwfSkpLCB7bmFtZTogImFsbCArIiwgcHRzOiBDQy5GLnBvcywgZGFzaDogMX1dfSwKICAgICJHIjoge25hbWU6ICJIaXAgcm9vZiAyN8KwIDwgzrgg4omkIDQ1wrAgKEZpZy4gMzAuMy0yRykiLCBrZXk6ICJoaXAiLCBzOiAoKSA9PiBbLi4uT2JqZWN0LmVudHJpZXMoQ0MuRy5uZWcpLm1hcCgoW2ssIHBdKSA9PiAoe25hbWU6IGssIHB0czogcH0pKSwge25hbWU6ICJhbGwgKyIsIHB0czogQ0MuRy5wb3MsIGRhc2g6IDF9XX0sCiAgICAiSDEiOiB7bmFtZTogIldhbGxzIGFuZCByb29mLCBoID4gMTguMyBtIChGaWcuIDMwLjQtMSkiLCBrZXk6ICIzMC40LTEiLCBzOiAoKSA9PiBbLi4uT2JqZWN0LmVudHJpZXMoQ0Mud2FsbEhpZ2gpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAiNSsiKS5tYXAoKFtrLCBwXSkgPT4gKHtuYW1lOiAiV2FsbCAiICsgKGsgPT09ICI0KyIgPyAiNCw1KyIgOiBrKSwgcHRzOiBwfSkpLCAuLi5PYmplY3QuZW50cmllcyhDQy5yb29mSGlnaCkuZmlsdGVyKChbLCBwXSkgPT4gcCkubWFwKChbaywgcF0pID0+ICh7bmFtZTogIlJvb2YgIiArIGssIHB0czogcCwgZGFzaDogMX0pKV19CiAgfTsKICBsZXQgY2NTZWwgPSAiQSI7CgogIGZ1bmN0aW9uIHJlbmRlcigpIHsKICAgIGxldCBoID0gYDxwIGNsYXNzPSJpbnRybyI+2KzYr9in2YjZhCDZiNmF2LnYp9mF2YTYp9iqIEFTQ0UgNy0yMiDYp9mE2KrZiiDYqtiz2KrYrtiv2YXZh9inINin2YTYrdin2LPYqNip2Iwg2YXYuSDZhdiu2LfYt9in2Kog2KrZiNi22YrYrdmK2Kkg2YXZj9i52KfYryDYsdiz2YXZh9inINmF2YYg2KPYtNmD2KfZhCDYp9mE2YPZiNivINmE2YTYsdis2YjYuSDYp9mE2LPYsdmK2LkuPC9wPmA7CiAgICBoICs9IGNhcmQoItmB2KbYqSDYp9mE2K7Yt9mI2LHYqSDZiNiz2LHYudipINin2YTYsdmK2KfYrSDYp9mE2KPYs9in2LPZitipIFYiLCAiU2VjdGlvbiAyNi41LCBUYWJsZSAxLjUtMSIsICLYqtmP2YLYsdijIFYg2YXZhiDYrtix2YrYt9ipINin2YTYsdmK2KfYrSDYp9mE2K7Yp9i12Kkg2KjZgdim2Kkg2K7Yt9mI2LHYqSDYp9mE2YXYqNmG2YnYjCDZiNmH2Yog2LPYsdi52Kkg2YfYqNipIDMg2KvZiNin2YbZjSDYudmE2Ykg2KfYsdiq2YHYp9i5IDEwINmFINmB2Yog2KrYudix2LYgQy4iLCB0YmwoWyJSaXNrIENhdGVnb3J5IiwgIlVzZSBvZiBidWlsZGluZyJdLCBbCiAgICAgIFsiSSIsICJMb3cgaGF6YXJkIHRvIGh1bWFuIGxpZmUgaW4gZmFpbHVyZTogYWdyaWN1bHR1cmFsIGJ1aWxkaW5ncywgbWlub3Igc3RvcmFnZSJdLAogICAgICBbIklJIiwgIkFsbCBidWlsZGluZ3Mgbm90IGxpc3RlZCBpbiBJLCBJSUkgYW5kIElWOiBob3VzaW5nLCBvZmZpY2VzLCB3YXJlaG91c2VzIl0sCiAgICAgIFsiSUlJIiwgIlN1YnN0YW50aWFsIGhhemFyZDogbGFyZ2UgYXNzZW1ibHksIHNjaG9vbHMsIGJ1aWxkaW5ncyB3aXRoIG1hbnkgb2NjdXBhbnRzIl0sCiAgICAgIFsiSVYiLCAiRXNzZW50aWFsIGZhY2lsaXRpZXM6IGhvc3BpdGFscywgZW1lcmdlbmN5IGNlbnRyZXMsIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIl1dLCB0cnVlLCB0cnVlKSArIGA8ZGl2IGNsYXNzPSJsZWdlbmQiPkFTQ0UgNy0yMiBtYXBzOiBGaWcuIDI2LjUtMUEgdG8gMUQgYnkgcmlzayBjYXRlZ29yeS4gU2F1ZGkgbWFwcyAoU0JDIDMwMSBGaWcuIDI2LTJBL0IvQykgYXJlIHNob3duIGluIHRoZSBwYXJhbWV0ZXJzIHRhYi48L2Rpdj5gKTsKICAgIGggKz0gY2FyZCgi2YXYudin2YXZhCDYp9mE2KfYqtis2KfZhyBLZCIsICJUYWJsZSAyNi42LTEiLCAi2YrZj9i22LHYqCDZgdmKINin2YTYtti62Lcg2YHZiiDZhdi52KfYr9mE2KfYqiDYp9mE2YHYtdmI2YQgMjcg2KXZhNmJIDMwLiIsIHRibChbIlN0cnVjdHVyZSB0eXBlIiwgIktkIl0sIFsKICAgICAgWyJCdWlsZGluZ3MgwrcgTVdGUlMgYW5kIEMmQyIsICIwLjg1Il0sIFsiQXJjaGVkIHJvb2ZzIiwgIjAuODUiXSwgWyJDaXJjdWxhciBkb21lcyIsICIxLjAqIl0sCiAgICAgIFsiQ2hpbW5leXMsIHRhbmtzIMK3IHNxdWFyZSIsICIwLjkwIl0sIFsiQ2hpbW5leXMsIHRhbmtzIMK3IGhleGFnb25hbCIsICIwLjk1Il0sIFsiQ2hpbW5leXMsIHRhbmtzIMK3IG9jdGFnb25hbCAvIHJvdW5kIiwgIjEuMCoiXSwKICAgICAgWyJTb2xpZCBmcmVlc3RhbmRpbmcgd2FsbHMsIHJvb2Z0b3AgZXF1aXBtZW50LCBzaWducyIsICIwLjg1Il0sIFsiT3BlbiBzaWducyBhbmQgc2luZ2xlLXBsYW5lIG9wZW4gZnJhbWVzIiwgIjAuODUiXSwKICAgICAgWyJUcnVzc2VkIHRvd2VycyDCtyB0cmlhbmd1bGFyLCBzcXVhcmUsIHJlY3Rhbmd1bGFyIiwgIjAuODUiXSwgWyJUcnVzc2VkIHRvd2VycyDCtyBhbGwgb3RoZXIgc2VjdGlvbnMiLCAiMC45NSJdXSwgdHJ1ZSwgdHJ1ZSkgKyBgPGRpdiBjbGFzcz0ibGVnZW5kIj4qIEtkID0gMC45NSBwZXJtaXR0ZWQgZm9yIHJvdW5kIG9yIG9jdGFnb25hbCBzdHJ1Y3R1cmVzIHdpdGggbm9uYXhpc3ltbWV0cmljIHN0cnVjdHVyYWwgc3lzdGVtcy48L2Rpdj5gKTsKICAgIGNvbnN0IGVsZXYgPSBbMCwgMzA1LCA2MTAsIDkxNCwgMTIxOSwgMTUyNCwgMTgyOV07CiAgICBoICs9IGNhcmQoItmF2LnYp9mF2YQg2YXZhtiz2YjYqCDYp9mE2KPYsdi2IEtlIiwgIlRhYmxlIDI2LjktMSIsICLZitmC2YTZhCDYp9mE2LbYuti3INmB2Yog2KfZhNmF2YjYp9mC2Lkg2KfZhNmF2LHYqtmB2LnYqSDYudmGINiz2LfYrSDYp9mE2KjYrdix2Iwg2YjZitis2YjYsiDYo9iu2LDZhyAxLjAg2K/Yp9im2YXYp9mLLiIsIHRibChbIkdyb3VuZCBlbGV2YXRpb24gKG0pIiwgLi4uZWxldi5tYXAoU3RyaW5nKV0sIFtbIktlID0gZTxzdXA+4oiSMC4wMDAxMTkgemU8L3N1cD4iLCAuLi5lbGV2Lm1hcCh6ID0+IEYoTWF0aC5leHAoLTAuMDAwMTE5ICogeikpKV1dKSArIGA8ZGl2IGNsYXNzPSJsZWdlbmQiPkludGVycG9sYXRlLCBvciB1c2UgdGhlIGZvcm11bGE7IHRha2UgS2UgPSAxLjAgYmVsb3cgc2VhIGxldmVsIG9yIGlmIHByZWZlcnJlZC48L2Rpdj5gKTsKICAgIGggKz0gY2FyZCgi2YHYptin2Kog2KfZhNiq2LnYsdi2IiwgIlNlY3Rpb24gMjYuNyIsICLYqtmP2K3Yr9ivINmE2YPZhCDYp9iq2KzYp9mHINix2YrYp9itINit2LPYqCDYrti02YjZhtipINin2YTYo9ix2LYg2YHZiiDYp9mE2KzZh9ipINin2YTZhdmC2KfYqNmE2Kkg2YTZhNix2YrYp9itLiIsIHRibChbIkV4cG9zdXJlIiwgIlVwd2luZCBncm91bmQgc3VyZmFjZSJdLCBbCiAgICAgIFsiQiIsICJVcmJhbiBhbmQgc3VidXJiYW4gYXJlYXMsIHdvb2RlZCBhcmVhcywgY2xvc2VseSBzcGFjZWQgb2JzdHJ1Y3Rpb25zIHRoZSBzaXplIG9mIHNpbmdsZS1mYW1pbHkgaG9tZXMgb3IgbGFyZ2VyIl0sCiAgICAgIFsiQyIsICJPcGVuIHRlcnJhaW4gd2l0aCBzY2F0dGVyZWQgb2JzdHJ1Y3Rpb25zLCBnZW5lcmFsbHkgbGVzcyB0aGFuIDkuMSBtIGhpZ2g7IGFwcGxpZXMgd2hlbmV2ZXIgQiBvciBEIGRvZXMgbm90Il0sCiAgICAgIFsiRCIsICJGbGF0LCB1bm9ic3RydWN0ZWQgYXJlYXMgYW5kIHdhdGVyIHN1cmZhY2VzLCBpbmNsdWRpbmcgc21vb3RoIG11ZCBmbGF0cywgc2FsdCBmbGF0cyBhbmQgdW5icm9rZW4gaWNlIl1dLCB0cnVlLCB0cnVlKSk7CiAgICBoICs9IGNhcmQoItmF2LnYp9mF2YQg2KfZhNiq2LnYsdi2INmE2LbYuti3INin2YTYs9ix2LnYqSBLeiIsICJUYWJsZSAyNi4xMC0xIiwgItmK2LLYr9in2K8g2YXYuSDYp9mE2KfYsdiq2YHYp9i52Iwg2YjZitmP2LPYqtmD2YXZhCDYqNin2YTYp9iz2KrZitmB2KfYoSDYp9mE2K7Yt9mKINio2YrZhiDYp9mE2YLZitmFLiIsCiAgICAgIGA8ZGl2IGNsYXNzPSJ0d28iPjxkaXY+JHt0YmwoWyJ6IChtKSIsICJCIiwgIkMiLCAiRCJdLCBLWl9aLm1hcCgoeiwgaSkgPT4gW0YoeiwgMSksIEYoS1pfVC5CW2ldKSwgRihLWl9ULkNbaV0pLCBGKEtaX1QuRFtpXSldKSl9PC9kaXY+PGRpdiBjbGFzcz0idml6Ij4ke2t6Q2hhcnQoKX08L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJsZWdlbmQiPkJlbG93IDQuNiBtIHVzZSB0aGUgNC42IG0gdmFsdWUuIEt6ID0gMi40MSh6L3pnKTxzdXA+Mi/OsTwvc3VwPiBmb3IgNC42IG0g4omkIHog4omkIHpnLiBGb3IgQ2guIDI4LCBFeHBvc3VyZSBCIGFuZCB6ICZsdDsgOS4xIG0sIHRha2UgS3ogPSAwLjcwLjwvZGl2PmApOwogICAgaCArPSBjYXJkKCLYq9mI2KfYqNiqINmB2KbYp9iqINin2YTYqti52LHYtiIsICJUYWJsZSAyNi4xMS0xIiwgItiq2Y/Ys9iq2K7Yr9mFINmB2YogS3og2YjZhdi52KfZhdmEINin2YTZh9io2KkgRy4iLCB0YmwoWyJFeHBvc3VyZSIsICLOsSIsICJ6ZyAobSkiLCAiYyIsICLihJMgKG0pIiwgIs61zIQiLCAiem1pbiAobSkiLCAiYsyEIiwgIuG+sSJdLAogICAgICBbIkIiLCAiQyIsICJEIl0ubWFwKGUgPT4geyBjb25zdCBFID0gRVhQW2VdOyByZXR1cm4gW2UsIEUuYWxwaGEsIEUuemcsIEYoRS5jKSwgRihFLmwpLCAiMS8iICsgRigxIC8gRS5lcHMsIDEpLCBGKEUuem1pbiksIEYoRS5iQmFyKSwgIjEvIiArIEYoMSAvIEUuYUJhciwgMSldOyB9KSkpOwogICAgaCArPSBjYXJkKCLZhdi52KfZhdmEINin2YTYqti22KfYsdmK2LMgS3p0IiwgIkZpZy4gMjYuOC0xIiwgItmK2LHZgdi5INin2YTYs9ix2LnYqSDZgdmI2YIg2KfZhNiq2YTYp9mEINmI2KfZhNmF2YbYrdiv2LHYp9iqINin2YTZhdmG2YHYsdiv2KkuIEt6dCA9ICgxICsgSzHCt0sywrdLMynCsi4iLAogICAgICBgPGRpdj4ke3RibChbIlNoYXBlIiwgIksxLyhIL0xoKSBCIiwgIkMiLCAiRCIsICLOsyIsICLOvCB1cHdpbmQiLCAizrwgZG93bndpbmQiXSwgT2JqZWN0LnZhbHVlcyhUT1BPKS5tYXAoVCA9PiBbVC5uYW1lLCBGKFQuazEuQiksIEYoVC5rMS5DKSwgRihULmsxLkQpLCBGKFQuZ2FtbWEsIDEpLCBGKFQubXUudXAsIDEpLCBGKFQubXUuZG93biwgMSldKSl9CiAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZCI+SzIgPSAxIOKIkiB8eHwvKM68TGgpOyBLMyA9IGU8c3VwPuKIks6zei9MaDwvc3VwPi4gSWYgSC9MaCAmZ3Q7IDAuNSB1c2UgSC9MaCA9IDAuNSBhbmQgTGggPSAySC4gQXBwbGllcyBvbmx5IHdoZW4gSC9MaCDiiaUgMC4yIGFuZCBIIOKJpSA0LjUgbSAoQywgRCkgb3IgMTggbSAoQiksIMKnMjYuOC4xLjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InZpeiIgc3R5bGU9Im1heC13aWR0aDo2NDBweCI+JHt0b3BvU2tldGNoKCl9PC9kaXY+YCk7CiAgICBoICs9IGNhcmQoItmF2LnYp9mF2YQg2KfZhNi22LrYtyDYp9mE2K/Yp9iu2YTZiiBHQ3BpIiwgIlRhYmxlIDI2LjEzLTEiLCAi2YrZj9i22KfZgSDZhNmE2LbYuti3INin2YTYrtin2LHYrNmKINio2KfZhNil2LTYp9ix2KrZitmG2Iwg2YjZitmP2LXZhdmFINi52YTZiSDYp9mE2K3Yp9mE2Kkg2KfZhNij2LPZiNijLiIsIHRibChbIkVuY2xvc3VyZSBjbGFzc2lmaWNhdGlvbiIsICIoR0NwaSkiXSwgWwogICAgICBbIkVuY2xvc2VkIGJ1aWxkaW5nIiwgIiswLjE4IC8g4oiSMC4xOCJdLCBbIlBhcnRpYWxseSBlbmNsb3NlZCBidWlsZGluZyIsICIrMC41NSAvIOKIkjAuNTUiXSwgWyJQYXJ0aWFsbHkgb3BlbiBidWlsZGluZyIsICIrMC4xOCAvIOKIkjAuMTgiXSwgWyJPcGVuIGJ1aWxkaW5nIiwgIjAuMDAiXV0pICsKICAgICAgYDxkaXYgY2xhc3M9ImxlZ2VuZCI+UGFydGlhbGx5IGVuY2xvc2VkIHdpdGggbGFyZ2Ugdm9sdW1lOiBtdWx0aXBseSBieSBSaSA9IDAuNSgxICsgMS/iiJooMSArIFZpLyg2OTUxIEFvZykpKSDiiaQgMS4wIChFcS4gMjYuMTMtMSwgU0kpLjwvZGl2PmApOwogICAgLyogRmlnIDI3LjMtMSAqLwogICAgY29uc3Qgd3dSb3dzID0gW107CiAgICBITC5mb3JFYWNoKChyLCBpKSA9PiB7IHd3Um93cy5wdXNoKFsiaC9MIOKJpCAiICsgciArICIgwrcgbmVnIiwgLi4uV1dfTkVHW2ldLm1hcCh2ID0+IHYgPT09IDAgPyAi4oCUIiA6IEYodikpXSk7IHd3Um93cy5wdXNoKFsiaC9MIOKJpCAiICsgciArICIgwrcgcG9zIiwgLi4uV1dfUE9TW2ldLm1hcCh2ID0+IEYodikpXSk7IH0pOwogICAgaCArPSBjYXJkKCLZhdi52KfZhdmEINin2YTZh9io2KkgRyIsICJTZWN0aW9uIDI2LjExIiwgItmK2YXYq9mEINij2KvYsSDYp9mE2YfYqNin2Kog2LnZhNmJINin2YTZhdmG2LTYo9iMINmI2YrYudiq2YXYryDYudmE2Ykg2LXZhNin2KjYqtmHLiIsIHRibChbIlN0cnVjdHVyZSIsICJDb25kaXRpb24iLCAiRmFjdG9yIl0sIFsKICAgICAgWyJSaWdpZCIsICJuMSDiiaUgMSBIeiIsICJHID0gMC44NSBwZXJtaXR0ZWQsIG9yIGNvbXB1dGVkIChFcS4gMjYuMTEtNikiXSwKICAgICAgWyJGbGV4aWJsZSAvIGR5bmFtaWNhbGx5IHNlbnNpdGl2ZSIsICJuMSA8IDEgSHoiLCAiR2YgZnJvbSBFcS4gMjYuMTEtMTAgdXNpbmcgbjEgYW5kIGRhbXBpbmcgzrIiXV0sIHRydWUsIHRydWUpICsgYDxkaXYgY2xhc3M9ImxlZ2VuZCI+TG93LXJpc2UgYnVpbGRpbmdzIHBlciDCpzI2LjExLjIgbWF5IGJlIHRha2VuIGFzIHJpZ2lkLiBDaC4gMjggYW5kIENoLiAzMCB1c2UgY29tYmluZWQgY29lZmZpY2llbnRzIChHQ3BmLCBHQ3ApLCBzbyBHIGlzIG5vdCBhcHBsaWVkIHRoZXJlLjwvZGl2PmApOwogICAgaCArPSBjYXJkKCLYqti52LHZitmB2KfYqiDYp9mE2KPYqNi52KfYryDZiNin2YTYudmG2KfYtdixIiwgIkNoLiAyNuKAkzMwIG5vdGF0aW9uIiwgItix2YXZiNiyINin2YTZh9mG2K/Ys9ipINin2YTZhdiz2KrYrtiv2YXYqSDZgdmKINin2YTZhdiv2K7ZhNin2Kog2YjYp9mE2K3Ys9in2KjYp9iqLiIsIHRibChbIlN5bWJvbCAvIGl0ZW0iLCAiRGVmaW5pdGlvbiJdLCBbCiAgICAgIFsiaCIsICJNZWFuIHJvb2YgaGVpZ2h0OyBlYXZlIGhlaWdodCBpcyB1c2VkIHdoZW4gzrgg4omkIDEwwrAiXSwKICAgICAgWyJoZSIsICJFYXZlIGhlaWdodCJdLCBbIs64IiwgIkFuZ2xlIG9mIHJvb2YgcGxhbmUgZnJvbSBob3Jpem9udGFsIl0sCiAgICAgIFsiQiIsICJIb3Jpem9udGFsIGRpbWVuc2lvbiBub3JtYWwgdG8gd2luZCBkaXJlY3Rpb24iXSwgWyJMIiwgIkhvcml6b250YWwgZGltZW5zaW9uIHBhcmFsbGVsIHRvIHdpbmQgZGlyZWN0aW9uIl0sCiAgICAgIFsiYSIsICJFZGdlIHpvbmUgd2lkdGggKENoLiAyOCwgQ2guIDMwKSwgZnJvbSB0aGUgbGVhc3QgaG9yaXpvbnRhbCBkaW1lbnNpb24gYW5kIGgiXSwKICAgICAgWyJQYXJhcGV0IiwgIkNoLiAyNy8yODogcHAgPSBxcMK3S2TCtyhHQ3BuKSwgR0NwbiA9ICsxLjUgd2luZHdhcmQsIOKIkjEuMCBsZWV3YXJkIl0sCiAgICAgIFsiT3ZlcmhhbmciLCAiQ2guIDI3OiBib3R0b20gc3VyZmFjZSBDcCA9IDAuODsgQ2guIDI4OiBHQ3AgPSAwLjcsIGNvbWJpbmVkIHdpdGggdG9wIHN1cmZhY2UiXSwKICAgICAgWyJGbG9vciBsZXZlbHMiLCAiTVdGUlMgc3RvcnkgZm9yY2VzIHVzZSBxeiBhdCBlYWNoIGxldmVsIChLeiBmcm9tIFRhYmxlIDI2LjEwLTEpIl1dLCB0cnVlLCB0cnVlKSk7CiAgICBoICs9IGNhcmQoItmF2LnYp9mF2YTYp9iqINin2YTYtti62Lcg2KfZhNiu2KfYsdis2YogQ3AiLCAiRmlnLiAyNy4zLTEiLCAi2YTZhNi32LHZitmC2Kkg2KfZhNin2KrYrNin2YfZitipOiDYp9mE2K3ZiNin2KbYtyDYrdiz2KggTC9C2Iwg2YjYp9mE2LPZgtmBINit2LPYqCDYp9mE2YXZitmEIM64INmI2YbYs9io2KkgaC9MLiIsCiAgICAgIGA8ZGl2IGNsYXNzPSJ2aXoiPiR7Y3BTa2V0Y2goKX08L2Rpdj4KICAgICAgPGgzIGNsYXNzPSJzdWIiPldhbGxzPC9oMz4ke3RibChbIlN1cmZhY2UiLCAiTC9CIiwgIkNwIiwgIlVzZSB3aXRoIl0sIFtbIldpbmR3YXJkIHdhbGwiLCAiQWxsIiwgIjAuOCIsICJxeiJdLCBbIkxlZXdhcmQgd2FsbCIsICIw4oCTMSIsICLiiJIwLjUiLCAicWgiXSwgWyJMZWV3YXJkIHdhbGwiLCAiMiIsICLiiJIwLjMiLCAicWgiXSwgWyJMZWV3YXJkIHdhbGwiLCAi4omlIDQiLCAi4oiSMC4yIiwgInFoIl0sIFsiU2lkZSB3YWxsIiwgIkFsbCIsICLiiJIwLjciLCAicWgiXV0pfQogICAgICA8aDMgY2xhc3M9InN1YiI+Um9vZiwgd2luZCBub3JtYWwgdG8gcmlkZ2UsIM64IOKJpSAxMMKwIMK3IHdpbmR3YXJkIHNsb3BlPC9oMz4ke3RibChbImgvTCBcXCDOuCIsIC4uLldXX0FORy5tYXAoYSA9PiBhICsgIsKwIiksICLiiaUgODDCsCJdLCB3d1Jvd3MubWFwKHIgPT4gWy4uLnIsIHJbMF0uZW5kc1dpdGgoInBvcyIpID8gIjAuMDHOuCAvIDAuOCIgOiAi4oCUIl0pKX0KICAgICAgPGgzIGNsYXNzPSJzdWIiPlJvb2YsIHdpbmQgbm9ybWFsIHRvIHJpZGdlLCDOuCDiiaUgMTDCsCDCtyBsZWV3YXJkIHNsb3BlPC9oMz4ke3RibChbImgvTCBcXCDOuCIsICIxMMKwIiwgIjE1wrAiLCAi4omlIDIwwrAiXSwgSEwubWFwKChyLCBpKSA9PiBbImgvTCDiiaQgIiArIHIsIC4uLkxXW2ldLm1hcCh2ID0+IEYodikpXSkpfQogICAgICA8aDMgY2xhc3M9InN1YiI+Um9vZiwgd2luZCBub3JtYWwgdG8gcmlkZ2UgzrggJmx0OyAxMMKwLCBvciBwYXJhbGxlbCB0byByaWRnZTwvaDM+JHt0YmwoWyJoL0wiLCAiMCDigJMgaC8yIiwgImgvMiDigJMgaCIsICJoIOKAkyAyaCIsICI+IDJoIl0sIFtbIuKJpCAwLjUiLCAi4oiSMC45LCDiiJIwLjE4IiwgIuKIkjAuOSwg4oiSMC4xOCIsICLiiJIwLjUsIOKIkjAuMTgiLCAi4oiSMC4zLCDiiJIwLjE4Il0sIFsi4omlIDEuMCIsICLiiJIxLjMqLCDiiJIwLjE4IiwgIuKIkjAuNywg4oiSMC4xOCIsICLiiJIwLjcsIOKIkjAuMTgiLCAi4oiSMC43LCDiiJIwLjE4Il1dKX0KICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kIj5JbnRlcnBvbGF0ZSBsaW5lYXJseSBiZXR3ZWVuIM64IGFuZCBoL0wgdmFsdWVzLiAqIE1heSBiZSByZWR1Y2VkIHdpdGggdGhlIGFyZWEgb3ZlciB3aGljaCBpdCBhcHBsaWVzIChGaWcuIDI3LjMtMSBub3RlKS4gRm9yIM64IGJldHdlZW4gNjDCsCBhbmQgODDCsCB3aW5kd2FyZCBDcCA9IDAuMDHOuC48L2Rpdj5gKTsKICAgIC8qIEZpZyAyOC4zLTEvMiAqLwogICAgaCArPSBjYXJkKCLZhdi52KfZhdmE2KfYqiBHQ3BmINmE2YTZhdio2KfZhtmKINin2YTZhdmG2K7Zgdi22KkiLCAiRmlncy4gMjguMy0xLCAyOC4zLTIiLCAi2YLZitmFINmF2KzZhdmR2LnYqSAo2YfYqNipIMOXINi22LrYtykg2YTZg9mEINmF2YbYt9mC2KnYjCDZiNin2YTZhdiu2LfYtyDYq9mE2KfYq9mKINin2YTYo9io2LnYp9ivINmE2YTZhdmG2KfYt9mCINmB2Yog2KrYqNmI2YrYqCDYp9mE2YXYqNin2YbZiiDYp9mE2YXZhtiu2YHYttipLiIsCiAgICAgIGA8aDMgY2xhc3M9InN1YiI+TG9hZCBDYXNlIDEgwrcgd2luZCBub3JtYWwgdG8gcmlkZ2U8L2gzPiR7dGJsKFsizrgiLCAuLi5HQ1BGMS56b25lc10sIEdDUEYxLnJvd3MubWFwKChyLCBpKSA9PiBbWyIw4oCTNcKwIiwgIjIwwrAiLCAiMzDCsCIsICI0NcKwIiwgIjkwwrAiXVtpXSwgLi4uci5tYXAodiA9PiBGKHYpKV0pKX0KICAgICAgPGgzIGNsYXNzPSJzdWIiPkxvYWQgQ2FzZSAyIMK3IHdpbmQgcGFyYWxsZWwgdG8gcmlkZ2UgKGFsbCDOuCk8L2gzPiR7dGJsKFsiWm9uZSIsIC4uLkdDUEYyLnpvbmVzXSwgW1siR0NwZiIsIC4uLkdDUEYyLnZhbHMubWFwKHYgPT4gRih2KSldXSl9CiAgICAgIDxoMyBjbGFzcz0ic3ViIj5Mb2FkIENhc2UgMyDCtyB0b3JzaW9uYWwgKEZpZy4gMjguMy0yKTwvaDM+JHt0YmwoWyLOuCIsIC4uLkdDUEYzLnpvbmVzXSwgR0NQRjMucm93cy5tYXAoKHIsIGkpID0+IFtbIjDigJM1wrAiLCAiMjDCsCIsICIzMMKwIiwgIjQ1wrAiLCAiOTDCsCJdW2ldLCAuLi5yLm1hcCh2ID0+IEYodikpXSkpfQogICAgICA8aDMgY2xhc3M9InN1YiI+TG9hZCBDYXNlIDQgwrcgdG9yc2lvbmFsIChGaWcuIDI4LjMtMik8L2gzPiR7dGJsKFsiWm9uZSIsIC4uLkdDUEY0LnpvbmVzXSwgW1siR0NwZiIsIC4uLkdDUEY0LnZhbHMubWFwKHYgPT4gRih2KSldXSl9CiAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZCI+YSA9IG1pbigwLjEgw5cgbGVhc3QgZGltZW5zaW9uLCAwLjRoKSwgbm90IGxlc3MgdGhhbiAwLjA0IMOXIGxlYXN0IGRpbWVuc2lvbiBvciAwLjkgbTsgRSB6b25lcyBzcGFuIDJhLiBJbnRlcnBvbGF0ZSBsaW5lYXJseSBiZXR3ZWVuIM64IHZhbHVlcy48L2Rpdj5gKTsKICAgIC8qIENoIDMwICovCiAgICBjb25zdCBzZWwgPSBDQ1NFVFNbY2NTZWxdOwogICAgaCArPSBjYXJkKCLZhdmG2K3ZhtmK2KfYqiBHQ3Ag2YTZhNiq2YPYs9mK2KfYqiIsICJDaC4gMzAgZmlndXJlcyIsICLYqtiq2LrZitixIEdDcCDZhdi5INin2YTZhdiz2KfYrdipINin2YTZgdi52KfZhNipINi52YTZiSDZhdmC2YrYp9izINmE2YjYutin2LHZitiq2YXZii4g2KfYrtiq2LEg2KfZhNi02YPZhCDZhNi52LHYtiDZhdmG2K3ZhtmK2KfYqtmHINmI2YXYrti32Lcg2YXZhtin2LfZgtmHLiIsCiAgICAgIGA8ZGl2IGNsYXNzPSJzZWciIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJDJkMgZmlndXJlIj4ke09iamVjdC5lbnRyaWVzKENDU0VUUykubWFwKChbaywgdl0pID0+IGA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1jY3JlZj0iJHtrfSIgYXJpYS1wcmVzc2VkPSIke2sgPT09IGNjU2VsfSI+JHt2Lm5hbWUucmVwbGFjZSgvIFwoLipcKS8sICIiKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idml6cm93Ij48ZGl2IGNsYXNzPSJ2aXoiPiR7Y2NLZXkoc2VsLmtleSA9PT0gIjMwLjQtMSIgPyAiMzAuNC0xIiA6IHNlbC5rZXkpfTwvZGl2PjxkaXYgY2xhc3M9InZpeiI+JHtjY0NoYXJ0KHNlbC5zKCksIHNlbC5uYW1lKX08L2Rpdj48L2Rpdj4KICAgICAgJHtzZWwua2V5ID09PSAiMzAuNC0xIiA/IGA8ZGl2IGNsYXNzPSJ2aXoiIHN0eWxlPSJtYXgtd2lkdGg6MzQwcHgiPiR7Y2NLZXkoIjMwLjQtMXciKX08L2Rpdj5gIDogIiJ9CiAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZCI+YSA9IG1pbigwLjEgw5cgbGVhc3QgZGltZW5zaW9uLCAwLjRoKSDiiaUgbWF4KDAuMDQgw5cgbGVhc3QgZGltZW5zaW9uLCAwLjkgbSkgZm9yIGgg4omkIDE4LjMgbTsgYSA9IDAuMSDDlyBsZWFzdCBkaW1lbnNpb24g4omlIDAuOSBtIGZvciBoICZndDsgMTguMyBtLiBXYWxsczogMTAlIHJlZHVjdGlvbiBpbiBHQ3Agd2hlbiDOuCDiiaQgMTDCsCAoRmlnLiAzMC4zLTEgbm90ZSA1KS48L2Rpdj5gKTsKICAgIGggKz0gYDxwIGNsYXNzPSJoaW50Ij7Yp9mE2KzYr9in2YjZhCDZhdmG2YLZiNmE2Kkg2YXZhiBBU0NFL1NFSSA3LTIyINio2KfZhNmI2K3Yr9in2Kog2KfZhNmF2KrYsdmK2KnYjCDZiNin2YTZhdiu2LfYt9in2Kog2YXYqNiz2LfYqSDZiNmF2Y/Yudin2K8g2LHYs9mF2YfYpyDZhNmE2KrZiNi22YrYrS4g2KfYsdis2Lkg2YTZhNmD2YjYryDZhtmB2LPZhyDZhNmE2YXZhNin2K3YuNin2Kog2KfZhNmD2KfZhdmE2KkuPC9wPmA7CiAgICByZXR1cm4gaDsKICB9CiAgZnVuY3Rpb24gbW91bnQoZWwpIHsKICAgIGVsLmlubmVySFRNTCA9IHJlbmRlcigpOwogICAgZWwub25jbGljayA9IGUgPT4geyBjb25zdCBiID0gZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2NyZWZdIik7IGlmICghYikgcmV0dXJuOyBjY1NlbCA9IGIuZGF0YXNldC5jY3JlZjsgbW91bnQoZWwpOyB9OwogIH0KICByZXR1cm4ge21vdW50fTsKfSkoKTsKCgpjb25zdCBJTlRSTz17ZDon2KPYrdmF2KfZhCDYp9mE2LHZitin2K0g2LnZhNmJINin2YTZh9mK2YPZhCDYp9mE2LHYptmK2LPZiiDZhNij2Yog2YXYqNmG2Ykg2YjYqNij2Yog2KfYsdiq2YHYp9i5OiDYtti62YjYtyDYp9mE2K3ZiNin2KbYtyDZiNin2YTYs9mC2YEg2YjZgtmI2Ykg2KfZhNi32YjYp9io2YIg2YHZiiDYp9iq2KzYp9mH2YrZhtiMINmE2KXYr9iu2KfZhNmH2Kcg2YHZiiDYqNix2YbYp9mF2Kwg2KfZhNiq2K3ZhNmK2YQuJyxlOifYt9ix2YrZgtipINmF2KjYs9i32Kkg2YTZhNmH2YrZg9mEINin2YTYsdim2YrYs9mKINmB2Yog2KfZhNmF2KjYp9mG2Yog2KfZhNmF2YbYrtmB2LbYqdiMINmF2YbYp9iz2KjYqSDZhNmE2YfZhtin2KzYsSDZiNin2YTYpdi32KfYsdin2Kog2KfZhNmF2LnYr9mG2YrYqdiMINmI2YfZiiDYqNiv2YrZhCDYudmGINin2YTYt9ix2YrZgtipINin2YTYp9iq2KzYp9mH2YrYqS4nLGM6J9i22LrZiNi3INiq2LXZhdmK2YUg2KfZhNi52YbYp9i12LEg2KfZhNir2KfZhtmI2YrYqSAo2KfZhNmF2K/Yp9iv2KfYqtiMINin2YTYtdin2KzYjCDYp9mE2LLYrNin2KzYjCDYp9mE2YXYq9io2KrYp9iqKTog2KfYrtiq2LEg2KfZhNmF2LPYp9it2Kkg2KfZhNmB2LnYp9mE2Kkg2YTZhNi52YbYtdixINmI2K7YsCDYtti62Lcg2KfZhNmF2YbYt9mC2Kkg2KfZhNiq2Yog2YrZgti5INmB2YrZh9inLid9LFRJUFM9e2Q6Jzx1bCBjbGFzcz0idGlwcyI+PGxpPtmH2LDZhyDYp9mE2LfYsdmK2YLYqSDYqti12YTYrSDYr9in2KbZhdin2YvYjCDZhdmH2YXYpyDZg9in2YYg2KfYsdiq2YHYp9i5INin2YTZhdio2YbZiSDYo9mIINi02YPZhNmHLjwvbGk+PGxpPti52YXZiNiv2KcgcCAoK0dDcGkpINmIIHAgKOKIkkdDcGkpINmK2LTZhdmE2KfZhiDYp9mE2LbYuti3INin2YTYr9in2K7ZhNmK2Iwg2YHYtdmF2ZHZhSDYudmE2Ykg2KfZhNij2LPZiNijINmF2YbZh9mF2KcuPC9saT48bGk+2KfZhNmC2YrZhdipINin2YTZhdmI2KzYqNipINi22LrYtyDZhtit2Ygg2KfZhNiz2LfYrdiMINmI2KfZhNiz2KfZhNio2Kkg2LPYrdioICjYsdmB2Lkg2YTZhNiz2YLZgSkuPC9saT48bGk+2KfZhNix2LPZiNmF2KfYqiDYqti52LHYtiDYp9mE2LbYuti3INin2YTYrtin2LHYrNmKINmB2YLYt9iMINmI2YrZj9i22KfZgSDYpdmE2YrZhyDYp9mE2LbYuti3INin2YTYr9in2K7ZhNmKINmD2YXYpyDZgdmKINin2YTYrNiv2KfZiNmELjwvbGk+PC91bD4nLGU6Jzx1bCBjbGFzcz0idGlwcyI+PGxpPti02LHYtyDYp9mE2KfYs9iq2K7Yr9in2YU6IGgg4omkIDE4LjMg2YXYjCDZiCBoIOKJpCDYo9i12LrYsSDYqNi52K8g2KPZgdmC2Yog2YTZhNmF2KjZhtmJLjwvbGk+PGxpPti62KfZhNio2KfZiyDYo9iz2YfZhCDZhNmE2YfZhtin2KzYsdiMINmI2YLYryDYqtiu2KrZhNmBINmC2YrZhdmH2Kcg2YLZhNmK2YTYp9mLINi52YYg2KfZhNi32LHZitmC2Kkg2KfZhNin2KrYrNin2YfZitipLjwvbGk+PGxpPti12YHZkdinIHAgKCtHQ3BpKSDZiCBwICjiiJJHQ3BpKSDZiti02YXZhNin2YYg2KfZhNi22LrYtyDYp9mE2K/Yp9iu2YTZitiMINmB2LXZhdmR2YUg2LnZhNmJINin2YTYo9iz2YjYoyDZhdmG2YfZhdinLjwvbGk+PGxpPtin2YTZgtmK2YXYqSDYp9mE2YXZiNis2KjYqSDYtti62Lcg2YbYrdmIINin2YTYs9i32K3YjCDZiNin2YTYs9in2YTYqNipINiz2K3YqCAo2LHZgdi5INmE2YTYs9mC2YEpLjwvbGk+PC91bD4nLGM6Jzx1bCBjbGFzcz0idGlwcyI+PGxpPtin2YTZhdiz2KfYrdipINin2YTZgdi52KfZhNipID0g2KfZhNio2K3YsSDDlyDYp9mE2LnYsdi2INin2YTZhdit2YXZkdmE2Iwg2YjZhNinINmK2YLZhCDYp9mE2LnYsdi2INin2YTZhdit2YXZkdmEINi52YYg2KvZhNirINin2YTYqNit2LEuPC9saT48bGk+2KfZhNi22LrYtyDYo9i52YTZiSDYudmG2K8g2KfZhNij2LHZg9in2YYg2YjYp9mE2K3ZiNin2YHYjCDZiNmD2YTZhdinINi12LrYsdiqINin2YTZhdiz2KfYrdipINiy2KfYryDYp9mE2LbYuti3LjwvbGk+PGxpPtin2YTYtti62Lcg2YHZiiDYp9mE2KzYr9mI2YQg2YfZiCDYp9mE2KPYs9mI2KMg2YXZhiDCsUdDcGkg2YXYqNin2LTYsdip2Iwg2YjYqNit2K8g2KPYr9mG2YkgMC43NyBrTi9twrIuPC9saT48bGk+2KfZhNmC2YrZhdipINin2YTZhdmI2KzYqNipINi22LrYtyDZhtit2Ygg2KfZhNiz2LfYrdiMINmI2KfZhNiz2KfZhNio2Kkg2LPYrdioICjYsdmB2Lkg2YTZhNiz2YLZgSkuPC9saT48L3VsPid9Owpjb25zdCBNQVBTPXtJOihIT1NULmRhdGFzZXQubWFwSXx8IiIpLnRyaW0oKSxJSTooSE9TVC5kYXRhc2V0Lm1hcElpfHwiIikudHJpbSgpLElJSTooSE9TVC5kYXRhc2V0Lm1hcElpaXx8IiIpLnRyaW0oKX07CmNvbnN0ICQ9aWQ9PlNSLmdldEVsZW1lbnRCeUlkKGlkKTsKY29uc3QgUk9PVD1TUi5nZXRFbGVtZW50QnlJZCgid2NhbGMiKTsKY29uc3QgbnVtPWlkPT5wYXJzZUZsb2F0KCQoaWQpLnZhbHVlKTsKY29uc3QgZj0oeCxkPTMpPT5OdW1iZXIuaXNGaW5pdGUoeCk/eC50b0ZpeGVkKGQpOiLigJMiOwpjb25zdCBrTj14PT5mKHgvMTAwMCwzKTsKY29uc3QgY2xzPXg9Png8MD8ibmVnIjoicG9zIjsKbGV0IGNhc2VTZWw9MSxhcmVhU2VsPTA7CmNvbnN0IGxpc3Q9aWQ9PiQoaWQpLnZhbHVlLnNwbGl0KC9bLNiMXHNdKy8pLm1hcChwYXJzZUZsb2F0KS5maWx0ZXIoeD0+eD4wKTsKCmZ1bmN0aW9uIHJlYWQoKXsKICBjb25zdCBzPXtyaXNrOiQoInJpc2siKS52YWx1ZSxWOm51bSgiViIpLGV4cDokKCJleHAiKS52YWx1ZSxlbGV2Om51bSgiZWxldiIpfHwwLGtlTW9kZTokKCJrZU9uZSIpLnZhbHVlLAogICAgdG9wbzokKCJ0b3BvIikudmFsdWUsSDpudW0oInRIIiksTGg6bnVtKCJ0TGgiKSx4Om51bSgidHgiKSxzaWRlOiQoInRTaWRlIikudmFsdWUsCiAgICByb29mOiQoInJvb2YiKS52YWx1ZSx0aGV0YTpudW0oInRoZXRhIil8fDAsaGU6bnVtKCJoZSIpLExyOm51bSgiTHIiKSxXOm51bSgiVyIpLGhwOm51bSgiaHAiKXx8MCxvdmVyaGFuZzokKCJvaCIpLnZhbHVlPT09IjEiLAogICAgbGV2ZWxzOmxpc3QoImxldmVscyIpLGVuY2w6JCgiZW5jbCIpLnZhbHVlLGdNb2RlOiQoImdNb2RlIikudmFsdWUsbjE6bnVtKCJuMSIpLGJldGE6bnVtKCJiZXRhIiksYXJlYXM6bGlzdCgiYXJlYXMiKX07CiAgcy5rZT1LZShzLmVsZXYscy5rZU1vZGUpOwogIGNvbnN0IFZpPW51bSgiVmkiKSxBb2c9bnVtKCJBb2ciKTsKICBzLlJpPShzLmVuY2w9PT0icGUiJiZWaT4wJiZBb2c+MCk/TWF0aC5taW4oMSwwLjUqKDErMS9NYXRoLnNxcnQoMStWaS8oNjk1MSpBb2cpKSkpOjE7CiAgcmV0dXJuIHM7Cn0KCmZ1bmN0aW9uIGNvbXB1dGUoKXsKICBjb25zdCBzPXJlYWQoKTsKICAkKCJ0b3BvQm94IikuaGlkZGVuPXMudG9wbz09PSJub25lIjsKICAkKCJmbGV4Qm94IikuaGlkZGVuPXMuZ01vZGUhPT0iZmxleCI7CiAgJCgicmlCb3giKS5oaWRkZW49cy5lbmNsIT09InBlIjsKICAkKCJ0aGV0YSIpLmRpc2FibGVkPXMucm9vZj09PSJmbGF0IjsKICBpZighKHMuVj4wJiZzLmhlPjAmJnMuTHI+MCYmcy5XPjApKXskKCJrcGlzIikuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJlcnIiPtij2K/YrtmEIFYg2YjYo9io2LnYp9ivINin2YTZhdio2YbZiSDYqNmC2YrZhSDYo9mD2KjYsSDZhdmGINi12YHYsS48L2Rpdj4nO3JldHVybjt9CiAgY29uc3QgZz1nZW9tZXRyeShzKTsgcy5oPWcuaDsKICBjb25zdCB0aD10b3BvKGcuaCxzKSwga2g9S3ooZy5oLHMuZXhwKSwgcWg9cXooZy5oLHMpOwogIGNvbnN0IGd1PWd1c3QocyxzLkxyLHMuVyk7CiAgY29uc3QgZ3BpPUdDUElbcy5lbmNsXSpzLlJpOwogIGNvbnN0IHIyNz1jaDI3KHMsZyksIHIyOD1jaDI4KHMsZyksIHIzMD1jaDMwKHMsZyxzLmFyZWFzLmxlbmd0aD9zLmFyZWFzOlsxXSk7CiAgY29uc3QgUj17cyxnLHRoLGtoLHFoLGd1LGdwaSxyMjcscjI4LHIzMH07CgogICQoInN1bWhpbnQiKS50ZXh0Q29udGVudD1gViAke3MuVn0gbS9zIMK3IEV4cC4gJHtzLmV4cH0gwrcgJHtzLnJvb2Z9IM64ICR7Zy50aGV0YX3CsCDCtyAke3MuTHJ9IMOXICR7cy5XfSBtIMK3IGhlICR7cy5oZX0gbSDCtyAke0VOQ0xfTkFNRVtzLmVuY2xdfWA7CiAgJCgia3BpcyIpLmlubmVySFRNTD1bCiAgICBbItmF2KrZiNiz2Lcg2KfYsdiq2YHYp9i5INin2YTYs9mC2YEgaCIsZihnLmgsMiksIm0iKyhnLnRoZXRhPD0xMD8iIChlYXZlLCDOuCDiiaQgMTDCsCkiOiIiKV0sWyJLaCIsZihraCksIlRhYmxlIDI2LjEwLTEiXSxbIkt6dCDCtyBLZSIsZih0aC5LenQpKyIgwrcgIitmKHMua2UpLCIiXSwKICAgIFsicWgiLGtOKHFoKSwia04vbcKyIiwxXSxbIkciLGYoZ3UuRykscy5nTW9kZT09PSJmbGV4Ij8iZmxleGlibGUiOiJyaWdpZCJdLFsiR0NwaSIsIsKxIitmKGdwaSwyKSxFTkNMX05BTUVbcy5lbmNsXSsocy5SaTwxPyIgwrcgUmkgIitmKHMuUmksMik6IiIpXQogIF0ubWFwKChbayx2LHUsaGxdKT0+YDxkaXYgY2xhc3M9ImtwaSR7aGw/IiBobCI6IiJ9Ij48ZGl2IGNsYXNzPSJrIj4ke2t9PC9kaXY+PGRpdiBjbGFzcz0idiI+JHt2fTwvZGl2PjxkaXYgY2xhc3M9InUiPiR7dX08L2Rpdj48L2Rpdj5gKS5qb2luKCIiKTsKCiAgcmVuZGVyUChSKTsgcmVuZGVyRChSKTsgcmVuZGVyRShSKTsgcmVuZGVyQyhSKTsKfQoKZnVuY3Rpb24gcmVuZGVyUCh7cyxnLHRoLGtoLHFoLGd1LGdwaX0pewogICQoImJsZFNrZXRjaCIpLmlubmVySFRNTD1EUi5idWlsZGluZyhzLGcpOwogIGNvbnN0IHpzPVsuLi5uZXcgU2V0KFsuLi5zLmxldmVscyxnLmhlLGcuaCxnLnJpZGdlKyhzLmhwfHwwKV0uZmlsdGVyKHo9Pno+MCkubWFwKHo9Pit6LnRvRml4ZWQoMykpKV0uc29ydCgoYSxiKT0+YS1iKTsKICAkKCJxelRhYmxlIikuaW5uZXJIVE1MPWA8dGFibGU+PHRoZWFkPjx0cj48dGg+eiAobSk8L3RoPjx0aD5LejwvdGg+PHRoPkt6dDwvdGg+PHRoPktlPC90aD48dGg+cXogKGtOL23Csik8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JHsKICAgIHpzLm1hcCh6PT57Y29uc3QgaGg9TWF0aC5hYnMoei1nLmgpPDFlLTY7cmV0dXJuYDx0ciR7aGg/JyBjbGFzcz0iaCInOiIifT48dGQ+JHtmKHosMil9JHtoaD8iIChoKSI6IiJ9PC90ZD48dGQ+JHtmKEt6KHoscy5leHApKX08L3RkPjx0ZD4ke2YodG9wbyh6LHMpLkt6dCl9PC90ZD48dGQ+JHtmKHMua2UpfTwvdGQ+PHRkPiR7a04ocXooeixzKSl9PC90ZD48L3RyPmB9KS5qb2luKCIiKX08L3Rib2R5PjwvdGFibGU+YDsKICBkcmF3Q2hhcnQocyxnKTsKICBjb25zdCBFPUVYUFtzLmV4cF07CiAgbGV0IGg9YDxkaXYgY2xhc3M9ImVxIj5WID0gPGI+JHtmKHMuViwxKX0gbS9zPC9iPiAoUmlzayBDYXRlZ29yeSAke3Mucmlza30pPC9kaXY+CjxkaXYgY2xhc3M9ImVxIj5FeHBvc3VyZSAke3MuZXhwfTogzrEgPSAke0UuYWxwaGF9LCB6PHN1Yj5nPC9zdWI+ID0gJHtFLnpnfSBtIChUYWJsZSAyNi4xMS0xKTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+aCA9ICR7Zy50aGV0YTw9MTA/ImVhdmUgaGVpZ2h0ICjOuCDiiaQgMTDCsCkiOiJlYXZlICsgcmlzZS8yIn0gPSA8Yj4ke2YoZy5oLDIpfSBtPC9iPjsgcmlkZ2UgPSAke2YoZy5yaWRnZSwyKX0gbTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+SzxzdWI+aDwvc3ViPiBmcm9tIFRhYmxlIDI2LjEwLTEgKGxpbmVhciBpbnRlcnBvbGF0aW9uKSA9IDxiPiR7ZihraCl9PC9iPjwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+SzxzdWI+ZTwvc3ViPiA9ICR7cy5rZU1vZGU9PT0ib25lIj8iMS4wMCAocGVybWl0dGVkLCBUYWJsZSAyNi45LTEgbm90ZSAzKSI6YGU8c3VwPuKIkjAuMDAwMTE5w5cke3MuZWxldn08L3N1cD4gPSA8Yj4ke2Yocy5rZSl9PC9iPmB9PC9kaXY+YDsKICBpZihzLnRvcG89PT0ibm9uZSIpaCs9YDxkaXYgY2xhc3M9ImVxIj5LPHN1Yj56dDwvc3ViPiA9IDEuMCAobm8gaXNvbGF0ZWQgaGlsbCwgcmlkZ2Ugb3IgZXNjYXJwbWVudCk8L2Rpdj5gOwogIGVsc2V7CiAgICBoKz1gPGRpdiBjbGFzcz0iZXEiPiR7VE9QT1tzLnRvcG9dLm5hbWV9OiBIL0w8c3ViPmg8L3N1Yj4gPSAke2YodGgucmF0aW8pfSR7dGgucmF0aW8+MC41PyIgPiAwLjUg4oaSIDAuNSwgTDxzdWI+aDwvc3ViPiA9IDJIID0gIitmKHRoLkxoLDEpKyIgbSI6IiJ9PC9kaXY+CjxkaXYgY2xhc3M9ImVxIj5LMSA9ICR7Zih0aC5LMSl9OyBLMiA9IDEg4oiSIHx4fC8ozrxMPHN1Yj5oPC9zdWI+KSA9ICR7Zih0aC5LMil9ICjOvCA9ICR7dGgubXV9KTsgSzMgPSBlPHN1cD7iiJLOs3ovTDxzdWI+aDwvc3ViPjwvc3VwPiA9ICR7Zih0aC5LMyl9ICjOsyA9ICR7dGguZ2FtbWF9KTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+SzxzdWI+enQ8L3N1Yj4oaCkgPSAoMSArIEsxSzJLMynCsiA9IDxiPiR7Zih0aC5LenQpfTwvYj48L2Rpdj5gOwogICAgaWYoIXRoLmFwcGxpZXMpaCs9YDxkaXYgY2xhc3M9Im5vdGUiPsKnMjYuOC4xIG5vdCBtZXQgKEgvTDxzdWI+aDwvc3ViPiDiiaUgMC4yIGFuZCBIIOKJpSAke3MuZXhwPT09IkIiPyIxOCI6IjQuNSJ9IG0pLCBzbyBLPHN1Yj56dDwvc3ViPiA9IDEuMC48L2Rpdj5gOwogIH0KICBoKz1gPGRpdiBjbGFzcz0iZXEiPnE8c3ViPmg8L3N1Yj4gPSAwLjYxMyBLPHN1Yj5oPC9zdWI+SzxzdWI+enQ8L3N1Yj5LPHN1Yj5lPC9zdWI+VsKyID0gMC42MTPDlyR7ZihraCl9w5cke2YodGguS3p0KX3DlyR7ZihzLmtlKX3DlyR7ZihzLlYsMSl9wrIgPSA8Yj4ke2YocWgsMSl9IE4vbcKyPC9iPjwvZGl2Pgo8ZGl2IGNsYXNzPSJub3RlIj5LPHN1Yj5kPC9zdWI+ID0gMC44NSAoVGFibGUgMjYuNi0xLCBidWlsZGluZ3MpIGVudGVycyB0aGUgcHJlc3N1cmUgZXF1YXRpb25zIG9mIENoLiAyNywgMjggYW5kIDMwLjwvZGl2PmA7CiAgJCgic3RlcHMiKS5pbm5lckhUTUw9aDsKICBsZXQgZ3M9YDxkaXYgY2xhc3M9ImVxIj4ke0VOQ0xfTkFNRVtzLmVuY2xdfSDihpIgKEdDPHN1Yj5waTwvc3ViPikgPSDCsSR7ZihHQ1BJW3MuZW5jbF0sMil9JHtzLlJpPDE/YCDDlyBSPHN1Yj5pPC9zdWI+ICR7ZihzLlJpLDMpfSA9IMKxJHtmKGdwaSwzKX1gOiIifTwvZGl2PmA7CiAgaWYocy5lbmNsPT09InBlIiYmcy5SaTwxKWdzKz1gPGRpdiBjbGFzcz0iZXEiPlI8c3ViPmk8L3N1Yj4gPSAwLjUoMSArIDEv4oiaKDEgKyBWPHN1Yj5pPC9zdWI+Lyg2OTUxQTxzdWI+b2c8L3N1Yj4pKSkgPSAke2Yocy5SaSwzKX0gKEVxLiAyNi4xMy0xKTwvZGl2PmA7CiAgZ3MrPWA8ZGl2IGNsYXNzPSJlcSI+esyEID0gbWF4KDAuNmgsIHo8c3ViPm1pbjwvc3ViPikgPSAke2YoZ3UuemIsMil9IG07IEk8c3ViPnrMhDwvc3ViPiA9IGMoMTAvesyEKTxzdXA+MS82PC9zdXA+ID0gJHtmKGd1Lkl6KX08L2Rpdj4KPGRpdiBjbGFzcz0iZXEiPkw8c3ViPnrMhDwvc3ViPiA9IOKEkyh6zIQvMTApPHN1cD7OtcyEPC9zdXA+ID0gJHtmKGd1Lkx6LDEpfSBtOyBRID0gJHtmKGd1LlEpfSAoQiA9ICR7ZihzLkxyLDEpfSBtKTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+RyA9IDAuOTI1KDErMS43ZzxzdWI+UTwvc3ViPkk8c3ViPnrMhDwvc3ViPlEpLygxKzEuN2c8c3ViPnY8L3N1Yj5JPHN1Yj56zIQ8L3N1Yj4pID0gJHtmKGd1LkdyaWdpZCl9JHtzLmdNb2RlPT09IjA4NSI/IiDihpIgRyA9IDxiPjAuODU8L2I+IHVzZWQgKMKnMjYuMTEuMSkiOnMuZ01vZGU9PT0icmlnaWQiPyIg4oaSIDxiPnVzZWQ8L2I+IjoiIn08L2Rpdj5gOwogIGlmKHMuZ01vZGU9PT0iZmxleCIpZ3MrPWA8ZGl2IGNsYXNzPSJlcSI+VsyEPHN1Yj56zIQ8L3N1Yj4gPSBizIQoesyELzEwKTxzdXA+4b6xPC9zdXA+ViA9ICR7ZihndS5WeiwyKX0gbS9zOyBOPHN1Yj4xPC9zdWI+ID0gJHtmKGd1Lk4xKX07IFI8c3ViPm48L3N1Yj4gPSAke2YoZ3UuUm4pfTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+UjxzdWI+aDwvc3ViPiA9ICR7ZihndS5SaCl9LCBSPHN1Yj5CPC9zdWI+ID0gJHtmKGd1LlJCKX0sIFI8c3ViPkw8L3N1Yj4gPSAke2YoZ3UuUkwpfTsgUiA9ICR7ZihndS5SKX07IGc8c3ViPlI8L3N1Yj4gPSAke2YoZ3UuZ1IpfTwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+RzxzdWI+Zjwvc3ViPiA9IDxiPiR7ZihndS5HZil9PC9iPiAoRXEuIDI2LjExLTEwOyBDaC4gMjcgcmVjb21wdXRlcyBwZXIgd2luZCBkaXJlY3Rpb24pPC9kaXY+YDsKICAkKCJnc3RlcHMiKS5pbm5lckhUTUw9Z3M7CiAgY29uc3QgbWs9cy5yaXNrPT09IkkiPyJJIjpzLnJpc2s9PT0iSUkiPyJJSSI6IklJSSI7CiAgJCgibWFwSW1nIikuY2xvc2VzdCgic2VjdGlvbiIpLmhpZGRlbj0hTUFQU1tta107CiAgaWYoTUFQU1tta10mJiQoIm1hcEltZyIpLmRhdGFzZXQuayE9PW1rKXskKCJtYXBFcnIiKS5oaWRkZW49dHJ1ZTskKCJtYXBJbWciKS5oaWRkZW49ZmFsc2U7JCgibWFwSW1nIikuc3JjPU1BUFNbbWtdOyQoIm1hcEltZyIpLmRhdGFzZXQuaz1tazt9CiAgJCgibWFwUmVmIikudGV4dENvbnRlbnQ9bWs9PT0iSSI/IlNCQyAzMDEgRmlnLiAyNi0yQyI6bWs9PT0iSUkiPyJTQkMgMzAxIEZpZy4gMjYtMkEiOiJTQkMgMzAxIEZpZy4gMjYtMkIiOwogICQoIm1hcENhcCIpLnRleHRDb250ZW50PW1rPT09IkkiPyLZgdim2Kkg2KfZhNiu2LfZiNix2KkgSdiMINmB2KrYsdipINiq2YPYsdin2LEgMzAwINiz2YbYqSI6bWs9PT0iSUkiPyLZgdim2Kkg2KfZhNiu2LfZiNix2KkgSUnYjCDZgdiq2LHYqSDYqtmD2LHYp9ixIDcwMCDYs9mG2KkiOiLZgdim2Kkg2KfZhNiu2LfZiNix2KkgSUlJINmIIElW2Iwg2YHYqtix2Kkg2KrZg9ix2KfYsSAxNzAwINiz2YbYqSI7Cn0KCmZ1bmN0aW9uIHBUYWJsZShyb3dzLGxhYmVsKXsKICByZXR1cm4gYDxkaXYgY2xhc3M9InRibCI+PHRhYmxlPjx0aGVhZD48dHI+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPiR7bGFiZWx9PC90aD48dGg+Q3A8L3RoPjx0aD5xwrdLZMK3R8K3Q3A8L3RoPjx0aD5wICgrR0NwaSk8L3RoPjx0aD5wICjiiJJHQ3BpKTwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4kewogICAgcm93cy5tYXAocj0+YDx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+JHtyLnN1cmZ9PC90ZD48dGQ+JHtmKHIuY3ApfTwvdGQ+PHRkPiR7a04oci5leHQpfTwvdGQ+PHRkIGNsYXNzPSIke2NscyhyLnBQb3MpfSI+JHtrTihyLnBQb3MpfTwvdGQ+PHRkIGNsYXNzPSIke2NscyhyLnBOZWcpfSI+JHtrTihyLnBOZWcpfTwvdGQ+PC90cj5gKS5qb2luKCIiKX08L3Rib2R5PjwvdGFibGU+PC9kaXY+YDsKfQpmdW5jdGlvbiByZW5kZXJEKHtzLGcscjI3fSl7CiAgbGV0IGg9IiI7CiAgZm9yKGNvbnN0IGQgb2YgcjI3LmRpcnMpewogICAgaCs9YDxzZWN0aW9uIGNsYXNzPSJjYXJkIj48aDI+JHtkLmtleT09PSJYIj8i2KfZhNix2YrYp9itINi52YXZiNiv2YrYqSDYudmE2Ykg2KfZhNis2YXYp9mE2YjZhiI6Itin2YTYsdmK2KfYrSDZhdmI2KfYstmK2Kkg2YTZhNis2YXYp9mE2YjZhiJ9IDxzcGFuIGNsYXNzPSJyZWYiPiR7ZC5uYW1lfSDCtyBCID0gJHtmKGQuQiwxKX0gbSwgTCA9ICR7ZihkLkwsMSl9IG0gwrcgTC9CID0gJHtmKGQuTEIsMil9IMK3IGgvTCA9ICR7ZihkLnIsMyl9IMK3IEcgPSAke2YoZC5HLDMpfTwvc3Bhbj48L2gyPgo8ZGl2IGNsYXNzPSJ2aXoiPiR7RFIuZDNfMjcocyxnLGQpfTwvZGl2Pgo8ZGl2IGNsYXNzPSJ2aXpyb3ciPjxkaXYgY2xhc3M9InZpeiI+JHtEUi5wbGFuMjcocyxnLGQpfTwvZGl2PjxkaXYgY2xhc3M9InZpeiI+JHtEUi5zZWN0aW9uMjcocyxnLGQpfTwvZGl2PjwvZGl2Pgoke3BUYWJsZShkLndhbGxzLm1hcCh3PT4oey4uLncsc3VyZjp3LnN1cmYrKHcucT09PSJxeiI/IiAoYXQgeiA9IGgpIjoiIil9KSksIldhbGxzIil9CjxoMyBjbGFzcz0ic3ViIj7Yp9mE2LPZgtmBIDxzcGFuIGNsYXNzPSJyZWYiPkZpZy4gMjcuMy0xJHtkLm5vcm1hbCYmZy50aGV0YT49MTA/IiI6IiDCtyBkaXN0YW5jZSBmcm9tIHdpbmR3YXJkIGVkZ2UifTwvc3Bhbj48L2gzPgoke3BUYWJsZShkLnJvb2YsIlJvb2YiKX0KPGgzIGNsYXNzPSJzdWIiPtmC2YjZiSDYp9mE2LfZiNin2KjZgiAo2KfZhNit2KfYpti3INin2YTZhdmI2KfYrNmHICsg2KfZhNiu2YTZgdmKKSA8c3BhbiBjbGFzcz0icmVmIj5rTiDCtyBpbnRlcm5hbCBwcmVzc3VyZSBjYW5jZWxzPC9zcGFuPjwvaDM+CjxkaXYgY2xhc3M9InRibCI+PHRhYmxlPjx0aGVhZD48dHI+PHRoPnogKG0pPC90aD48dGg+dHJpYi4gKG0pPC90aD48dGg+cDxzdWI+dzwvc3ViPjwvdGg+PHRoPnA8c3ViPkw8L3N1Yj48L3RoPjx0aD5GIChrTik8L3RoPjx0aD5DYXNlIDI6IDAuNzVGPC90aD48dGg+TTxzdWI+VDwvc3ViPiAoa07Ct20pPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PiR7CiAgZC5yb3dzLm1hcCh4PT5gPHRyPjx0ZD4ke2YoeC56LDIpfTwvdGQ+PHRkPiR7Zih4LnRyaWIsMil9PC90ZD48dGQ+JHtrTih4LnB3KX08L3RkPjx0ZD4ke2tOKHgucGwpfTwvdGQ+PHRkPiR7Zih4LkYsMSl9PC90ZD48dGQ+JHtmKDAuNzUqeC5GLDEpfTwvdGQ+PHRkPsKxJHtmKDAuNzUqeC5GKjAuMTUqZC5CLDEpfTwvdGQ+PC90cj5gKS5qb2luKCIiKX0KICAke2Qucm9vZkY/YDx0cj48dGQgY29sc3Bhbj0iNCIgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+Um9vZiAoJHtkLnJvb2ZOb3RlfSk8L3RkPjx0ZD4ke2YoZC5yb29mRiwxKX08L3RkPjx0ZD4ke2YoMC43NSpkLnJvb2ZGLDEpfTwvdGQ+PHRkPsKxJHtmKDAuNzUqZC5yb29mRiowLjE1KmQuQiwxKX08L3RkPjwvdHI+YDoiIn0KICAke2QucGFyRj9gPHRyPjx0ZCBjb2xzcGFuPSI0IiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5QYXJhcGV0IChHQ3BuICsxLjUgLyDiiJIxLjApPC90ZD48dGQ+JHtmKGQucGFyRiwxKX08L3RkPjx0ZD4ke2YoMC43NSpkLnBhckYsMSl9PC90ZD48dGQ+wrEke2YoMC43NSpkLnBhckYqMC4xNSpkLkIsMSl9PC90ZD48L3RyPmA6IiJ9CiAgPHRyIGNsYXNzPSJoIj48dGQgY29sc3Bhbj0iNCIgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+QmFzZSBzaGVhciBWIChDYXNlIDEpPC90ZD48dGQ+JHtmKGQuViwxKX08L3RkPjx0ZD4ke2YoMC43NSpkLlYsMSl9PC90ZD48dGQ+ZSA9IMKxJHtmKDAuMTUqZC5CLDIpfSBtPC90ZD48L3RyPgo8L3Rib2R5PjwvdGFibGU+PC9kaXY+CjxkaXYgY2xhc3M9ImxlZ2VuZCI+PHNwYW4gY2xhc3M9InBpbGwgJHtkLlY+PWQuVm1pbj8ib2siOiJubyJ9Ij4ke2QuVj49ZC5WbWluPyJPSyI6Ik1JTiBHT1ZFUk5TIn08L3NwYW4+INin2YTYrdivINin2YTYo9iv2YbZiSDCpzI3LjEuNTogMC43NyBrTi9twrIg2YTZhNit2YjYp9im2LcgKyAwLjM4IGtOL23CsiDZhNmE2LPZgtmBINin2YTZhdiz2YLYtyA9ICR7ZihkLlZtaW4sMSl9IGtOLiAke2Qucm9vZk5vdGUmJiFkLnJvb2ZGP2Qucm9vZk5vdGUrIi4iOiIifTwvZGl2Pgo8L3NlY3Rpb24+YDsKICB9CiAgY29uc3QgWD1yMjcuZGlyc1swXSxZPXIyNy5kaXJzWzFdOwogIGgrPWA8c2VjdGlvbiBjbGFzcz0iY2FyZCI+PGgyPtit2KfZhNin2Kog2KfZhNiq2K3ZhdmK2YQgPHNwYW4gY2xhc3M9InJlZiI+RmlnLiAyNy4zLTggwrcgYmFzZSBsZXZlbCB0b3RhbHM8L3NwYW4+PC9oMj48ZGl2IGNsYXNzPSJ0YmwiPjx0YWJsZT48dGhlYWQ+PHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5DYXNlPC90aD48dGg+VjxzdWI+eDwvc3ViPiAoa04pPC90aD48dGg+VjxzdWI+eTwvc3ViPiAoa04pPC90aD48dGg+TTxzdWI+VDwvc3ViPiAoa07Ct20pPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pgo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjEgwrcgZnVsbCwgZWFjaCBheGlzIHNlcGFyYXRlbHk8L3RkPjx0ZD4ke2YoWC5WLDEpfTwvdGQ+PHRkPiR7ZihZLlYsMSl9PC90ZD48dGQ+MDwvdGQ+PC90cj4KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij4yIMK3IDAuNzUsIGVhY2ggYXhpcyArIHRvcnNpb24gZSA9IMKxMC4xNUI8L3RkPjx0ZD4ke2YoMC43NSpYLlYsMSl9PC90ZD48dGQ+JHtmKDAuNzUqWS5WLDEpfTwvdGQ+PHRkPsKxJHtmKDAuNzUqWC5WKjAuMTUqWC5CLDEpfSAvIMKxJHtmKDAuNzUqWS5WKjAuMTUqWS5CLDEpfTwvdGQ+PC90cj4KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij4zIMK3IDAuNzUgYm90aCBheGVzIHRvZ2V0aGVyPC90ZD48dGQ+JHtmKDAuNzUqWC5WLDEpfTwvdGQ+PHRkPiR7ZigwLjc1KlkuViwxKX08L3RkPjx0ZD4wPC90ZD48L3RyPgo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjQgwrcgMC41NjMgYm90aCBheGVzICsgdG9yc2lvbjwvdGQ+PHRkPiR7ZigwLjU2MypYLlYsMSl9PC90ZD48dGQ+JHtmKDAuNTYzKlkuViwxKX08L3RkPjx0ZD7CsSR7ZigwLjU2MyooWC5WKjAuMTUqWC5CK1kuViowLjE1KlkuQiksMSl9PC90ZD48L3RyPgo8L3Rib2R5PjwvdGFibGU+PC9kaXY+JHtyMjcucHA/YDxkaXYgY2xhc3M9ImxlZ2VuZCI+UGFyYXBldCAoRXEuIDI3LjMtMyk6IHdpbmR3YXJkIHA8c3ViPnA8L3N1Yj4gPSAke2tOKHIyNy5wcC53dyl9IGtOL23CsiwgbGVld2FyZCBwPHN1Yj5wPC9zdWI+ID0gJHtrTihyMjcucHAubHcpfSBrTi9twrIgKHE8c3ViPnA8L3N1Yj4gYXQgJHtmKGcucmlkZ2Urcy5ocCwyKX0gbSkuPC9kaXY+YDoiIn0KPGRpdiBjbGFzcz0ibGVnZW5kIj5Sb29mIG92ZXJoYW5nICjCpzI3LjMuMyk6IGJvdHRvbSBzdXJmYWNlIG9mIHdpbmR3YXJkIG92ZXJoYW5nIENwID0gMC44IOKGkiAke2tOKHIyNy5xaCowLjg1KlguRyowLjgpfSBrTi9twrIgdXB3YXJkLCBjb21iaW5lZCB3aXRoIHJvb2YgdG9wIHByZXNzdXJlLjwvZGl2Pjwvc2VjdGlvbj5gOwogICQoInBhbmVEIikuaW5uZXJIVE1MPWA8cCBjbGFzcz0iaW50cm8iPiR7SU5UUk8uZH08L3A+JHtUSVBTLmR9YCtoOwp9CmZ1bmN0aW9uIHJlbmRlckUoe3MsZyxyMjh9KXsKICBpZighcjI4Lm9rKXskKCJwYW5lRSIpLmlubmVySFRNTD1gPHAgY2xhc3M9ImludHJvIj4ke0lOVFJPLmV9PC9wPiR7VElQUy5lfTxkaXYgY2xhc3M9InBlbmRpbmciPjxzdHJvbmc+2YTYpyDZitmG2LfYqNmCINin2YTZgdi12YQgMjg8L3N0cm9uZz48c3Bhbj7Yp9mE2YXYqNmG2Ykg2YXZhtiu2YHYtiDZgdmC2Lcg2KXYsNinINmD2KfZhiBoIOKJpCAxOC4zIG0g2YggaCDiiaQg2KPYtdi62LEg2KjYudivINij2YHZgtmKLiDZh9mG2KcgaCA9ICR7ZihnLmgsMil9IG0g2YjYo9i12LrYsSDYqNi52K8gPSAke2YoZy5sZWFzdCwxKX0gbS4g2KfYs9iq2K7Yr9mFINin2YTYt9ix2YrZgtipINin2YTYp9iq2KzYp9mH2YrYqS48L3NwYW4+PC9kaXY+YDtyZXR1cm47fQogIGNvbnN0IHRiPShyb3dzLHRpdGxlKT0+YDxoMyBjbGFzcz0ic3ViIj4ke3RpdGxlfTwvaDM+PGRpdiBjbGFzcz0idGJsIj48dGFibGU+PHRoZWFkPjx0cj48dGggc3R5bGU9InRleHQtYWxpZ246bGVmdCI+Wm9uZTwvdGg+JHtyb3dzLm1hcChyPT5gPHRoPiR7ci56b25lfTwvdGg+YCkuam9pbigiIil9PC90cj48L3RoZWFkPjx0Ym9keT4KPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5HQ3BmPC90ZD4ke3Jvd3MubWFwKHI9PmA8dGQ+JHtmKHIuZ2MsMyl9PC90ZD5gKS5qb2luKCIiKX08L3RyPgo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPnAsICtHQ3BpPC90ZD4ke3Jvd3MubWFwKHI9PmA8dGQgY2xhc3M9IiR7Y2xzKHIucFBvcyl9Ij4ke2tOKHIucFBvcyl9PC90ZD5gKS5qb2luKCIiKX08L3RyPgo8dHI+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPnAsIOKIkkdDcGk8L3RkPiR7cm93cy5tYXAocj0+YDx0ZCBjbGFzcz0iJHtjbHMoci5wTmVnKX0iPiR7a04oci5wTmVnKX08L3RkPmApLmpvaW4oIiIpfTwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PmA7CiAgbGV0IGg9YDxzZWN0aW9uIGNsYXNzPSJjYXJkIj48aDI+2LfYsdmK2YLYqSDYp9mE2LrZhNin2YEg2YTZhNmF2KjYp9mG2Yog2KfZhNmF2YbYrtmB2LbYqSA8c3BhbiBjbGFzcz0icmVmIj5FcS4gMjguMy0xIMK3IHAgPSBxPHN1Yj5oPC9zdWI+SzxzdWI+ZDwvc3ViPlsoR0M8c3ViPnBmPC9zdWI+KSDiiJIgKEdDPHN1Yj5waTwvc3ViPildIMK3IGtOL23Csjwvc3Bhbj48L2gyPgo8ZGl2IGNsYXNzPSJjYWxjIj48ZGl2IGNsYXNzPSJlcSI+SzxzdWI+aDwvc3ViPiA9ICR7ZihyMjgua2gpfSR7cy5leHA9PT0iQiImJmcuaDw5LjE/IiAoVGFibGUgMjYuMTAtMSBmb290bm90ZTogMC43MCBmb3IgQ2guIDI4LCBFeHAuIEIsIHogJmx0OyA5LjEgbSkiOiIifTsgcTxzdWI+aDwvc3ViPiA9IDxiPiR7ZihyMjgucWgsMSl9IE4vbcKyPC9iPjsgzrggPSAke2YoZy50aGV0YSwyKX3CsDwvZGl2Pgo8ZGl2IGNsYXNzPSJlcSI+YSA9IG1heChtaW4oMC4xw5cke2YoZy5sZWFzdCwxKX0sIDAuNMOXJHtmKGcuaCwyKX0pLCAwLjA0w5cke2YoZy5sZWFzdCwxKX0sIDAuOSkke2cudGhldGE8PTcmJmcubGVhc3Q+OTA/IiDiiaQgMC44aCI6IiJ9ID0gPGI+JHtmKHIyOC5hLDIpfSBtPC9iPjsgZW5kIHpvbmUgd2lkdGggMmEgPSAke2YoMipyMjguYSwyKX0gbTwvZGl2Pgo8ZGl2IGNsYXNzPSJub3RlIj5OZWdhdGl2ZSBab25lIDIvMkUgYXBwbGllcyBvdmVyIG1pbigwLjUgw5cgYnVpbGRpbmcgZGltZW5zaW9uLCAyLjVoPHN1Yj5lPC9zdWI+KSBmcm9tIHRoZSB3aW5kd2FyZCBlZGdlOiAke2YocjI4LnoybGVuLlgsMil9IG0gKHdpbmQg4p+CIHJpZGdlKSwgJHtmKHIyOC56Mmxlbi5ZLDIpfSBtICh3aW5kIOKIpSByaWRnZSk7IHRoZSByZXN0IG9mIFpvbmUgMi8yRSB1c2VzIFpvbmUgMy8zRSB2YWx1ZXMuPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9InNlZyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkxvYWQgY2FzZSI+JHtbMSwyLDMsNF0ubWFwKGM9PmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYXNlPSIke2N9IiBhcmlhLXByZXNzZWQ9IiR7Yz09PWNhc2VTZWx9Ij5Mb2FkIENhc2UgJHtjfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2Pgo8ZGl2IGNsYXNzPSJ2aXoiPiR7RFIuZDNfMjgocyxnLHIyOCxjYXNlU2VsKX08L2Rpdj4KJHt0YihyMjguY2FzZTEsIkxvYWQgQ2FzZSAxIMK3IHdpbmQgbm9ybWFsIHRvIHJpZGdlIChGaWcuIDI4LjMtMSkiKX0KJHt0YihyMjguY2FzZTIsIkxvYWQgQ2FzZSAyIMK3IHdpbmQgcGFyYWxsZWwgdG8gcmlkZ2UgKEZpZy4gMjguMy0xKSIpfQoke3RiKHIyOC5jYXNlMywiTG9hZCBDYXNlIDMgwrcgdG9yc2lvbmFsIHpvbmVzIChGaWcuIDI4LjMtMiksIG90aGVyIHpvbmVzIGFzIENhc2UgMSIpfQoke3RiKHIyOC5jYXNlNCwiTG9hZCBDYXNlIDQgwrcgdG9yc2lvbmFsIHpvbmVzIChGaWcuIDI4LjMtMiksIG90aGVyIHpvbmVzIGFzIENhc2UgMiIpfQo8ZGl2IGNsYXNzPSJsZWdlbmQiPtmD2YQg2LHZg9mGINmF2YYg2KPYsdmD2KfZhiDYp9mE2YXYqNmG2Ykg2YrZj9i52KfZhdmEINmD2LHZg9mGINmF2YjYp9is2Ycg2YTZhNix2YrYp9itINio2KfZhNiq2YbYp9mI2KggKDgg2KPZhtmF2KfYtykuINin2YTYrdin2YTYp9iqINin2YTYp9mE2KrZiNin2KbZitipINi62YrYsSDZhdi32YTZiNio2Kkg2YTZhdio2KfZhtmKINin2YTYt9in2KjZgiDYp9mE2YjYp9it2K8g2KjYp9ix2KrZgdin2LkgaCDiiaQgOS4xIG3YjCDZiNmE2YTZhdio2KfZhtmKINin2YTYrtmB2YrZgdipINij2Ygg2LDYp9iqINin2YTYo9iz2YLZgSDYp9mE2YXYsdmG2Kkg2K3YqtmJINi32KfYqNmC2YrZhiAowqcyOC4zLjIpLiR7cjI4LnBwP2AgUGFyYXBldDogcDxzdWI+cDwvc3ViPiA9ICR7a04ocjI4LnBwLnd3KX0gLyAke2tOKHIyOC5wcC5sdyl9IGtOL23Csi5gOiIifSBPdmVyaGFuZyBib3R0b206IEdDcCA9IDAuNyDihpIgJHtrTihyMjgucWgqMC44NSowLjcpfSBrTi9twrIuPC9kaXY+PC9zZWN0aW9uPmA7CiAgJCgicGFuZUUiKS5pbm5lckhUTUw9YDxwIGNsYXNzPSJpbnRybyI+JHtJTlRSTy5lfTwvcD4ke1RJUFMuZX1gK2g7Cn0KZnVuY3Rpb24gcmVuZGVyQyh7cyxnLHIzMH0pewogIGNvbnN0IHpvbmVzPXIzMC5yb3dzLmxlbmd0aD9yMzAucm93c1swXS5pdGVtcy5tYXAoaT0+aS56b25lKTpbXTsKICBsZXQgaD1gPHNlY3Rpb24gY2xhc3M9ImNhcmQiPjxoMj4ke3IzMC5sb3c/Itin2YTYqtmD2LPZitin2Kogwrcg2YXYqNmG2YkgaCDiiaQgMTguMyBtIjoi2KfZhNiq2YPYs9mK2KfYqiDCtyDZhdio2YbZiSBoID4gMTguMyBtIn0gPHNwYW4gY2xhc3M9InJlZiI+JHtyMzAubG93PyJFcS4gMzAuMy0xIMK3IEZpZ3MuIDMwLjMtMSwgIityMzAuZmlnOiJFcS4gMzAuNC0xIMK3IEZpZy4gMzAuNC0xIn0gwrcgSzxzdWI+ZDwvc3ViPiA9IDAuODU8L3NwYW4+PC9oMj4KPGRpdiBjbGFzcz0iY2FsYyI+PGRpdiBjbGFzcz0iZXEiPnE8c3ViPmg8L3N1Yj4gPSA8Yj4ke2YocjMwLnFoLDEpfSBOL23CsjwvYj47IChHQzxzdWI+cGk8L3N1Yj4pID0gwrEke2YocjMwLmdwaSwzKX07IGVkZ2UgZGlzdGFuY2UgYSA9IDxiPiR7ZihyMzAuYSwyKX0gbTwvYj48L2Rpdj4KJHtyMzAubm90ZXMubWFwKG49PmA8ZGl2IGNsYXNzPSJub3RlIj4ke259PC9kaXY+YCkuam9pbigiIil9PC9kaXY+CjxkaXYgY2xhc3M9InNlZyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IkVmZmVjdGl2ZSBhcmVhIj4ke3IzMC5yb3dzLm1hcCgocixpKT0+YDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWFyZWE9IiR7aX0iIGFyaWEtcHJlc3NlZD0iJHtpPT09TWF0aC5taW4oYXJlYVNlbCxyMzAucm93cy5sZW5ndGgtMSl9Ij5BID0gJHtmKHIuQSwxKX0gbcKyPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CjxkaXYgY2xhc3M9InZpeiI+JHtEUi5jYyhzLGcscjMwLE1hdGgubWluKGFyZWFTZWwscjMwLnJvd3MubGVuZ3RoLTEpKX08L2Rpdj4KPGgzIGNsYXNzPSJzdWIiPkdDcCDZiNin2YTYtti62Lcg2KfZhNiq2LXZhdmK2YXZiiAoa04vbcKyKSDZhNmD2YQg2YXYs9in2K3YqSDZgdi52KfZhNipIMK3INin2YTYo9mD2KvYsSDYrdix2KzYp9mLINmF2YYgwrFHQ3Bp2Iwg2YjYp9mE2K3YryDYp9mE2KPYr9mG2YkgMC43NyBrTi9twrI8L2gzPgo8ZGl2IGNsYXNzPSJ0YmwiPjx0YWJsZT48dGhlYWQ+PHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij5ab25lPC90aD4ke3IzMC5yb3dzLm1hcChyPT5gPHRoIGNvbHNwYW49IjIiPkEgPSAke2Yoci5BLDEpfSBtwrI8L3RoPmApLmpvaW4oIiIpfTwvdHI+Cjx0cj48dGg+PC90aD4ke3IzMC5yb3dzLm1hcCgoKT0+YDx0aD5HQ3A8L3RoPjx0aD5wPC90aD5gKS5qb2luKCIiKX08L3RyPjwvdGhlYWQ+PHRib2R5PiR7CiAgem9uZXMubWFwKCh6LGspPT5gPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij4ke3p9PC90ZD4ke3IzMC5yb3dzLm1hcChyPT57Y29uc3QgaT1yLml0ZW1zW2tdO3JldHVybmA8dGQ+JHtmKGkuZ2MsMyl9PC90ZD48dGQgY2xhc3M9IiR7Y2xzKGkuZGVzKX0iPiR7a04oaS5kZXMpfTwvdGQ+YH0pLmpvaW4oIiIpfTwvdHI+YCkuam9pbigiIil9PC90Ym9keT48L3RhYmxlPjwvZGl2PmA7CiAgaWYoIXIzMC5sb3cmJnIzMC53YWxsUHJvZmlsZSloKz1gPGgzIGNsYXNzPSJzdWIiPtin2YTYtti62Lcg2KfZhNmF2YjYrNioINi52YTZiSDYp9mE2K3Yp9im2Lcg2YXYuSDYp9mE2KfYsdiq2YHYp9i5IChxPHN1Yj56PC9zdWI+KSDCtyBBID0gJHtmKHIzMC5yb3dzWzBdLkEsMSl9IG3CsjwvaDM+PGRpdiBjbGFzcz0idGJsIj48dGFibGU+PHRoZWFkPjx0cj48dGg+eiAobSk8L3RoPjx0aD5xeiAoa04vbcKyKTwvdGg+PHRoPnAgPSBxektkKEdDcCkgKyBxaEtkKEdDcGkpPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PiR7cjMwLndhbGxQcm9maWxlLm1hcCh3PT5gPHRyPjx0ZD4ke2Yody56LDIpfTwvdGQ+PHRkPiR7a04ody5xKX08L3RkPjx0ZCBjbGFzcz0icG9zIj4ke2tOKE1hdGgubWF4KHcucCw3NzApKX08L3RkPjwvdHI+YCkuam9pbigiIil9PC90Ym9keT48L3RhYmxlPjwvZGl2PmA7CiAgaCs9YDxkaXYgY2xhc3M9ImxlZ2VuZCI+2KfZhNmF2YbYp9i32YI6IDQgPSDZiNiz2Lcg2KfZhNit2KfYpti32IwgNSA9INij2LfYsdin2YEg2KfZhNit2KfYpti3INio2LnYsdi2IGEuICR7cjMwLmxvdyYmcjMwLmZpZz09PSIzMC4zLTJBIj8i2KfZhNiz2YLZgTogMyA9INin2YTYo9ix2YPYp9mG2IwgMiA9INin2YTYtNix2YrYtyDYp9mE2YXYrdmK2LfZitiMIDEgPSDYp9mE2LTYsdmK2Lcg2KfZhNiq2KfZhNmK2IwgMeKAsiA9INin2YTZiNiz2LcgKEZpZy4gMzAuMy0yQSkuIjoi2KfZhNiz2YLZgTogMyA9INin2YTYo9ix2YPYp9mG2IwgMiA9INin2YTYrdmI2KfZgdiMIDEgPSDYp9mE2YjYs9i3ICjYp9mG2LjYsSDYtNmD2YQg2KfZhNmD2YjYryDZhNij2KjYudin2K8g2KfZhNmF2YbYp9i32YIpLiJ9PC9kaXY+PC9zZWN0aW9uPmA7CiAgJCgicGFuZUMiKS5pbm5lckhUTUw9YDxwIGNsYXNzPSJpbnRybyI+JHtJTlRSTy5jfTwvcD4ke1RJUFMuY31gK2g7Cn0KCmZ1bmN0aW9uIGRyYXdDaGFydChzLGcpewogIGNvbnN0IFc9NTIwLEg9MzAwLHBsPTQ4LHByPTE2LHB0PTE0LHBiPTM2OwogIGNvbnN0IHpNYXg9TWF0aC5tYXgoZy5yaWRnZSsocy5ocHx8MCksLi4ucy5sZXZlbHMsMSkqMS4xNTsKICBjb25zdCBwdHM9W107Zm9yKGxldCBpPTA7aTw9NjA7aSsrKXtjb25zdCB6PXpNYXgqaS82MDtwdHMucHVzaChbcXooeixzKS8xMDAwLHpdKTt9CiAgY29uc3QgcU1heD1NYXRoLm1heCguLi5wdHMubWFwKHA9PnBbMF0pKSoxLjEyOwogIGNvbnN0IFg9cT0+cGwrKFctcGwtcHIpKnEvcU1heCxZPXo9PkgtcGItKEgtcHQtcGIpKnovek1heDsKICBjb25zdCBuaWNlPShtLG4pPT57Y29uc3Qgcj1tL24scD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nMTAocikpKTtyZXR1cm4gWzEsMiwyLjUsNSwxMF0uZmluZChrPT5rKnA+PXIpKnA7fTsKICBjb25zdCBxcz1uaWNlKHFNYXgsNSksenM9bmljZSh6TWF4LDUpOwogIGxldCBvPSIiOwogIGZvcihsZXQgcT0wO3E8PXFNYXgrMWUtOTtxKz1xcylvKz1gPGxpbmUgeDE9IiR7WChxKX0iIHgyPSIke1gocSl9IiB5MT0iJHtwdH0iIHkyPSIke0gtcGJ9IiBzdHJva2U9InZhcigtLWxpbmUpIi8+PHRleHQgeD0iJHtYKHEpfSIgeT0iJHtILXBiKzE2fSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+JHsrcS50b0ZpeGVkKDIpfTwvdGV4dD5gOwogIGZvcihsZXQgej0wO3o8PXpNYXgrMWUtOTt6Kz16cylvKz1gPGxpbmUgeDE9IiR7cGx9IiB4Mj0iJHtXLXByfSIgeTE9IiR7WSh6KX0iIHkyPSIke1koeil9IiBzdHJva2U9InZhcigtLWxpbmUpIi8+PHRleHQgeD0iJHtwbC02fSIgeT0iJHtZKHopKzR9IiB0ZXh0LWFuY2hvcj0iZW5kIj4keyt6LnRvRml4ZWQoMSl9PC90ZXh0PmA7CiAgY29uc3QgcGF0aD1wdHMubWFwKChwLGkpPT4oaT8iTCI6Ik0iKStYKHBbMF0pLnRvRml4ZWQoMSkrIiwiK1kocFsxXSkudG9GaXhlZCgxKSkuam9pbigiIik7CiAgbys9YDxwYXRoIGQ9IiR7cGF0aH1MJHtYKDApfSwke1koek1heCl9TCR7WCgwKX0sJHtZKDApfVoiIGZpbGw9InZhcigtLWNoYXJ0LWZpbGwpIi8+PHBhdGggZD0iJHtwYXRofSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ2YXIoLS1hY2NlbnQpIiBzdHJva2Utd2lkdGg9IjIiLz5gOwogIGNvbnN0IHFoPXF6KGcuaCxzKS8xMDAwOwogIG8rPWA8bGluZSB4MT0iJHtwbH0iIHgyPSIke1gocWgpfSIgeTE9IiR7WShnLmgpfSIgeTI9IiR7WShnLmgpfSIgc3Ryb2tlPSJ2YXIoLS1pbmspIiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz48Y2lyY2xlIGN4PSIke1gocWgpfSIgY3k9IiR7WShnLmgpfSIgcj0iNCIgZmlsbD0idmFyKC0taW5rKSIvPmA7CiAgbys9YDx0ZXh0IHg9IiR7TWF0aC5taW4oWChxaCkrOCxXLXByLTExMCl9IiB5PSIke1koZy5oKS04fSIgc3R5bGU9ImZpbGw6dmFyKC0taW5rKSI+cWggPSAke3FoLnRvRml4ZWQoMyl9PC90ZXh0PmA7CiAgbys9YDx0ZXh0IHg9IiR7KHBsK1ctcHIpLzJ9IiB5PSIke0gtNH0iIHRleHQtYW5jaG9yPSJtaWRkbGUiPnF6IChrTi9twrIpPC90ZXh0Pjx0ZXh0IHg9IjEyIiB5PSIke3B0KzR9Ij56IChtKTwvdGV4dD5gOwogICQoInF6Q2hhcnQiKS5pbm5lckhUTUw9YDxzdmcgdmlld0JveD0iMCAwICR7V30gJHtIfSIgd2lkdGg9IjEwMCUiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iVmVsb2NpdHkgcHJlc3N1cmUgcHJvZmlsZSIgc3R5bGU9ImRpcmVjdGlvbjpsdHI7bWF4LXdpZHRoOjEwMCUiPiR7b308L3N2Zz5gOwp9CgoKJCgiZiIpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iixjb21wdXRlKTsKJCgiZiIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsY29tcHV0ZSk7ClJPT1QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCBiPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNhc2VdLFtkYXRhLWFyZWFdIik7aWYoIWIpcmV0dXJuOwogIGlmKGIuZGF0YXNldC5jYXNlKWNhc2VTZWw9K2IuZGF0YXNldC5jYXNlO2Vsc2UgYXJlYVNlbD0rYi5kYXRhc2V0LmFyZWE7Y29tcHV0ZSgpO30pOwokKCJmIikuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixlPT5lLnByZXZlbnREZWZhdWx0KCkpOwokKCJ0YWJzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCBiPWUudGFyZ2V0LmNsb3Nlc3QoImJ1dHRvbiIpO2lmKCFiKXJldHVybjsKICAkKCJ0YWJzIikucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uIikuZm9yRWFjaCh4PT54LnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIseD09PWIpKTsKICBST09ULnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXBhbmVdIikuZm9yRWFjaChwPT5wLmhpZGRlbj1wLmRhdGFzZXQucGFuZSE9PWIuZGF0YXNldC50KTt9KTsKUk9PVC5xdWVyeVNlbGVjdG9yQWxsKCIucmFpbCAucm93IGxhYmVsIikuZm9yRWFjaChsPT5sLnRpdGxlPWwudGV4dENvbnRlbnQudHJpbSgpKTsKY29uc3QgUkVGTUFQPXtyaXNrOiJyZi12IixWOiJyZi12IixleHA6InJmLWV4cCIsZWxldjoicmYta2UiLGtlT25lOiJyZi1rZSIsdG9wbzoicmYta3p0Iix0SDoicmYta3p0Iix0TGg6InJmLWt6dCIsdHg6InJmLWt6dCIsdFNpZGU6InJmLWt6dCIsCiAgZW5jbDoicmYtZ2NwaSIsVmk6InJmLWdjcGkiLEFvZzoicmYtZ2NwaSIsZ01vZGU6InJmLWciLG4xOiJyZi1nIixiZXRhOiJyZi1nIixhcmVhczoicmYtY2MiLAogIHJvb2Y6InJmLWNwIix0aGV0YToicmYtY3AiLGhlOiJyZi1nZW8iLExyOiJyZi1nZW8iLFc6InJmLWdlbyIsaHA6InJmLWdlbyIsb2g6InJmLWdlbyIsbGV2ZWxzOiJyZi1reiJ9OwpST09ULnF1ZXJ5U2VsZWN0b3JBbGwoIi5yYWlsIC5yb3ciKS5mb3JFYWNoKHI9Pntjb25zdCBjPXIucXVlcnlTZWxlY3RvcigiaW5wdXQsc2VsZWN0Iiksaz1jJiZjLmlkLnJlcGxhY2UoL153Yy0vLCIiKTtpZighY3x8IVJFRk1BUFtrXSlyZXR1cm47CiAgY29uc3QgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtiLnR5cGU9ImJ1dHRvbiI7Yi5jbGFzc05hbWU9ImluZm8iO2IudGV4dENvbnRlbnQ9IiEiO2IuZGF0YXNldC5yZWY9UkVGTUFQW2tdOwogIGIudGl0bGU9Itin2YTZhdix2KzYuSDZgdmKINin2YTZg9mI2K8iO2Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwi2KfZhNmF2LHYrNi5INmB2Yog2KfZhNmD2YjYrzogIityLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIikudGl0bGUpO3IuYXBwZW5kQ2hpbGQoYik7fSk7ClJPT1QuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCBiPWUudGFyZ2V0LmNsb3Nlc3QoIi5pbmZvW2RhdGEtcmVmXSIpO2lmKCFiKXJldHVybjsKICAkKCJ0YWJzIikucXVlcnlTZWxlY3RvcignW2RhdGEtdD0icmVmIl0nKS5jbGljaygpOwogIGNvbnN0IHQ9JChiLmRhdGFzZXQucmVmKTtpZighdClyZXR1cm47CiAgdC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6InN0YXJ0In0pO3QuY2xhc3NMaXN0LnJlbW92ZSgiZmxhc2giKTt2b2lkIHQub2Zmc2V0V2lkdGg7dC5jbGFzc0xpc3QuYWRkKCJmbGFzaCIpO30pOwovKiBwcmludCAvIFBERjogdGhlIHByaW50IHNoZWV0IHNob3dzIHRoZSBpbnB1dHMgcGx1cyBldmVyeSByZXN1bHRzIHBhbmU7IG91dHNpZGUgcGFnZSBjb250ZW50IGlzIGhpZGRlbiB3aGlsZSBwcmludGluZyAqLwpmdW5jdGlvbiBpbnB1dHNTaGVldCgpewogIGNvbnN0IHJvd3M9Wy4uLlJPT1QucXVlcnlTZWxlY3RvckFsbCgiLnJhaWwgLnJvdyIpXS5maWx0ZXIocj0+IXIuY2xvc2VzdCgiW2hpZGRlbl0iKSkubWFwKHI9PnsKICAgIGNvbnN0IGw9ci5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpLGM9ci5xdWVyeVNlbGVjdG9yKCJpbnB1dCxzZWxlY3QiKTsKICAgIGNvbnN0IGs9Wy4uLmwuY2hpbGROb2Rlc10uZmlsdGVyKG49Pm4ubm9kZVR5cGU9PT0zKS5tYXAobj0+bi50ZXh0Q29udGVudCkuam9pbigiIikudHJpbSgpOwogICAgY29uc3Qgdj1jLnRhZ05hbWU9PT0iU0VMRUNUIj9jLm9wdGlvbnNbYy5zZWxlY3RlZEluZGV4XS50ZXh0OmMudmFsdWU7CiAgICByZXR1cm4gW2ssdl07fSk7CiAgbGV0IHQ9IiI7Zm9yKGxldCBpPTA7aTxyb3dzLmxlbmd0aDtpKz0yKXQrPWA8dHI+JHtbcm93c1tpXSxyb3dzW2krMV1dLm1hcCh4PT54P2A8dGQgY2xhc3M9ImsiPiR7eFswXX08L3RkPjx0ZD48YmRpPiR7eFsxXX08L2JkaT48L3RkPmA6Ijx0ZD48L3RkPjx0ZD48L3RkPiIpLmpvaW4oIiIpfTwvdHI+YDsKICBjb25zdCBkPW5ldyBEYXRlKCk7CiAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJwbWV0YSI+PHNwYW4+2KjZitin2YbYp9iqINin2YTZhdio2YbZiSDZiNin2YTZhdmI2YLYuTwvc3Bhbj48c3Bhbj7Yqtin2LHZitiuINin2YTYt9io2KfYudipOiAke2QudG9Mb2NhbGVEYXRlU3RyaW5nKCJhci1FRy11LW51LWxhdG4iLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0pfTwvc3Bhbj48L2Rpdj48dGFibGU+PHRib2R5PiR7dH08L3Rib2R5PjwvdGFibGU+PGRpdiBjbGFzcz0iZGlzYyI+JHtST09ULnF1ZXJ5U2VsZWN0b3IoImZvb3Rlci5kaXNjIikuaW5uZXJIVE1MfTwvZGl2PmA7Cn0KbGV0IGlzb2xhdGVkPVtdOwpmdW5jdGlvbiBiZWZvcmVQcmludCgpewogICQoInBoZWFkIikuaW5uZXJIVE1MPWlucHV0c1NoZWV0KCk7CiAgJCgidGFicyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiIpLmZvckVhY2goYj0+e2NvbnN0IHA9Uk9PVC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1wYW5lPSIke2IuZGF0YXNldC50fSJdYCk7aWYocClwLmRhdGFzZXQucHRpdGxlPWIudGV4dENvbnRlbnQudHJpbSgpO30pOwogIGlzb2xhdGVkPVtdOwogIGZvcihsZXQgbj1ST09ULmdldFJvb3ROb2RlKCkuaG9zdHx8Uk9PVDtuJiZuIT09ZG9jdW1lbnQuYm9keSYmbi5wYXJlbnRFbGVtZW50O249bi5wYXJlbnRFbGVtZW50KXsKICAgIGZvcihjb25zdCBzaWIgb2Ygbi5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKWlmKHNpYiE9PW4mJiEvXihTQ1JJUFR8U1RZTEV8TElOSykkLy50ZXN0KHNpYi50YWdOYW1lKSl7c2liLmNsYXNzTGlzdC5hZGQoIndjLW5vcHJpbnQiKTtpc29sYXRlZC5wdXNoKFtzaWIsIndjLW5vcHJpbnQiXSk7fQogICAgaWYobi5wYXJlbnRFbGVtZW50IT09ZG9jdW1lbnQuYm9keSl7bi5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoIndjLXBhIik7aXNvbGF0ZWQucHVzaChbbi5wYXJlbnRFbGVtZW50LCJ3Yy1wYSJdKTt9CiAgfQp9CmZ1bmN0aW9uIGFmdGVyUHJpbnQoKXtpc29sYXRlZC5mb3JFYWNoKChbZSxjXSk9PmUuY2xhc3NMaXN0LnJlbW92ZShjKSk7aXNvbGF0ZWQ9W107fQp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlcHJpbnQiLGJlZm9yZVByaW50KTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImFmdGVycHJpbnQiLGFmdGVyUHJpbnQpOwokKCJwcmludEJ0biIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2JlZm9yZVByaW50KCk7d2luZG93LnByaW50KCk7fSk7CiQoIm1hcEltZyIpLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwoKT0+e2lmKCEkKCJtYXBJbWciKS5nZXRBdHRyaWJ1dGUoInNyYyIpKXJldHVybjskKCJtYXBJbWciKS5oaWRkZW49dHJ1ZTskKCJtYXBFcnIiKS5oaWRkZW49ZmFsc2U7fSk7CmNvbXB1dGUoKTsKUkVGLm1vdW50KCQoInBhbmVSIikpOwoKLyogYWQgc2xvdHM6IHNob3duIG9ubHkgd2hlbiBhIHJlYWwgQWRTZW5zZSB1bml0IGlzIHBsYWNlZCBpbiB0aGUgbWF0Y2hpbmcgc2xvdCAqLwp7Y29uc3QgcmVhbD1pPT5pJiYvXmNhLXB1Yi1cZHs2LH0kLy50ZXN0KGkuZGF0YXNldC5hZENsaWVudHx8IiIpJiYvXlxkezQsfSQvLnRlc3QoaS5kYXRhc2V0LmFkU2xvdHx8IiIpOwpjb25zdCB1cGQ9KCk9PlNSLnF1ZXJ5U2VsZWN0b3JBbGwoIi5hZHNsb3QiKS5mb3JFYWNoKHc9Pntjb25zdCBpPXcucXVlcnlTZWxlY3Rvcigic2xvdCIpLmFzc2lnbmVkRWxlbWVudHMoKS5tYXAoZT0+ZS5tYXRjaGVzKCJpbnMiKT9lOmUucXVlcnlTZWxlY3RvcigiaW5zLmFkc2J5Z29vZ2xlIikpLmZpbHRlcihCb29sZWFuKVswXTt3LmhpZGRlbj0hcmVhbChpKXx8aS5kYXRhc2V0LmFkU3RhdHVzPT09InVuZmlsbGVkIjt9KTsKU1IucXVlcnlTZWxlY3RvckFsbCgiLmFkc2xvdCBzbG90IikuZm9yRWFjaChzPT5zLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHVwZCkpO3VwZCgpOwpuZXcgTXV0YXRpb25PYnNlcnZlcih1cGQpLm9ic2VydmUoSE9TVCx7c3VidHJlZTp0cnVlLGF0dHJpYnV0ZXM6dHJ1ZSxhdHRyaWJ1dGVGaWx0ZXI6WyJkYXRhLWFkLXN0YXR1cyJdfSk7CkhPU1QucXVlcnlTZWxlY3RvckFsbCgiaW5zLmFkc2J5Z29vZ2xlIikuZm9yRWFjaChpPT57aWYocmVhbChpKSYmIWkuZGF0YXNldC5hZHNieWdvb2dsZVN0YXR1cyl7dHJ5eyh3aW5kb3cuYWRzYnlnb29nbGU9d2luZG93LmFkc2J5Z29vZ2xlfHxbXSkucHVzaCh7fSk7fWNhdGNoKGUpe319fSk7fQo=&lt;/div&gt;
&lt;script&gt;(function(){var h=document.getElementById("wcalc-host");if(!h)return;try{var b=atob(document.getElementById("wcalc-code").textContent.replace(/[^A-Za-z0-9+\/=]/g,"")),u=new Uint8Array(b.length);for(var i=0;i!==b.length;i++){u[i]=b.charCodeAt(i);}new Function("HOST",new TextDecoder("utf-8").decode(u))(h);}catch(e){h.textContent="Wind calculator failed to load: "+e.message;}})();&lt;/script&gt;
&lt;script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6324409391516444" crossorigin="anonymous"&gt;&lt;/script&gt;
&lt;h2&gt;ماذا تحسب هذه الحاسبة؟&lt;/h2&gt;
&lt;p&gt;تحسب الحاسبة أحمال الرياح على المباني المغلقة والمغلقة جزئيًا وفق الكود الأمريكي ASCE/SEI 7-22، الفصول من 26 إلى 30، وتشمل:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;معاملات الرياح (الفصل 26):&lt;/strong&gt; معامل التعرض Kz، ومعامل التضاريس Kzt، ومعامل المنسوب Ke، ومعامل الهبة G، ومعامل الضغط الداخلي GCpi، وضغط السرعة qz على كل ارتفاع.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;الطريقة الاتجاهية (الفصل 27):&lt;/strong&gt; ضغوط الحوائط والسقف للهيكل الإنشائي الرئيسي MWFRS في اتجاهي الرياح، مع قوى الطوابق وقص القاعدة لإدخالها في برامج التحليل.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;طريقة المباني المنخفضة (الفصل 28):&lt;/strong&gt; معاملات GCpf وضغوط المناطق لحالات التحميل الأربع، بما فيها الحالات الالتوائية، وهي مناسبة للهناجر والإطارات المعدنية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;التكسيات والعناصر الثانوية C&amp;amp;C (الفصل 30):&lt;/strong&gt; ضغوط تصميم المدادات والصاج والزجاج والمثبتات حسب المنطقة والمساحة الفعالة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;طريقة استخدام حاسبة أحمال الرياح&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;اختر فئة الخطورة، ثم أدخل السرعة الأساسية V بالمتر/ثانية من خريطة سرعة الرياح لنفس الفئة.&lt;/li&gt;
&lt;li&gt;حدد فئة التعرض B أو C أو D حسب طبيعة الأرض حول المبنى، ومنسوب الموقع، والتضاريس إن وجدت تلال أو جروف.&lt;/li&gt;
&lt;li&gt;اختر تصنيف الإغلاق ونوع المنشأ، واكتب المساحات الفعالة للعناصر الثانوية.&lt;/li&gt;
&lt;li&gt;أدخل هندسة المبنى: شكل السقف وميله، وارتفاع الطنف، والطول والبحر، وارتفاع البارابيت ومناسيب الطوابق.&lt;/li&gt;
&lt;li&gt;تنقل بين التبويبات لقراءة النتائج. زر (!) بجانب كل مدخل يفتح جدول الكود الخاص به، وزر «طباعة / PDF» يخرج مذكرة نتائج منظمة.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;المعادلات الأساسية في ASCE 7-22&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ضغط السرعة:&lt;/strong&gt; qz = 0.613 Kz Kzt Ke V² (N/m²).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;الطريقة الاتجاهية:&lt;/strong&gt; p = q Kd G Cp − qi Kd (GCpi).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;المباني المنخفضة:&lt;/strong&gt; p = qh Kd [(GCpf) − (GCpi)].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;التكسيات:&lt;/strong&gt; p = qh Kd [(GCp) − (GCpi)]، بحد أدنى 0.77 kN/m².&lt;/p&gt;
&lt;p&gt;من أهم تغييرات ASCE 7-22 عن 7-16 أن معامل الاتجاهية Kd خرج من معادلة qz وانتقل إلى معادلات الضغط، وأضيف معامل المنسوب Ke بشكل صريح، وتغيرت ثوابت فئات التعرض. لذلك قد تجد qz في هذه الحاسبة أكبر من جداول 7-16 القديمة، بينما الضغط النهائي متقارب.&lt;/p&gt;

&lt;h2&gt;الفرق بين الطريقة الاتجاهية والطريقة المبسطة&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;الطريقة الاتجاهية (العامة)&lt;/strong&gt; تصلح لأي مبنى مهما كان ارتفاعه، وتعطي ضغطًا لكل حائط وسقف في كل اتجاه. أما &lt;strong&gt;طريقة المباني المنخفضة (المبسطة)&lt;/strong&gt; فتشترط أن يكون متوسط ارتفاع السقف h لا يزيد عن 18.3 م ولا عن أصغر بعد أفقي للمبنى، وتعطي معاملات غلاف جاهزة لمناطق الأركان والحواف، وهي الأسهل للهناجر والمستودعات. يمكنك استخدام أي منهما للهيكل الرئيسي، والحاسبة تعرض الاثنتين للمقارنة.&lt;/p&gt;

&lt;h2&gt;خرائط سرعة الرياح في السعودية&lt;/h2&gt;
&lt;p&gt;تعرض الحاسبة خرائط سرعة الرياح الأساسية للمملكة العربية السعودية حسب كود البناء السعودي SBC 301 لكل فئة خطورة (I و II و III-IV)، لتقرأ منها السرعة V المناسبة لموقع مشروعك ثم تدخلها في الحاسبة.&lt;/p&gt;

&lt;h2&gt;أسئلة شائعة&lt;/h2&gt;
&lt;h3&gt;لماذا Kd ليس من المدخلات؟&lt;/h3&gt;
&lt;p&gt;لأن الكود يحدد Kd = 0.85 لكل المباني، للهيكل الرئيسي والتكسيات (Table 26.6-1). القيم الأخرى خاصة بالمداخن والخزانات واللافتات.&lt;/p&gt;
&lt;h3&gt;لماذا Kh = 0.70 في طريقة المباني المنخفضة؟&lt;/h3&gt;
&lt;p&gt;لأن الكود يلزم بأخذ Kh = 0.70 في التعرض B عندما يقل الارتفاع عن 9.1 م عند استخدام الفصل 28، حتى لو أعطى الجدول قيمة أقل.&lt;/p&gt;
&lt;h3&gt;ما المساحة الفعالة في التكسيات؟&lt;/h3&gt;
&lt;p&gt;هي البحر مضروبًا في العرض المحمّل للعنصر، بشرط ألا يقل العرض المحمّل عن ثلث البحر. كلما صغرت المساحة زاد الضغط التصميمي.&lt;/p&gt;
&lt;h3&gt;هل أستطيع حفظ النتائج؟&lt;/h3&gt;
&lt;p&gt;نعم، زر «طباعة / PDF» يخرج مذكرة تضم المدخلات والمعاملات وجداول الضغوط والرسومات، ويمكنك حفظها PDF من نافذة الطباعة.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;تنبيه: الحاسبة أداة مساعدة للمهندس، ومسؤولية التحقق من النتائج واعتمادها في التصميم تقع على المهندس المصمم.&lt;/em&gt;&lt;/p&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5njVsbwyJx4Pv2I5L_BMNz_36htwPCZRt1sXyZWYeIbslh1TS3ahGrkQj3lchWg-FsqN4uzu8p6qrY-E4OpJKhyphenhyphenpZGgzEGsLpACqRSvTVgSe_WPCnIYUOF09I5QPw5pn6doNxegKu0l5e2KmPKSULXI5Kj83_fDWCXXXq_Ei-aHqOZlhA-U0ahZzsX3W/s72-c/Wind%20Load%20ASCE.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>حاسبة اونلاين تحويل بين أقطار حديد التسليح وجدول مواصفات اسياخ التسليح </title><link>https://www.civilmaker.com/2026/10/rebar-weight-table-converter.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Sun, 11 Oct 2026 13:44:23 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3849594518891446926</guid><description>&lt;!-- ================================================================
  civilmaker.com | جدول أوزان حديد التسليح + حاسبة تحويل الأقطار
  الصق هذا الكود كاملاً في صفحة بلوجر من وضع "عرض HTML".
  استبدل ca-pub-6324409391516444 وأرقام data-ad-slot بأكواد حسابك في AdSense.
================================================================ --&gt;
&lt;style&gt;
@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700;800&amp;display=swap');
#cmr{
  --bg:#17151f;--bg2:#1d1a27;--card:#25222f;--card2:#2d2a38;--fg:#f1eff7;--muted:#9a95ae;--line:#34303f;
  --blue:#3d7bf7;--blue2:#5b9bff;--purple:#9b5cf6;--pink:#e2558a;--green:#2fbf8f;
  --font:"Tajawal","Segoe UI",Tahoma,Arial,sans-serif;
  direction:rtl;text-align:right;color-scheme:dark;
  background:radial-gradient(900px 500px at 85% -10%,#2a2345 0%,transparent 60%),#17151f;
  color:var(--fg);font-family:var(--font);font-size:16px;line-height:1.7;
  border-radius:24px;padding:22px 16px 28px;margin:0 auto;max-width:960px;box-sizing:border-box;
}
#cmr *,#cmr *::before,#cmr *::after{box-sizing:border-box}
#cmr .cmr-in{display:flex;flex-direction:column;gap:22px}
#cmr h2,#cmr h3{font-family:var(--font);color:var(--fg);margin:0;line-height:1.4;text-wrap:balance;border:0;padding:0;background:none}
#cmr h2{font-size:clamp(22px,4.4vw,30px);font-weight:800}
#cmr h3{font-size:19px;font-weight:800}
#cmr h4{font-family:var(--font);color:var(--fg);font-size:16px;font-weight:700;margin:18px 0 6px}
#cmr p{margin:0 0 10px;color:#d9d5e6}
#cmr a{color:var(--blue2)}
#cmr .cmr-kicker{color:var(--muted);font-size:14px;margin-bottom:2px}
#cmr .cmr-lead{color:var(--muted);max-width:66ch;margin-top:8px}
#cmr .cmr-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
#cmr .cmr-head span{color:var(--muted);font-size:14px}
#cmr .cmr-card{background:var(--card);border-radius:22px;padding:20px}
#cmr .cmr-dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-inline-end:6px;vertical-align:middle}

/* ad slots */
#cmr .cmr-ad{min-height:100px;text-align:center;overflow:hidden}
#cmr .cmr-ad .cmr-ad-label{display:block;font-size:11px;color:var(--muted);margin-bottom:4px}

/* diameter chips */
#cmr .cmr-row{display:flex;flex-direction:column;gap:8px}
#cmr .cmr-row + .cmr-row{border-top:1px solid var(--line);padding-top:14px;margin-top:14px}
#cmr .cmr-rowhead{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;font-size:15px;font-weight:700}
#cmr .cmr-chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:thin}
#cmr .cmr-chip{flex:none;min-width:48px;height:48px;border-radius:14px;border:0;margin:0;background:transparent;color:var(--muted);font-family:var(--font);font-size:16px;font-weight:700;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.1;font-variant-numeric:tabular-nums;padding:0 6px}
#cmr .cmr-chip small{font-size:10px;font-weight:500;opacity:.75}
#cmr .cmr-chip:hover{background:var(--card2);color:var(--fg)}
#cmr .cmr-chip[aria-pressed="true"]{background:var(--blue);color:#fff;box-shadow:0 6px 18px rgba(61,123,247,.45)}
#cmr .cmr-to .cmr-chip[aria-pressed="true"]{background:var(--purple);box-shadow:0 6px 18px rgba(155,92,246,.45)}
#cmr button:focus-visible,#cmr tr:focus-visible{outline:2px solid var(--blue2);outline-offset:2px}

/* count stepper */
#cmr .cmr-step{display:flex;align-items:center;gap:8px;background:var(--card2);border-radius:14px;padding:4px}
#cmr .cmr-step button{width:40px;height:40px;border:0;margin:0;border-radius:10px;background:var(--card);color:var(--fg);font-size:22px;line-height:1;cursor:pointer;font-family:var(--font)}
#cmr .cmr-step button:hover{background:#3a3648}
#cmr .cmr-step input{width:76px;text-align:center;background:transparent;border:0;margin:0;padding:0;box-shadow:none;color:var(--fg);font-family:var(--font);font-size:21px;font-weight:800;font-variant-numeric:tabular-nums;-moz-appearance:textfield;appearance:textfield}
#cmr .cmr-step input::-webkit-outer-spin-button,#cmr .cmr-step input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
#cmr .cmr-step input:focus{outline:none}
#cmr .cmr-swap{border:0;margin:0;background:var(--card2);color:var(--fg);border-radius:12px;padding:6px 14px;font-family:var(--font);font-size:14px;cursor:pointer}
#cmr .cmr-swap:hover{background:#3a3648}

/* results */
#cmr .cmr-results{display:grid;grid-template-columns:1.1fr 1fr;gap:14px}
#cmr .cmr-hero{border-radius:22px;padding:20px;background:linear-gradient(135deg,#4b8dff 0%,#3d6ff0 55%,#6c5cf6 100%);color:#fff;display:flex;flex-direction:column;justify-content:space-between;gap:14px;box-shadow:0 14px 34px rgba(61,111,240,.35);min-width:0}
#cmr .cmr-hero .cmr-line{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;font-size:15px}
#cmr .cmr-big{font-size:58px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums;color:#fff}
#cmr .cmr-big small{font-size:17px;font-weight:500;opacity:.9}
#cmr .cmr-tag{display:inline-block;font-size:13px;font-weight:700;padding:3px 12px;border-radius:99px;background:rgba(255,255,255,.22);color:#fff}
#cmr .cmr-tag.cmr-ok{background:var(--green)}
#cmr .cmr-ring{display:flex;gap:16px;align-items:center;min-width:0}
#cmr .cmr-ring svg{flex:none;width:150px;height:150px}
#cmr .cmr-ring circle.cmr-arc{transition:stroke-dasharray .5s ease}
#cmr .cmr-legend{display:flex;flex-direction:column;gap:14px;min-width:0}
#cmr .cmr-legend .cmr-t{font-size:15px}
#cmr .cmr-legend .cmr-v{font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
#cmr .cmr-bars{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-top:6px}
#cmr .cmr-bars i{display:block;border-radius:50%;flex:none}
#cmr .cmr-bars span{font-size:12px;color:var(--muted)}

/* table */
#cmr .cmr-tablewrap{overflow-x:auto;margin:0 -4px;padding:0 4px}
#cmr table.cmr-table{width:100%;min-width:600px;border-collapse:separate;border-spacing:0 8px;border:0;margin:0;background:none;font-variant-numeric:tabular-nums}
#cmr .cmr-table th{background:none;border:0;color:var(--muted);font-size:13px;font-weight:500;padding:0 12px;text-align:right}
#cmr .cmr-table td{background:var(--card);border:0;padding:12px;color:var(--fg);vertical-align:middle;text-align:right}
#cmr .cmr-table td:first-child{border-radius:0 16px 16px 0}
#cmr .cmr-table td:last-child{border-radius:16px 0 0 16px}
#cmr .cmr-table tbody tr{cursor:pointer}
#cmr .cmr-table tbody tr:hover td{background:var(--card2)}
#cmr .cmr-table tbody tr.cmr-on td{background:#2b2d4a}
#cmr .cmr-table b{display:block;font-size:16px}
#cmr .cmr-table td span{display:block;font-size:11px;color:var(--muted)}
#cmr .cmr-badge{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;text-align:center;font-weight:800;font-size:17px;color:#fff;line-height:1.05}
#cmr .cmr-badge small{display:block;font-size:9px;font-weight:500;opacity:.85}
#cmr .cmr-meter{height:4px;border-radius:4px;background:var(--line);margin-top:6px;overflow:hidden;max-width:110px}
#cmr .cmr-meter i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--blue),var(--purple))}
#cmr .cmr-note{font-size:13px;color:var(--muted);margin-top:6px}

/* guide */
#cmr .cmr-guide ol{padding-inline-start:22px;margin:10px 0}
#cmr .cmr-guide li{margin-bottom:6px;color:#d9d5e6}
#cmr .cmr-f{background:var(--card2);border-radius:8px;padding:1px 10px;direction:ltr;unicode-bidi:isolate;display:inline-block;color:var(--blue2);font-variant-numeric:tabular-nums}
#cmr details{background:var(--card2);border-radius:14px;padding:12px 14px;margin-top:8px}
#cmr summary{font-weight:700;cursor:pointer;color:var(--fg)}
#cmr details p{margin:8px 0 0}
#cmr .cmr-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
#cmr .cmr-tags span{font-size:12px;background:var(--card2);border-radius:99px;padding:3px 12px;color:var(--muted)}

@media (max-width:680px){
  #cmr{border-radius:18px;padding:18px 12px 24px}
  #cmr .cmr-results{grid-template-columns:1fr}
  #cmr .cmr-ring svg{width:120px;height:120px}
  #cmr .cmr-big{font-size:50px}
  #cmr .cmr-card{padding:16px}
  #cmr table.cmr-table{min-width:0}
  #cmr .cmr-table th:nth-child(3),#cmr .cmr-table td:nth-child(3){display:none}
  #cmr .cmr-table th,#cmr .cmr-table td{padding:10px 6px}
  #cmr .cmr-table th{font-size:11px}
  #cmr .cmr-table b{font-size:14px}
  #cmr .cmr-badge{width:40px;height:40px;font-size:15px}
  #cmr .cmr-meter{max-width:60px}
  #cmr .cmr-table td span.cmr-mm{display:none}
}
@media (prefers-reduced-motion:reduce){#cmr .cmr-ring circle.cmr-arc{transition:none}}
&lt;/style&gt;

&lt;div id="cmr" lang="ar" dir="rtl"&gt;
&lt;div class="cmr-in"&gt;

  &lt;header&gt;
    &lt;div class="cmr-kicker"&gt;أدوات المهندس المدني | سيفيل ميكر&lt;/div&gt;
    &lt;h2&gt;جدول أوزان حديد التسليح وحاسبة تحويل الأقطار المكافئة&lt;/h2&gt;
    &lt;p class="cmr-lead"&gt;احسب عدد أسياخ حديد التسليح البديلة عند تغيير القطر بنفس مساحة المقطع، وتصفح جدول وزن المتر الطولي ووزن السيخ ومساحة المقطع وعدد الأسياخ في الطن لكل أقطار الحديد من 6 مم إلى 32 مم.&lt;/p&gt;
  &lt;/header&gt;

  &lt;!-- إعلان 1: أعلى الصفحة --&gt;
  &lt;div class="cmr-ad"&gt;
    &lt;span class="cmr-ad-label"&gt;إعلان&lt;/span&gt;
    &lt;!-- محمّل AdSense: احذف السطر التالي إذا كان موجوداً بالفعل في قالب مدونتك --&gt;
    &lt;script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6324409391516444" crossorigin="anonymous"&gt;&lt;/script&gt;
    &lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="1504214517" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;

  &lt;section class="cmr-card" id="cmr-tool" aria-labelledby="cmr-tool-h"&gt;
    &lt;div class="cmr-head"&gt;&lt;h3 id="cmr-tool-h"&gt;حاسبة تحويل أقطار حديد التسليح&lt;/h3&gt;&lt;button class="cmr-swap" id="cmr-swap" type="button"&gt;⇄ تبديل القطرين&lt;/button&gt;&lt;/div&gt;

    &lt;div class="cmr-row"&gt;
      &lt;div class="cmr-rowhead"&gt;&lt;span&gt;&lt;span class="cmr-dot" style="background:#3d7bf7"&gt;&lt;/span&gt;القطر المستبدل (مم)&lt;/span&gt;&lt;/div&gt;
      &lt;div class="cmr-chips cmr-from" id="cmr-c1" role="group" aria-label="القطر المستبدل"&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="cmr-row"&gt;
      &lt;div class="cmr-rowhead"&gt;
        &lt;label for="cmr-n"&gt;عدد الأسياخ بالقطر المستبدل&lt;/label&gt;
        &lt;div class="cmr-step"&gt;
          &lt;button type="button" id="cmr-minus" aria-label="إنقاص العدد"&gt;−&lt;/button&gt;
          &lt;input id="cmr-n" type="number" min="1" max="9999" step="1" value="6" inputmode="numeric"&gt;
          &lt;button type="button" id="cmr-plus" aria-label="زيادة العدد"&gt;+&lt;/button&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="cmr-row"&gt;
      &lt;div class="cmr-rowhead"&gt;&lt;span&gt;&lt;span class="cmr-dot" style="background:#9b5cf6"&gt;&lt;/span&gt;القطر المطلوب (مم)&lt;/span&gt;&lt;/div&gt;
      &lt;div class="cmr-chips cmr-to" id="cmr-c2" role="group" aria-label="القطر المطلوب"&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;div class="cmr-results" aria-live="polite"&gt;
    &lt;div class="cmr-hero"&gt;
      &lt;div class="cmr-line"&gt;&lt;span&gt;العدد المكافئ (مقرب لأعلى)&lt;/span&gt;&lt;span class="cmr-tag" id="cmr-tagd"&gt;&lt;/span&gt;&lt;/div&gt;
      &lt;div class="cmr-big" id="cmr-out-n"&gt;-&lt;/div&gt;
      &lt;div class="cmr-line"&gt;&lt;span id="cmr-out-s"&gt;&lt;/span&gt;&lt;span class="cmr-tag cmr-ok" id="cmr-out-pct"&gt;&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="cmr-card cmr-ring"&gt;
      &lt;svg viewBox="0 0 120 120" aria-hidden="true"&gt;
        &lt;defs&gt;
          &lt;linearGradient id="cmr-gp" x1="0" y1="0" x2="1" y2="1"&gt;&lt;stop offset="0" stop-color="#9b5cf6"/&gt;&lt;stop offset="1" stop-color="#e2558a"/&gt;&lt;/linearGradient&gt;
          &lt;linearGradient id="cmr-gb" x1="0" y1="0" x2="1" y2="1"&gt;&lt;stop offset="0" stop-color="#5b9bff"/&gt;&lt;stop offset="1" stop-color="#3d7bf7"/&gt;&lt;/linearGradient&gt;
        &lt;/defs&gt;
        &lt;circle cx="60" cy="60" r="50" fill="none" stroke="#34303f" stroke-width="9"/&gt;
        &lt;circle cx="60" cy="60" r="36" fill="none" stroke="#34303f" stroke-width="9"/&gt;
        &lt;circle class="cmr-arc" id="cmr-r2" cx="60" cy="60" r="50" fill="none" stroke="url(#cmr-gp)" stroke-width="9" stroke-linecap="round" transform="rotate(-90 60 60)" stroke-dasharray="0 400"/&gt;
        &lt;circle class="cmr-arc" id="cmr-r1" cx="60" cy="60" r="36" fill="none" stroke="url(#cmr-gb)" stroke-width="9" stroke-linecap="round" transform="rotate(-90 60 60)" stroke-dasharray="0 400"/&gt;
      &lt;/svg&gt;
      &lt;div class="cmr-legend"&gt;
        &lt;div&gt;&lt;div class="cmr-t"&gt;&lt;span class="cmr-dot" style="background:#3d7bf7"&gt;&lt;/span&gt;المساحة قبل الاستبدال&lt;/div&gt;&lt;div class="cmr-v" id="cmr-out-a1"&gt;&lt;/div&gt;&lt;div class="cmr-bars" id="cmr-bars1"&gt;&lt;/div&gt;&lt;/div&gt;
        &lt;div&gt;&lt;div class="cmr-t"&gt;&lt;span class="cmr-dot" style="background:#9b5cf6"&gt;&lt;/span&gt;المساحة بعد الاستبدال&lt;/div&gt;&lt;div class="cmr-v" id="cmr-out-a2"&gt;&lt;/div&gt;&lt;div class="cmr-bars" id="cmr-bars2"&gt;&lt;/div&gt;&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- إعلان 2: بعد النتيجة (أعلى مكان مشاهدة) --&gt;
  &lt;div class="cmr-ad"&gt;
    &lt;span class="cmr-ad-label"&gt;إعلان&lt;/span&gt;
    &lt;ins class="adsbygoogle" style="display:block;text-align:center" data-ad-client="ca-pub-6324409391516444" data-ad-slot="2798876466" data-ad-layout="in-article" data-ad-format="fluid"&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;

  &lt;section aria-labelledby="cmr-tbl-h"&gt;
    &lt;div class="cmr-head"&gt;&lt;h3 id="cmr-tbl-h"&gt;جدول أوزان ومساحات حديد التسليح&lt;/h3&gt;&lt;span&gt;خصائص سيخ واحد&lt;/span&gt;&lt;/div&gt;
    &lt;div class="cmr-tablewrap"&gt;
      &lt;table class="cmr-table"&gt;
        &lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;القطر&lt;/th&gt;&lt;th scope="col"&gt;وزن المتر الطولي&lt;/th&gt;&lt;th scope="col"&gt;طول السيخ&lt;/th&gt;&lt;th scope="col"&gt;وزن السيخ كاملاً&lt;/th&gt;&lt;th scope="col"&gt;مساحة مقطع السيخ&lt;/th&gt;&lt;th scope="col"&gt;عدد الأسياخ في الطن&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
        &lt;tbody id="cmr-tbody"&gt;
          &lt;tr data-d="6" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#3d7bf7"&gt;&lt;div&gt;6&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.222&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.67&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:3.5%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.28&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;28.3 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;375&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="8" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#9b5cf6"&gt;&lt;div&gt;8&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.395&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;4.74&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:6.2%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.50&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;50.3 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;211&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="10" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#e2558a"&gt;&lt;div&gt;10&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.617&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;7.41&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:9.8%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.79&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;78.5 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;135&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="12" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#2fbf8f"&gt;&lt;div&gt;12&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;0.889&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;10.67&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:14.1%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;1.13&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;113.1 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;94&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="14" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#3d7bf7"&gt;&lt;div&gt;14&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;1.210&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;14.52&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:19.1%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;1.54&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;153.9 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;69&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="16" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#9b5cf6"&gt;&lt;div&gt;16&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;1.580&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;18.96&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:25.0%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.01&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;201.1 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;53&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="18" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#e2558a"&gt;&lt;div&gt;18&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.000&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;24.00&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:31.6%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.54&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;254.5 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;42&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="20" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#2fbf8f"&gt;&lt;div&gt;20&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.469&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;29.63&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:39.1%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;3.14&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;314.2 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;34&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="22" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#3d7bf7"&gt;&lt;div&gt;22&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;2.988&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;35.85&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:47.3%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;3.80&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;380.1 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;28&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="25" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#9b5cf6"&gt;&lt;div&gt;25&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;3.858&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;46.30&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:61.0%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;4.91&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;490.9 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;22&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="28" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#e2558a"&gt;&lt;div&gt;28&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;4.840&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;58.07&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:76.6%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;6.16&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;615.8 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;17&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr data-d="32" tabindex="0"&gt;
            &lt;td&gt;&lt;div class="cmr-badge" style="background:#2fbf8f"&gt;&lt;div&gt;32&lt;small&gt;مم&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;6.321&lt;/b&gt;&lt;span&gt;كجم/م&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;12&lt;/b&gt;&lt;span&gt;متر&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;75.85&lt;/b&gt;&lt;span&gt;كجم&lt;/span&gt;&lt;div class="cmr-meter"&gt;&lt;i style="width:100.0%"&gt;&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;8.04&lt;/b&gt;&lt;span&gt;سم²&lt;/span&gt;&lt;span class="cmr-mm"&gt;804.2 مم²&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;b&gt;13&lt;/b&gt;&lt;span&gt;سيخ / طن&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
    &lt;p class="cmr-note"&gt;الأوزان محسوبة بالمعادلة القياسية (القطر² ÷ 162) لطول سيخ 12 متر، وعدد الأسياخ في الطن تقريبي. اضغط على أي قطر في الجدول لنقله إلى الحاسبة.&lt;/p&gt;
  &lt;/section&gt;

  &lt;!-- إعلان 3: بعد الجدول --&gt;
  &lt;div class="cmr-ad"&gt;
    &lt;span class="cmr-ad-label"&gt;إعلان&lt;/span&gt;
    &lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="7152045289" data-ad-format="auto" data-full-width-responsive="true"&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;

  &lt;section class="cmr-card cmr-guide" aria-labelledby="cmr-g-h"&gt;
    &lt;h3 id="cmr-g-h"&gt;طريقة استخدام حاسبة استبدال أقطار حديد التسليح&lt;/h3&gt;
    &lt;ol&gt;
      &lt;li&gt;اختر &lt;b&gt;القطر المستبدل&lt;/b&gt; لحديد التسليح كما هو في اللوحات الإنشائية، مثل حديد 16 مم.&lt;/li&gt;
      &lt;li&gt;حدد &lt;b&gt;عدد الأسياخ&lt;/b&gt; بالأزرار أو اكتبه مباشرة.&lt;/li&gt;
      &lt;li&gt;اختر &lt;b&gt;القطر المطلوب&lt;/b&gt; المتوفر في الموقع أو عند تاجر الحديد، مثل حديد 12 مم.&lt;/li&gt;
      &lt;li&gt;يظهر لك فوراً العدد المكافئ من الأسياخ مقرباً لأعلى، مع مساحة حديد التسليح قبل الاستبدال وبعده ونسبة الزيادة في المساحة.&lt;/li&gt;
    &lt;/ol&gt;

    &lt;h4&gt;كيف يتم حساب الأقطار المكافئة لحديد التسليح؟&lt;/h4&gt;
    &lt;p&gt;يعتمد استبدال قطر حديد التسليح بقطر آخر على تساوي مساحة مقطع الحديد. مساحة مقطع السيخ الواحد تساوي &lt;span class="cmr-f"&gt;A = π × d² / 4&lt;/span&gt;، والعدد الجديد يساوي &lt;span class="cmr-f"&gt;n₂ = n₁ × (d₁ / d₂)²&lt;/span&gt;، ويُقرب دائماً لأعلى حتى لا تقل مساحة الحديد الجديدة عن مساحة التصميم.&lt;/p&gt;
    &lt;p&gt;مثال: 6 أسياخ قطر 16 مم مساحتها 12.06 سم². عند الاستبدال بقطر 12 مم يكون العدد 6 × (16 ÷ 12)² = 10.67، ويُقرب إلى 11 سيخ بمساحة 12.44 سم².&lt;/p&gt;

    &lt;h4&gt;كيف أحسب وزن حديد التسليح؟&lt;/h4&gt;
    &lt;p&gt;وزن المتر الطولي من حديد التسليح بالكيلوجرام يساوي &lt;span class="cmr-f"&gt;d² / 162&lt;/span&gt; حيث d قطر السيخ بالمليمتر. ووزن السيخ كاملاً يساوي وزن المتر × طول السيخ (12 متر عادة). وعدد الأسياخ في الطن يساوي 1000 ÷ وزن السيخ.&lt;/p&gt;

    &lt;h4&gt;أسئلة شائعة عن أوزان وأقطار حديد التسليح&lt;/h4&gt;
    &lt;details&gt;&lt;summary&gt;هل يجوز استبدال حديد 16 مم بحديد 12 مم؟&lt;/summary&gt;&lt;p&gt;نعم بشرط ألا تقل مساحة الحديد الجديدة عن المساحة المطلوبة في التصميم، وأن تحقق المسافات بين الأسياخ اشتراطات الكود، وبعد موافقة المهندس المصمم.&lt;/p&gt;&lt;/details&gt;
    &lt;details&gt;&lt;summary&gt;كم وزن متر حديد 12 مم؟&lt;/summary&gt;&lt;p&gt;وزن المتر الطولي من حديد 12 مم يساوي 0.889 كجم تقريباً، ووزن السيخ 12 متر يساوي 10.67 كجم.&lt;/p&gt;&lt;/details&gt;
    &lt;details&gt;&lt;summary&gt;كم سيخ حديد في الطن؟&lt;/summary&gt;&lt;p&gt;يختلف حسب القطر. مثلاً الطن من حديد 12 مم فيه حوالي 94 سيخ، ومن حديد 16 مم حوالي 53 سيخ. راجع عمود عدد الأسياخ في الطن في الجدول.&lt;/p&gt;&lt;/details&gt;
    &lt;details&gt;&lt;summary&gt;لماذا يتم تقريب عدد الأسياخ لأعلى؟&lt;/summary&gt;&lt;p&gt;لأن التقريب لأسفل يجعل مساحة حديد التسليح أقل من المطلوب في التصميم، وهذا غير آمن إنشائياً.&lt;/p&gt;&lt;/details&gt;

    &lt;div class="cmr-tags"&gt;&lt;span&gt;جدول أوزان الحديد&lt;/span&gt;&lt;span&gt;وزن متر الحديد&lt;/span&gt;&lt;span&gt;تحويل أقطار الحديد&lt;/span&gt;&lt;span&gt;مساحة حديد التسليح&lt;/span&gt;&lt;span&gt;عدد أسياخ الحديد في الطن&lt;/span&gt;&lt;span&gt;الأقطار المكافئة&lt;/span&gt;&lt;/div&gt;
  &lt;/section&gt;

  &lt;!-- إعلان 4: نهاية الصفحة --&gt;
  &lt;div class="cmr-ad"&gt;
    &lt;span class="cmr-ad-label"&gt;إعلان&lt;/span&gt;
    &lt;ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6324409391516444" data-ad-slot="6932605168" data-ad-format="autorelaxed"&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOHHEDRabEq_f4srI1AzRmIC7xbYiRZwJYeooiydkhF_D1R9oCqfJnPC5x8vB_LLleKa4JCIiZLuGfEIzytSX8iH-19Je3lGdAgk5JmiOuLpGh-5-owkRvFQsq_Mqy0J81OISGZ3oOeELAFlp_u4FAT5I6qt0cds7OmM-ARZVv3t3BIQ6RAW44bq1z4TH2/s1672/7439e914-cb5a-4733-8ee5-96fb51eb83be.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="600" data-original-height="941" data-original-width="1672" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOHHEDRabEq_f4srI1AzRmIC7xbYiRZwJYeooiydkhF_D1R9oCqfJnPC5x8vB_LLleKa4JCIiZLuGfEIzytSX8iH-19Je3lGdAgk5JmiOuLpGh-5-owkRvFQsq_Mqy0J81OISGZ3oOeELAFlp_u4FAT5I6qt0cds7OmM-ARZVv3t3BIQ6RAW44bq1z4TH2/s600/7439e914-cb5a-4733-8ee5-96fb51eb83be.png"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;script type="application/ld+json"&gt;
{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"هل يجوز استبدال حديد 16 مم بحديد 12 مم؟","acceptedAnswer":{"@type":"Answer","text":"نعم بشرط ألا تقل مساحة الحديد الجديدة عن المساحة المطلوبة في التصميم، وأن تحقق المسافات بين الأسياخ اشتراطات الكود، وبعد موافقة المهندس المصمم."}},
{"@type":"Question","name":"كم وزن متر حديد 12 مم؟","acceptedAnswer":{"@type":"Answer","text":"وزن المتر الطولي من حديد 12 مم يساوي 0.889 كجم تقريباً، ووزن السيخ 12 متر يساوي 10.67 كجم."}},
{"@type":"Question","name":"كم سيخ حديد في الطن؟","acceptedAnswer":{"@type":"Answer","text":"يختلف حسب القطر. الطن من حديد 12 مم فيه حوالي 94 سيخ، ومن حديد 16 مم حوالي 53 سيخ."}},
{"@type":"Question","name":"لماذا يتم تقريب عدد الأسياخ لأعلى؟","acceptedAnswer":{"@type":"Answer","text":"لأن التقريب لأسفل يجعل مساحة حديد التسليح أقل من المطلوب في التصميم، وهذا غير آمن إنشائياً."}}
]}
&lt;/script&gt;

&lt;script&gt;
//&lt;![CDATA[
(function(){
  var D=[6,8,10,12,14,16,18,20,22,25,28,32];
  var a=16, b=12;
  function area(d){return Math.PI*d*d/4;}
  function f(x,n){return x.toFixed(n);}
  function $(id){return document.getElementById(id);}
  var n1=$('cmr-n');

  function buildChips(el,isFrom){
    var h='';
    for(var i=0;i&lt;D.length;i++){h+='&lt;button type="button" class="cmr-chip" data-d="'+D[i]+'" aria-pressed="false"&gt;'+D[i]+'&lt;small&gt;\u0645\u0645&lt;/small&gt;&lt;/button&gt;';}
    el.innerHTML=h;
    el.addEventListener('click',function(e){
      var c=e.target.closest('.cmr-chip'); if(!c) return;
      if(isFrom){a=+c.getAttribute('data-d');}else{b=+c.getAttribute('data-d');}
      calc();
    });
  }
  buildChips($('cmr-c1'),true);
  buildChips($('cmr-c2'),false);

  function dots(el,n,d,col){
    var s=Math.max(5,d*0.55), show=Math.min(n,18), h='';
    for(var i=0;i&lt;show;i++){h+='&lt;i style="width:'+s+'px;height:'+s+'px;background:'+col+'"&gt;&lt;/i&gt;';}
    if(n&gt;show){h+='&lt;span&gt;+'+(n-show)+'&lt;/span&gt;';}
    el.innerHTML=h;
  }
  function ring(id,r,frac){var c=2*Math.PI*r;$(id).setAttribute('stroke-dasharray',(c*frac).toFixed(1)+' '+c.toFixed(1));}
  function mark(sel,val,attr){
    var els=document.querySelectorAll(sel);
    for(var i=0;i&lt;els.length;i++){
      var on=+els[i].getAttribute('data-d')===val;
      if(attr){els[i].setAttribute('aria-pressed',on?'true':'false');}else{els[i].classList.toggle('cmr-on',on);}
    }
  }

  function calc(){
    var n=Math.floor(+n1.value);
    if(!(n&gt;=1)){n=1;}
    var A1=n*area(a);
    var m=Math.ceil(n*(a*a)/(b*b)-1e-9);
    var A2=m*area(b);
    var pct=(A2/A1-1)*100;
    $('cmr-out-n').innerHTML=m+' &lt;small&gt;\u0633\u064A\u062E&lt;/small&gt;';
    $('cmr-tagd').textContent='\u0642\u0637\u0631 '+b+' \u0645\u0645';
    $('cmr-out-s').textContent='\u0628\u062F\u0644\u0627\u064B \u0645\u0646 '+n+' \u0633\u064A\u062E \u0642\u0637\u0631 '+a+' \u0645\u0645';
    $('cmr-out-pct').textContent=(pct&lt;0.05?'\u0646\u0641\u0633 \u0627\u0644\u0645\u0633\u0627\u062D\u0629':'\u0632\u064A\u0627\u062F\u0629 '+f(pct,1)+'%');
    $('cmr-out-a1').textContent=f(A1/100,2)+' \u0633\u0645\u00B2 | '+f(A1,1)+' \u0645\u0645\u00B2';
    $('cmr-out-a2').textContent=f(A2/100,2)+' \u0633\u0645\u00B2 | '+f(A2,1)+' \u0645\u0645\u00B2';
    var mx=Math.max(A1,A2);
    ring('cmr-r1',36,A1/mx*0.92); ring('cmr-r2',50,A2/mx*0.92);
    dots($('cmr-bars1'),n,a,'#3d7bf7'); dots($('cmr-bars2'),m,b,'#9b5cf6');
    mark('#cmr-c1 .cmr-chip',a,true); mark('#cmr-c2 .cmr-chip',b,true);
    mark('#cmr-tbody tr',a,false);
  }

  n1.addEventListener('input',calc);
  $('cmr-plus').addEventListener('click',function(){n1.value=Math.max(1,Math.floor(+n1.value)||0)+1;calc();});
  $('cmr-minus').addEventListener('click',function(){n1.value=Math.max(1,(Math.floor(+n1.value)||2)-1);calc();});
  $('cmr-swap').addEventListener('click',function(){var t=a;a=b;b=t;calc();});
  function pick(e){
    var r=e.target.closest('#cmr-tbody tr'); if(!r) return;
    if(e.type==='keydown'&amp;&amp;e.key!=='Enter') return;
    a=+r.getAttribute('data-d'); calc();
    var tool=$('cmr-tool'); if(tool.scrollIntoView){tool.scrollIntoView({behavior:'smooth',block:'start'});}
  }
  $('cmr-tbody').addEventListener('click',pick);
  $('cmr-tbody').addEventListener('keydown',pick);
  calc();
})();
//]]&gt;
&lt;/script&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOHHEDRabEq_f4srI1AzRmIC7xbYiRZwJYeooiydkhF_D1R9oCqfJnPC5x8vB_LLleKa4JCIiZLuGfEIzytSX8iH-19Je3lGdAgk5JmiOuLpGh-5-owkRvFQsq_Mqy0J81OISGZ3oOeELAFlp_u4FAT5I6qt0cds7OmM-ARZVv3t3BIQ6RAW44bq1z4TH2/s72-c/7439e914-cb5a-4733-8ee5-96fb51eb83be.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title> الدليل الشامل لتصميم البلاطات الخرسانية على التربة (Slab on Grade) + شيت إكسل مجاني للتصميم طبقا للكود الامريكي </title><link>https://www.civilmaker.com/2026/07/slab-on-grade-design.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Thu, 23 Jul 2026 14:56:59 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-1200637988098331951</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;تعتبر البلاطات الخرسانية المصبوبة على التربة &lt;b&gt;(Slab on Grade)&lt;/b&gt; من أهم العناصر الإنشائية في المشاريع الصناعية والتجارية مثل المستودعات (Warehouses)، المصانع، مواقف السيارات، والمراكز اللوجستية. يتطلب تصميم هذه البلاطات فهماً عميقاً للتفاعل بين الخرسانة والتربة (Soil-Structure Interaction) لضمان تحمل الأحمال المركزة العالية والحد من التشققات والتكهفات.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKhwdH5jq8RYuEvETVtseTYxS1QYhVsMso0iKdvQQIusJr0dcmp208brSrG1in0EpilNuWuRXal9dH-Sx8a8CYl0sh-QkyMPff1lspImlD3QF_iT1XeL0cbYMVEW2-EObqQYloUox45spucIqELbg_xafbUHsoaJRxzzEAQdCEJhChkr0nEVe4yknfGJRT/s1024/%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="تصميم البلاطات الارضية الخرسانية Slab on Grade (ٍSOG) طبقا للكود الامريكى ACI360R لتصميم البلاطات الارضية للمصانع والمستودعات + شيت اكسيل ونوتة حسابية" border="0" data-original-height="666" data-original-width="1024" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKhwdH5jq8RYuEvETVtseTYxS1QYhVsMso0iKdvQQIusJr0dcmp208brSrG1in0EpilNuWuRXal9dH-Sx8a8CYl0sh-QkyMPff1lspImlD3QF_iT1XeL0cbYMVEW2-EObqQYloUox45spucIqELbg_xafbUHsoaJRxzzEAQdCEJhChkr0nEVe4yknfGJRT/w640-h416/%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9.jpg" title="الدليل الشامل لتصميم البلاطات الخرسانية على التربة (Slab on Grade) + شيت إكسل مجاني للتصميم طبقا للكود الامريكي" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;في هذا الدليل الهندسي الشامل، سنتعرف على &lt;b&gt;أساسيات تصميم Slab on Grade وفقاً لكود ACI 360R&lt;/b&gt; وتوصيات جمعية الأسمنت البورتلاندي (PCA)، مع شرح كيفية استخدام شيت إكسل GRDSLAB.xls المخصص لتحليل وحساب سمك البلاطة، إجهادات الانثناء، وتسليح الفواصل.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;ما هي البلاطة الخرسانية على التربة (Slab on Grade)؟&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;البلاطة على التربة (Slab on Grade) هي بلاطة خرسانية تُصب مباشرة فوق طبقة تأسيس من التربة المُدكوكة أو الردم المدموك (Subgrade / Subbase). تختلف هذه البلاطات عن البلاطات الإنشائية المعلقة (Suspended Slabs) في أنها تعتمد بشكل كلي على مقاومة التربة أسفلها (Subgrade Reaction) لنقل وتوزيع الأحمال.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;أنواع الأحمال المؤثرة على البلاطات الأرضية:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;الأحمال المركزة (Point/Post Loads): مثل أرجل رفوف التخزين العالية (Storage Racks) في المستودعات.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;أحمال المعدات والآليات (Wheel Loads): مثل رافعات الشوكة (Forklifts) والشاحنات (AASHTO Loads).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;أحمال الجدران الخطية (Line Loads): الجدران الخرسانية أو جدران البلوك المباشرة على البلاطة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;الأحمال الموزعة بانتظام (Uniform Live Loads): البضائع والمواد المخزنة مباشرة على الأرضية.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: right;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;خطوات تصميم Slab on Grade وفق الكود الأمريكي ACI 360R يتضمن تصميم أرضيات المصانع والمستودعات عدة مراحل متتالية لضمان السلامة الإنشائية وقابلية التشغيل (Serviceability):&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: right;"&gt;&lt;span style="font-size: medium;"&gt;1. تحديد معامل رد فعل التربة (k) يُعبر المعامل (k)&amp;nbsp;عن صدم وقوة تحمل التربة أسفل الخرسانة. يتم تحديده من خلال اختبار التحميل باللوح (Plate Load Test).&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: right;"&gt;&lt;span style="font-size: medium;"&gt;2. حساب إجهاد الانثناء المسموح به (Allowable Flexural Stress)تعتمد مقاومة الخرسانة للانثناء على معامل التصدع (Modulus of Rupture)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;3. حساب السمك المطلوب للبلاطة (Slab Thickness Design)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;يتم استخدام معادلات ويسترغارد المعدلة (Modified Westergaard Equations) لحساب الإجهادات في الأحوال الثلاثة الشائعة:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;التحميل الداخلي (Interior Loading): أبعد ما يكون عن الفواصل.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;تحميل الحافة (Edge Loading): بالقرب من الفواصل بدون وسائط نقل أحمال.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;تحميل الركن (Corner Loading): عند زوايا البلاطة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;نقل الأحمال وتصميم الفواصل (Joints &amp;amp; Dowels)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;من أهم أسباب نجاح أرضيات المستودعات هو التخطيط السليم للفواصل وتصميم قضبان التمرير (Dowels) لمنع الهبوط المتفاوت (Differential Settlement) وتكسر الأطراف:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;فواصل الانكماش (Contraction Joints):&lt;/b&gt; تُقيد الشروخ الناتجة عن انكماش الجفاف والحرارة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;فواصل التمدد والعزل (Isolation Joints):&lt;/b&gt; تُستخدم لعزل البلاطة عن الأعمدة والقواعد.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;أسياخ التمرير (Dowel Bars):&lt;/b&gt; أسياخ ملساء تُوضع عند الفواصل لنقل أحمال القص من بلاطة لأخرى دون إعاقة الحركة الأفقية للخرسانة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;شرح شيت إكسل لتصميم البلاطات الأرضية: GRDSLAB.xls&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;لتسهيل العمليات الحسابية والمعادلات المعقدة، يُعد برنامج GRDSLAB.xls من أفضل الأدوات المساعدة للمهندسين الإنشائيين. يغطي الشيت كافة سيناريوهات التحليل والتصميم المطلوبة.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;مميزات شيت اكسيل تصميم البلاطات الارضية&amp;nbsp; ( SLAB ON GRADE ) GRDSLAB.xls:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;تحليل الأحمال المركزة (Post &amp;amp; Wheel Loads):&lt;/b&gt; حساب إجهادات الانثناء للخرسانة والقص الثاقب (Punching Shear) وتدقيق التحميل على التربة.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;مخططات PCA المدمجة:&lt;/b&gt; يحتوي على جداول ومنحنيات Portland Cement Association (Figures 3, 7a, 7b, 7c) لحساب السمك المطلوب تلقائياً بمدخلات الأحمال و (k).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;تحليل أحمال الجدران والأحمال الموزعة (Wall &amp;amp; Uniform Loads):&lt;/b&gt; حساب أقصى حمل موزع بعرض الممر الحرج .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;حساب تسليح الحرارة والانكماش:&lt;/b&gt; تحديد شبكة التسليح الأدنى للحد من عرض الشقوق.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;تدقيق وصلات قضبان التمرير (Dowels Check):&lt;/b&gt; فحص إجهادات القص والتحمل للـ Dowels عند الفواصل.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;مكتبة بيانات الآليات:&lt;/b&gt; يتضمن بيانات رافعات الشوكة (Forklift Data) وشاحنات AASHTO الجاهزة للاستخدام.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="text-align: right;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;تحميل شيت إكسل GRDSLAB.xls مجاناً&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;يمكنك تحميل النسخة المعتمدة من الشيت لاستخدامها مباشرة في مشاريعك الإنشائية&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-large;"&gt;[&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;شيت إكسل تصميم البلاطات الارضية SLAB ON GRADE/GROUND&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: x-large;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://www.mediafire.com/file/on2rn4j62w7tn1l/GRDSLAB.xls/file" target="_blank"&gt;&lt;span style="font-size: x-large;"&gt;Mediafire.com&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: x-large;"&gt;OR&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;a href="https://docs.google.com/spreadsheets/d/1EQ_Z4BRcLQg5yolkaN-BmPPsXb0CuxEa/edit?usp=sharing&amp;amp;ouid=101106377943204369614&amp;amp;rtpof=true&amp;amp;sd=true" target="_blank"&gt;Google.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;الهدية الاضافية&amp;nbsp;هي اداة تصميم البلاطات الارضية طبقا للكود الامريكي ACI 360R-10&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: red;"&gt;الاداة تعمل اونلاين مع امكانية تصدير نوتة حسابية لحسابات التصميم الكامل بشكل مجاني&amp;nbsp;&lt;br /&gt;&lt;/span&gt;رابط الاداة مع فيديو الشرح : &lt;a href="https://www.civilmaker.com/2026/10/slab-on-grade-design-calculator.html" target="_blank"&gt;اداة تصميم البلاطات الارضية اونلاين&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الأسئلة الشائعة (FAQ) حول تصميم البلاطات الأرضية&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Q1: هل تحتاج البلاطة على التربة (Slab on Grade) إلى تسليح إنشائي؟&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;غالباً لا تُصمم البلاطات الأرضية العادية كمقاطع خرسانية مسلحة للانثناء (Reinforced Concrete) إلا في حالات الأحمال العالية جداً أو التربة الضعيفة. التسليح المستخدم عادة (شبك BRC) هو تسليح حراري وضد الانكماش فقط.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Q2: ما هو السمك الأدنى الموصى به لأرضيات المستودعات؟&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;السمك الأدنى الشائع للمستودعات الخفيفة هو 150 مم (6 بوصات)، وقد يصل إلى 200 - 250 مم (8 - 10 بوصات) في مستودعات التخزين العالي والمصانع الثقيلة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Q3: كيف أختار المسافة بين فواصل الانكماش (Joint Spacing)؟&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;وفقاً لـ ACI 360R، يفضل أن تكون المسافة بين الفواصل بالمتر مساوية لـ 21 إلى 24 ضعف سمك البلاطة بالسنتمتر (مثال: بلاطة سمك 15 سم تكون المسافة بين فواصلها بين 3.15 م إلى 3.60 م)، بحيث لا تتجاوز نسبة الطول إلى العرض (1.25) للباكة الواحدة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKhwdH5jq8RYuEvETVtseTYxS1QYhVsMso0iKdvQQIusJr0dcmp208brSrG1in0EpilNuWuRXal9dH-Sx8a8CYl0sh-QkyMPff1lspImlD3QF_iT1XeL0cbYMVEW2-EObqQYloUox45spucIqELbg_xafbUHsoaJRxzzEAQdCEJhChkr0nEVe4yknfGJRT/s72-w640-h416-c/%D8%AA%D8%B5%D9%85%D9%8A%D9%85%20%D8%A7%D9%84%D8%A8%D9%84%D8%A7%D8%B7%D8%A7%D8%AA%20%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>كيفية تصميم الحمامات وتوزيع الأدوات الصحية بطريقة احترافية </title><link>https://www.civilmaker.com/2026/01/bathroom-design-ideas.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 30 Jan 2026 13:35:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3710218299304929215</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;يعتبر الحمام من أكثر المناطق تعقيداً في تصميم المنزل؛ فهو ليس مجرد مساحة صغيرة، بل هو نقطة التقاء لمجموعة واسعة من أعمال السباكة والكهرباء والتفاصيل الديكورية. في هذا المقال، سنستعرض القواعد الأساسية لتوزيع الأدوات الصحية بناءً على أفضل الممارسات الهندسية لتجنب المشاكل المستقبلية .&amp;nbsp;&lt;br /&gt;فكيف تخطط لتوزيع الأدوات الصحية في الحمام باحترافية ؟&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrWJ2bhuHJ_X06FQdzSCLpezIaOFs1Fgdr4A5KvS1kF6-LWoVjcezSo9VqgTA4KaABhZ9vpWZjKONTzVwhqDJdNAlXLtASsfjx2ArpAxMjM3wwaVfr_qRSRvKvTCWNpxDjCa1wpL0ziR-zqf5bxteX1_OIQlGf2Y09qGIGtvOUW1iz41C8rfwEWdR9IYxk/s788/wc1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="نتكلم عن تفاصيل التصميم النموذكي والافكار لفرش وتوزيع الوحدات الصحية داخل الحمامات ودورات المياه واخطاء التنفيذ والمقاسات المناسبة وديكورات التشطيب ." border="0" data-original-height="395" data-original-width="788" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrWJ2bhuHJ_X06FQdzSCLpezIaOFs1Fgdr4A5KvS1kF6-LWoVjcezSo9VqgTA4KaABhZ9vpWZjKONTzVwhqDJdNAlXLtASsfjx2ArpAxMjM3wwaVfr_qRSRvKvTCWNpxDjCa1wpL0ziR-zqf5bxteX1_OIQlGf2Y09qGIGtvOUW1iz41C8rfwEWdR9IYxk/w640-h320/wc1.PNG" title="نتكلم عن تفاصيل التصميم النموذكي والافكار لفرش وتوزيع الوحدات الصحية داخل الحمامات ودورات المياه واخطاء التنفيذ والمقاسات المناسبة وديكورات التشطيب ." width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;لماذا يعتبر تصميم الحمام تحدياً حقيقياً؟&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;يكمن التعقيد في الحمامات في تداخل عدة مهام في مساحة محدودة، حيث تشمل العمليات:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;• التمديدات التقنية : تشمل أعمال السباكة المعقدة وتوزيع نقاط الكهرباء.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;• العناصر الجمالية : مثل التجاويف (Niches) ، وتوزيع الإضاءات، واختيار الأرضيات المناسبة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;• الدقة المتناهية : أي خطأ صغير في التوزيع أو التنفيذ قد يؤدي إلى مشاكل كبيرة يصعب حلها لاحقاً.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;توزيع الأدوات الصحية :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;لضمان الراحة في الاستخدام والجمالية في المظهر، يعتمد المصممون عادةً على نماذج محددة لتوزيع الأدوات الصحية. يعتمد اختيار النموذج على مساحة الحمام ومواقع الصرف الرئيسية. يهدف التوزيع الصحيح إلى:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;1. سهولة الحركة داخل الحمام.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;2. انسيابية تمديدات السباكة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;3. إبراز العناصر الديكورية بشكل ممتاز.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;أفضل الممارسات في وضع الإكسسوارات والمحابس&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;لا يقتصر التصميم على القطع الكبيرة فقط، بل يمتد ليشمل التفاصيل التشغيلية التي تضمن سهولة الصيانة والاستخدام اليومي، ومن أهمها:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;• المحبس الرئيسي : يجب اختيار موقع استراتيجي يسهل الوصول إليه في حالات الطوارئ دون أن يفسد المظهر العام فمن الممكن وضعه اسفل حوض الغسيل او يمكن وضعه خلف باب الدخول ايضا .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;• السخان : وضع السخان في مكان يسهل صيانته ويوفر كفاءة في وصول المياه الساخنة .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;إليكم اكثر ثلاث نماذج توزيع الأدوات الصحية شيوعا&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;• النموذج الأول (الحمام الطولي) :&lt;/b&gt; رسم يوضح ترتيب العناصر على جدار واحد (المغسلة، ثم المرحاض، ثم منطقة الشاور في النهاية).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;• النموذج الثاني (توزيع الزوايا) :&lt;/b&gt; يوضح استغلال الأركان في الحمامات المربعة لتوفير مساحة حركة في المنتصف.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;• النموذج الثالث (التوزيع المتقابل) :&lt;/b&gt; يوضح وضع المغسلة في جهة والمرحاض في جهة أخرى، وهو مناسب للمساحات المتوسطة.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWA-HO_VwelQocfPGUVO1hutwvEm3XC9bG0fe1466-H9-X4AJ4yPF_HxQWRpLbb0yu4PqShpEhw_8CN5Tz90oIgeYbNWKTBFtAbO3bwzs-STzP3_hG2xcfkAiKrisZSLpQjkgwLEkO_vFndUnltsgQ4yJmPY3EbAqzav4DWEzObr3DCW3fdXVWFASNQs1x/s1034/wc2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="نتكلم عن تفاصيل التصميم النموذكي والافكار لفرش وتوزيع الوحدات الصحية داخل الحمامات ودورات المياه واخطاء التنفيذ والمقاسات المناسبة وديكورات التشطيب ." border="0" data-original-height="573" data-original-width="1034" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWA-HO_VwelQocfPGUVO1hutwvEm3XC9bG0fe1466-H9-X4AJ4yPF_HxQWRpLbb0yu4PqShpEhw_8CN5Tz90oIgeYbNWKTBFtAbO3bwzs-STzP3_hG2xcfkAiKrisZSLpQjkgwLEkO_vFndUnltsgQ4yJmPY3EbAqzav4DWEzObr3DCW3fdXVWFASNQs1x/w640-h354/wc2.PNG" title="نتكلم عن تفاصيل التصميم النموذكي والافكار لفرش وتوزيع الوحدات الصحية داخل الحمامات ودورات المياه واخطاء التنفيذ والمقاسات المناسبة وديكورات التشطيب ." width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;ملاحظة هندسية مهمة : الأبعاد التالية تمثل الحدود المريحة والآمنة طبقًا لأفضل الممارسات، ويمكن تعديلها حسب المساحة مع الحفاظ على الحد الأدنى للحركة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;منطقة الشاور (الدش)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- أقل مساحة مقبولة&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;80 × 80 سم اما&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: medium;"&gt;المساحة المثالية للشاور&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;90 × 90 سم و المساحة ال&lt;/span&gt;&lt;span style="font-size: large;"&gt;مريحة جدًا (فنادق / فلل)&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;100 × 100 سم أو أكثر .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;كرسي المرحاض (WC)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الأبعاد الأفقية&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- عرض المرحاض: 36 – 38 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- طول المرحاض: 65 – 70 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;المسافات المحيطة&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- المسافة الأمامية المريحة : 60 – 75 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- المسافة الجانبية (يمين ويسار) : ≥ 20 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- العرض الكلي للمكان المخصص : 80 – 90 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;المغسلة / الحوض&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- أبعاد المغسلة التقريبية&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;العرض يكون بين&amp;nbsp; 50 – 60 سم اما&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;العمق من 40 – 50 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الارتفاعات للوحدات الصحية داخل الحمام&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع حافة المغسلة من الأرض: 85 – 90 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع الخلاط 100 – 110 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع المرآة يبدأ من 100 سم وحتى 190 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع خلاط الشاور: 110 – 120 سم&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع رأس الدش: 200 – 210 سم&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ارتفاع فاصل الزجاج: 190 – 200 سم&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;المسافات العامة داخل الحمام (المسار الحركي)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- عرض الممر الأدنى يكون&amp;nbsp; 70 سم بينما&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;العرض المريح للحركة&amp;nbsp; 90 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- فراغ الحركة&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;المسافة أمام المغسلة يكون بين 60 – 75 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;فتح باب الحمام:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- أقل عرض باب يكون&amp;nbsp; 70 سم و&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;المثالي يكون&amp;nbsp; 80 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;&amp;nbsp;نيشات الحمام (Niches) وتسمي تجاويف او خورنقات ايضا&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- نيش الشاور يكون&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: medium;"&gt;العرض 30 – 40 سم و&lt;/span&gt;&lt;span style="font-size: medium;"&gt;الارتفاع&amp;nbsp; 60 – 70 سم اما &lt;/span&gt;&lt;span style="font-size: medium;"&gt;العمقفيكون&amp;nbsp; 8 – 12 سم و&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;الارتفاع المناسب من الأرض من 110 – 130 سم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- نيش أعلى المرحاض يكون &lt;/span&gt;&lt;span style="font-size: medium;"&gt;العمق 15 – 20 سم و&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;الارتفاع حسب التصميم (غالبًا ديكوري) .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;ميل الأرضية : &lt;/b&gt;&lt;br /&gt;- يفضل ان يكون الميل 1 – 2% ويكون&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;اتجاه الميل نحو الصفاية مباشرة كما&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: large;"&gt;يفضل صفاية خطية في الشاور للمساحات الحديثة .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;أخطاء شائعة يجب التنبيه لها :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- وضع المرحاض قريب جدًا من الجدار الجانبي.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- مساحة شاور أقل من 80 سم.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- وضع الصفاية فى وسط الحمام وليس اسفل الشطاف .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- عدم ترك فراغ كافٍ أمام المغسلة.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- تجاهل اتجاه فتح الباب.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- ميل أرضية غير كافٍ يسبب تجمع المياه.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: large;"&gt;التصميم الجيد للحمام لا يعتمد على شكل الأدوات فقط ، بل على الأبعاد الصحيحة والمسافات المدروسة التي تضمن الراحة وسهولة الاستخدام وسلامة التنفيذ .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrWJ2bhuHJ_X06FQdzSCLpezIaOFs1Fgdr4A5KvS1kF6-LWoVjcezSo9VqgTA4KaABhZ9vpWZjKONTzVwhqDJdNAlXLtASsfjx2ArpAxMjM3wwaVfr_qRSRvKvTCWNpxDjCa1wpL0ziR-zqf5bxteX1_OIQlGf2Y09qGIGtvOUW1iz41C8rfwEWdR9IYxk/s72-w640-h320-c/wc1.PNG" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Free PMP Diploma Summary</title><link>https://www.civilmaker.com/2024/11/free-pmp-diploma-summary.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 15 Nov 2024 07:47:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-5826357179162378540</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;تعد شهادة ( Project Management Professional ) PMP&amp;nbsp; هي الشهادة الاكثر احترافية على مستوي العالم فى مجال ادارة المشروعات ولا يخفي عليكم زيادة الطلب على هذه الشهادة العاليمة نظرا لمتطلبات سوق العمل العالمي والمحلى اتجاه هذه الشهادة الاحترافية .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgOFagHil9AJSiHw8EQlXui5DYsB8UI6tk6kLevIf7zHKqs3VyUux9MCct-lPkDK7sFXONEJgCR6yD7Cn5Q-RPLNzbbDV2zqfh_E9XyglbYipY6gQQvP0iLgxwne4MNiLUQ1PTPI9uqZpe8-wvaXGSYzmNjh2bhy1vklySbJGb4st0L0KChjtiEP7sr3bO/s603/1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="( Project Management Professional ) PMP" border="0" data-original-height="398" data-original-width="603" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgOFagHil9AJSiHw8EQlXui5DYsB8UI6tk6kLevIf7zHKqs3VyUux9MCct-lPkDK7sFXONEJgCR6yD7Cn5Q-RPLNzbbDV2zqfh_E9XyglbYipY6gQQvP0iLgxwne4MNiLUQ1PTPI9uqZpe8-wvaXGSYzmNjh2bhy1vklySbJGb4st0L0KChjtiEP7sr3bO/w640-h422/1.PNG" title="Free PMP Diploma Summary" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;ونقدم لكم فى هذا الموضوع احد افضل الملخصات الاحترافية لشهادة دبلومة ادارة المشاريع PMP من اعداد الماضر المتميز د / احمد السنوسي وقد قام باعداد هذا الملخص بناء على خبرته الواسعة فى مجال تدريب الحاصلين على هذه الشهادة لتكون عون لهم لفهم واجتياز اختبار الشهادة الاحترافية PMP .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;حيث تحتوي هذه الورقات على ملخص شامل للنقاط التالية :-&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; . Overview and Project Characteristics -&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;. Creating A High-Performing Team -&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;. Starting The Project-&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;. Doing The Work -&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;. Keeping the team on Track -&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;. Keeping The Business in Mind -&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvBD8UMbauOAmeM2TaiXNFBlUXDA2lQjPUCawV1z65IOFjyeitfZHxg54r_5Sa3nrhmm_cBC1WQjUT4z2xF19f3XEXbBdz8JfXXnwVk96Kks5Sk94JuUgtTnPGMA0-1XXNKdsfYQ04CTUlvDD-RPHvMncebduy0n2wKFx49wbRXrbEy4LoTOYR-YO-JFu/s1242/2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Free PMP Diploma Summary" border="0" data-original-height="753" data-original-width="1242" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvBD8UMbauOAmeM2TaiXNFBlUXDA2lQjPUCawV1z65IOFjyeitfZHxg54r_5Sa3nrhmm_cBC1WQjUT4z2xF19f3XEXbBdz8JfXXnwVk96Kks5Sk94JuUgtTnPGMA0-1XXNKdsfYQ04CTUlvDD-RPHvMncebduy0n2wKFx49wbRXrbEy4LoTOYR-YO-JFu/w640-h388/2.PNG" title="Free PMP Diploma Summary" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;التحميل&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;ملخص دبلومة PMP&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://www.mediafire.com/file/fi8ubhrqbl7grls/PMP+Summary.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://drive.google.com/file/d/1wzl9uKD2FNwj7P9Pzdvvu5_Y6DlMUdDg/view?usp=sharing" target="_blank"&gt;Drive.google.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgOFagHil9AJSiHw8EQlXui5DYsB8UI6tk6kLevIf7zHKqs3VyUux9MCct-lPkDK7sFXONEJgCR6yD7Cn5Q-RPLNzbbDV2zqfh_E9XyglbYipY6gQQvP0iLgxwne4MNiLUQ1PTPI9uqZpe8-wvaXGSYzmNjh2bhy1vklySbJGb4st0L0KChjtiEP7sr3bO/s72-w640-h422-c/1.PNG" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مختصر شرح القوة الزلزالية حسب الكود السعودي </title><link>https://www.civilmaker.com/2024/10/sbc-earthquake-code.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 18 Oct 2024 07:39:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-1122449129825634572</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;نقدم لكم فى هذا الموضوع شرح ملخص للقوة الزلزالية حسب الكود السعودي شاملا جميع المعادلات والبنود والجداول التي يتضمنها الكود السعودي للبناء وكود الاحمال السعودي .&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYe1h3NMmTC6rV9Hbot5Vb74f1pq44A2y0i2bqrbEoZeOYkxuV7m4DrAJUVeOjO57zsSnqVNYiXOOndAXuNDb5JKusIl7TaOOebok6_chFiiDHCWQZZBdS9OzcjlEoZQEkiEcY4DsaFJK0jzJfIi2uxVXNqnMjdAQW27S82W_3A4E-tqL_TKgowRvll0G5/s584/%D8%B2%D9%84%D8%B2%D9%84%D9%84.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="نقدم لكم فى هذا الموضوع شرح ملخص للقوة الزلزالية حسب الكود السعودي شاملا جميع المعادلات والبنود والجداول التي يتضمنها الكود السعودي للبناء وكود الاحمال السعودي ." border="0" data-original-height="226" data-original-width="584" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYe1h3NMmTC6rV9Hbot5Vb74f1pq44A2y0i2bqrbEoZeOYkxuV7m4DrAJUVeOjO57zsSnqVNYiXOOndAXuNDb5JKusIl7TaOOebok6_chFiiDHCWQZZBdS9OzcjlEoZQEkiEcY4DsaFJK0jzJfIi2uxVXNqnMjdAQW27S82W_3A4E-tqL_TKgowRvll0G5/w640-h248/%D8%B2%D9%84%D8%B2%D9%84%D9%84.PNG" title="مختصر شرح القوة الزلزالية حسب الكود السعودي" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;وقد قام المهندس &lt;a href="https://www.linkedin.com/in/ACoAADvZ_MsBcgI1kReQy86CoG2ZaNgGKyeeeww?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAADvZ_MsBcgI1kReQy86CoG2ZaNgGKyeeeww&amp;amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_myitems_savedposts%3BpEVBY9vdTe22wrCqqz0z6Q%3D%3D" target="_blank"&gt;ALI BABIKER&lt;/a&gt;&amp;nbsp; باعداد هذا الملخص حيث تضمن جميع الرموز والمعادلات والتعريفات الخاصة بتطبيق احمال قوة الزلزال على المباني وتعريف معاملات التصميم والطيف الزلزالى ومعامل وزن المبني وطريقة مقاومة المبني للاحمال الجانبية الواقعة عليه .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGz7qJX2ShLnVtoAPmz4vK6g86s-MlRZfjMn5Q04Uw1lotl7eH7xHM8hQQ5Fe8HwXF50Wl0Ji9_AS7134maicCwGEqiF5JZfUIRiUi9ff37PnL4KtqjdFsy2dDXEAnaEupkWJF3zZtlULupLmPYmpRNa-kkKRCw_tSsReGtfNLFhp3tBOCytWJ1s5oOw0K/s1087/%D8%B2%D8%A7%D9%84%D8%B2%D9%84.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مختصر شرح القوة الزلزالية حسب الكود السعودي" border="0" data-original-height="677" data-original-width="1087" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGz7qJX2ShLnVtoAPmz4vK6g86s-MlRZfjMn5Q04Uw1lotl7eH7xHM8hQQ5Fe8HwXF50Wl0Ji9_AS7134maicCwGEqiF5JZfUIRiUi9ff37PnL4KtqjdFsy2dDXEAnaEupkWJF3zZtlULupLmPYmpRNa-kkKRCw_tSsReGtfNLFhp3tBOCytWJ1s5oOw0K/w640-h398/%D8%B2%D8%A7%D9%84%D8%B2%D9%84.PNG" title="مختصر شرح القوة الزلزالية حسب الكود السعودي" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;حيث تم توضيح طريقة حساب قيمة تسارع الزلزال للفترة القصيرة وحساب قيمة العجلة الزلزالية التصميمية مع شرح طريقة استخراج قيم معاملات التصحيح حسب تصنيف التربة وحسب المنطقة الزلزالية ونوع اشغال المبني نفسه حسب درجة الخطورة بالاضافة الى استخراج قيمة معامل Response Modification على حسب عناصر مقاومة الزلزال المتوفر بالمبني وكيفية توزيع احمال الزلزال على كل طابق بناء على نسبة احمال الدور لمجموع الاحمال الكلية للمبني .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;التحميل&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;ملخص شرح القوة الزلزالية حسب الكود السعودي&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://www.mediafire.com/file/xg8kjefp4630q0x/ملخص+الكود+السعودي+زلازل.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://drive.google.com/file/d/11WGPSTWa_hcWyptGs8HLuc_hVLpmjBGo/view?usp=sharing" target="_blank"&gt;Drive.google.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYe1h3NMmTC6rV9Hbot5Vb74f1pq44A2y0i2bqrbEoZeOYkxuV7m4DrAJUVeOjO57zsSnqVNYiXOOndAXuNDb5JKusIl7TaOOebok6_chFiiDHCWQZZBdS9OzcjlEoZQEkiEcY4DsaFJK0jzJfIi2uxVXNqnMjdAQW27S82W_3A4E-tqL_TKgowRvll0G5/s72-w640-h248-c/%D8%B2%D9%84%D8%B2%D9%84%D9%84.PNG" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>نموذج نوتة حسابية كاملة ورد Calculation Note بالكود الامريكي </title><link>https://www.civilmaker.com/2024/05/CALCULATION-NOTE.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 10 May 2024 11:12:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-6752231001921009828</guid><description>&lt;span style="font-size: medium;"&gt;نقدم اليكم فى هذا الموضوع نموذج كامل لنوتة حسابية Calculation Sheet تتضمن الحسابات الانشائية لمشروع كامل بمدينة ابو ظبي طبقا للكود الامريكي للمنشآت ACI-318&amp;nbsp; حيث تم تفصيل تصميم جميع العناصر الانشائية بالمشروع كاملا باستخدام برامج التصميم المعتمدة CSI SAFE &amp;amp; CSI ETABS&amp;nbsp; بالاضافة الي الاستعانة ببرامج EXCEL &amp;amp; PROKON .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRKTFey0meWNVs5DUmZO-tEmb3LXvA07R7DGd0R6QiCI6b1cIye1f7MoE956VYkG3nT-NynpMZw8e8_lN1tKqFibDkvFiwMF_Gw6cZdOxjwzokcBw2jFgJefmK9F9P8t3eVdODHeR6Ot_l0dt3_raQbott2lC9pgeiOoZFDHaLOPzqwHIE5JcrVcW9dUj/s787/calculation%20sheet.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="نموذج نوتة حسابية كاملة ورد Calculation Note بالكود الامريكي" border="0" data-original-height="262" data-original-width="787" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRKTFey0meWNVs5DUmZO-tEmb3LXvA07R7DGd0R6QiCI6b1cIye1f7MoE956VYkG3nT-NynpMZw8e8_lN1tKqFibDkvFiwMF_Gw6cZdOxjwzokcBw2jFgJefmK9F9P8t3eVdODHeR6Ot_l0dt3_raQbott2lC9pgeiOoZFDHaLOPzqwHIE5JcrVcW9dUj/w640-h236/calculation%20sheet.PNG" title="نموذج نوتة حسابية كاملة ورد Calculation Note بالكود الامريكي" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;يحتوي تقرير النوتة الحسابية على جميع الحسابات والمعاملات الانشائية وتفصيل كل ذلك ضمن صفحات التقرير حيث يحتوي على :-&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="text-align: left;"&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;1 Structural Design Criteria&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;2 Building Description&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3 Main Building Calculations&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1 Slab Design (safe output)&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1.1 Slab Dimensions&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1.2 Loads&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1.3 Long Term Deflection&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1.4 Punching capacity&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;3.1.5 Slab Reinforcement&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;4 Steel Cage Design&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;5 Column Design Prokon&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;6 Design of foundations&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;7 Etabs output calculations&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;7.1 Column design&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;7.2 Shear wall design&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;7.3 Check seismic expansion joint&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;8 Service Building&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;8.1 Ground and Roof Slab Dimension&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;8.2 Loads&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;8.3 Long term deflection&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;8.4 Slab reinforcement&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;يمكنكم الحصول على النوتة الحسابية كاملة بصيغة ورد doc&amp;nbsp; و PDF&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;نموذج نوتة حسابية كاملة ورد Calculation Note بالكود الامريكي&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;a href="https://www.mediafire.com/file/xehuf222jekyknf/نوتة+حسابية+كاملة.rar/file" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Mediafire.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div dir="rtl" style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1AQVHlywvRcbC01PnAKzR5PXzrl8tUaWo/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRKTFey0meWNVs5DUmZO-tEmb3LXvA07R7DGd0R6QiCI6b1cIye1f7MoE956VYkG3nT-NynpMZw8e8_lN1tKqFibDkvFiwMF_Gw6cZdOxjwzokcBw2jFgJefmK9F9P8t3eVdODHeR6Ot_l0dt3_raQbott2lC9pgeiOoZFDHaLOPzqwHIE5JcrVcW9dUj/s72-w640-h236-c/calculation%20sheet.PNG" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF</title><link>https://www.civilmaker.com/2024/02/sanitary-building.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 2 Feb 2024 11:46:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-7669169473303707719</guid><description>&lt;span style="font-size: medium;"&gt;مذكرة شرح المختصر المفيد &lt;b&gt;لاعمال الصرف فى المباني وتنفيذ شبكة صرف المجاري&lt;/b&gt; سواء الصرف الداخلى او الصرف الخارجي وكذلك صرف مياة الامطار للاسطح ، كما يحتوي الشرح على صور ورسومات وتطبيقات دراسية لغرض تبسيط وشرح اعمال الصرف ، كما يتم شرح مكونات وانواع عناصر شبكات صرف المباني وفنيات تنفيذها .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm0gB8W__ExOL5TMpbIKWb7gVzQ68tUJr6VGHtwNlJ3VzftAnfld4_v114c4Uu0QyGXTzuo_RhscIN4XGleTruyrZhMBMpwGRU_WwoGPB4Q6ke03yxkFlGZfplgZzmfXRLmPO6fLv9ZswPx-DdfY0QJ7BKMOUy9o4Ke5FaouCw-Zw-3AwloH6Z1sN2Yg3e/s1000/%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D9%86%D9%8A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm0gB8W__ExOL5TMpbIKWb7gVzQ68tUJr6VGHtwNlJ3VzftAnfld4_v114c4Uu0QyGXTzuo_RhscIN4XGleTruyrZhMBMpwGRU_WwoGPB4Q6ke03yxkFlGZfplgZzmfXRLmPO6fLv9ZswPx-DdfY0QJ7BKMOUy9o4Ke5FaouCw-Zw-3AwloH6Z1sN2Yg3e/w640-h416/%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D9%86%D9%8A.png" title="مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;محاضرات مهمة وشرح مميز لاعمال صرف المباني PDF ويأتي فيما يلي عناصر هذا الكتاب :-&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;1- مقدمة شرح وفلسفة اعمال تنفيذ شبكة صرف المباني .&lt;br /&gt;2- مكونات وعناصر شبكة الصرف الداخلى للمباني وانواع واشكال الوحدات الصحية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;3- مكونات وعناصر الصرف الخارجي وانواع سيفون الجاليتراب ووظيفته وطريقة تنفيذ الجاليتراب .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;4- غرف التفتيش و مواصفات و طريقة تنفيذها .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;5- تنفيذ تصريف مياة الامطار وتفاصيل تنفيذ ميول الصرف .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;6- متطلبات انشاء شبكة المجاري العمومية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;7- ملحقات الصرف الداخلى لبيبة صرف الحوض داخل الحمام .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;8- شرح بالصور والرسومات لشبكة الصرف للمباني .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;للحصول على مذكرة شرح اعمال الصرف pdf&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://www.mediafire.com/file/10qiw1lw30rg4qm/%D8%B5%D8%B1%D9%81+%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D9%86%D9%89.pdf" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1lzSmFRvZ-_H3Wx-BeqfDsbscdzHfmQut/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm0gB8W__ExOL5TMpbIKWb7gVzQ68tUJr6VGHtwNlJ3VzftAnfld4_v114c4Uu0QyGXTzuo_RhscIN4XGleTruyrZhMBMpwGRU_WwoGPB4Q6ke03yxkFlGZfplgZzmfXRLmPO6fLv9ZswPx-DdfY0QJ7BKMOUy9o4Ke5FaouCw-Zw-3AwloH6Z1sN2Yg3e/s72-w640-h416-c/%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D9%86%D9%8A.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="6102130" type="application/pdf" url="http://www.mediafire.com/file/10qiw1lw30rg4qm/%D8%B5%D8%B1%D9%81+%D8%A7%D9%84%D9%85%D8%A8%D8%A7%D9%86%D9%89.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>مذكرة شرح المختصر المفيد لاعمال الصرف فى المباني وتنفيذ شبكة صرف المجاري سواء الصرف الداخلى او الصرف الخارجي وكذلك صرف مياة الامطار للاسطح ، كما يحتوي الشرح على صور ورسومات وتطبيقات دراسية لغرض تبسيط وشرح اعمال الصرف ، كما يتم شرح مكونات وانواع عناصر شبكات صرف المباني وفنيات تنفيذها . محاضرات مهمة وشرح مميز لاعمال صرف المباني PDF ويأتي فيما يلي عناصر هذا الكتاب :-&amp;nbsp;1- مقدمة شرح وفلسفة اعمال تنفيذ شبكة صرف المباني . 2- مكونات وعناصر شبكة الصرف الداخلى للمباني وانواع واشكال الوحدات الصحية .3- مكونات وعناصر الصرف الخارجي وانواع سيفون الجاليتراب ووظيفته وطريقة تنفيذ الجاليتراب .4- غرف التفتيش و مواصفات و طريقة تنفيذها .5- تنفيذ تصريف مياة الامطار وتفاصيل تنفيذ ميول الصرف .6- متطلبات انشاء شبكة المجاري العمومية .7- ملحقات الصرف الداخلى لبيبة صرف الحوض داخل الحمام .8- شرح بالصور والرسومات لشبكة الصرف للمباني . للحصول على مذكرة شرح اعمال الصرف pdf&amp;nbsp;مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF Mediafire.comORDrive.google.com</itunes:subtitle><itunes:author>noreply@blogger.com (Ahmd Elzammar)</itunes:author><itunes:summary>مذكرة شرح المختصر المفيد لاعمال الصرف فى المباني وتنفيذ شبكة صرف المجاري سواء الصرف الداخلى او الصرف الخارجي وكذلك صرف مياة الامطار للاسطح ، كما يحتوي الشرح على صور ورسومات وتطبيقات دراسية لغرض تبسيط وشرح اعمال الصرف ، كما يتم شرح مكونات وانواع عناصر شبكات صرف المباني وفنيات تنفيذها . محاضرات مهمة وشرح مميز لاعمال صرف المباني PDF ويأتي فيما يلي عناصر هذا الكتاب :-&amp;nbsp;1- مقدمة شرح وفلسفة اعمال تنفيذ شبكة صرف المباني . 2- مكونات وعناصر شبكة الصرف الداخلى للمباني وانواع واشكال الوحدات الصحية .3- مكونات وعناصر الصرف الخارجي وانواع سيفون الجاليتراب ووظيفته وطريقة تنفيذ الجاليتراب .4- غرف التفتيش و مواصفات و طريقة تنفيذها .5- تنفيذ تصريف مياة الامطار وتفاصيل تنفيذ ميول الصرف .6- متطلبات انشاء شبكة المجاري العمومية .7- ملحقات الصرف الداخلى لبيبة صرف الحوض داخل الحمام .8- شرح بالصور والرسومات لشبكة الصرف للمباني . للحصول على مذكرة شرح اعمال الصرف pdf&amp;nbsp;مذكرة شرح اعمال الصرف للمباني بالصور والرسومات PDF Mediafire.comORDrive.google.com</itunes:summary><itunes:keywords>كتب هندسية</itunes:keywords></item><item><title>ما هو الفرق بين شهادة PMP و شهادة CAPM  ؟</title><link>https://www.civilmaker.com/2023/12/PMP-CAPM-Certification.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 29 Dec 2023 07:08:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-2626464750881100792</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;سؤالٌ شائع بين المهتمين بمجال ادارة المشروعات وهو &lt;b&gt;ما هو الفرق بين شهادتي PMP&amp;nbsp; و CAPM ؟&lt;/b&gt; وما هو السبب وراء هذا الاهتمام بالحصول على هذه الشهادات ؟&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oCUfKG0lTlcwG9HEQ-sniPqwusES6HwSXLvIPbQTi0XFp4kWKq9l6A6SoFPC2OKhb_YW7j8Mam-fskcGdndY9sVjncfCl9kJKyULKI5N9Xj1aZqY2t-MuELpWb6CEFTPFBuKAQc4547G-NCjUmtwOaqt0dbuOZ2eYrHh_NWwzgcJU1-VnarOHdgw6F58/s1000/PMP-CAPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="font-size: medium;"&gt;&lt;img alt="ما هو الفرق بين شهادة PMP و شهادة CAPM فى مجال إدارة المشاريع ؟ وما اهميتها للافراد والشركات و ما هي شروط الحصول على شهادات PMI ( PMP - CAPM )  ؟" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oCUfKG0lTlcwG9HEQ-sniPqwusES6HwSXLvIPbQTi0XFp4kWKq9l6A6SoFPC2OKhb_YW7j8Mam-fskcGdndY9sVjncfCl9kJKyULKI5N9Xj1aZqY2t-MuELpWb6CEFTPFBuKAQc4547G-NCjUmtwOaqt0dbuOZ2eYrHh_NWwzgcJU1-VnarOHdgw6F58/w640-h416/PMP-CAPM.png" title="ما هو الفرق بين شهادة PMP و شهادة CAPM  ؟" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;وفي هذا الموضوع نقدم لكم الاجابة على هذا السؤال على لسان أحد المنصات الرائدة فى مجال التدريب الهندسي ( United Engineers ) وقد جاء الرد كما يلي :-&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;-&amp;nbsp; ما هو الفرق بين شهادة PMP وشهادة&amp;nbsp; CAPM ؟&lt;br /&gt;&lt;/b&gt;تعتبر كلا الشهادتين هي شهادة مهنية من مجموع تسع شهادات يمنحها معهد ادارة المشاريع PMI ( بنسيلفانيا - الولايات المتحدة ) والمتخصصة فى مجال ادارة المشاريع بداية من الفكرة الى التسليم مروراً بجميع مراحل التخطيط والتنفيذ والمراقبة .&lt;br /&gt;أما عن شهادة PMP&amp;nbsp; فهي اختصار لـ Professional Project Management&amp;nbsp; وتعني ان الحاصل على هذه الشهادة لدية الخبرة والمعرفة والمهارة ليقود المشاريع بنجاح وانه شخص محترف فى مجال ادارة المشاريع .&lt;br /&gt;أما شهادة CAPM&amp;nbsp; هي اختصار لـ Certified Associate in Project Management وتعني ان الحاصل على هذه الشهادة لدية المعرفة الاساسية وملم بجميع مصطلحات واساسيات عملية ادارة المشاريع ويكون شخص مؤهل للعمل ضمن فريق إدارة المشروع .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;لذلك يمكن توضيع الفرق بين الشهادتين ان شهادة PMP هي موجهه أكثر للأشخاص الذين لديهم خبرات فى العمل في المشاريع ويريدون تعزيزها بشهادة عالمية اما شهادة CAPM&amp;nbsp; هي موجهه للاشخاص الجدد في مجال ادارة المشاريع ويمكون ان تكون هذه الشهادة هي الخطوة الاولى لهم بالدخول لمجال ادارة المشاريع ومن ثم يمكنهم احتراف مجال الادارة والحصول على شهادة PMP فيما بعد .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;وتظهر اهمية الشهادتين فى ان كثييير من المؤسسات والشركات الكبري قامت باعتمادهما كمعيار لاختيار كوادر المشاريع بسبب زيادة المهارات والمعرفة لدي الحاصلين على شهادات PMI والذي ينعكس بصورة جلية على اداء المشروع وللعلم فان شهادة PMP تعتبر هي الشهادة المهنية الاكثر طلبا فى العالم .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;التقديم على شهادة PMP&amp;nbsp; يتطلب الحصول على 35 ساعة تدريبية لدي احد الجهات المعتمدة من PMI مع خبرة لا تقل عن 3 سنوات عمل ( 4500 ساعة عمل ) وذلك للحاصلين على شهادة بكالريوس او 5 سنوات للحاصلين على دبلوم الثانوية وللحصول على هذه الشهادة يتطلب ذلك امتحان مكون 200 سؤال متعدد الاختيارات خلال مدة 4 ساعات .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;أما التقديم على شهادة CAPM يتلب الحصول على 23 ساعة تدريبية من احد الجهات المعتمدة لدي PMI او خبرة لا تقل عن 1500 ساعة عمل مع امتلاك دبلوم الثانوية ، والحصول على الشهادة يتطلب اجتياز امتحان من 150 سؤال متعدد الاختيارات خلال 3 ساعات .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;لذلك كثيرا ما ننصح الخريجين الجدد بالتقديم الاول على شهادة CAPM&amp;nbsp; ليتم بناء مستقبلهم فى عالم ادارة المشاريع على اساس متين .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;وللعلم فان شهادة PMP بيتم تجديدها كل 3 سنوات ويتم دفع رسوم انما شهادة CAPM فصلاحيتها 5 سنوات ولا يتم تجديدها الا باختبار جديد .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3oCUfKG0lTlcwG9HEQ-sniPqwusES6HwSXLvIPbQTi0XFp4kWKq9l6A6SoFPC2OKhb_YW7j8Mam-fskcGdndY9sVjncfCl9kJKyULKI5N9Xj1aZqY2t-MuELpWb6CEFTPFBuKAQc4547G-NCjUmtwOaqt0dbuOZ2eYrHh_NWwzgcJU1-VnarOHdgw6F58/s72-w640-h416-c/PMP-CAPM.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>افضل كتاب شامل فى أصول هندسة اعمال الترميم والدعيم PDF </title><link>https://www.civilmaker.com/2023/12/structural-repair-maintenance-supporting.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 1 Dec 2023 07:24:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3032476932851504147</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;كتاب " اصول هندسة الترميم والتدعيم " وهو كتاب متخصص بتفاصيل اعمال الترميم والتدعيم ومعالجة المشاكل الانشائية المختلفة التي تحدث فى العناصر الانشائية بالمباني الخرسانية وقد قام باعداده نخبة كبيرة من اساتذة مجال هندسة الترميم والتدعيم بمحتوي متميز وتفاصيل دقيقة حيث نفرد لكم فيما يلي محتويات ذلك الكتاب المميز :-&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1XrkLB1Tf3mbAqWu39w9CZ6bjWbAQ5DSmsSafsJoDqdwOKNw7TOVBI8iciGmZoHSu-U_-2nSAC6vw7rgYtV-aLqdKPAekicM677ZDlhROpAfQJYtDHx2MvammYtkOE-rUjMzlU8eapmgyQSt0S4IMyhYgLTsF_raxWC_VSdRFvlo9ZF8gj7jHvpBgHW8/s1000/%D8%A7%D9%84%D9%83%D8%AA%D8%A7%D8%A8-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%81%D9%89-%D8%A7%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D9%84%D8%AA%D8%AF%D8%B9%D9%8A%D9%85.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="font-size: medium;"&gt;&lt;img alt="افضل كتاب PDFمتخصص باصول اعمال هندسة الترميم والتدعيم من اعداد نخبة من اساتذة المجال الهندسي بمحتوي قوي وتفاصيل دقيقة لاعمال الصيانة والترميم والتدعيم" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1XrkLB1Tf3mbAqWu39w9CZ6bjWbAQ5DSmsSafsJoDqdwOKNw7TOVBI8iciGmZoHSu-U_-2nSAC6vw7rgYtV-aLqdKPAekicM677ZDlhROpAfQJYtDHx2MvammYtkOE-rUjMzlU8eapmgyQSt0S4IMyhYgLTsF_raxWC_VSdRFvlo9ZF8gj7jHvpBgHW8/w640-h416/%D8%A7%D9%84%D9%83%D8%AA%D8%A7%D8%A8-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%81%D9%89-%D8%A7%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D9%84%D8%AA%D8%AF%D8%B9%D9%8A%D9%85.png" title="افضل كتاب شامل فى أصول هندسة اعمال الترميم والدعيم PDF" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الاول :- نظم إنشاء المباني الخرسانية " أ.م.د شادية الابياري "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1 - النظم التقليدية ( نظام البلاطة والكمرة - نظام الاسقف والبلاطات اللاكمرية - نظام الاسقف والبلاطات ذات الاعصاب )&lt;br /&gt;2- النظم الحديثة للخرسانة المصبوبة بالموقع ( الانشاء بنظام الشدات النفقية - نظام الانشاء بالشدات المنزلقة راسيا - نظام البلاطات المرفوعة ) .&lt;br /&gt;3- نظم المباني الجاهزة ( الاعمدة والحوائط والبلاطات الجاهزة - البلاطات المفرغة سابقة الاجهاد والصب ) .&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الثاني :- عيوب و إنهيارات المنشآت الخرسانية " أ.د شريف أبو المجد - أ . م . د منير كمال "&lt;br /&gt;&lt;/b&gt;1- انواع العيوب بالمنشآت ( عيوب تتعلق بصلاحية استخدام المبني - عيوب تتعلق بأمان المنشآت - عيوب تتعلق بالعناصر الانشائية للمبني ) .&lt;br /&gt;2- أسباب العيوب بالمنشآت وانهيارها ( اسباب تتعلق بالتربة والاساسات - قصور بالتصميم أو تفاصيل التصميم - استخدام مواد بناء معيبة - القصور فى اساليب التنفيذ - عدم اخذ تأثير الحركة فى الاعتبار - حماية غير كافية للمنشآت - عدم صيانة المنشآت - تغيير استخدام المنشأ دون دراسة - الكوارث الطبيعية ) .&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الثالث :- الخرسانة المسلحة ومكوناتها وخواصهاواختباراتها " أ.د شريف ابو المجد - أ.د عمرو سلامة&amp;nbsp; "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1- مكونات الخرسانة وأثرها على تصدع المنشآت ( الاسمنت - الركام - ماء الخلط - الاضافات ) .&lt;br /&gt;2- خواص الخرسانة المؤثرة فى حدوث العيوب ( المقاومة للأحمال - الانكماش - المسامية والنفاذية - التحمل مع الزمن ) .&lt;br /&gt;3- أسس تكوين الشروخ ( كيفية تكون الشروخ بالعناصر الانشائية - تأثير صلب التسليح ) .&lt;br /&gt;4- اختبارات الخرسانة ( اختبارات الخرسانة الطازجة - اختبارات الخرسانة المتصلدة ) .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الرابع :- عيوب الخرسانة المسلحة انواعها ، اشكالها ، أسباب حدوثها " أ.د شريف ابو المجد "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1- شروخ الخرسانة اللدنة ( شروخ انكماش الخرسانة اللدنة - شروخ هبوط الخرسانة اللدنة - التحرك أثناء التنفيذ) .&lt;br /&gt;2- شروخ الخرسانة المتصلدة ( شروخ طبيعية - كميائية - حرارية - قصور التصميم - تحميل زائد - زحف - فرق هبوط - أخطاء باعمال التنفيذ&amp;nbsp; ) .&lt;br /&gt;3- تساقط الخرسانة&amp;nbsp;&lt;br /&gt;4- تفتت الخرسانة السطحية&amp;nbsp;&lt;br /&gt;5- التآكل السطحي&amp;nbsp;&lt;br /&gt;6- انتفاخ الخرسانة&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الخامس :- تشخيص أسباب التصدع والحكم على سلامة المنشآت&amp;nbsp; " أ.د شريف ابو المجد - أ.م.د شادية الابياري "&lt;br /&gt;&lt;/b&gt;1- دراسة الحالة ( توصيف الاعراض - المعلومات عن خلفية الموضوع - الخطوات الواجب اتباعها لفحص المبني&amp;nbsp; ) .&lt;br /&gt;2- التشخيص ( تشخيص شروخ الخرسانة اللدنة - تشخيص شروخ الخرسانة المتصلدة&amp;nbsp; ) .&amp;nbsp;&lt;br /&gt;3- خطوات الحكم على سلامة المنشأ&amp;nbsp;&lt;br /&gt;4- تحديد مدي خطورة الشرخ&amp;nbsp;&lt;br /&gt;5- ملحق قائمة الفحص ( وصف عام للمنشأ - الحالة الراهنة للمنشأ - ظروف التحميل والبيئة المحيطة - المواد المستخدمة - طرق التنفيذ المستخدمة&amp;nbsp; ) .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب السادس :- مواد الاصلاح والحماية وكيفية استخدامها ( أ.م.د منير كمال )&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1- مقدمة فى البوليمرات - الراتنجاب - البلاستيك&amp;nbsp;&lt;br /&gt;2- ما هي الخرسانة البوليمرية&amp;nbsp;&lt;br /&gt;3- أنواع مواد الترميمات والاصلاح والحماية ( المواد الاسمنتية - المونة الراتنجية - مواد المعالجة السطحية وغلق المسام )&lt;br /&gt;4- أهمية تحديد خواص مواد الاصلاح ( مشكة التوصيف - تحديد حالة الخرسانة - التماسك بين مادة الاصلاح والخرسانة )&lt;br /&gt;5- دليل استخدام مواد الاصلاح .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب السابع :- وسائل صيانة المنشآت الخرسانية وحمايتها " أ.د شريف ابو المجد "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1- تأكيد وضبط الجودة ( نظام تأكيد الجودة - نظام ضبط الجودة ) .&lt;br /&gt;2- وسائل منع حدوث شروخ فى الخرسانة المسلحة ( وسائل منع تشريخ الخرسانة اللدنة - وسائل منع تشريخ الخرسانة المتصلدة ) .&lt;br /&gt;3- صيانة المنشآت الخرسانية ( استراتيجية الصيانة - اعمال الصيانة - تكلفة اعمال الصيانة - مواصفات اعمال الصيانة ) .&lt;br /&gt;4- حماية المنشآت الخرسانية ( حماية الاسطح الخرسانية - عزل الاسطح ضد الرطوبة - حماية التسليح كهربيا ) .&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الباب الثامن :- اصلاح وتقويات المنشآت الخرسانية " أ.د شريف ابو المجد "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;1- خطوات الاصلاح الجيد ( التشخيص تقويم جدوي الاصلاح - وضع خطة العمل - اختيار طريقة الاصلاح وتنفيذها )&amp;nbsp;&lt;br /&gt;2- الغرض من الاصلاح&amp;nbsp;&lt;br /&gt;3- وسائل اصلاح المباني والمنشآت الخرسانية&amp;nbsp;&lt;br /&gt;4- الاصلاحات غير الانشائية ( اعتبارات عامة - ازالة البقع والتمليح من على اسطح الخرسانة - اصلاح تساقط الخرسانة - اصلاح تعشيش الخرسانة سد الشروخ وملؤها - طرق اصلاح الشروخ فى حالة عدم توقع اتساعها وفي حالة توقع اتساعها - وطرق اصلاح تدهور صلب التسليح نتيجة الصدأ - وقف تقدم الشروح ) .&lt;br /&gt;5- الاصلاحات الانشائية ( الحقن بالايبوكسي - استبدال الخرسانة المعيبة - زيادة القطاع الخرساني - زيادة مساحة صلب التسليح ) .&lt;br /&gt;6- اصلاحات وتقوية الاعضاء الخرسانية ( اصلاح وتقوية الاساسات - اصلاح وتقوية الاعمدة والحوائط&amp;nbsp; - اصلاح وتقوية الكمرات - اصلاح وتقوية البلاطات&amp;nbsp; )&lt;br /&gt;7-&amp;nbsp; مثال عملي على حساب حركة الشروخ .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;الحصول على الكتاب " الكتاب الشامل فى اعمال الترميم والتدعيم للمباني والمنشآت الخرسانية&amp;nbsp; "&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;&lt;a href="http://www.mediafire.com/file/gh89979pizfavqq/%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D9%85_%D9%88_%D8%A7%D9%84%D8%AA%D8%AF%D8%B9%D9%8A%D9%85_1.pdf" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1r1YnUZKjzvPIf4g66Kj6zftn464x01jp/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1XrkLB1Tf3mbAqWu39w9CZ6bjWbAQ5DSmsSafsJoDqdwOKNw7TOVBI8iciGmZoHSu-U_-2nSAC6vw7rgYtV-aLqdKPAekicM677ZDlhROpAfQJYtDHx2MvammYtkOE-rUjMzlU8eapmgyQSt0S4IMyhYgLTsF_raxWC_VSdRFvlo9ZF8gj7jHvpBgHW8/s72-w640-h416-c/%D8%A7%D9%84%D9%83%D8%AA%D8%A7%D8%A8-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%81%D9%89-%D8%A7%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D9%85-%D9%88%D8%A7%D9%84%D8%AA%D8%AF%D8%B9%D9%8A%D9%85.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="38802865" type="application/pdf" url="http://www.mediafire.com/file/gh89979pizfavqq/%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D9%85_%D9%88_%D8%A7%D9%84%D8%AA%D8%AF%D8%B9%D9%8A%D9%85_1.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>&amp;nbsp;كتاب " اصول هندسة الترميم والتدعيم " وهو كتاب متخصص بتفاصيل اعمال الترميم والتدعيم ومعالجة المشاكل الانشائية المختلفة التي تحدث فى العناصر الانشائية بالمباني الخرسانية وقد قام باعداده نخبة كبيرة من اساتذة مجال هندسة الترميم والتدعيم بمحتوي متميز وتفاصيل دقيقة حيث نفرد لكم فيما يلي محتويات ذلك الكتاب المميز :-&amp;nbsp; الباب الاول :- نظم إنشاء المباني الخرسانية " أ.م.د شادية الابياري "&amp;nbsp; 1 - النظم التقليدية ( نظام البلاطة والكمرة - نظام الاسقف والبلاطات اللاكمرية - نظام الاسقف والبلاطات ذات الاعصاب ) 2- النظم الحديثة للخرسانة المصبوبة بالموقع ( الانشاء بنظام الشدات النفقية - نظام الانشاء بالشدات المنزلقة راسيا - نظام البلاطات المرفوعة ) . 3- نظم المباني الجاهزة ( الاعمدة والحوائط والبلاطات الجاهزة - البلاطات المفرغة سابقة الاجهاد والصب ) . الباب الثاني :- عيوب و إنهيارات المنشآت الخرسانية " أ.د شريف أبو المجد - أ . م . د منير كمال " 1- انواع العيوب بالمنشآت ( عيوب تتعلق بصلاحية استخدام المبني - عيوب تتعلق بأمان المنشآت - عيوب تتعلق بالعناصر الانشائية للمبني ) . 2- أسباب العيوب بالمنشآت وانهيارها ( اسباب تتعلق بالتربة والاساسات - قصور بالتصميم أو تفاصيل التصميم - استخدام مواد بناء معيبة - القصور فى اساليب التنفيذ - عدم اخذ تأثير الحركة فى الاعتبار - حماية غير كافية للمنشآت - عدم صيانة المنشآت - تغيير استخدام المنشأ دون دراسة - الكوارث الطبيعية ) . الباب الثالث :- الخرسانة المسلحة ومكوناتها وخواصهاواختباراتها " أ.د شريف ابو المجد - أ.د عمرو سلامة&amp;nbsp; "&amp;nbsp; 1- مكونات الخرسانة وأثرها على تصدع المنشآت ( الاسمنت - الركام - ماء الخلط - الاضافات ) . 2- خواص الخرسانة المؤثرة فى حدوث العيوب ( المقاومة للأحمال - الانكماش - المسامية والنفاذية - التحمل مع الزمن ) . 3- أسس تكوين الشروخ ( كيفية تكون الشروخ بالعناصر الانشائية - تأثير صلب التسليح ) . 4- اختبارات الخرسانة ( اختبارات الخرسانة الطازجة - اختبارات الخرسانة المتصلدة ) . الباب الرابع :- عيوب الخرسانة المسلحة انواعها ، اشكالها ، أسباب حدوثها " أ.د شريف ابو المجد "&amp;nbsp; 1- شروخ الخرسانة اللدنة ( شروخ انكماش الخرسانة اللدنة - شروخ هبوط الخرسانة اللدنة - التحرك أثناء التنفيذ) . 2- شروخ الخرسانة المتصلدة ( شروخ طبيعية - كميائية - حرارية - قصور التصميم - تحميل زائد - زحف - فرق هبوط - أخطاء باعمال التنفيذ&amp;nbsp; ) . 3- تساقط الخرسانة&amp;nbsp; 4- تفتت الخرسانة السطحية&amp;nbsp; 5- التآكل السطحي&amp;nbsp; 6- انتفاخ الخرسانة&amp;nbsp; الباب الخامس :- تشخيص أسباب التصدع والحكم على سلامة المنشآت&amp;nbsp; " أ.د شريف ابو المجد - أ.م.د شادية الابياري " 1- دراسة الحالة ( توصيف الاعراض - المعلومات عن خلفية الموضوع - الخطوات الواجب اتباعها لفحص المبني&amp;nbsp; ) . 2- التشخيص ( تشخيص شروخ الخرسانة اللدنة - تشخيص شروخ الخرسانة المتصلدة&amp;nbsp; ) .&amp;nbsp; 3- خطوات الحكم على سلامة المنشأ&amp;nbsp; 4- تحديد مدي خطورة الشرخ&amp;nbsp; 5- ملحق قائمة الفحص ( وصف عام للمنشأ - الحالة الراهنة للمنشأ - ظروف التحميل والبيئة المحيطة - المواد المستخدمة - طرق التنفيذ المستخدمة&amp;nbsp; ) . الباب السادس :- مواد الاصلاح والحماية وكيفية استخدامها ( أ.م.د منير كمال )&amp;nbsp; 1- مقدمة فى البوليمرات - الراتنجاب - البلاستيك&amp;nbsp; 2- ما هي الخرسانة البوليمرية&amp;nbsp; 3- أنواع مواد الترميمات والاصلاح والحماية ( المواد الاسمنتية - المونة الراتنجية - مواد المعالجة السطحية وغلق المسام ) 4- أهمية تحديد خواص مواد الاصلاح ( مشكة التوصيف - تحديد حالة الخرسانة - التماسك بين مادة الاصلاح والخرسانة ) 5- دليل استخدام مواد الاصلاح . الباب السابع :- وسائل صيانة المنشآت الخرسانية وحمايتها " أ.د شريف ابو المجد "&amp;nbsp; 1- تأكيد وضبط الجودة ( نظام تأكيد الجودة - نظام ضبط الجودة ) . 2- وسائل منع حدوث شروخ فى الخرسانة المسلحة ( وسائل منع تشريخ الخرسانة اللدنة - وسائل منع تشريخ الخرسانة المتصلدة ) . 3- صيانة المنشآت الخرسانية ( استراتيجية الصيانة - اعمال الصيانة - تكلفة اعمال الصيانة - مواصفات اعمال الصيانة ) . 4- حماية المنشآت الخرسانية ( حماية الاسطح الخرسانية - عزل الاسطح ضد الرطوبة - حماية التسليح كهربيا ) .&amp;nbsp; الباب الثامن :- اصلاح وتقويات المنشآت الخرسانية " أ.د شريف ابو المجد "&amp;nbsp; 1- خطوات الاصلاح الجيد ( التشخيص تقويم جدوي الاصلاح - وضع خطة العمل - اختيار طريقة الاصلاح وتنفيذها )&amp;nbsp; 2- الغرض من الاصلاح&amp;nbsp; 3- وسائل اصلاح المباني والمنشآت الخرسانية&amp;nbsp; 4- الاصلاحات غير الانشائية ( اعتبارات عامة - ازالة البقع والتمليح من على اسطح الخرسانة - اصلاح تساقط الخرسانة - اصلاح تعشيش الخرسانة سد الشروخ وملؤها - طرق اصلاح الشروخ فى حالة عدم توقع اتساعها وفي حالة توقع اتساعها - وطرق اصلاح تدهور صلب التسليح نتيجة الصدأ - وقف تقدم الشروح ) . 5- الاصلاحات الانشائية ( الحقن بالايبوكسي - استبدال الخرسانة المعيبة - زيادة القطاع الخرساني - زيادة مساحة صلب التسليح ) . 6- اصلاحات وتقوية الاعضاء الخرسانية ( اصلاح وتقوية الاساسات - اصلاح وتقوية الاعمدة والحوائط&amp;nbsp; - اصلاح وتقوية الكمرات - اصلاح وتقوية البلاطات&amp;nbsp; ) 7-&amp;nbsp; مثال عملي على حساب حركة الشروخ . الحصول على الكتاب " الكتاب الشامل فى اعمال الترميم والتدعيم للمباني والمنشآت الخرسانية&amp;nbsp; "Mediafire.com ORDrive.google.com</itunes:subtitle><itunes:author>noreply@blogger.com (Ahmd Elzammar)</itunes:author><itunes:summary>&amp;nbsp;كتاب " اصول هندسة الترميم والتدعيم " وهو كتاب متخصص بتفاصيل اعمال الترميم والتدعيم ومعالجة المشاكل الانشائية المختلفة التي تحدث فى العناصر الانشائية بالمباني الخرسانية وقد قام باعداده نخبة كبيرة من اساتذة مجال هندسة الترميم والتدعيم بمحتوي متميز وتفاصيل دقيقة حيث نفرد لكم فيما يلي محتويات ذلك الكتاب المميز :-&amp;nbsp; الباب الاول :- نظم إنشاء المباني الخرسانية " أ.م.د شادية الابياري "&amp;nbsp; 1 - النظم التقليدية ( نظام البلاطة والكمرة - نظام الاسقف والبلاطات اللاكمرية - نظام الاسقف والبلاطات ذات الاعصاب ) 2- النظم الحديثة للخرسانة المصبوبة بالموقع ( الانشاء بنظام الشدات النفقية - نظام الانشاء بالشدات المنزلقة راسيا - نظام البلاطات المرفوعة ) . 3- نظم المباني الجاهزة ( الاعمدة والحوائط والبلاطات الجاهزة - البلاطات المفرغة سابقة الاجهاد والصب ) . الباب الثاني :- عيوب و إنهيارات المنشآت الخرسانية " أ.د شريف أبو المجد - أ . م . د منير كمال " 1- انواع العيوب بالمنشآت ( عيوب تتعلق بصلاحية استخدام المبني - عيوب تتعلق بأمان المنشآت - عيوب تتعلق بالعناصر الانشائية للمبني ) . 2- أسباب العيوب بالمنشآت وانهيارها ( اسباب تتعلق بالتربة والاساسات - قصور بالتصميم أو تفاصيل التصميم - استخدام مواد بناء معيبة - القصور فى اساليب التنفيذ - عدم اخذ تأثير الحركة فى الاعتبار - حماية غير كافية للمنشآت - عدم صيانة المنشآت - تغيير استخدام المنشأ دون دراسة - الكوارث الطبيعية ) . الباب الثالث :- الخرسانة المسلحة ومكوناتها وخواصهاواختباراتها " أ.د شريف ابو المجد - أ.د عمرو سلامة&amp;nbsp; "&amp;nbsp; 1- مكونات الخرسانة وأثرها على تصدع المنشآت ( الاسمنت - الركام - ماء الخلط - الاضافات ) . 2- خواص الخرسانة المؤثرة فى حدوث العيوب ( المقاومة للأحمال - الانكماش - المسامية والنفاذية - التحمل مع الزمن ) . 3- أسس تكوين الشروخ ( كيفية تكون الشروخ بالعناصر الانشائية - تأثير صلب التسليح ) . 4- اختبارات الخرسانة ( اختبارات الخرسانة الطازجة - اختبارات الخرسانة المتصلدة ) . الباب الرابع :- عيوب الخرسانة المسلحة انواعها ، اشكالها ، أسباب حدوثها " أ.د شريف ابو المجد "&amp;nbsp; 1- شروخ الخرسانة اللدنة ( شروخ انكماش الخرسانة اللدنة - شروخ هبوط الخرسانة اللدنة - التحرك أثناء التنفيذ) . 2- شروخ الخرسانة المتصلدة ( شروخ طبيعية - كميائية - حرارية - قصور التصميم - تحميل زائد - زحف - فرق هبوط - أخطاء باعمال التنفيذ&amp;nbsp; ) . 3- تساقط الخرسانة&amp;nbsp; 4- تفتت الخرسانة السطحية&amp;nbsp; 5- التآكل السطحي&amp;nbsp; 6- انتفاخ الخرسانة&amp;nbsp; الباب الخامس :- تشخيص أسباب التصدع والحكم على سلامة المنشآت&amp;nbsp; " أ.د شريف ابو المجد - أ.م.د شادية الابياري " 1- دراسة الحالة ( توصيف الاعراض - المعلومات عن خلفية الموضوع - الخطوات الواجب اتباعها لفحص المبني&amp;nbsp; ) . 2- التشخيص ( تشخيص شروخ الخرسانة اللدنة - تشخيص شروخ الخرسانة المتصلدة&amp;nbsp; ) .&amp;nbsp; 3- خطوات الحكم على سلامة المنشأ&amp;nbsp; 4- تحديد مدي خطورة الشرخ&amp;nbsp; 5- ملحق قائمة الفحص ( وصف عام للمنشأ - الحالة الراهنة للمنشأ - ظروف التحميل والبيئة المحيطة - المواد المستخدمة - طرق التنفيذ المستخدمة&amp;nbsp; ) . الباب السادس :- مواد الاصلاح والحماية وكيفية استخدامها ( أ.م.د منير كمال )&amp;nbsp; 1- مقدمة فى البوليمرات - الراتنجاب - البلاستيك&amp;nbsp; 2- ما هي الخرسانة البوليمرية&amp;nbsp; 3- أنواع مواد الترميمات والاصلاح والحماية ( المواد الاسمنتية - المونة الراتنجية - مواد المعالجة السطحية وغلق المسام ) 4- أهمية تحديد خواص مواد الاصلاح ( مشكة التوصيف - تحديد حالة الخرسانة - التماسك بين مادة الاصلاح والخرسانة ) 5- دليل استخدام مواد الاصلاح . الباب السابع :- وسائل صيانة المنشآت الخرسانية وحمايتها " أ.د شريف ابو المجد "&amp;nbsp; 1- تأكيد وضبط الجودة ( نظام تأكيد الجودة - نظام ضبط الجودة ) . 2- وسائل منع حدوث شروخ فى الخرسانة المسلحة ( وسائل منع تشريخ الخرسانة اللدنة - وسائل منع تشريخ الخرسانة المتصلدة ) . 3- صيانة المنشآت الخرسانية ( استراتيجية الصيانة - اعمال الصيانة - تكلفة اعمال الصيانة - مواصفات اعمال الصيانة ) . 4- حماية المنشآت الخرسانية ( حماية الاسطح الخرسانية - عزل الاسطح ضد الرطوبة - حماية التسليح كهربيا ) .&amp;nbsp; الباب الثامن :- اصلاح وتقويات المنشآت الخرسانية " أ.د شريف ابو المجد "&amp;nbsp; 1- خطوات الاصلاح الجيد ( التشخيص تقويم جدوي الاصلاح - وضع خطة العمل - اختيار طريقة الاصلاح وتنفيذها )&amp;nbsp; 2- الغرض من الاصلاح&amp;nbsp; 3- وسائل اصلاح المباني والمنشآت الخرسانية&amp;nbsp; 4- الاصلاحات غير الانشائية ( اعتبارات عامة - ازالة البقع والتمليح من على اسطح الخرسانة - اصلاح تساقط الخرسانة - اصلاح تعشيش الخرسانة سد الشروخ وملؤها - طرق اصلاح الشروخ فى حالة عدم توقع اتساعها وفي حالة توقع اتساعها - وطرق اصلاح تدهور صلب التسليح نتيجة الصدأ - وقف تقدم الشروح ) . 5- الاصلاحات الانشائية ( الحقن بالايبوكسي - استبدال الخرسانة المعيبة - زيادة القطاع الخرساني - زيادة مساحة صلب التسليح ) . 6- اصلاحات وتقوية الاعضاء الخرسانية ( اصلاح وتقوية الاساسات - اصلاح وتقوية الاعمدة والحوائط&amp;nbsp; - اصلاح وتقوية الكمرات - اصلاح وتقوية البلاطات&amp;nbsp; ) 7-&amp;nbsp; مثال عملي على حساب حركة الشروخ . الحصول على الكتاب " الكتاب الشامل فى اعمال الترميم والتدعيم للمباني والمنشآت الخرسانية&amp;nbsp; "Mediafire.com ORDrive.google.com</itunes:summary><itunes:keywords>كتب هندسية</itunes:keywords></item><item><title>مخططات محطات وقود معمارية وانشائية اوتوكاد DWG مع اشتراطات الكود السعودي PDF</title><link>https://www.civilmaker.com/2023/11/fuel-stations.html</link><category>تطبيقات هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 24 Nov 2023 11:52:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-2955045984116310908</guid><description>&lt;span style="font-size: medium;"&gt;اليكم فى هذا الموضوع مجموعة متنوعة من المخططات والرسومات المعمارية والانشائية لمشروع محطات الوقود ( محطات البنزين والسولار ) مختلفة المساحات بصيغة اوتوكاد dwg بالاضافة الى كتاب اشتراطات الكود السعودي فى تفاصيل وتصنيفات وفئات محطات الوقود PDF .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEwvfOve9X2nQe4-SqeX9nTk8oPvaEZINjLVmbP1702y-8l18KPhcGPlc9z5fXsnL13dfVVDB9dtHC-jP6FlV5s2zKLsbwbre-r1tqrAnUd4O-bJ5Fx7sOxSHkSzTmLhqIItG_Mj1zZ97HTYL1U0DRyvyTmkRLXY0xUtzQBiG_KVbIgZ4_4xrwH5cyniEI/s1000/%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%AF.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مخططات محطات وقود معمارية وانشائية اوتوكاد DWG مع اشتراطات الكود السعودي PDF" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEwvfOve9X2nQe4-SqeX9nTk8oPvaEZINjLVmbP1702y-8l18KPhcGPlc9z5fXsnL13dfVVDB9dtHC-jP6FlV5s2zKLsbwbre-r1tqrAnUd4O-bJ5Fx7sOxSHkSzTmLhqIItG_Mj1zZ97HTYL1U0DRyvyTmkRLXY0xUtzQBiG_KVbIgZ4_4xrwH5cyniEI/w640-h416/%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%AF.png" title="مخططات محطات وقود معمارية وانشائية اوتوكاد DWG مع اشتراطات الكود السعودي PDF" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;مخططات كاملة معمارية وانشائية طبقا للاشتراطات مع جميع لوحات الواجهات و المساقط والقطاعات الانشائية والمعمارية والتسليح لاكثر من محطة وقود بالمملكة العربية السعودية ، كما نقدم لكم &lt;a href="https://www.civilmaker.com/2023/07/Petrol-Stations.html" target="_blank"&gt;كتاب شرح اعمال تنفيذ محطات الوقود&lt;/a&gt; وهو كتاب شرح مدعوم بالصور لاعمال تنفيذ محطات الوقود للمهندس المتميز محمد نواف جمعة .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;توضح الرسومات المعمارية لمشروع محطات الوقود ( محطة المحروقات ) جميع مكونات المحطات كما تحتوي على تصاميم مختلفة لمشروع محطة الوقود بتصميم حديث وجديد طبقا لفئة ونوع محطة الوقود بالاضافة الى توضيح كافة التفاصيل والمقاسات اللازمة لتخطيط كروكي مميز يعطي افضل استغلال لاصغر المساحات طبقا لاشتراطات البلديات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;كما يمكنكم التعرف على اسس ومعايير تصميم محطات الوقود من خلال كتاب اشتراطات التصميم لمحطات الوقود والمحروقات طبفا للكود السعودي لتتمكن من توظيف واستغلال المساحات طبقا لمتطلبات وفئة ونوع محطة الوقود .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;اما عند التطرق لتفاصيل اعمال التنفيذ فيمكنكم الاعتماد على شرح المهندس محمد نواف جمعة من خلال كتاب &lt;a href="https://www.civilmaker.com/2023/07/Petrol-Stations.html" target="_blank"&gt;شرح اعمال تنفيذ محطات الوقود والمحروقات Fuel Stations&lt;/a&gt; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;محتويات الموضوع :-&amp;nbsp;&lt;br /&gt;- مخططات نماذج محطات وقود كاملة اوتوكاد معماري وانشائي .&lt;br /&gt;- كتاب اشتراطات تصميم محطات الوقود طبقا للكود السعودي .&lt;br /&gt;- &lt;a href="https://www.civilmaker.com/2023/07/Petrol-Stations.html" target="_blank"&gt;كتاب شرح اعمال تنفيذ محطات الوقود&lt;/a&gt;&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;التحميل&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;مخططات محطات وقود معمارية وانشائية اوتوكاد DWG مع اشتراطات الكود السعودي PDF&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;a href="https://www.mediafire.com/file/dqvf8v2d9a4rwgs/مخططات+محطات+وقود.rar/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;a href="https://drive.google.com/file/d/1wvm65M5Vx1IrZk3-k50F5sgDLb5pco2Z/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;Drive.google.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEwvfOve9X2nQe4-SqeX9nTk8oPvaEZINjLVmbP1702y-8l18KPhcGPlc9z5fXsnL13dfVVDB9dtHC-jP6FlV5s2zKLsbwbre-r1tqrAnUd4O-bJ5Fx7sOxSHkSzTmLhqIItG_Mj1zZ97HTYL1U0DRyvyTmkRLXY0xUtzQBiG_KVbIgZ4_4xrwH5cyniEI/s72-w640-h416-c/%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%AF.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>فهم عملية التأريض والحماية من الصواعق PDF </title><link>https://www.civilmaker.com/2023/10/earthing-grounding.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 13 Oct 2023 10:54:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-9102101460648110955</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;يمكن ان يتم تعريف التأريض بانه هو عملية توصيل الكهرباء من الاجهزة والشبكة الكهربائية الى الارض ويتم ذلك مباشرة بدون وجود فيوز او مفتاح قاطع لهذه الوصلة .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;فى ذلك نوضح بمثال ... ولنفترض وجود جهاز كهربائي باحد المنازل ومعروف ان الكهرباء التي يعمل بها هذا الجها هي معزولة عن جسم الجهاز الخارجي نفسه فمثلا الكهرباء التي يتم توصيلها لجهاز السخان بالمنزل تكون معزولة عن جسم السخان نفسه والا فان اي شخص يقوم بلمس جسم السخان من الخارج فسيصاب بصاعق الكهرباء ، لكن الحاصل انه فى حالة حدوث اي تلف بجهاز السخان فان التيار الكهربائي يسري مباشرة الى جسم السخان الخارجي وفي هذه الحالة سيصاب كل من يلمس جسم السخان بصعقة كهربائية ، وهنا تظهر فائدة عملية التأريض لانه في حالة وجود تأريض وعند حدوث اي تلف بالجهاز فان التيار سيمر الى باطن الارض مباشرة بواسطة سلك التاريض ولن يصل الى جسم جهاز السخان وبتالي يكون الجهاز آمن حتي في حالة تلف وصلات الكهرباء ولن يقوم بصعق مستخدم هذا الجهاز .&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRcZJkjbariHhUHN_PNKmNXuSbic72p0GpMRe54Sd2I8r8a8BgZi6o77k6tRVpCNjmx-X1HnR2WdX_0BN4y7jsgcHjOA0ciFabVzgY5UZOMFVqC8CEXPKYRPvlO-XqJcsvDWWgZGyDC0ItEcyiLJp-OIMmANmEiCuO3oNbhtbbmJq21vqjRSqGvA7CV9ao/s1000/%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%B6-%D9%88%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%88%D8%A7%D8%B9%D9%82.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="font-size: medium;"&gt;&lt;img alt="فهم عملية التأريض والحماية من الصواعق PDF" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRcZJkjbariHhUHN_PNKmNXuSbic72p0GpMRe54Sd2I8r8a8BgZi6o77k6tRVpCNjmx-X1HnR2WdX_0BN4y7jsgcHjOA0ciFabVzgY5UZOMFVqC8CEXPKYRPvlO-XqJcsvDWWgZGyDC0ItEcyiLJp-OIMmANmEiCuO3oNbhtbbmJq21vqjRSqGvA7CV9ao/w640-h416/%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%B6-%D9%88%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%88%D8%A7%D8%B9%D9%82.png" title="فهم عملية التأريض والحماية من الصواعق PDF" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;اهمية التأريض&lt;/b&gt; الجيد تكمن فى الحفاظ على السلامة العامة وسلامة العاملين وحسن التشغيل للنظام الكهربائي وما يترتب عليه من حماية الافراد من الصعق بالاضافة الى حماية المعدات المنظومة الكهربائية من التغيرات المفاجئة وذلك عن طريق التفريغ الجيد للطاقة التخلص من خطر الصواعق .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;المكونات اللازمة لعملية التاريض&lt;/b&gt; :- ( تربة الارض - الكترودات التأريض " قضيب التأريض " - موصلات التأريض - تجهيزات الوصل والربط&amp;nbsp; ) .&amp;nbsp; " وقد تم تفصيل مواصفات كل مكون من مكونات عملية التأريض بملف PDF بطريقة وافية مع الشرح بالصور ايضا " .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;اما عند الحديث عن &lt;b&gt;طرق خفض مقاومة&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&amp;nbsp;التأريض&lt;/b&gt; فمن المعروف انه كلما قلت مقاومة التأريض كلما زادت جودة منظومة التأريض وزاد نجاح عملية التاريض ، ولذلك نذكر لكم ان هناك اكثر من طريقة لخفض مقاومة منظومة التأريض عن طريق خفض مقاومة اى من مكونات هذه المقاومة او جميعها :-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;- خفض مقاومة قضيب التأريض والموصلات المربوطة معه .&lt;br /&gt;- خفض مقاومة التلامس بين القضيب والتربة .&lt;br /&gt;- خفض مقاومة الارض المحيطة بقضيب التأريض .&lt;br /&gt;وللعلم فانه لابد من قياس مقاومة التاريض حيث لا تزيد عن الحد المسموح به وهو 25 اوم .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- طرق خفض مقاومة التأريض :-&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;1- زيادة قطر القضيب " لا يفضل استخدام اقطار اكبر من 18 ملم "&amp;nbsp;&lt;br /&gt;2- زيادة طول قضيب التأريض ويمكن تحديد طول ( 240 سم هو المناسب للتربة العادية ) ويمكن زيادة الطول الى 15 متر على حسب نوع التربة .&lt;br /&gt;3- زيادة عدد القضبان المستخدمة فى التاريض .&lt;br /&gt;4- معالجة التربة كميائيا " هي افضل طريقة مؤثرة لخفض المقاومة وتحسين منظومة التأريض " عن طريق عمل حفرة دائرية حول قضيب التاريض لا يقل القطر لها عن 45 سم وعمق 30 سم ويتم ملئ هذه الحفرة باملاح المغنسيوم او كبريتات النحاس او الملح الصخري .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الاجهزة والمعدات الواجب تأريضها&amp;nbsp;&lt;br /&gt;&lt;/b&gt;يتم عملية التأريض للمباني عن طريق تأريض العناصر الاتية :-&lt;br /&gt;- جميع الاجسام المعدنية الموجودة راسيا ويزيد طولها عن 240 سم وافقيا عن 150 سم والمعرضة للتلامس&amp;nbsp;&lt;br /&gt;- جميع الاجهزة الكهربائية&amp;nbsp;&lt;br /&gt;- جميع مخارج البرايز ووحدات الانارة&amp;nbsp;&lt;br /&gt;- اقطاب التاريض ويمكن ان تكون ( اسياخ التسليح فى المباني - موصل معدني يتم توصيله حول المبني ولا يقل عن 75 سم من سطح الارض - قضيب التأريض الصناعي ) .&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;يمكن استكمال قراءة البحث والاحتفاظ به كنسخة PDF&amp;nbsp; " &lt;b&gt;كتاب التأريض ومانعة الصواعق PDF&lt;/b&gt; " من اعداد ادريس ابراهيم ادريس .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;مكونات ومحتويات البحث " كتاب التأريض ومانعة الصواعق PDF&amp;nbsp;"&amp;nbsp; :-&amp;nbsp;&lt;br /&gt;- تعريف التأريض&amp;nbsp;&lt;br /&gt;- مكونات وعناصر التاريض&amp;nbsp;&lt;br /&gt;- الطرق المختلفة لخفض مقاومة التأريض&amp;nbsp;&lt;br /&gt;- الاجهزة والمعدات الواجب تأريضها&amp;nbsp;&lt;br /&gt;- اهمية التأريض الجيد&amp;nbsp;&lt;br /&gt;- الفرق بين المنظومة المؤرضة وغير المؤرضة&amp;nbsp;&lt;br /&gt;- طرق قياس وفحص جودة التأريض&amp;nbsp;&lt;br /&gt;- مانعة الصواعق " نظام الحماية من الصواعق للمباني "&lt;br /&gt;- اهمية مانعة الصواعق&amp;nbsp;&lt;br /&gt;- مكونات مانع الصواعق&amp;nbsp;&lt;br /&gt;- الامور المهمة عند تصميم مانع الصواعق&amp;nbsp;&lt;br /&gt;- المعدات والهياكل التي يجب حمايتها من الصواعق&amp;nbsp;&lt;br /&gt;- الفرق بين التأريث والتأريض .&lt;br /&gt;- مصطلحات منظومة التأريض والحماية من الصواعق .&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;التحميل&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;تحميل كتاب التأريض ومانعة الصواعق PDF&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/5newbs8pquthrct/تحميل_كتاب_التأريض_ومانعة_الصواعق.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red;"&gt;&lt;a href="https://drive.google.com/file/d/1CWMrtnnZApm9oot63RyzfnQsudLM6TAD/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRcZJkjbariHhUHN_PNKmNXuSbic72p0GpMRe54Sd2I8r8a8BgZi6o77k6tRVpCNjmx-X1HnR2WdX_0BN4y7jsgcHjOA0ciFabVzgY5UZOMFVqC8CEXPKYRPvlO-XqJcsvDWWgZGyDC0ItEcyiLJp-OIMmANmEiCuO3oNbhtbbmJq21vqjRSqGvA7CV9ao/s72-w640-h416-c/%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%B6-%D9%88%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-%D8%A7%D9%84%D8%B5%D9%88%D8%A7%D8%B9%D9%82.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>نماذج اختبارات واسئلة مسابقات التوظيف بالقطاع الحكومي للمهندس المدني </title><link>https://www.civilmaker.com/2023/10/gov-engineering-jobs.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 6 Oct 2023 08:43:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-5813171111712946484</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;بين ايديكم ملف PDF يحتوي على نماذج لاختبارات واسئلة شائعة بمسابقات التوظيف بالقطاعات الحكومية بمصر للمهندس المدني وهو تجميع واجتهاد شخصي من احد المهندسين نسأل الله له التوفيق والسداد .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXvdxZJ-AlTHvJyZAq2y_lTujdAsPR28YBqxHcmS-UdvJE_qIGTQkd3tPb7ZtxQSWWkRFbcZ0xteRNs-sc5tNqVie71YQlLk7GsoF8dvhM4FJGARf5mMomtJ993b_g89Y8hGVX7qI9VcmggSi45NtEoVB-D_0zAswdMW2vCcyCjjAhtl-ke56L1a3eK332/s1000/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%B3%D8%A6%D9%84%D8%A9-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%88%D8%B8%D9%8A%D9%81-%D8%A8%D8%A7%D9%84%D9%82%D8%B7%D8%A7%D8%B9-%D8%A7%D9%84%D8%AD%D9%83%D9%88%D9%85%D9%8A-%D9%84%D9%84%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="نماذج اختبارات واسئلة مسابقات التوظيف بالقطاع الحكومي للمهندس المدني" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXvdxZJ-AlTHvJyZAq2y_lTujdAsPR28YBqxHcmS-UdvJE_qIGTQkd3tPb7ZtxQSWWkRFbcZ0xteRNs-sc5tNqVie71YQlLk7GsoF8dvhM4FJGARf5mMomtJ993b_g89Y8hGVX7qI9VcmggSi45NtEoVB-D_0zAswdMW2vCcyCjjAhtl-ke56L1a3eK332/w640-h416/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%B3%D8%A6%D9%84%D8%A9-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%88%D8%B8%D9%8A%D9%81-%D8%A8%D8%A7%D9%84%D9%82%D8%B7%D8%A7%D8%B9-%D8%A7%D9%84%D8%AD%D9%83%D9%88%D9%85%D9%8A-%D9%84%D9%84%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A.png" title="نماذج اختبارات واسئلة مسابقات التوظيف بالقطاع الحكومي للمهندس المدني" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;يحتوي هذا الملف على اسئلة متوقعة فى مجال الهندسة المدنية وقد وردت قبل ذلك فى نماذج اختبارات القطاع الحكومي مثل ( وزارة الصحة - وزارة التربية والتعليم - وزارة الخارجية " البلديات " - وزارة الاسكان - وزارة الزراعة -.....&amp;nbsp; ) .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;يحتوي هذا الملف على عدد كبير من الاسئلة المتوقعة فى مجال الهندسة المدنية بجميع فروعها كما يحتوي على نماذج من الاسئلة العامة واسئلة قياس المستوي وجميع الاسئلة مع اجابتها المتوقعة من قبل معد ذلك الملف .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;ايضا يمكنكم الانضمام لجروب FACEBOOK " &lt;a href="https://www.facebook.com/groups/expected.questions" target="_blank"&gt;الاسئلة المتوقعة لجميع المسابقات والوظائف الخاصة بالمهندسين&lt;/a&gt; " ومتابعة كل ما يتعلق بالمسابقات الحكومية .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;تحميل الملف كامل PDF&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;"&amp;nbsp;نماذج اختبارات واسئلة مسابقات التوظيف بالقطاع الحكومي للمهندس المدني&amp;nbsp; "&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;a href="https://www.mediafire.com/file/e0cn8lrh69c8sa1/نماذج+اختبارات+واسئلة+مسابقات+التوظيف+بالقطاع+الحكومي+للمهندس+المدني+.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/16O3d6UCvfYbnzlj5a5DxEVoOMmbzDfj8/view?usp=sharing" target="_blank"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Drive.google.com&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXvdxZJ-AlTHvJyZAq2y_lTujdAsPR28YBqxHcmS-UdvJE_qIGTQkd3tPb7ZtxQSWWkRFbcZ0xteRNs-sc5tNqVie71YQlLk7GsoF8dvhM4FJGARf5mMomtJ993b_g89Y8hGVX7qI9VcmggSi45NtEoVB-D_0zAswdMW2vCcyCjjAhtl-ke56L1a3eK332/s72-w640-h416-c/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D9%88%D8%A7%D8%B3%D8%A6%D9%84%D8%A9-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D9%88%D8%B8%D9%8A%D9%81-%D8%A8%D8%A7%D9%84%D9%82%D8%B7%D8%A7%D8%B9-%D8%A7%D9%84%D8%AD%D9%83%D9%88%D9%85%D9%8A-%D9%84%D9%84%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة شرح تنفيذ محطات الوقود PDF</title><link>https://www.civilmaker.com/2023/07/Petrol-Stations.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 14 Jul 2023 05:02:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3478018533938260471</guid><description>
&lt;p&gt;
  &lt;span style="font-size: medium;"
    &gt;مذكرة شرح متميزة بالصور لعملية تنفيذ و انشاء محطات الوقود بالتفصيل&amp;nbsp; من
    ضمن سلسلة كتب " بناء المهندس المدني " للمهندس / محمد نواف جمعة .&lt;/span
  &gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
  &lt;a
    href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEs92aMTdGnoLX9tXk2btaXnZpcKfF6dlklw81pp-yUUrab3jr5FwBbSiE70SkNRZdURpwsq0ReJaR_AbDn8gV5ay6qPrBNIc6t5Gv5CBlMy_w8Sbd9TnZ2NxS_S0ktIZuztowlG3v7FyyNa7NuMiZqb3onZIIfxJmVFYcr9Rb5lZfKTTQHD7aqi1sxH9s/s1000/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%AD%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%82%D9%88%D8%AF.png"
    style="margin-left: 1em; margin-right: 1em;"
    &gt;&lt;img
      alt="مذكرة شرح تنفيذ وانشاء محطات الوقود بالصور - اشتراطات التنفيذ واسس التصميم واجراءات الترخيص لمحطة الوقود ومكونات محطات الوقود وخدمات السيارة والافراد"
      border="0"
      data-original-height="650"
      data-original-width="1000"
      height="416"
      src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEs92aMTdGnoLX9tXk2btaXnZpcKfF6dlklw81pp-yUUrab3jr5FwBbSiE70SkNRZdURpwsq0ReJaR_AbDn8gV5ay6qPrBNIc6t5Gv5CBlMy_w8Sbd9TnZ2NxS_S0ktIZuztowlG3v7FyyNa7NuMiZqb3onZIIfxJmVFYcr9Rb5lZfKTTQHD7aqi1sxH9s/w640-h416/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%AD%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%82%D9%88%D8%AF.png"
      title="مذكرة شرح تنفيذ محطات الوقود PDF"
      width="640"
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;span style="font-size: medium;"
    &gt;تتناول هذه المذكرة بحثاً مفصلا بالصور عن مراحل تنفيذ وانشاء الاعمال
    الخرسانية لمحطات الوقود بداية من اعمال الحفر وتنفيذ خزانات الوقود اسفل سطح
    الارض والاحتياطات التي يجب ان تؤخذ فى الاعتبار عند عملة التنفيذ حتي يتم بناء
    واستكمال الاعمال الانشائية للمحطة من مرحلة وضع الاساسات والاعمدة الاسقف
    لمحطة الوقود .&lt;/span
  &gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;span style="font-size: medium;"
    &gt;كما تناول هذا الكتاب "&amp;nbsp;تنفيذ محطات الوقود " شرح وتوضيح الكثير عن
    اشتراطات التنفيذ واسس التصميم والتصنيف لمحطات الوقود المختلفة ومعايير تصميم
    المداخل والمخارج لمحطات الوقود طبقا لتصنيف كل فئة موضحا خلال هذه البحث ايضا
    اجراءات الترخيص والشكل العام ومكونات محطات الوقود وخدمات السيارات والافراد
    داخل محطات الوقود .&lt;/span
  &gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;span style="font-size: large;"
    &gt;&lt;b
        
        
        
   
        
        
      &gt;&lt;span style="color: red;"&gt;التحميل والحصول على المذكرة&amp;nbsp;&lt;br /&gt;&lt;/span
      &gt;&lt;span style="color: #2b00fe;"&gt;مذكرة شرح تنفيذ محطات الوقود PDF&lt;/span&gt;&lt;/b
    &gt;&lt;/span
  &gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;span style="font-size: large;"
    &gt;&lt;b
      &gt;&lt;a
        href="https://www.mediafire.com/file/455xruytfn5f7he/تنفيذ_محطات_الوقود_للمهندس_محمد_نواف_جمعة.pdf/file"
        target="_blank"
        &gt;Mediafire.com&lt;/a
      &gt;&lt;br /&gt;&lt;/b
  &gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;a
    href="https://drive.google.com/file/d/1a5GuiEajfU8GKRCSUsfUM_VfI7C4NXxC/view?usp=sharing"
    target="_blank"
    &gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a
  &gt;&lt;br /&gt;
&lt;/p&gt;


</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEs92aMTdGnoLX9tXk2btaXnZpcKfF6dlklw81pp-yUUrab3jr5FwBbSiE70SkNRZdURpwsq0ReJaR_AbDn8gV5ay6qPrBNIc6t5Gv5CBlMy_w8Sbd9TnZ2NxS_S0ktIZuztowlG3v7FyyNa7NuMiZqb3onZIIfxJmVFYcr9Rb5lZfKTTQHD7aqi1sxH9s/s72-w640-h416-c/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D9%85%D8%AD%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%82%D9%88%D8%AF.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>البلاطات اللاحقة الشد POST TENSION SLABS </title><link>https://www.civilmaker.com/2023/04/post-tension-.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Mon, 24 Apr 2023 07:17:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-6638527397693523354</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;مذكرة رائعة تتناول "&amp;nbsp;&lt;b&gt;البلاطات اللاحقة الشد POST TENSION SLABS&lt;/b&gt;&amp;nbsp; " تحت عنوان افهم واستوعب فكرة تصميم وطريقة تنفيذ البلاطات البوست تنشن ( البلاطات اللاحقة الشد " المحقونة&amp;nbsp; "&amp;nbsp; POST TENSION SLABS ) من اعداد م محمد حسنين محمود .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTlYLeDdCVHq9atw6y4l5r1nXeHGv-sKdZlcNzQg4PvU1yGhrTPkHlPF_Xm38vbV67VBfde8sLTp2rqyRSGTFYXjn783sfYzFktJEvgIjXxviXT2ocDofRmHBsocFYKfaVZOFTbadL5AQR6qSDSD-B2zV2AlOBCi0MdLDUw7_TNqluS4dk0w-df-HhzQ/s1000/post-tension.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="- الفصل الاول : النظرية الهندسية واساسيات تصميم البلاطات اللاحقة الشد  ويتناول هذا الفصل تفاصيل وتعريف فكرة ونظرية نظام العناصر لاحقة الشد وسلوكها مع الاحمال الواقعة عليها بالاضافة الى ذكر انواع انظمة الشد اللاحق والطرق المختلفة لتوزيع ال ( Tendons ) في البلاطات لاحقة الشد .  - الفصل الثاني : مكونات نظام البلاطات اللاحقة الشد المحقونة &amp;quot; Bonded Post Tension Slabs &amp;quot;  ويشرح هذا الفصل العناصر المكونة للنظام والاختبارات الخاصة بها وطريقة البدء فى تصميم هذا النوع من البلاطات مع ذكر اساسيات وعوامل واعتبارات التصميم للبلاطات لاحقة الشد .  - الفصل الثالث : خطوات تنفيذ البلاطات اللاحقة الشد  وفي هذا الفصيل يتم تفصيل طريقة التركيب والتنفيذ للبلاطات لاحقة الشد مرورا بمرحلة الصب ثم مرحلة الشد بجميع توصياتها واعتباراتها مع تفصيل جميع النقاط الخاصة بعملية الشد وعوامل الفقد فى قوي الشد والتي تؤثر على الاستطالة وانتهاءا بشرح عملية الحقن .  - الفصل الرابع : بعض المشاكل الموقعية اسبابها وطريقة حلها  استكمالا لعملية التنفيذ فمن الوارد حدوث بعض المشاكل مثل حدوث انفلات لل strands او حدوث انهيار للخرسانة عند منطقة الشد وتم تغطية هذه المشكلات فى هذا الفصل .  - الفصل الخامس : اعتبارات عامة اثناء التصميم والتنفيذ   - الفصل السادس : طريقة عمل فتحات في البلاطات اللاحقة الشد ذات الكابلات المحقونة &amp;quot; Bonded &amp;quot; ." border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTlYLeDdCVHq9atw6y4l5r1nXeHGv-sKdZlcNzQg4PvU1yGhrTPkHlPF_Xm38vbV67VBfde8sLTp2rqyRSGTFYXjn783sfYzFktJEvgIjXxviXT2ocDofRmHBsocFYKfaVZOFTbadL5AQR6qSDSD-B2zV2AlOBCi0MdLDUw7_TNqluS4dk0w-df-HhzQ/w640-h416/post-tension.png" title="البلاطات اللاحقة الشد POST TENSION SLABS" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;مذكرة شرح رائعة وبسيطة تتناول كل شئ عن بلاطات لاحقة الشد&amp;nbsp;POST TENSION SLABS باسلوب واضح ومرتب كما تأتي محتويات ذلك الكتاب كما يلي :-&lt;br /&gt;&lt;b&gt;- الفصل الاول : النظرية الهندسية واساسيات تصميم البلاطات اللاحقة الشد&amp;nbsp;&lt;br /&gt;&lt;/b&gt;ويتناول هذا الفصل تفاصيل وتعريف فكرة ونظرية نظام العناصر لاحقة الشد وسلوكها مع الاحمال الواقعة عليها بالاضافة الى ذكر انواع انظمة الشد اللاحق والطرق المختلفة لتوزيع ال ( Tendons ) في البلاطات لاحقة الشد .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الفصل الثاني : مكونات نظام البلاطات اللاحقة الشد المحقونة " Bonded Post Tension Slabs "&amp;nbsp;&lt;br /&gt;&lt;/b&gt;ويشرح هذا الفصل العناصر المكونة للنظام والاختبارات الخاصة بها وطريقة البدء فى تصميم هذا النوع من البلاطات مع ذكر اساسيات وعوامل واعتبارات التصميم للبلاطات لاحقة الشد .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الفصل الثالث : خطوات تنفيذ البلاطات اللاحقة الشد&amp;nbsp;&lt;br /&gt;&lt;/b&gt;وفي هذا الفصيل يتم تفصيل طريقة التركيب والتنفيذ للبلاطات لاحقة الشد مرورا بمرحلة الصب ثم مرحلة الشد بجميع توصياتها واعتباراتها مع تفصيل جميع النقاط الخاصة بعملية الشد وعوامل الفقد فى قوي الشد والتي تؤثر على الاستطالة وانتهاءا بشرح عملية الحقن .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الفصل الرابع : بعض المشاكل الموقعية اسبابها وطريقة حلها&amp;nbsp;&lt;br /&gt;&lt;/b&gt;استكمالا لعملية التنفيذ فمن الوارد حدوث بعض المشاكل مثل حدوث انفلات لل strands او حدوث انهيار للخرسانة عند منطقة الشد وتم تغطية هذه المشكلات فى هذا الفصل .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الفصل الخامس : اعتبارات عامة اثناء التصميم والتنفيذ&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;- الفصل السادس : طريقة عمل فتحات في البلاطات اللاحقة الشد ذات الكابلات المحقونة " Bonded " .&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;للتحميل والحصول على الكتاب&amp;nbsp;&lt;br /&gt;" مذكرة افهم واستوعب&amp;nbsp; البلاطات اللاحقة الشد POST TENSION SLABS&amp;nbsp; "&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span&gt;&lt;a href="https://www.mediafire.com/file/biu57mpfmgvhad0/افهم_واستوعب_POST_TENSION_SLABS_م_محمد_حسنين_محمود_+.pdf/file" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Mediafire.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1jL-n2o-0u7sYNvJxIl45TygSGsWZ7zTn/view?usp=share_link" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;لمزيد من الافادة اترككم مع هذا الفيديو الرائع والشرح البسيط من الموقع لسقف البوست تنشن&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="346" src="https://www.youtube.com/embed/mxTrV6vRJrY" width="481" youtube-src-id="mxTrV6vRJrY"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTlYLeDdCVHq9atw6y4l5r1nXeHGv-sKdZlcNzQg4PvU1yGhrTPkHlPF_Xm38vbV67VBfde8sLTp2rqyRSGTFYXjn783sfYzFktJEvgIjXxviXT2ocDofRmHBsocFYKfaVZOFTbadL5AQR6qSDSD-B2zV2AlOBCi0MdLDUw7_TNqluS4dk0w-df-HhzQ/s72-w640-h416-c/post-tension.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>دليل عزل خزانات المياة الارضية PDF </title><link>https://www.civilmaker.com/2023/01/water-tank-waterproofing.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 20 Jan 2023 08:16:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-4847676075322217857</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;نقدم لكم كتاب وملخص " دليل عزل خزانات المياة الارضية&amp;nbsp; " والذي يمكن الاعتماد عليه فى تنفيذ واستلام اعمال العزل للخزانات الارضية ويطبق هذا الدليل على الخزانات الخاصة لتجميع مياة الشرب التي يتم انشاؤها فى المنازل والعقارات والوحدات السكنية والمنفذه&amp;nbsp; وفقا لمتطلبات كود البناء السعودي .&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNEyzNlH19XAlNxpPlhpJRWK2lwV7CfS9wx_pxR9SEuwzQ-R5QFQ0WjaKBa68GAPcLhTfw0cr_wT8z5a-5qZgkC62PIBbFXpp9osIVeQtv5GFzgl_QwMeuQjDL1TEELGZzMwg4SIua9GyZuCAvjzI_U3gDwi8D79NpbIlHZoYH7mN9YgU0adIm08YlUQ/s1000/%D8%AF%D9%84%D9%8A%D9%84-%D8%B9%D8%B2%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9-.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="دليل عزل خزانات المياة الارضية" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNEyzNlH19XAlNxpPlhpJRWK2lwV7CfS9wx_pxR9SEuwzQ-R5QFQ0WjaKBa68GAPcLhTfw0cr_wT8z5a-5qZgkC62PIBbFXpp9osIVeQtv5GFzgl_QwMeuQjDL1TEELGZzMwg4SIua9GyZuCAvjzI_U3gDwi8D79NpbIlHZoYH7mN9YgU0adIm08YlUQ/w640-h416/%D8%AF%D9%84%D9%8A%D9%84-%D8%B9%D8%B2%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9-.png" title="دليل عزل خزانات المياة الارضية" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;وجدير بالذكر توضيح اهمية اعمال العزل وذلك للنقاط الاتية :-&amp;nbsp;&lt;br /&gt;&lt;/b&gt;- الحفاظ على المياة من الهدر وترشيد الاستهلاك .&lt;br /&gt;- المحافظة على اساسات المباني من الضرر بسبب تسرب المياه .&lt;br /&gt;- المحافظة على الطرق المجاورة من التضرر الناتج عن تسرب المياه .&lt;br /&gt;- المحافظة على المياه من التلوث نتيجة تسريب المياه من والى الخزانات .&lt;br /&gt;- تخفيض العبء الاقتصادي على المستهلك بخفض اسهلاك فواتير المياه .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;جدول المحتويات "دليل عزل خزانات المياة الارضية&amp;nbsp; " :-&amp;nbsp;&lt;br /&gt;&lt;/b&gt;- المقدمة .&lt;br /&gt;- المجال .&lt;br /&gt;- تعاريف ومصطلحات .&lt;br /&gt;- المواصفات المرجعية .&lt;br /&gt;- اهمية عزل الخزانات .&lt;br /&gt;- اهم انواع الخزانات .&lt;br /&gt;- اشتراطات عامة لتفيذ الخزانات .&lt;br /&gt;- خيارات عزل الخزانات .&lt;br /&gt;- اختبارات العزل للخزان .&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;للحصول على PDF "&amp;nbsp;دليل عزل خزانات المياة الارضية&amp;nbsp; "&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/osq5ror0tiyfgzg/دليل_عزل_خزانات_المياه_الأرضية_8.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1ATg-jFnBvDp3ilKNdrijyWiez3Kl-jH3/view?usp=share_link" target="_blank"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Drive.google.com&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNEyzNlH19XAlNxpPlhpJRWK2lwV7CfS9wx_pxR9SEuwzQ-R5QFQ0WjaKBa68GAPcLhTfw0cr_wT8z5a-5qZgkC62PIBbFXpp9osIVeQtv5GFzgl_QwMeuQjDL1TEELGZzMwg4SIua9GyZuCAvjzI_U3gDwi8D79NpbIlHZoYH7mN9YgU0adIm08YlUQ/s72-w640-h416-c/%D8%AF%D9%84%D9%8A%D9%84-%D8%B9%D8%B2%D9%84-%D8%A7%D9%84%D8%AE%D8%B2%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%B1%D8%B6%D9%8A%D8%A9-.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة مصطلحات الموقع والهندسة المدنية باللغة الانجليزية </title><link>https://www.civilmaker.com/2022/11/civil-engineering-expressions.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Fri, 4 Nov 2022 04:46:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-8122606669391720675</guid><description>&lt;span style="font-size: medium;"&gt;اليكم مذكرة بسيطة تحتوي على اهم واشهر مصطلحات واختصارات الهندسة المدنية باللغة العربية و الانجليزية والتي يتم استخدامها فى مواقع التنفيذ وبين المهندسين والفنيين والعمال اثناء عمليات التنفيذ .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdJweGv0XYsjDd5G4feBHod1ow3WuKSSsc7_fUynxfFQGuJs6dDBXQO-rEUh31M2NaMfD5iyjpHKTAiI5B6cy93LdAvf2iHCLm5iQyc0ymSxacSwEKMu_OWu-JFBSrsMe5s-04eyDN_vMLbOaWCHNgizpMN09XrIB632-KODb_avdNXEn35xxbNvRSDg/s1000/%D9%85%D8%B0%D9%83%D8%B1%D8%A9-%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A%D8%A9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مذكرة مصطلحات الموقع والهندسة المدنية باللغة الانجليزية" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdJweGv0XYsjDd5G4feBHod1ow3WuKSSsc7_fUynxfFQGuJs6dDBXQO-rEUh31M2NaMfD5iyjpHKTAiI5B6cy93LdAvf2iHCLm5iQyc0ymSxacSwEKMu_OWu-JFBSrsMe5s-04eyDN_vMLbOaWCHNgizpMN09XrIB632-KODb_avdNXEn35xxbNvRSDg/w640-h416/%D9%85%D8%B0%D9%83%D8%B1%D8%A9-%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A%D8%A9.png" title="مذكرة مصطلحات الموقع والهندسة المدنية باللغة الانجليزية" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;فقد تتعرض اثناء وجودك بالموقع لاحد هذه المصطلحات وانت لا تدري ما المقصود بها وذلك بغض النظر عن معرفتك المسبقة بتلك المعاني من عدمها ، فمثلا من الممكن ان تتعرض لبعض الاختصارات مثل BOQ او MAR او IR وعند سماع تلك الاختصارات لا تدري ما المقصود بها لكن بعد اطلاعك على تلك المذكرة ستدرك ما المقصود بتلك المصطلحات والاختصارات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;فـ BOQ هي اختصار لـ Bill Of Quantity وهي جداول الكميات والاسعار ، اما MAR هي اختصار لـ Material Approval Sheets وهي نموذج طلب اعتماد عينة او مواد ، و اختصار IR هو اختصار لـ&amp;nbsp; Inspection Request وتعني طلب فحص اعمال .&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;تحميل مذكرة " مصطلحات واختصارات الهندسة المدنية باللغة الانجليزية "&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/mxgdu1ofbz856ti/مصطلحات_الموقع_باللغة_الإنجليزية.pdf/file" target="_blank"&gt;&lt;span style="font-size: large;"&gt;Mediafire.com&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1AVOeud14HKh81KCcwjGP4rRlMyeZ973R/view?usp=share_link" target="_blank"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Drive.google.com&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdJweGv0XYsjDd5G4feBHod1ow3WuKSSsc7_fUynxfFQGuJs6dDBXQO-rEUh31M2NaMfD5iyjpHKTAiI5B6cy93LdAvf2iHCLm5iQyc0ymSxacSwEKMu_OWu-JFBSrsMe5s-04eyDN_vMLbOaWCHNgizpMN09XrIB632-KODb_avdNXEn35xxbNvRSDg/s72-w640-h416-c/%D9%85%D8%B0%D9%83%D8%B1%D8%A9-%D9%85%D8%B5%D8%B7%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%86%D8%AF%D8%B3%D8%A9-%D8%A7%D9%84%D9%85%D8%AF%D9%86%D9%8A%D8%A9.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>نماذج ضبط وتوكيد الجودة واصول الاستلام وورد | محرم باخوم </title><link>https://www.civilmaker.com/2022/09/qc.html</link><category>أبحاث ومقالات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Sat, 1 Oct 2022 01:22:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-6260777583277098399</guid><description>&lt;span style="font-size: medium;"&gt;هدية خاصة لمهندسي الاشراف ومهندسي ضبط الجودة ..... إليكم جميع نماذج ضبط وتوكيد الجودة واصول الاستلام لجميع بنود التنفيذ بصيغة وورد DOC&amp;nbsp; و المعتمدة من مكتب محرم باخوم .&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvraxA0PdqQVIhE0DOiM1X_6dx6DryvtHR3u59OenvWX0Hci_ebdpSk_VSbBrn64lmGHmZur4YRyJLS_19lGx4cpg8oc0SggQitwGj_Rw94csfq5oj28f__vN35l6_3z4kkXgVpGCH6VKtAsC-26St4cGclsCqPtiv4D8rdrv73lLOexKhn2zhEV6fEg/s1000/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%B6%D8%A8%D9%80%D9%80%D8%B7-%D9%88%D8%AA%D9%88%D9%83%D9%8A%D9%80%D9%80%D8%AF-%D8%A7%D9%84%D8%AC%D9%80%D9%80%D9%88%D8%AF%D8%A9-%D9%88%D8%A7%D8%B5%D9%80%D9%88%D9%84-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%80%D9%84%D8%A7%D9%85.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="اليكم نماذج ضبط وتوكيد الجودة واصول الاستلام لجميع بنود التنفيذ والتشطيبات بصيغة word من مكتب محرم باخوم | هدية لمهندسين الاشراف وضبط الجودة" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvraxA0PdqQVIhE0DOiM1X_6dx6DryvtHR3u59OenvWX0Hci_ebdpSk_VSbBrn64lmGHmZur4YRyJLS_19lGx4cpg8oc0SggQitwGj_Rw94csfq5oj28f__vN35l6_3z4kkXgVpGCH6VKtAsC-26St4cGclsCqPtiv4D8rdrv73lLOexKhn2zhEV6fEg/w640-h416/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%B6%D8%A8%D9%80%D9%80%D8%B7-%D9%88%D8%AA%D9%88%D9%83%D9%8A%D9%80%D9%80%D8%AF-%D8%A7%D9%84%D8%AC%D9%80%D9%80%D9%88%D8%AF%D8%A9-%D9%88%D8%A7%D8%B5%D9%80%D9%88%D9%84-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%80%D9%84%D8%A7%D9%85.png" title="نماذج ضبط وتوكيد الجودة واصول الاستلام وورد | محرم باخوم" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج اماكن اسم المشروع و اللوجو الخاص بالمالك .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الحفر .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال الاحلال .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام الخنزيرة .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام نجاره القواعد الخرسانيه العادية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام نجارة قواعد مسلحة وسملات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام حديد تسليح الاساسات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام نجاره الاعمدة الخرسانيه .&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام حديد الاعمدة الخرسانيه .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (تحت السقف) و التصريح بالصب .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (فوق السقف) .&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام تسليح أسقف الخرسانة المسلحة .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( أ ـ الخراطيم في الأسقف ) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام اعمال صب الخرسانة .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال العزل للاساسات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام العزل للاسطح .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال مبانى قصة الردم .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام اعمال الردم .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام الارضيات الخرسانية (قبل الصب) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلامأعمال المبانى .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام أعمال الكهرباء ( ب ـ&amp;nbsp; الدق والتركيب )&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال طرطشة البياض .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال البؤج والأوتار ( بياض حوائط و الاسقف ) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام الحلوق الخشبية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام توريدات حلوق النجارة .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال البياض(ملو) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( جـ ) الأسلاك&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أسقف الشبك الممدد .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال السيراميك .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام اعمال البلاط للارضيات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام تسكيك واكسسوارات النجارة .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الدهانات ( أ ) أعمال المعجون .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام ارضيات الخشب السويد .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام اعمال الباركيه (الارضيات) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الدهانات ( ب ) أعمال تشطيب الدهانات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام بياض الحجر الصناعى .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الصحى الخارجى (الواجهات الخارجية) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الرافق (خطوط تغذية) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال المرافق (خطوط صرف) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد متوسط) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد منخفض) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال العزل المائى للاسطح .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال العزل الحرارى للاسطح .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال العزل المائى للحوائط .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال البردورات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الانترلوك .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال اعمال الفرمة لاعمال الطرق .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام طبقة الاساس لاعمال الطرق .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام طبقة M.C.Oلاعمال الطرق&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام أعمال الرصف بخلطات الأسفلت الساخن (الطبقة الرابطة)&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام طبقة اللاصقة (RC2) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام طبقة السطحية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال الاسفال الحجرية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام الرخام اعمال الدرج .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال الدهانات الخارجية للواجهات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال تركيب الشنجل .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الترابيع الرخام للأرضيات .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الشبابيك الألومنيوم .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال الدهانات للواجهات الخارجية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إستلام اعمال تركيب و تثبيت الهاندرل ( دريزين لسلم الحديد ) .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام و فحص قد المباني .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام و فحص رفع أعمال المباني .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام أعمال فحص و تركيب الوحدات الجبسية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام الابواب الحديد لزوم المداخل الرئيسية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام اعمال التغذية الداخلية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام نجارة الحوائط المسلحة قبل رص الحديد .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;استلام حديد التسليح الحوائط المسلحة&amp;nbsp; .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- نموذج&amp;nbsp;إصدار المستخلصات الجارية بالمشروع .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- بيان النقاط المطلوب التأكد منها لإعتماد البرنامج الزمنى "خط الأساس" .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;- بيان النقاط المطلوب التأكد منها لإعتماد تحديث البرنامج الزمنى .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: large;"&gt;التحميل&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;" نماذج ضبط وتوكيد الجودة واصول الاستلام وورد | محرم باخوم&lt;/b&gt;&amp;nbsp;"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://www.mediafire.com/file/zuoxfzlyr0hxgkf/QC.rar/file?fbclid=IwAR2p1QFA7vs_eVNPgVz5uS-ahhaGJ_Y4MfM5rMQ57VMtevf9HIDaY6gFMHQ" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://drive.google.com/file/d/1HecrDO7zM2PKYOgcV-Q9CmMv8L4t_qNv/view?usp=sharing" target="_blank"&gt;Drive.google.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;i&gt;&lt;u style="background-color: #fcff01;"&gt;" اذا حدث عطل باحد الروابط برجاء ابلاغنا اسفل بالتعليقات "&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvraxA0PdqQVIhE0DOiM1X_6dx6DryvtHR3u59OenvWX0Hci_ebdpSk_VSbBrn64lmGHmZur4YRyJLS_19lGx4cpg8oc0SggQitwGj_Rw94csfq5oj28f__vN35l6_3z4kkXgVpGCH6VKtAsC-26St4cGclsCqPtiv4D8rdrv73lLOexKhn2zhEV6fEg/s72-w640-h416-c/%D9%86%D9%85%D8%A7%D8%B0%D8%AC-%D8%B6%D8%A8%D9%80%D9%80%D8%B7-%D9%88%D8%AA%D9%88%D9%83%D9%8A%D9%80%D9%80%D8%AF-%D8%A7%D9%84%D8%AC%D9%80%D9%80%D9%88%D8%AF%D8%A9-%D9%88%D8%A7%D8%B5%D9%80%D9%88%D9%84-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D9%80%D9%84%D8%A7%D9%85.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="2168469" type="application/x-rar" url="http://www.mediafire.com/file/zuoxfzlyr0hxgkf/QC.rar/file?fbclid=IwAR2p1QFA7vs_eVNPgVz5uS-ahhaGJ_Y4MfM5rMQ57VMtevf9HIDaY6gFMHQ"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>هدية خاصة لمهندسي الاشراف ومهندسي ضبط الجودة ..... إليكم جميع نماذج ضبط وتوكيد الجودة واصول الاستلام لجميع بنود التنفيذ بصيغة وورد DOC&amp;nbsp; و المعتمدة من مكتب محرم باخوم . - نموذج اماكن اسم المشروع و اللوجو الخاص بالمالك .- نموذج&amp;nbsp;إستلام أعمال الحفر .- نموذج&amp;nbsp;استلام اعمال الاحلال .- نموذج&amp;nbsp;استلام الخنزيرة .- نموذج&amp;nbsp;إستلام نجاره القواعد الخرسانيه العادية .- نموذج&amp;nbsp;إستلام نجارة قواعد مسلحة وسملات .- نموذج&amp;nbsp;إستلام حديد تسليح الاساسات .- نموذج&amp;nbsp;إستلام نجاره الاعمدة الخرسانيه .&amp;nbsp;- نموذج&amp;nbsp;إستلام حديد الاعمدة الخرسانيه .- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (تحت السقف) و التصريح بالصب .- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (فوق السقف) .&amp;nbsp;- نموذج&amp;nbsp;إستلام تسليح أسقف الخرسانة المسلحة .- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( أ ـ الخراطيم في الأسقف ) .- نموذج&amp;nbsp;إستلام اعمال صب الخرسانة .- نموذج&amp;nbsp;إستلام أعمال العزل للاساسات .- نموذج&amp;nbsp;إستلام العزل للاسطح .- نموذج&amp;nbsp;إستلام أعمال مبانى قصة الردم .- نموذج&amp;nbsp;إستلام اعمال الردم .- نموذج&amp;nbsp;إستلام الارضيات الخرسانية (قبل الصب) .- نموذج&amp;nbsp;إستلامأعمال المبانى .- نموذج&amp;nbsp;استلام أعمال الكهرباء ( ب ـ&amp;nbsp; الدق والتركيب )&amp;nbsp; .- نموذج&amp;nbsp;إستلام أعمال طرطشة البياض .- نموذج&amp;nbsp;إستلام أعمال البؤج والأوتار ( بياض حوائط و الاسقف ) .- نموذج&amp;nbsp;إستلام الحلوق الخشبية .- نموذج&amp;nbsp;إستلام توريدات حلوق النجارة .- نموذج&amp;nbsp;إستلام أعمال البياض(ملو) .- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( جـ ) الأسلاك&amp;nbsp; .- نموذج&amp;nbsp;إستلام أسقف الشبك الممدد .- نموذج&amp;nbsp;إستلام أعمال السيراميك .- نموذج&amp;nbsp;إستلام اعمال البلاط للارضيات .- نموذج&amp;nbsp;إستلام تسكيك واكسسوارات النجارة .- نموذج&amp;nbsp;إستلام أعمال الدهانات ( أ ) أعمال المعجون .- نموذج&amp;nbsp;إستلام ارضيات الخشب السويد .- نموذج&amp;nbsp;إستلام اعمال الباركيه (الارضيات) .- نموذج&amp;nbsp;إستلام أعمال الدهانات ( ب ) أعمال تشطيب الدهانات .- نموذج&amp;nbsp;إستلام بياض الحجر الصناعى .- نموذج&amp;nbsp;إستلام أعمال الصحى الخارجى (الواجهات الخارجية) .- نموذج&amp;nbsp;إستلام أعمال الرافق (خطوط تغذية) .- نموذج&amp;nbsp;إستلام أعمال المرافق (خطوط صرف) .- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد متوسط) .- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد منخفض) .- نموذج&amp;nbsp;إستلام أعمال العزل المائى للاسطح .- نموذج&amp;nbsp;إستلام أعمال العزل الحرارى للاسطح .- نموذج&amp;nbsp;إستلام أعمال العزل المائى للحوائط .- نموذج&amp;nbsp;إستلام أعمال البردورات .- نموذج&amp;nbsp;إستلام أعمال الانترلوك .- نموذج&amp;nbsp;إستلام أعمال اعمال الفرمة لاعمال الطرق .- نموذج&amp;nbsp;إستلام طبقة الاساس لاعمال الطرق .- نموذج&amp;nbsp;استلام طبقة M.C.Oلاعمال الطرق&amp;nbsp; .- نموذج&amp;nbsp;إستلام أعمال الرصف بخلطات الأسفلت الساخن (الطبقة الرابطة)&amp;nbsp; .- نموذج&amp;nbsp;استلام طبقة اللاصقة (RC2) .- نموذج&amp;nbsp;استلام طبقة السطحية .- نموذج&amp;nbsp;استلام اعمال الاسفال الحجرية .- نموذج&amp;nbsp;إستلام الرخام اعمال الدرج .- نموذج&amp;nbsp;استلام اعمال الدهانات الخارجية للواجهات .- نموذج&amp;nbsp;استلام اعمال تركيب الشنجل .- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الترابيع الرخام للأرضيات .- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الشبابيك الألومنيوم .- نموذج&amp;nbsp;استلام اعمال الدهانات للواجهات الخارجية .- نموذج&amp;nbsp;إستلام اعمال تركيب و تثبيت الهاندرل ( دريزين لسلم الحديد ) .- نموذج&amp;nbsp;استلام و فحص قد المباني .- نموذج&amp;nbsp;استلام و فحص رفع أعمال المباني .- نموذج&amp;nbsp;استلام أعمال فحص و تركيب الوحدات الجبسية .- نموذج&amp;nbsp;استلام الابواب الحديد لزوم المداخل الرئيسية .- نموذج&amp;nbsp;استلام اعمال التغذية الداخلية .- نموذج&amp;nbsp;استلام نجارة الحوائط المسلحة قبل رص الحديد .- نموذج&amp;nbsp;استلام حديد التسليح الحوائط المسلحة&amp;nbsp; .- نموذج&amp;nbsp;إصدار المستخلصات الجارية بالمشروع .- بيان النقاط المطلوب التأكد منها لإعتماد البرنامج الزمنى "خط الأساس" .- بيان النقاط المطلوب التأكد منها لإعتماد تحديث البرنامج الزمنى . التحميل&amp;nbsp;" نماذج ضبط وتوكيد الجودة واصول الاستلام وورد | محرم باخوم&amp;nbsp;" Mediafire.com ORDrive.google.com " اذا حدث عطل باحد الروابط برجاء ابلاغنا اسفل بالتعليقات "</itunes:subtitle><itunes:author>noreply@blogger.com (Ahmd Elzammar)</itunes:author><itunes:summary>هدية خاصة لمهندسي الاشراف ومهندسي ضبط الجودة ..... إليكم جميع نماذج ضبط وتوكيد الجودة واصول الاستلام لجميع بنود التنفيذ بصيغة وورد DOC&amp;nbsp; و المعتمدة من مكتب محرم باخوم . - نموذج اماكن اسم المشروع و اللوجو الخاص بالمالك .- نموذج&amp;nbsp;إستلام أعمال الحفر .- نموذج&amp;nbsp;استلام اعمال الاحلال .- نموذج&amp;nbsp;استلام الخنزيرة .- نموذج&amp;nbsp;إستلام نجاره القواعد الخرسانيه العادية .- نموذج&amp;nbsp;إستلام نجارة قواعد مسلحة وسملات .- نموذج&amp;nbsp;إستلام حديد تسليح الاساسات .- نموذج&amp;nbsp;إستلام نجاره الاعمدة الخرسانيه .&amp;nbsp;- نموذج&amp;nbsp;إستلام حديد الاعمدة الخرسانيه .- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (تحت السقف) و التصريح بالصب .- نموذج&amp;nbsp;إستلام نجاره الاسقف الخرسانيه (فوق السقف) .&amp;nbsp;- نموذج&amp;nbsp;إستلام تسليح أسقف الخرسانة المسلحة .- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( أ ـ الخراطيم في الأسقف ) .- نموذج&amp;nbsp;إستلام اعمال صب الخرسانة .- نموذج&amp;nbsp;إستلام أعمال العزل للاساسات .- نموذج&amp;nbsp;إستلام العزل للاسطح .- نموذج&amp;nbsp;إستلام أعمال مبانى قصة الردم .- نموذج&amp;nbsp;إستلام اعمال الردم .- نموذج&amp;nbsp;إستلام الارضيات الخرسانية (قبل الصب) .- نموذج&amp;nbsp;إستلامأعمال المبانى .- نموذج&amp;nbsp;استلام أعمال الكهرباء ( ب ـ&amp;nbsp; الدق والتركيب )&amp;nbsp; .- نموذج&amp;nbsp;إستلام أعمال طرطشة البياض .- نموذج&amp;nbsp;إستلام أعمال البؤج والأوتار ( بياض حوائط و الاسقف ) .- نموذج&amp;nbsp;إستلام الحلوق الخشبية .- نموذج&amp;nbsp;إستلام توريدات حلوق النجارة .- نموذج&amp;nbsp;إستلام أعمال البياض(ملو) .- نموذج&amp;nbsp;إستلام أعمال الكهرباء ( جـ ) الأسلاك&amp;nbsp; .- نموذج&amp;nbsp;إستلام أسقف الشبك الممدد .- نموذج&amp;nbsp;إستلام أعمال السيراميك .- نموذج&amp;nbsp;إستلام اعمال البلاط للارضيات .- نموذج&amp;nbsp;إستلام تسكيك واكسسوارات النجارة .- نموذج&amp;nbsp;إستلام أعمال الدهانات ( أ ) أعمال المعجون .- نموذج&amp;nbsp;إستلام ارضيات الخشب السويد .- نموذج&amp;nbsp;إستلام اعمال الباركيه (الارضيات) .- نموذج&amp;nbsp;إستلام أعمال الدهانات ( ب ) أعمال تشطيب الدهانات .- نموذج&amp;nbsp;إستلام بياض الحجر الصناعى .- نموذج&amp;nbsp;إستلام أعمال الصحى الخارجى (الواجهات الخارجية) .- نموذج&amp;nbsp;إستلام أعمال الرافق (خطوط تغذية) .- نموذج&amp;nbsp;إستلام أعمال المرافق (خطوط صرف) .- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد متوسط) .- نموذج&amp;nbsp;إستلام أعمال المرافق (كابلات جهد منخفض) .- نموذج&amp;nbsp;إستلام أعمال العزل المائى للاسطح .- نموذج&amp;nbsp;إستلام أعمال العزل الحرارى للاسطح .- نموذج&amp;nbsp;إستلام أعمال العزل المائى للحوائط .- نموذج&amp;nbsp;إستلام أعمال البردورات .- نموذج&amp;nbsp;إستلام أعمال الانترلوك .- نموذج&amp;nbsp;إستلام أعمال اعمال الفرمة لاعمال الطرق .- نموذج&amp;nbsp;إستلام طبقة الاساس لاعمال الطرق .- نموذج&amp;nbsp;استلام طبقة M.C.Oلاعمال الطرق&amp;nbsp; .- نموذج&amp;nbsp;إستلام أعمال الرصف بخلطات الأسفلت الساخن (الطبقة الرابطة)&amp;nbsp; .- نموذج&amp;nbsp;استلام طبقة اللاصقة (RC2) .- نموذج&amp;nbsp;استلام طبقة السطحية .- نموذج&amp;nbsp;استلام اعمال الاسفال الحجرية .- نموذج&amp;nbsp;إستلام الرخام اعمال الدرج .- نموذج&amp;nbsp;استلام اعمال الدهانات الخارجية للواجهات .- نموذج&amp;nbsp;استلام اعمال تركيب الشنجل .- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الترابيع الرخام للأرضيات .- نموذج&amp;nbsp;استلام&amp;nbsp; تركيب الشبابيك الألومنيوم .- نموذج&amp;nbsp;استلام اعمال الدهانات للواجهات الخارجية .- نموذج&amp;nbsp;إستلام اعمال تركيب و تثبيت الهاندرل ( دريزين لسلم الحديد ) .- نموذج&amp;nbsp;استلام و فحص قد المباني .- نموذج&amp;nbsp;استلام و فحص رفع أعمال المباني .- نموذج&amp;nbsp;استلام أعمال فحص و تركيب الوحدات الجبسية .- نموذج&amp;nbsp;استلام الابواب الحديد لزوم المداخل الرئيسية .- نموذج&amp;nbsp;استلام اعمال التغذية الداخلية .- نموذج&amp;nbsp;استلام نجارة الحوائط المسلحة قبل رص الحديد .- نموذج&amp;nbsp;استلام حديد التسليح الحوائط المسلحة&amp;nbsp; .- نموذج&amp;nbsp;إصدار المستخلصات الجارية بالمشروع .- بيان النقاط المطلوب التأكد منها لإعتماد البرنامج الزمنى "خط الأساس" .- بيان النقاط المطلوب التأكد منها لإعتماد تحديث البرنامج الزمنى . التحميل&amp;nbsp;" نماذج ضبط وتوكيد الجودة واصول الاستلام وورد | محرم باخوم&amp;nbsp;" Mediafire.com ORDrive.google.com " اذا حدث عطل باحد الروابط برجاء ابلاغنا اسفل بالتعليقات "</itunes:summary><itunes:keywords>أبحاث ومقالات</itunes:keywords></item><item><title>مجموعة نماذج مخططات معمارية لفلل سكنية بالسعودية KSA </title><link>https://www.civilmaker.com/2022/09/ksa-arc.html</link><category>منوعــات</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Sun, 25 Sep 2022 02:59:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-2236831859614146449</guid><description>&lt;span style="font-size: medium;"&gt;اليكم مجموعة نماذج مخططات معمارية لفلل سكنية بالمملكة العربية السعودية وتم تجميعهم فى PDF File يحتوي على اكثر من 200 نموذج لمساقط ومقترحات معمارية تناسب جميع المساحات وانظمة البناء المختلفة الحديثة والقديمة .&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNaFNXnrVW8ZFc35wm6LgvCulCUTjtT1M70wBs4YCyprWqihhTpzt-5Hf4sq8KV5zRoc7hSJgVCkwFveFzEfwftKBSHdACL_aEbTlvyEkZzXMef0fL8rbQ2M3O9IAYO16Q5jDS44h1a_guZ6bLTnQEEgEM4k_9uo5kpH4h-NXY_pp525WSkmrqN4-Agg/s1000/%D9%85%D8%B3%D8%A7%D9%82%D8%B7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مجموعة نماذج مخططات معمارية لفلل سكنية بالسعودية KSA" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNaFNXnrVW8ZFc35wm6LgvCulCUTjtT1M70wBs4YCyprWqihhTpzt-5Hf4sq8KV5zRoc7hSJgVCkwFveFzEfwftKBSHdACL_aEbTlvyEkZzXMef0fL8rbQ2M3O9IAYO16Q5jDS44h1a_guZ6bLTnQEEgEM4k_9uo5kpH4h-NXY_pp525WSkmrqN4-Agg/w640-h416/%D9%85%D8%B3%D8%A7%D9%82%D8%B7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9.png" title="مجموعة نماذج مخططات معمارية لفلل سكنية بالسعودية KSA" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;مجموعة مساقط معمارية للفلل السكنية بالسعودية تم تجميعهم فى مجلد واحد لتخدم العميل والمهندس بالمملكة العربية السعودية حيث يمكنك الاطلاع على تصميماتها المعمارية والبحث عن افضل وانسب اختيار ومقترح معماري يوفي بمتطلبات العميل ويزيد الافكار التصميمية&amp;nbsp; لدي المهندس المعماري وذلك بالاطلاع على التصميمات المختلفة&amp;nbsp; وعمل التغذية البصرية لتلك الاعمال المعمارية .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: medium;"&gt;&lt;b&gt;للحصول على النماذج كاملة&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: medium;"&gt;"&amp;nbsp;&lt;/span&gt;&lt;span style="text-align: right;"&gt;&lt;span style="font-size: medium;"&gt;مجموعة نماذج مخططات معمارية لفلل سكنية بالسعودية KSA&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;"&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/72qf9sflii9qlqn/ksa_%25D9%2585%25D8%25AE%25D8%25B7%25D8%25B7%25D8%25A7%25D8%25AA_.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1gLrTuK49zQ97LZ3HsUlyTcGLFFg0k2Ja/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNaFNXnrVW8ZFc35wm6LgvCulCUTjtT1M70wBs4YCyprWqihhTpzt-5Hf4sq8KV5zRoc7hSJgVCkwFveFzEfwftKBSHdACL_aEbTlvyEkZzXMef0fL8rbQ2M3O9IAYO16Q5jDS44h1a_guZ6bLTnQEEgEM4k_9uo5kpH4h-NXY_pp525WSkmrqN4-Agg/s72-w640-h416-c/%D9%85%D8%B3%D8%A7%D9%82%D8%B7-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A%D8%A9.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة شرح تفاصيل تنفيذ الكباري </title><link>https://www.civilmaker.com/2022/09/bridges.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Mon, 5 Sep 2022 07:10:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-5371922603080799304</guid><description>&lt;span style="font-size: medium;"&gt;مذكرة شرح دسمة جدا فى مجال تنفيذ اعمال الكباري الخرسانية باسلوب شرح بسيط&amp;nbsp; بلغة الموقع مع وجود بعض الصور من مواقع التنفيذ لتوضيح عمليات التنفيذ لاعمال الكباري .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiI1V4ZX0TCY2n2fE1AKaw3M9uEAeP00qw9-0aQjCSd3D4x7kW_cg5S-KfHE9MJtF5nKDzdF46jIM2u6tVE_OBIDId4qyhQhx5HeHV61OtKTZpvZzgwvIyuyg-1EkbEvPrktmuG-z-r7irEJubkChLq2j2F6ft750r6baKnycONL86DyVXvK-hS_Eydg/s1000/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A7%D9%84%D9%83%D8%A8%D8%A7%D8%B1%D9%8A-%D8%B4%D8%B1%D8%AD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مذكرة شرح تفاصيل تنفيذ الكباري" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiI1V4ZX0TCY2n2fE1AKaw3M9uEAeP00qw9-0aQjCSd3D4x7kW_cg5S-KfHE9MJtF5nKDzdF46jIM2u6tVE_OBIDId4qyhQhx5HeHV61OtKTZpvZzgwvIyuyg-1EkbEvPrktmuG-z-r7irEJubkChLq2j2F6ft750r6baKnycONL86DyVXvK-hS_Eydg/w640-h416/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A7%D9%84%D9%83%D8%A8%D8%A7%D8%B1%D9%8A-%D8%B4%D8%B1%D8%AD.png" title="مذكرة شرح تفاصيل تنفيذ الكباري" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;تحتاج اعمال تنفيذ الكباري الخرسانية الي شئ من التخصص والمعرفة المسبقة فى هذا المجال قبل الدخول فيه نظرا للتفاصيل التنفيذية التي تخفي على من لم يسبق لهم العمل في مثل هذه الاعمال ، فهي تختلف بقدر ما عن اعمال إنشاءات الابراج والوحدات السكنية لذلك اذا كنت تنوي التطرق الى اعمال تنفيذ الكباري فيمكنك اعتبار هذا الكتاب هو مدخلك لهذا العمل .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;بين سطور هذا الكتاب شرح لعملية تنفيذ لكوبري حلوان و الاوتوستراد الطريق الدائري الاوسطي ويتضمن الشرح جميع تفاصيل وفنيات مراحل الانشاء بداية من الاساسات باسلوب بسيط وواضح مع ادراج صور لتوضيح المعلومة بشئ اكثر تفصيلا .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;التحميل&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;مذكرة شرح تفاصيل تنفيذ الكباري&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/da04jtj961lguz9/ملف+عن+تنفيذ+الكباري+مميز+جدا+&#128076;.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1EdjfZVe3PGSmmnq4IoT6b_kN-IXeyNP0/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiI1V4ZX0TCY2n2fE1AKaw3M9uEAeP00qw9-0aQjCSd3D4x7kW_cg5S-KfHE9MJtF5nKDzdF46jIM2u6tVE_OBIDId4qyhQhx5HeHV61OtKTZpvZzgwvIyuyg-1EkbEvPrktmuG-z-r7irEJubkChLq2j2F6ft750r6baKnycONL86DyVXvK-hS_Eydg/s72-w640-h416-c/%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A7%D9%84%D9%83%D8%A8%D8%A7%D8%B1%D9%8A-%D8%B4%D8%B1%D8%AD.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة اخطاء التنفيذ الشائعة وطرق التغلب عليها </title><link>https://www.civilmaker.com/2022/08/site-problems-solve.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Sun, 21 Aug 2022 01:19:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-3574066753899174955</guid><description>&lt;span style="font-size: medium;"&gt;مذكرة تحت عنوان اخطاء شائعة فى التنفيذ واسلوب التغلب عليها تستهدف المهندس المدني وبخاصة مهندسين التنفيذ وكل من يحتك بموقع التنفيذ وذلك لما تحتويه هذه المذكرة من فنيات تخص التعامل مع المشاكل والاخطاء واردة الحدوث فى الموقع .&lt;/span&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJFcWVaCq5stRXFmSPAmPYvBoA7VrSPxX7BUQe8pqdoi5zJBJTLSwdPYP578nCyQEb0vWH5pK6V33b9l4ytk_d8f1cSmkj7exoePXr4usZ-XxJjrak5gD6ubnykPBRaongM8P28JRI60SvsrWLv4NCkXIeFPrltOtOOeqOmJ8W_RBAtbD9gRRaXdIRpg/s1000/%D8%B9%D9%8A%D9%88%D8%A8-%D8%A7%D9%84%D8%AA%D9%86%D9%81%D9%8A%D8%B0.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="مذكرة اخطاء وعيوب التنفيذ الشائعة وطرق واساليب التغلب عليها موجهه لمهندسين التنفيذ وكل من يحتك بمواقع التنفيذ من مشرفين وعمال" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJFcWVaCq5stRXFmSPAmPYvBoA7VrSPxX7BUQe8pqdoi5zJBJTLSwdPYP578nCyQEb0vWH5pK6V33b9l4ytk_d8f1cSmkj7exoePXr4usZ-XxJjrak5gD6ubnykPBRaongM8P28JRI60SvsrWLv4NCkXIeFPrltOtOOeqOmJ8W_RBAtbD9gRRaXdIRpg/w640-h416/%D8%B9%D9%8A%D9%88%D8%A8-%D8%A7%D9%84%D8%AA%D9%86%D9%81%D9%8A%D8%B0.png" title="مذكرة اخطاء التنفيذ الشائعة وطرق التغلب عليها" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;مذكرة اخطاء التنفيذ تعتبر المختصر المفيد لمعظم اخطاء التنفيذ الاكثر شيوعا لذلك وجب عليك الاطلاع عليها لتجنب مشاكل التنفيذ قدر الامكان ، والمميز فى هذه المذكرة هي الاسلوب البسيط المختصر التي تتناول به المعلومة الهندسية فى كلمات واضحه يسهل فهمها ليس للمهندس وفقط ولكن يمكن للعامل ان يستفيد منها ايضا .&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: medium;"&gt;
 &lt;p&gt;كثير من أخطاء التنفيذ يبدأ من لحظة وصول عربية الخرسانة، لذلك ننصحك بقراءة &lt;a href="https://www.civilmaker.com/2020/04/ready-mixing-concrete-stations.html"&gt;طريقة استلام الخرسانة الجاهزة في الموقع&lt;/a&gt;.&lt;/p&gt; 
 &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;للحصول على المذكرة&amp;nbsp;&lt;br /&gt;" مذكرة اخطاء التنفيذ الشائعة وطرق التغلب عليها&amp;nbsp;"&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/ms0x7bwguhieqx8/%25D8%25B9%25D9%258A%25D9%2588%25D8%25A8-%25D8%25A7%25D9%2584%25D8%25AA%25D9%2586%25D9%2581%25D9%258A%25D8%25B0_2.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://drive.google.com/file/d/1YxbfBNKVh-M0ASc84ERHOr4Bj_59iDw9/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Drive.google.com&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJFcWVaCq5stRXFmSPAmPYvBoA7VrSPxX7BUQe8pqdoi5zJBJTLSwdPYP578nCyQEb0vWH5pK6V33b9l4ytk_d8f1cSmkj7exoePXr4usZ-XxJjrak5gD6ubnykPBRaongM8P28JRI60SvsrWLv4NCkXIeFPrltOtOOeqOmJ8W_RBAtbD9gRRaXdIRpg/s72-w640-h416-c/%D8%B9%D9%8A%D9%88%D8%A8-%D8%A7%D9%84%D8%AA%D9%86%D9%81%D9%8A%D8%B0.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>مذكرة شرح تنفيذ وعمل بيارات الصرف الصحي </title><link>https://www.civilmaker.com/2022/07/septic-tank.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Wed, 20 Jul 2022 02:16:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-2858309244381335220</guid><description>&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;اليكم شرح متميز لتفاصيل اعمال بيارات الصرف الصحي تصميم وتنفيذ بجميع انواعها للمهندس المتميز محمد نواف جمعة وتحتوي مذكرة بيارات الصرف الصحي على شرح مبسط لفكرة عمل البيارات وفكرة التصميم وطرق التنفيذ للانواع المختلفة من انواع بيارات الصرف الصحي بالاضافة الي ادراج صور توضيحية تخص فنيات وطرق التنفيذ لاشهر انواع البيارات .&lt;/span&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIseg_BXuiJb2fj-BopOU4A2U0Wpdz2Uq-AC2oKRUy8PZ2UJVXsYE5y0oM260JFq_78gK7joLGJiKQh_SSej7Zs0ZJOuYGAfCSGJVLpeMojFiXG1tFVO6b_Mbf38XGpvuh2eG8UXGNPjS0xkDVHqr7GnScOvS0Tuv-rwQnD4hwurnlhmAYHoEl0crR_A/s1000/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A8%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D8%B5%D8%AD%D9%8A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span style="font-size: medium;"&gt;&lt;img alt="شرح مفصل لتصميم وتنفيذ البيارات بجميع انواعها وشرح طرق عملها وفنيات تنفيذ البيارات المختلفة والتي يكثر استخدامها بدول الخليج وبخاصة السعودية" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIseg_BXuiJb2fj-BopOU4A2U0Wpdz2Uq-AC2oKRUy8PZ2UJVXsYE5y0oM260JFq_78gK7joLGJiKQh_SSej7Zs0ZJOuYGAfCSGJVLpeMojFiXG1tFVO6b_Mbf38XGpvuh2eG8UXGNPjS0xkDVHqr7GnScOvS0Tuv-rwQnD4hwurnlhmAYHoEl0crR_A/w640-h416/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A8%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D8%B5%D8%AD%D9%8A.png" title="مذكرة شرح تنفيذ وعمل بيارات الصرف الصحي" width="640" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;وينتشر استخدام البيارات فى عمليات صرف مياة الصرف الصحي فى حالات عدم توفر نظام بنية تحتية لصرف مياة الصرف الصحي مباشرة حيث يتم اللجوء الى عمل بيارات خاصة لصرف مياة الصرف الصحي الخاصة بكل منشأة فى خزان خاص بها " بيارة " ومن ثم يتم سحب مياة الصرف الصحي من آن لاخر .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-size: medium;"&gt;ويكثر استخدام نظام الصرف الصحي&amp;nbsp; باستخدام البيارات فى دول الخليج مثل السعودية والجدير بالذكر ان مثل هذه الدول تسير باتجاه عمل نظام بنية تحتية لصرف مياة الصرف الصحي مباشرة من اجل الحفاظ على نظافة وسلامة البيئة .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;التحميل&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;مذكرة شرح تفاصيل تصميم وتنفيذ بيارات الصرف الصحي&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;&lt;a href="https://www.mediafire.com/file/xhhpq2q7lr6o2ii/بيارات_الصرف_الصحي_م_محمد_نواف_جمعة.pdf/file" target="_blank"&gt;Mediafire.com&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;OR&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;span style="color: red;"&gt;&lt;b&gt;&lt;a href="https://drive.google.com/file/d/1JoAgfUQWGxgJyHwRhfhOjnyAm5unN36O/view?usp=sharing" target="_blank"&gt;&lt;span style="font-size: large;"&gt;Drive.google.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIseg_BXuiJb2fj-BopOU4A2U0Wpdz2Uq-AC2oKRUy8PZ2UJVXsYE5y0oM260JFq_78gK7joLGJiKQh_SSej7Zs0ZJOuYGAfCSGJVLpeMojFiXG1tFVO6b_Mbf38XGpvuh2eG8UXGNPjS0xkDVHqr7GnScOvS0Tuv-rwQnD4hwurnlhmAYHoEl0crR_A/s72-w640-h416-c/%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D9%88%D8%AA%D9%86%D9%81%D9%8A%D8%B0-%D8%A8%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%B5%D8%B1%D9%81-%D8%A7%D9%84%D8%B5%D8%AD%D9%8A.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>كود البناء السعودي | شروحات | اسئلة شائعة | ملفات </title><link>https://www.civilmaker.com/2022/06/sbc-code.html</link><category>كتب هندسية</category><author>noreply@blogger.com (Ahmd Elzammar)</author><pubDate>Sat, 25 Jun 2022 11:25:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6128294137952881051.post-1746233927485250250</guid><description>&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;ننشر فى هذا الموضوع المهم مجموعة من متعلقات كود البناء السعودي للتسهيل على السادة المهندسين للحصول على بعض المعلومات المتعلقة بكود البناء السعودي SBC والتي تم تجميع اكثر من مادة ومحتوي يخص كود البناء السعودي فى موضوع واحد نأمل ان يفيدكم باذن الله .&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2JlJtMeAueu2_wlTcaJxHRlmPdOAaTHdiCPNeOPZEsKAl_2r1VIUPz-vOXNBfZHfe_SITkNRPQzniOtyKcFj7aFpP6KrqtyBM5bUv-K7aRXHfPPMrLRM7HJ2rfUlw-BHx02DROwokVWUTEJ-KUHvUvb22ancYWabte6KU7pOqRDVhxct42SKhx-WS_A/s1000/%D9%83%D9%88%D8%AF-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="كود البناء السعودي | شروحات | اسئلة شائعة | ملفات" border="0" data-original-height="650" data-original-width="1000" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2JlJtMeAueu2_wlTcaJxHRlmPdOAaTHdiCPNeOPZEsKAl_2r1VIUPz-vOXNBfZHfe_SITkNRPQzniOtyKcFj7aFpP6KrqtyBM5bUv-K7aRXHfPPMrLRM7HJ2rfUlw-BHx02DROwokVWUTEJ-KUHvUvb22ancYWabte6KU7pOqRDVhxct42SKhx-WS_A/w640-h416/%D9%83%D9%88%D8%AF-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A.png" title="كود البناء السعودي | شروحات | اسئلة شائعة | ملفات" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;b&gt;المحتويات :-&amp;nbsp;&lt;br /&gt;- ورش العمل والمحاضرات الخاصة بكود البناء السعودي SBC .&lt;br /&gt;- فيديوهات تعريفية وتوعوية للكود السعودي .&lt;br /&gt;- فحص التربة .&lt;br /&gt;- خدمات الموقع الالكتروني .&lt;br /&gt;- تصويبات كود البناء السعودي SBC .&lt;br /&gt;- تصنيف المنشآت .&lt;br /&gt;- النموذج الاسترشادي للمخططات الهندسية .&lt;br /&gt;- اللوائح .&lt;br /&gt;- العزل الحرارى .&lt;br /&gt;- العرض التعريفي بكود البناء السعودي .&lt;br /&gt;- الجهات ذات العلاقة .&lt;br /&gt;- التدريب .&lt;br /&gt;- الاشتراطات باللغة العربية لكود البناء السعودي .&lt;br /&gt;- الاشتراطات / الادلة الفنية .&lt;br /&gt;- نماذج الاسئلة الشائعة بكود البناء السعودي&amp;nbsp;&lt;br /&gt;- اصدارات اللجنة الوطنية .&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;تم تجميع كل هذا المحتوي الذي يخص كود البناء السعودي فى رابط واحد&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;a href="https://drive.google.com/drive/folders/1KMI15WQR_h0k6g5BfREHeun_oUgea4kZ?fbclid=IwAR32DKTiTmeve5dr81kGS_RJ40ai-dIug_Na5rRqXBgTG6JjVRIbv1Aoeg4" target="_blank"&gt;Drive.google.com&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="color: red; font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="background-color: #fcff01; color: red;"&gt;&lt;b&gt;&lt;u&gt;&lt;i&gt;" اذا حدث عطل بالرابط يرجي ابلاغنا اسفل بالتعليقات "&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2JlJtMeAueu2_wlTcaJxHRlmPdOAaTHdiCPNeOPZEsKAl_2r1VIUPz-vOXNBfZHfe_SITkNRPQzniOtyKcFj7aFpP6KrqtyBM5bUv-K7aRXHfPPMrLRM7HJ2rfUlw-BHx02DROwokVWUTEJ-KUHvUvb22ancYWabte6KU7pOqRDVhxct42SKhx-WS_A/s72-w640-h416-c/%D9%83%D9%88%D8%AF-%D8%A7%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>