{"id":24699,"date":"2026-08-18T09:11:00","date_gmt":"2026-08-18T09:11:00","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24699"},"modified":"2026-08-18T09:14:33","modified_gmt":"2026-08-18T09:14:33","slug":"thread-self-locking-condition-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/thread-self-locking-condition-calculator\/","title":{"rendered":"Thread Self-Locking Condition Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Thread Self-Locking Condition Calculator<\/strong> is a practical engineering tool designed to evaluate whether a threaded connection can maintain self-locking performance under different operating conditions. By analyzing key parameters such as thread diameter, pitch, helix angle, friction coefficient, and lubrication condition, it helps engineers determine the risk of thread loosening and back-driving. The Thread Self-Locking Condition Calculator supports screw design, fastener selection, and mechanical reliability analysis while helping improve vibration resistance and connection safety in industrial applications.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <meta name=\"description\" content=\"Thread Self-Locking Condition Calculator \u2014 evaluate screw self-locking by helix angle, friction angle, and critical friction coefficient. Helix angle calculator and thread loosening risk analysis for engineers.\" \/>\n  <meta name=\"keywords\" content=\"Thread Self-Locking Condition Calculator, Thread Self Locking Calculator, Screw Self Locking Calculator, Thread Friction Angle Calculator, Helix Angle Calculator, Thread Loosening Risk Calculator\" \/>\n  <title>Thread Self-Locking Condition Calculator | Helix &amp; Friction Angle<\/title>\n<\/head>\n<body>\n<!--\n  WordPress embed: copy the entire #tslc-root div (style + markup + script)\n  into a Custom HTML block. Paste in Code Editor mode; do not re-save in Visual mode.\n  If a cache plugin delays scripts, exclude tslc-js-b64 and tslc-boot-script.\n  All CSS is scoped to #tslc-root and will not affect theme header, footer, or other content.\n-->\n<div id=\"tslc-root\">\n<style id=\"tslc-calc-styles\">\n\/*\n * WordPress-safe: every rule is scoped under #tslc-root.\n * This stylesheet must not restyle theme header, footer, or content\n * outside the calculator. No html\/body\/universal selectors.\n *\/\n\n#tslc-root {\n  all: revert;\n  --tslc-bg: transparent;\n  --tslc-surface: #ffffff;\n  --tslc-surface-2: #f4f7fa;\n  --tslc-ink: #0f172a;\n  --tslc-muted: #64748b;\n  --tslc-line: #d4dde8;\n  --tslc-accent: #0369a1;\n  --tslc-steel: #1e293b;\n  --tslc-ok: #059669;\n  --tslc-warn: #d97706;\n  --tslc-risk: #dc2626;\n  --tslc-radius: 10px;\n  --tslc-shadow: 0 1px 3px rgba(15, 23, 42, 0.06), 0 8px 24px rgba(15, 23, 42, 0.06);\n  --tslc-mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n  --tslc-sans: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n  box-sizing: border-box;\n  display: block;\n  isolation: isolate;\n  contain: layout style;\n  float: none;\n  position: relative;\n  z-index: auto;\n  font-family: var(--tslc-sans);\n  font-size: 15px;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--tslc-ink);\n  background: var(--tslc-bg);\n  width: 1000px;\n  max-width: 100%;\n  margin: 0 auto;\n  padding: 1.25rem 1rem 2rem;\n  text-align: left;\n  letter-spacing: normal;\n  text-transform: none;\n}\n\n#tslc-root *,\n#tslc-root *::before,\n#tslc-root *::after { box-sizing: border-box; }\n\n#tslc-root h1, #tslc-root h2, #tslc-root h3, #tslc-root h4,\n#tslc-root p, #tslc-root ul, #tslc-root ol, #tslc-root li,\n#tslc-root figure, #tslc-root blockquote, #tslc-root section,\n#tslc-root header, #tslc-root footer, #tslc-root aside, #tslc-root div,\n#tslc-root span, #tslc-root strong, #tslc-root em, #tslc-root i, #tslc-root b {\n  margin: 0; padding: 0; border: none; background: none; box-shadow: none;\n  font-family: inherit; font-size: inherit; font-weight: inherit; font-style: inherit;\n  line-height: inherit; color: inherit; letter-spacing: inherit; text-transform: none;\n  text-decoration: none; float: none;\n}\n\n#tslc-root button, #tslc-root input, #tslc-root select, #tslc-root textarea, #tslc-root label {\n  font: inherit; color: inherit; margin: 0; max-width: none; min-width: 0; float: none;\n}\n#tslc-root button {\n  cursor: pointer; background: transparent; border: none; padding: 0;\n  box-shadow: none; text-decoration: none; appearance: none; -webkit-appearance: none;\n}\n#tslc-root img, #tslc-root svg { display: block; max-width: 100%; height: auto; }\n#tslc-root a { color: var(--tslc-accent); text-decoration: none; }\n#tslc-root a:hover { text-decoration: underline; }\n#tslc-root ul, #tslc-root ol { padding-left: 1.2rem; }\n#tslc-root li { margin: 0.28rem 0; }\n#tslc-root strong { font-weight: 700; }\n#tslc-root sub, #tslc-root sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n#tslc-root sub { bottom: -0.2em; }\n#tslc-root sup { top: -0.45em; }\n#tslc-root .tslc-hidden { display: none !important; }\n#tslc-root #tslc-js-b64 {\n  display: none !important;\n  width: 0 !important;\n  height: 0 !important;\n  border: 0 !important;\n  padding: 0 !important;\n  position: absolute !important;\n  left: -9999px !important;\n}\n\n#tslc-root .tslc-layout { display: flex; flex-direction: column; gap: 1.15rem; }\n#tslc-root .tslc-card {\n  background: var(--tslc-surface);\n  border: 1px solid var(--tslc-line);\n  border-radius: var(--tslc-radius);\n  box-shadow: var(--tslc-shadow);\n  overflow: visible;\n}\n#tslc-root .tslc-card-h {\n  display: flex !important; align-items: center !important; justify-content: space-between !important;\n  gap: 0.75rem !important; padding: 0.72rem 1rem;\n  background: linear-gradient(180deg, #f8fafc, #f1f5f9);\n  border-bottom: 1px solid var(--tslc-line);\n  flex-wrap: wrap;\n  position: relative;\n  z-index: 2;\n  overflow: visible;\n}\n#tslc-root .tslc-card-h h2 {\n  font-size: 0.72rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;\n  color: var(--tslc-steel);\n  width: auto !important; max-width: none !important; flex: 0 1 auto !important;\n  position: static !important; pointer-events: none;\n}\n#tslc-root .tslc-card-b { padding: 0.95rem 1rem 1.1rem; }\n\n#tslc-root .tslc-section {\n  font-size: 0.78rem; font-weight: 700; color: var(--tslc-ink);\n  margin: 1.05rem 0 0.65rem; padding-bottom: 0.3rem;\n  border-bottom: 1px dashed var(--tslc-line);\n  display: flex; align-items: center; gap: 0.45rem;\n}\n#tslc-root .tslc-section:first-child { margin-top: 0; }\n#tslc-root .tslc-badge {\n  width: 1.35rem; height: 1.35rem; border-radius: 999px;\n  display: inline-flex; align-items: center; justify-content: center;\n  background: linear-gradient(135deg, #0f172a, #334155); color: #fff;\n  font-size: 0.65rem; font-weight: 700;\n}\n\n#tslc-root .tslc-grid { display: grid; gap: 0.7rem 0.75rem; }\n#tslc-root .tslc-g-2 { grid-template-columns: 1fr 1fr; }\n#tslc-root .tslc-g-3 { grid-template-columns: 1fr 1fr 1fr; }\n@media (max-width: 640px) {\n  #tslc-root .tslc-g-2, #tslc-root .tslc-g-3 { grid-template-columns: 1fr; }\n}\n\n#tslc-root label.tslc-fld { display: flex; flex-direction: column; gap: 0.28rem; min-width: 0; }\n#tslc-root label.tslc-fld > span.tslc-lbl {\n  font-size: 0.75rem; font-weight: 600; color: #334155;\n  display: flex; align-items: center; gap: 0.3rem; flex-wrap: wrap;\n}\n#tslc-root .tslc-hint { font-size: 0.68rem; color: var(--tslc-muted); font-weight: 400; }\n\n#tslc-root input[type=\"number\"],\n#tslc-root input[type=\"text\"] {\n  appearance: none; -webkit-appearance: none; width: 100%;\n  border: 1px solid #cbd5e1; border-radius: 8px;\n  padding: 0.5rem 0.7rem; font-size: 0.8125rem; background: #fff; color: #0f172a;\n  font-family: var(--tslc-mono); box-shadow: none; line-height: 1.25;\n}\n#tslc-root input[type=\"number\"]::-webkit-outer-spin-button,\n#tslc-root input[type=\"number\"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n#tslc-root input[type=\"number\"] { -moz-appearance: textfield; appearance: textfield; }\n#tslc-root select {\n  display: block !important; width: 100% !important; min-height: 2.45rem !important;\n  margin: 0 !important; padding: 0.48rem 2rem 0.48rem 0.7rem !important;\n  border: 1px solid #cbd5e1 !important; border-radius: 8px !important;\n  background-color: #fff !important; color: #0f172a !important;\n  font-size: 0.8125rem !important; font-family: var(--tslc-mono) !important;\n  line-height: 1.25 !important; box-shadow: none !important;\n  appearance: auto !important; -webkit-appearance: menulist !important;\n}\n#tslc-root input:focus, #tslc-root select:focus {\n  outline: 2px solid #38bdf8; outline-offset: 0; border-color: #0ea5e9;\n}\n#tslc-root input:disabled, #tslc-root input[readonly] { background: #f8fafc; color: #0f172a; }\n#tslc-root input.tslc-invalid { border-color: #ef4444; background: #fef2f2; }\n#tslc-root .tslc-err { font-size: 0.68rem; color: var(--tslc-risk); min-height: 0.85rem; line-height: 1.3; }\n\n#tslc-root .tslc-input-row {\n  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.4rem; align-items: stretch;\n}\n#tslc-root .tslc-input-row select {\n  min-width: 4.6rem !important; width: auto !important; padding-right: 1.6rem !important;\n}\n#tslc-root .tslc-mt { margin-top: 0.65rem; }\n#tslc-root .tslc-mt-sm { margin-top: 0.15rem; }\n#tslc-root .tslc-viz-cap {\n  font-size: 0.68rem; color: var(--tslc-muted); margin-top: 0.25rem;\n}\n#tslc-root .tslc-results-wrap { position: static; width: 100%; }\n#tslc-root .tslc-unit-pill {\n  display: inline-flex; align-items: center; justify-content: center;\n  min-width: 3.4rem; padding: 0 0.55rem; border: 1px solid #cbd5e1; border-radius: 8px;\n  background: #f8fafc; color: var(--tslc-muted); font-size: 0.72rem; font-weight: 600;\n  font-family: var(--tslc-mono);\n}\n#tslc-root .tslc-check {\n  display: flex; align-items: center; gap: 0.45rem;\n  font-size: 0.75rem; color: #334155; margin-top: 0.15rem;\n}\n#tslc-root .tslc-check input { width: 0.95rem; height: 0.95rem; accent-color: #0284c7; }\n\n#tslc-root .tslc-tools {\n  display: flex !important; align-items: center !important; gap: 0.5rem !important;\n  flex-shrink: 0 !important; position: relative !important; z-index: 5 !important;\n  margin-left: auto; pointer-events: auto !important;\n}\n#tslc-root .tslc-unit-switch {\n  display: inline-flex !important; align-items: center !important; gap: 2px !important;\n  padding: 3px !important; border-radius: 8px !important;\n  background: #0f172a !important; border: 1px solid #1e293b !important;\n  position: relative !important; z-index: 6 !important; pointer-events: auto !important;\n}\n#tslc-root .tslc-unit-switch .tslc-unit-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border: none !important; border-radius: 6px !important;\n  background: transparent !important; color: #cbd5e1 !important; font-size: 0.8125rem !important;\n  font-weight: 500 !important; font-family: inherit !important; cursor: pointer !important;\n  line-height: 1.25 !important; pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#tslc-root .tslc-unit-switch .tslc-unit-btn:hover { color: #fff !important; }\n#tslc-root .tslc-unit-switch .tslc-unit-btn.tslc-is-active {\n  background: #0ea5e9 !important; color: #fff !important; font-weight: 600 !important;\n}\n#tslc-root .tslc-reset-btn {\n  appearance: none !important; -webkit-appearance: none !important;\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  margin: 0 !important; padding: 0.4rem 0.85rem !important; border-radius: 6px !important;\n  border: 1px solid #d1d5db !important; background: #ffffff !important; color: #0f172a !important;\n  font-size: 0.8125rem !important; font-weight: 500 !important; font-family: inherit !important;\n  cursor: pointer !important; line-height: 1.25 !important;\n  pointer-events: auto !important; position: relative !important; z-index: 7 !important;\n}\n#tslc-root .tslc-reset-btn:hover { background: #f8fafc !important; border-color: #94a3b8 !important; }\n\n#tslc-root .tslc-chip-row { display: flex; flex-wrap: wrap; gap: 0.35rem; }\n#tslc-root .tslc-chip {\n  appearance: none !important; display: inline-flex !important; align-items: center !important;\n  justify-content: center !important; padding: 0.32rem 0.55rem !important; border-radius: 6px !important;\n  border: 1px solid #cbd5e1 !important; background: #fff !important; color: #334155 !important;\n  font-size: 0.72rem !important; font-weight: 600 !important; font-family: var(--tslc-mono) !important;\n  cursor: pointer !important; line-height: 1.25 !important; margin: 0 !important;\n}\n#tslc-root .tslc-chip:hover { border-color: #38bdf8 !important; }\n#tslc-root .tslc-chip.tslc-is-active {\n  background: #0284c7 !important; color: #fff !important; border-color: #0284c7 !important;\n}\n\n#tslc-root .tslc-note {\n  font-size: 0.72rem; color: var(--tslc-muted); background: var(--tslc-surface-2);\n  border: 1px solid var(--tslc-line); border-radius: 8px; padding: 0.5rem 0.65rem; line-height: 1.45;\n}\n\n#tslc-root .tslc-actions {\n  display: flex; justify-content: center; gap: 0.65rem; flex-wrap: wrap;\n  margin-top: 1.15rem; padding-top: 0.9rem; border-top: 1px solid var(--tslc-line);\n}\n#tslc-root #tslcBtnCalculate.tslc-calc-btn {\n  appearance: none !important; display: inline-flex !important; align-items: center !important;\n  justify-content: center !important; min-width: 220px !important; padding: 0.85rem 2.5rem !important;\n  border: none !important; border-radius: 10px !important;\n  background: #0077c2 !important; color: #ffffff !important; font-size: 1rem !important;\n  font-weight: 700 !important; font-family: inherit !important; cursor: pointer !important;\n  letter-spacing: 0.01em !important; line-height: 1.25 !important;\n}\n#tslc-root #tslcBtnCalculate.tslc-calc-btn:hover { background: #0066a8 !important; }\n#tslc-root #tslcBtnCalculate.tslc-calc-btn:active { background: #005a94 !important; }\n\n#tslc-root .tslc-tip {\n  position: relative; display: inline-flex; align-items: center; justify-content: center;\n  width: 0.95rem; height: 0.95rem; border-radius: 999px;\n  background: #e2e8f0; color: #475569; font-size: 0.62rem; font-weight: 700; cursor: help;\n}\n#tslc-root .tslc-tip-box {\n  display: none; position: absolute; left: 50%; bottom: calc(100% + 8px); transform: translateX(-50%);\n  width: 16.5rem; padding: 0.55rem 0.65rem; border-radius: 8px; z-index: 20;\n  background: #0f172a; color: #e2e8f0; font-size: 0.7rem; font-weight: 400; line-height: 1.4;\n}\n#tslc-root .tslc-tip:hover .tslc-tip-box, #tslc-root .tslc-tip:focus .tslc-tip-box { display: block; }\n\n#tslc-root .tslc-banner {\n  border-radius: 10px; padding: 0.85rem 1rem; color: #fff; margin-bottom: 0.85rem;\n  display: flex; align-items: flex-start; gap: 0.75rem;\n}\n#tslc-root .tslc-banner .tslc-dot {\n  width: 0.7rem; height: 0.7rem; border-radius: 999px; background: #fff; flex-shrink: 0; margin-top: 0.28rem;\n}\n#tslc-root .tslc-banner-kicker { font-size: 0.65rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.85; }\n#tslc-root .tslc-banner-title { font-size: 1.15rem; font-weight: 750; margin: 0.1rem 0 0.2rem; }\n#tslc-root .tslc-banner-note { font-size: 0.75rem; opacity: 0.92; line-height: 1.45; }\n#tslc-root .tslc-banner-ok { background: linear-gradient(90deg, #14532d, #166534); }\n#tslc-root .tslc-banner-caution { background: linear-gradient(90deg, #854d0e, #a16207); }\n#tslc-root .tslc-banner-risk { background: linear-gradient(90deg, #7f1d1d, #991b1b); }\n#tslc-root .tslc-banner-idle { background: linear-gradient(90deg, #334155, #475569); }\n\n#tslc-root .tslc-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 0.75rem; }\n@media (max-width: 520px) { #tslc-root .tslc-hero { grid-template-columns: 1fr; } }\n#tslc-root .tslc-hero-card {\n  border: 1px solid var(--tslc-line); border-radius: 10px; padding: 0.8rem 0.85rem;\n  background: linear-gradient(180deg, #fff, #f8fafc);\n}\n#tslc-root .tslc-hero-card.tslc-is-accent { border-color: #7dd3fc; background: linear-gradient(180deg, #f0f9ff, #fff); }\n#tslc-root .tslc-hero-k { font-size: 0.65rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; color: var(--tslc-muted); }\n#tslc-root .tslc-hero-v { font-family: var(--tslc-mono); font-size: 1.35rem; font-weight: 700; margin-top: 0.2rem; }\n\n#tslc-root .tslc-viz-grid {\n  display: grid; grid-template-columns: 1fr 1fr; gap: 0.65rem; margin-bottom: 0.75rem;\n}\n@media (max-width: 640px) { #tslc-root .tslc-viz-grid { grid-template-columns: 1fr; } }\n#tslc-root .tslc-viz-card {\n  border: 1px solid var(--tslc-line); border-radius: 10px; padding: 0.5rem;\n  background: #fff; text-align: center;\n}\n#tslc-root .tslc-viz-card svg { margin: 0 auto; }\n\n#tslc-root .tslc-gauge-row {\n  display: grid; grid-template-columns: 150px 1fr; gap: 0.75rem; align-items: center;\n  border: 1px solid var(--tslc-line); border-radius: 10px; padding: 0.55rem 0.75rem;\n  background: #fff; margin-bottom: 0.75rem;\n}\n@media (max-width: 520px) { #tslc-root .tslc-gauge-row { grid-template-columns: 1fr; } }\n\n#tslc-root .tslc-compare-title {\n  font-size: 0.72rem; font-weight: 600; margin-bottom: 0.35rem;\n}\n#tslc-root .tslc-gauge-label {\n  font-size: 0.68rem; color: var(--tslc-muted);\n}\n#tslc-root .tslc-gauge-readout {\n  font-family: var(--tslc-mono); font-size: 1.05rem; font-weight: 700;\n}\n#tslc-root .tslc-compare-legend i.tslc-swatch-gray { background: #94a3b8; }\n#tslc-root .tslc-compare-legend i.tslc-swatch-blue { background: #0284c7; }\n#tslc-root .tslc-compare svg {\n  width: 100%;\n  height: auto;\n  max-height: 200px;\n}\n#tslc-root .tslc-compare {\n  border: 1px solid var(--tslc-line); border-radius: 10px; padding: 0.55rem 0.75rem;\n  background: #fff; margin-bottom: 0.75rem;\n}\n#tslc-root .tslc-compare-legend {\n  display: flex; gap: 1rem; flex-wrap: wrap; font-size: 0.68rem; color: var(--tslc-muted); margin-top: 0.35rem;\n}\n#tslc-root .tslc-compare-legend i {\n  display: inline-block; width: 0.65rem; height: 0.65rem; border-radius: 2px; margin-right: 0.25rem; font-style: normal;\n}\n\n#tslc-root .tslc-risk-bar { margin-bottom: 0.75rem; }\n#tslc-root .tslc-risk-head { display: flex; justify-content: space-between; font-size: 0.72rem; margin-bottom: 0.35rem; }\n#tslc-root .tslc-risk-track {\n  height: 14px; border-radius: 999px; overflow: hidden; background: #e2e8f0;\n}\n#tslc-root .tslc-risk-fill {\n  height: 100%; width: 0; border-radius: 999px; transition: width 0.25s ease, background 0.25s ease;\n}\n\n#tslc-root .tslc-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 0.55rem; }\n@media (min-width: 720px) { #tslc-root .tslc-tiles { grid-template-columns: repeat(3, 1fr); } }\n#tslc-root .tslc-tile {\n  border: 1px solid var(--tslc-line); border-radius: 8px; padding: 0.6rem 0.7rem;\n  background: linear-gradient(180deg, #fff, #f8fafc);\n}\n#tslc-root .tslc-tile .tslc-k { font-size: 0.62rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--tslc-muted); }\n#tslc-root .tslc-tile .tslc-v { font-family: var(--tslc-mono); font-size: 0.98rem; font-weight: 700; margin-top: 0.12rem; }\n#tslc-root .tslc-tile .tslc-u { font-size: 0.68rem; color: var(--tslc-muted); }\n\n#tslc-root .tslc-rec {\n  margin-top: 0.75rem; padding: 0.65rem 0.75rem;\n  border: 1px solid #bae6fd; border-radius: 8px; background: #f0f9ff;\n  font-size: 0.75rem; line-height: 1.5; color: #0c4a6e;\n}\n#tslc-root .tslc-rec strong { display: block; margin-bottom: 0.35rem; font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; }\n\n#tslc-root .tslc-alerts { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 0.75rem; }\n#tslc-root .tslc-alert { border-radius: 8px; padding: 0.5rem 0.7rem; font-size: 0.75rem; border: 1px solid; line-height: 1.4; }\n#tslc-root .tslc-alert-ok { background: #ecfdf5; border-color: #a7f3d0; color: #065f46; }\n#tslc-root .tslc-alert-warn { background: #fffbeb; border-color: #fcd34d; color: #92400e; }\n#tslc-root .tslc-alert-risk { background: #fef2f2; border-color: #fca5a5; color: #991b1b; }\n\n#tslc-root .tslc-formula {\n  font-family: var(--tslc-mono); font-size: 0.75rem; color: #334155;\n  background: var(--tslc-surface-2); border-radius: 6px; padding: 0.35rem 0.5rem; margin-top: 0.35rem;\n}\n\n@media print {\n  #tslc-root { max-width: none; padding: 0; }\n  #tslc-root .tslc-no-print { display: none !important; }\n}\n<\/style>\n\n  <div class=\"tslc-layout\">\n    <section class=\"tslc-card\" id=\"tslcInputs\">\n      <div class=\"tslc-card-h\">\n        <h2>Input parameters<\/h2>\n        <div class=\"tslc-tools tslc-no-print\">\n          <div class=\"tslc-unit-switch\" role=\"group\" aria-label=\"Unit system\">\n            <button type=\"button\" class=\"tslc-unit-btn tslc-is-active\" id=\"tslcBtnMetric\" onclick=\"(function(){if(window.tslcSwitchUnit){window.tslcSwitchUnit('metric');return false;}var t=document.getElementById('tslc-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');var s=document.createElement('script');s.text=atob(c);(document.body||document.head).appendChild(s);setTimeout(function(){window.tslcSwitchUnit&#038;&#038;window.tslcSwitchUnit('metric');},150);return false;})()\">Metric<\/button>\n            <button type=\"button\" class=\"tslc-unit-btn\" id=\"tslcBtnImperial\" onclick=\"(function(){if(window.tslcSwitchUnit){window.tslcSwitchUnit('imperial');return false;}var t=document.getElementById('tslc-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');var s=document.createElement('script');s.text=atob(c);(document.body||document.head).appendChild(s);setTimeout(function(){window.tslcSwitchUnit&#038;&#038;window.tslcSwitchUnit('imperial');},150);return false;})()\">Imperial<\/button>\n          <\/div>\n          <button type=\"button\" class=\"tslc-reset-btn\" id=\"tslcBtnReset\" onclick=\"(function(){if(window.tslcReset){window.tslcReset();return false;}var t=document.getElementById('tslc-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');var s=document.createElement('script');s.text=atob(c);(document.body||document.head).appendChild(s);setTimeout(function(){window.tslcReset&#038;&#038;window.tslcReset();},150);return false;})()\">Reset<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"tslc-card-b\">\n\n        <div class=\"tslc-section\"><span class=\"tslc-badge\">1<\/span> Thread geometry<\/div>\n        <div class=\"tslc-grid tslc-g-2\">\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Thread type\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Select standard thread form. Thread flank angle defaults are applied automatically (60\u00b0 metric\/UN, 30\u00b0 trapezoidal, 0\u00b0 square).<\/span><\/span>\n            <\/span>\n            <select id=\"tslcThreadType\">\n              <option value=\"metric\" selected>Metric thread<\/option>\n              <option value=\"unified\">Unified thread<\/option>\n              <option value=\"trapezoidal\">Trapezoidal thread<\/option>\n              <option value=\"square\">Square thread<\/option>\n              <option value=\"custom\">Custom thread<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Number of starts\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Lead = pitch \u00d7 starts. Multi-start threads increase helix angle and reduce self-locking capability.<\/span><\/span>\n            <\/span>\n            <input id=\"tslcStarts\" type=\"number\" min=\"1\" step=\"1\" value=\"1\" inputmode=\"numeric\" \/>\n            <span class=\"tslc-err\" id=\"tslcErrStarts\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"tslc-chip-row tslc-no-print tslc-mt\" id=\"tslcSizeChips\" aria-label=\"Common thread sizes\"><\/div>\n\n        <div class=\"tslc-grid tslc-g-2 tslc-mt\">\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Nominal diameter\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Major thread diameter d. Example: 10 mm for M10, or 0.5 in for \u00bd\u2033-13 UNC.<\/span><\/span>\n            <\/span>\n            <div class=\"tslc-input-row\">\n              <input id=\"tslcD\" type=\"number\" min=\"0\" step=\"any\" value=\"10\" inputmode=\"decimal\" \/>\n              <span class=\"tslc-unit-pill\" data-unit=\"d\">mm<\/span>\n            <\/div>\n            <span class=\"tslc-err\" id=\"tslcErrD\"><\/span>\n          <\/label>\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Pitch\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Metric: thread pitch in mm. Imperial: threads per inch (TPI).<\/span><\/span>\n            <\/span>\n            <div class=\"tslc-input-row\">\n              <input id=\"tslcP\" type=\"number\" min=\"0\" step=\"any\" value=\"1.5\" inputmode=\"decimal\" \/>\n              <span class=\"tslc-unit-pill\" data-unit=\"p\">mm<\/span>\n            <\/div>\n            <span class=\"tslc-err\" id=\"tslcErrP\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"tslc-grid tslc-g-2 tslc-mt-sm\">\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Pitch diameter d<sub>2<\/sub>\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Effective diameter for helix angle: tan(\u03bb) = Lead \/ (\u03c0 d\u2082). Auto-calculated from d and p, or enter manually.<\/span><\/span>\n            <\/span>\n            <div class=\"tslc-input-row\">\n              <input id=\"tslcD2\" type=\"number\" min=\"0\" step=\"any\" value=\"9.026\" inputmode=\"decimal\" readonly \/>\n              <span class=\"tslc-unit-pill\" data-unit=\"d2\">mm<\/span>\n            <\/div>\n            <span class=\"tslc-check\"><input type=\"checkbox\" id=\"tslcD2Manual\" \/> Enter d<sub>2<\/sub> manually<\/span>\n            <span class=\"tslc-err\" id=\"tslcErrD2\"><\/span>\n          <\/label>\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Thread angle (included)\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Included flank angle. Affects effective friction on V-threads: critical \u03bc = tan(\u03bb)\u00b7cos(\u03b2), \u03b2 = angle\/2.<\/span><\/span>\n            <\/span>\n            <div class=\"tslc-input-row\">\n              <input id=\"tslcThreadAngle\" type=\"number\" min=\"0\" max=\"90\" step=\"any\" value=\"60\" inputmode=\"decimal\" \/>\n              <span class=\"tslc-unit-pill\">\u00b0<\/span>\n            <\/div>\n            <span class=\"tslc-err\" id=\"tslcErrThreadAngle\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"tslc-section\"><span class=\"tslc-badge\">2<\/span> Friction &amp; lubrication<\/div>\n        <div class=\"tslc-grid tslc-g-2\">\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">Lubrication condition<\/span>\n            <select id=\"tslcLub\">\n              <option value=\"dry\">Dry steel<\/option>\n              <option value=\"light\" selected>Light lubrication<\/option>\n              <option value=\"oil\">Oil lubricated<\/option>\n              <option value=\"grease\">Grease lubricated<\/option>\n              <option value=\"antiseize\">Anti-seize coating<\/option>\n              <option value=\"custom\">Custom<\/option>\n            <\/select>\n          <\/label>\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Thread friction coefficient \u03bc\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Coefficient of friction between thread surfaces. Typical range 0.05\u20130.30. Friction angle \u03c6 = arctan(\u03bc).<\/span><\/span>\n            <\/span>\n            <input id=\"tslcMu\" type=\"number\" min=\"0\" max=\"1\" step=\"any\" value=\"0.15\" inputmode=\"decimal\" \/>\n            <span class=\"tslc-err\" id=\"tslcErrMu\"><\/span>\n          <\/label>\n        <\/div>\n\n        <div class=\"tslc-section\"><span class=\"tslc-badge\">3<\/span> Load &amp; environment <span class=\"tslc-hint\">(optional)<\/span><\/div>\n        <div class=\"tslc-grid tslc-g-2\">\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              External axial load\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Optional tensile or compressive axial load for back-driving risk assessment.<\/span><\/span>\n            <\/span>\n            <div class=\"tslc-input-row\">\n              <input id=\"tslcFext\" type=\"number\" min=\"0\" step=\"any\" value=\"\" placeholder=\"optional\" inputmode=\"decimal\" \/>\n              <select id=\"tslcFextUnit\" aria-label=\"Force unit\">\n                <option value=\"kN\" selected>kN<\/option>\n                <option value=\"N\">N<\/option>\n                <option value=\"lbf\">lbf<\/option>\n              <\/select>\n            <\/div>\n            <span class=\"tslc-err\" id=\"tslcErrFext\"><\/span>\n          <\/label>\n          <label class=\"tslc-fld\">\n            <span class=\"tslc-lbl\">\n              Vibration condition\n              <span class=\"tslc-tip\" tabindex=\"0\">?<span class=\"tslc-tip-box\">Higher vibration requires greater self-locking margin. Static joints tolerate smaller \u03c6 \u2212 \u03bb difference.<\/span><\/span>\n            <\/span>\n            <select id=\"tslcVibration\">\n              <option value=\"static\" selected>Static load<\/option>\n              <option value=\"low\">Low vibration<\/option>\n              <option value=\"medium\">Medium vibration<\/option>\n              <option value=\"high\">High vibration<\/option>\n            <\/select>\n          <\/label>\n        <\/div>\n\n        <p class=\"tslc-note tslc-mt\">\n          Self-locking condition: \u03c6<sub>eff<\/sub> &gt; \u03bb, where tan(\u03bb) = Lead \/ (\u03c0 d\u2082) and\n          \u03c6<sub>eff<\/sub> = arctan(\u03bc \/ cos(\u03b2)). Equivalently \u03bc &gt; tan(\u03bb)\u00b7cos(\u03b2).\n          <span class=\"tslc-formula\">Safety margin = \u03c6<sub>eff<\/sub> \u2212 \u03bb<\/span>\n        <\/p>\n\n        <div class=\"tslc-actions tslc-no-print\">\n          <button type=\"button\" class=\"tslc-calc-btn\" id=\"tslcBtnCalculate\" onclick=\"(function(){if(window.tslcCalculate){window.tslcCalculate();return false;}var t=document.getElementById('tslc-js-b64');if(!t)return false;var c=(t.value||t.textContent||'').replace(\/\\s\/g,'');var s=document.createElement('script');s.text=atob(c);(document.body||document.head).appendChild(s);setTimeout(function(){window.tslcCalculate&#038;&#038;window.tslcCalculate();},150);return false;})()\">Calculate<\/button>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <aside class=\"tslc-results-wrap tslc-hidden\" id=\"tslcResults\">\n      <section class=\"tslc-card\">\n        <div class=\"tslc-card-h\"><h2>Calculated results<\/h2><\/div>\n        <div class=\"tslc-card-b\">\n          <div class=\"tslc-banner tslc-banner-idle\" id=\"tslcBanner\">\n            <span class=\"tslc-dot\" aria-hidden=\"true\"><\/span>\n            <div>\n              <div class=\"tslc-banner-kicker\">Self-locking status<\/div>\n              <div class=\"tslc-banner-title\" id=\"tslcStatusTitle\">Ready<\/div>\n              <p class=\"tslc-banner-note\" id=\"tslcStatusNote\">Enter thread data and press Calculate.<\/p>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-hero\">\n            <div class=\"tslc-hero-card tslc-is-accent\">\n              <div class=\"tslc-hero-k\">Thread helix angle \u03bb<\/div>\n              <div class=\"tslc-hero-v\" id=\"tslcOutHelix\">\u2014<\/div>\n            <\/div>\n            <div class=\"tslc-hero-card tslc-is-accent\">\n              <div class=\"tslc-hero-k\">Effective friction angle \u03c6<\/div>\n              <div class=\"tslc-hero-v\" id=\"tslcOutFriction\">\u2014<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-viz-grid\">\n            <div class=\"tslc-viz-card\">\n              <svg id=\"tslcThreadSvg\" viewBox=\"0 0 240 140\" width=\"240\" height=\"140\" aria-hidden=\"true\"><\/svg>\n              <div class=\"tslc-viz-cap\">Thread profile<\/div>\n            <\/div>\n            <div class=\"tslc-viz-card\">\n              <svg id=\"tslcHelixSvg\" viewBox=\"0 0 240 180\" width=\"240\" height=\"180\" aria-hidden=\"true\"><\/svg>\n              <div class=\"tslc-viz-cap\">Helix angle illustration<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-compare\">\n            <div class=\"tslc-compare-title\">Friction angle vs helix angle<\/div>\n            <svg viewBox=\"0 0 280 200\" aria-hidden=\"true\">\n              <rect x=\"40\" y=\"20\" width=\"200\" height=\"160\" fill=\"#f8fafc\" stroke=\"#e2e8f0\"\/>\n              <rect id=\"tslcCompareHelix\" x=\"70\" y=\"180\" width=\"55\" height=\"0\" fill=\"#94a3b8\"\/>\n              <rect id=\"tslcCompareFriction\" x=\"155\" y=\"180\" width=\"55\" height=\"0\" fill=\"#0284c7\"\/>\n              <text x=\"97\" y=\"196\" text-anchor=\"middle\" font-size=\"10\" fill=\"#64748b\">\u03bb<\/text>\n              <text x=\"182\" y=\"196\" text-anchor=\"middle\" font-size=\"10\" fill=\"#64748b\">\u03c6<\/text>\n            <\/svg>\n            <div class=\"tslc-compare-legend\">\n              <span><i class=\"tslc-swatch-gray\"><\/i> Helix angle \u03bb<\/span>\n              <span><i class=\"tslc-swatch-blue\"><\/i> Friction angle \u03c6<\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-gauge-row\">\n            <svg viewBox=\"0 0 240 140\" width=\"150\" aria-hidden=\"true\">\n              <defs>\n                <linearGradient id=\"tslcGaugeGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                  <stop offset=\"0%\" stop-color=\"#dc2626\"\/>\n                  <stop offset=\"40%\" stop-color=\"#d97706\"\/>\n                  <stop offset=\"100%\" stop-color=\"#059669\"\/>\n                <\/linearGradient>\n              <\/defs>\n              <path d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"14\" stroke-linecap=\"round\"\/>\n              <path id=\"tslcGaugeArc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#tslcGaugeGrad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\"\/>\n              <g id=\"tslcNeedle\" transform=\"rotate(-90 120 118)\">\n                <line x1=\"120\" y1=\"118\" x2=\"120\" y2=\"44\" stroke=\"#0f172a\" stroke-width=\"3\" stroke-linecap=\"round\"\/>\n                <circle cx=\"120\" cy=\"118\" r=\"6\" fill=\"#0f172a\"\/>\n              <\/g>\n            <\/svg>\n            <div>\n              <div class=\"tslc-gauge-label\">Self-locking safety margin (\u03c6 \u2212 \u03bb)<\/div>\n              <div class=\"tslc-gauge-readout\" id=\"tslcOutMargin\">\u2014<\/div>\n              <div class=\"tslc-gauge-label tslc-viz-cap\">Positive = self-locking \u00b7 Zero\/negative = back-drive risk<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-risk-bar\">\n            <div class=\"tslc-risk-head\">\n              <span>Back-driving \/ loosening risk<\/span>\n              <strong id=\"tslcRiskLabel\">\u2014<\/strong>\n            <\/div>\n            <div class=\"tslc-risk-track\"><div class=\"tslc-risk-fill\" id=\"tslcRiskFill\"><\/div><\/div>\n          <\/div>\n\n          <div class=\"tslc-tiles\">\n            <div class=\"tslc-tile\">\n              <div class=\"tslc-k\">Critical friction \u03bc<\/div>\n              <div class=\"tslc-v\" id=\"tslcOutCritMu\">\u2014<\/div>\n              <div class=\"tslc-u\">Required for self-locking<\/div>\n            <\/div>\n            <div class=\"tslc-tile\">\n              <div class=\"tslc-k\">Actual friction \u03bc<\/div>\n              <div class=\"tslc-v\" id=\"tslcOutMu\">\u2014<\/div>\n              <div class=\"tslc-u\">Input value<\/div>\n            <\/div>\n            <div class=\"tslc-tile\">\n              <div class=\"tslc-k\">Thread lead<\/div>\n              <div class=\"tslc-v\" id=\"tslcOutLead\">\u2014<\/div>\n              <div class=\"tslc-u\">pitch \u00d7 starts<\/div>\n            <\/div>\n            <div class=\"tslc-tile\">\n              <div class=\"tslc-k\">Pitch diameter<\/div>\n              <div class=\"tslc-v\" id=\"tslcOutD2\">\u2014<\/div>\n              <div class=\"tslc-u\">d\u2082<\/div>\n            <\/div>\n            <div class=\"tslc-tile\">\n              <div class=\"tslc-k\">Thread efficiency<\/div>\n              <div class=\"tslc-v\" id=\"tslcOutEff\">\u2014<\/div>\n              <div class=\"tslc-u\">Raising load \u03b7<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"tslc-rec\">\n            <strong>Locking recommendation<\/strong>\n            <div id=\"tslcOutRec\">Run the calculation to see engineering suggestions.<\/div>\n          <\/div>\n\n          <div class=\"tslc-alerts\" id=\"tslcAlerts\"><\/div>\n        <\/div>\n      <\/section>\n    <\/aside>\n  <\/div>\n\n<textarea id=\"tslc-js-b64\" aria-hidden=\"true\" style=\"display:none!important;width:0;height:0;border:0;padding:0;position:absolute;left:-9999px\">KGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRzbGMtcm9vdCIpOwogIGlmICghcm9vdCB8fCByb290LmdldEF0dHJpYnV0ZSgiZGF0YS10c2xjLXJlYWR5IikgPT09ICIxIikgcmV0dXJuOwogIHJvb3Quc2V0QXR0cmlidXRlKCJkYXRhLXRzbGMtcmVhZHkiLCAiMSIpOwoKICB2YXIgTU1fUEVSX0lOID0gMjUuNDsKICB2YXIgTEJGX1BFUl9OID0gMC4yMjQ4MDg5NDM7CiAgdmFyIEFSQ19MRU4gPSAyODIuNzQzOwogIHZhciBERUcgPSAxODAgLyBNYXRoLlBJOwogIHZhciBSQUQgPSBNYXRoLlBJIC8gMTgwOwoKICB2YXIgTFVCID0gewogICAgZHJ5OiB7IG11OiAwLjI4LCBsYWJlbDogIkRyeSBzdGVlbCIgfSwKICAgIGxpZ2h0OiB7IG11OiAwLjE4LCBsYWJlbDogIkxpZ2h0IGx1YnJpY2F0aW9uIiB9LAogICAgb2lsOiB7IG11OiAwLjEyLCBsYWJlbDogIk9pbCBsdWJyaWNhdGVkIiB9LAogICAgZ3JlYXNlOiB7IG11OiAwLjEwLCBsYWJlbDogIkdyZWFzZSBsdWJyaWNhdGVkIiB9LAogICAgYW50aXNlaXplOiB7IG11OiAwLjA4LCBsYWJlbDogIkFudGktc2VpemUgY29hdGluZyIgfSwKICAgIGN1c3RvbTogbnVsbAogIH07CgogIHZhciBUSFJFQURfVFlQRVMgPSB7CiAgICBtZXRyaWM6IHsgbGFiZWw6ICJNZXRyaWMgdGhyZWFkIiwgYW5nbGU6IDYwLCBkMkZhY3RvcjogMC42NDk1MTkgfSwKICAgIHVuaWZpZWQ6IHsgbGFiZWw6ICJVbmlmaWVkIHRocmVhZCIsIGFuZ2xlOiA2MCwgZDJGYWN0b3I6IDAuNjQ5NTE5IH0sCiAgICB0cmFwZXpvaWRhbDogeyBsYWJlbDogIlRyYXBlem9pZGFsIHRocmVhZCIsIGFuZ2xlOiAzMCwgZDJGYWN0b3I6IDAuNSB9LAogICAgc3F1YXJlOiB7IGxhYmVsOiAiU3F1YXJlIHRocmVhZCIsIGFuZ2xlOiAwLCBkMkZhY3RvcjogMC41IH0sCiAgICBjdXN0b206IHsgbGFiZWw6ICJDdXN0b20gdGhyZWFkIiwgYW5nbGU6IDYwLCBkMkZhY3RvcjogMC42NDk1MTkgfQogIH07CgogIHZhciBWSUIgPSB7CiAgICBzdGF0aWM6IHsgbGFiZWw6ICJTdGF0aWMgbG9hZCIsIG1hcmdpblJlcTogMCB9LAogICAgbG93OiB7IGxhYmVsOiAiTG93IHZpYnJhdGlvbiIsIG1hcmdpblJlcTogMS41IH0sCiAgICBtZWRpdW06IHsgbGFiZWw6ICJNZWRpdW0gdmlicmF0aW9uIiwgbWFyZ2luUmVxOiAzLjUgfSwKICAgIGhpZ2g6IHsgbGFiZWw6ICJIaWdoIHZpYnJhdGlvbiIsIG1hcmdpblJlcTogNi4wIH0KICB9OwoKICB2YXIgU0laRVNfTSA9IFsKICAgIHsgbGFiZWw6ICJNNiIsIGQ6IDYsIHA6IDEgfSwKICAgIHsgbGFiZWw6ICJNOCIsIGQ6IDgsIHA6IDEuMjUgfSwKICAgIHsgbGFiZWw6ICJNMTAiLCBkOiAxMCwgcDogMS41IH0sCiAgICB7IGxhYmVsOiAiTTEyIiwgZDogMTIsIHA6IDEuNzUgfSwKICAgIHsgbGFiZWw6ICJNMTYiLCBkOiAxNiwgcDogMiB9LAogICAgeyBsYWJlbDogIk0yMCIsIGQ6IDIwLCBwOiAyLjUgfSwKICAgIHsgbGFiZWw6ICJNMjQiLCBkOiAyNCwgcDogMyB9CiAgXTsKCiAgdmFyIFNJWkVTX0lOID0gWwogICAgeyBsYWJlbDogIjEvNC0yMCIsIGQ6IDAuMjUsIHRwaTogMjAgfSwKICAgIHsgbGFiZWw6ICI1LzE2LTE4IiwgZDogMC4zMTI1LCB0cGk6IDE4IH0sCiAgICB7IGxhYmVsOiAiMy84LTE2IiwgZDogMC4zNzUsIHRwaTogMTYgfSwKICAgIHsgbGFiZWw6ICIxLzItMTMiLCBkOiAwLjUsIHRwaTogMTMgfSwKICAgIHsgbGFiZWw6ICI1LzgtMTEiLCBkOiAwLjYyNSwgdHBpOiAxMSB9LAogICAgeyBsYWJlbDogIjMvNC0xMCIsIGQ6IDAuNzUsIHRwaTogMTAgfQogIF07CgogIHZhciBERUZBVUxUUyA9IHsKICAgIHVuaXQ6ICJtZXRyaWMiLAogICAgdGhyZWFkVHlwZTogIm1ldHJpYyIsCiAgICBkOiAxMCwKICAgIHA6IDEuNSwKICAgIHN0YXJ0czogMSwKICAgIGQyTWFudWFsOiBmYWxzZSwKICAgIG11OiAwLjE1LAogICAgbHViOiAibGlnaHQiLAogICAgdGhyZWFkQW5nbGU6IDYwLAogICAgZmV4dDogIiIsCiAgICBmZXh0VW5pdDogImtOIiwKICAgIHZpYnJhdGlvbjogInN0YXRpYyIsCiAgICBzaXplOiAiTTEwIgogIH07CgogIHZhciBlbCA9IHsKICAgIHRocmVhZFR5cGU6IGJ5SWQoInRzbGNUaHJlYWRUeXBlIiksCiAgICBkOiBieUlkKCJ0c2xjRCIpLAogICAgcDogYnlJZCgidHNsY1AiKSwKICAgIHN0YXJ0czogYnlJZCgidHNsY1N0YXJ0cyIpLAogICAgZDI6IGJ5SWQoInRzbGNEMiIpLAogICAgZDJNYW51YWw6IGJ5SWQoInRzbGNEMk1hbnVhbCIpLAogICAgbXU6IGJ5SWQoInRzbGNNdSIpLAogICAgbHViOiBieUlkKCJ0c2xjTHViIiksCiAgICB0aHJlYWRBbmdsZTogYnlJZCgidHNsY1RocmVhZEFuZ2xlIiksCiAgICBmZXh0OiBieUlkKCJ0c2xjRmV4dCIpLAogICAgZmV4dFVuaXQ6IGJ5SWQoInRzbGNGZXh0VW5pdCIpLAogICAgdmlicmF0aW9uOiBieUlkKCJ0c2xjVmlicmF0aW9uIiksCiAgICBidG5NZXRyaWM6IGJ5SWQoInRzbGNCdG5NZXRyaWMiKSwKICAgIGJ0bkltcGVyaWFsOiBieUlkKCJ0c2xjQnRuSW1wZXJpYWwiKSwKICAgIGJ0blJlc2V0OiBieUlkKCJ0c2xjQnRuUmVzZXQiKSwKICAgIGJ0bkNhbGM6IGJ5SWQoInRzbGNCdG5DYWxjdWxhdGUiKSwKICAgIHJlc3VsdHM6IGJ5SWQoInRzbGNSZXN1bHRzIiksCiAgICBzaXplQ2hpcHM6IGJ5SWQoInRzbGNTaXplQ2hpcHMiKSwKICAgIGJhbm5lcjogYnlJZCgidHNsY0Jhbm5lciIpLAogICAgc3RhdHVzVGl0bGU6IGJ5SWQoInRzbGNTdGF0dXNUaXRsZSIpLAogICAgc3RhdHVzTm90ZTogYnlJZCgidHNsY1N0YXR1c05vdGUiKSwKICAgIG91dEhlbGl4OiBieUlkKCJ0c2xjT3V0SGVsaXgiKSwKICAgIG91dEZyaWN0aW9uOiBieUlkKCJ0c2xjT3V0RnJpY3Rpb24iKSwKICAgIG91dENyaXRNdTogYnlJZCgidHNsY091dENyaXRNdSIpLAogICAgb3V0TXU6IGJ5SWQoInRzbGNPdXRNdSIpLAogICAgb3V0TWFyZ2luOiBieUlkKCJ0c2xjT3V0TWFyZ2luIiksCiAgICBvdXRMZWFkOiBieUlkKCJ0c2xjT3V0TGVhZCIpLAogICAgb3V0RDI6IGJ5SWQoInRzbGNPdXREMiIpLAogICAgb3V0RWZmOiBieUlkKCJ0c2xjT3V0RWZmIiksCiAgICBvdXRSZWM6IGJ5SWQoInRzbGNPdXRSZWMiKSwKICAgIGdhdWdlQXJjOiBieUlkKCJ0c2xjR2F1Z2VBcmMiKSwKICAgIGdhdWdlTmVlZGxlOiBieUlkKCJ0c2xjTmVlZGxlIiksCiAgICBjb21wYXJlSGVsaXg6IGJ5SWQoInRzbGNDb21wYXJlSGVsaXgiKSwKICAgIGNvbXBhcmVGcmljdGlvbjogYnlJZCgidHNsY0NvbXBhcmVGcmljdGlvbiIpLAogICAgcmlza0ZpbGw6IGJ5SWQoInRzbGNSaXNrRmlsbCIpLAogICAgcmlza0xhYmVsOiBieUlkKCJ0c2xjUmlza0xhYmVsIiksCiAgICB0aHJlYWRTdmc6IGJ5SWQoInRzbGNUaHJlYWRTdmciKSwKICAgIGhlbGl4U3ZnOiBieUlkKCJ0c2xjSGVsaXhTdmciKSwKICAgIGFsZXJ0czogYnlJZCgidHNsY0FsZXJ0cyIpCiAgfTsKCiAgdmFyIHN0YXRlID0gewogICAgdW5pdDogIm1ldHJpYyIsCiAgICBzaXplSWQ6ICJNMTAiLAogICAgYXBwbHlpbmdMdWI6IGZhbHNlLAogICAgYXBwbHlpbmdUeXBlOiBmYWxzZQogIH07CgogIGZ1bmN0aW9uIGJ5SWQoaWQpIHsgcmV0dXJuIHJvb3QucXVlcnlTZWxlY3RvcigiIyIgKyBpZCk7IH0KCiAgZnVuY3Rpb24gbnVtKG5vZGUpIHsKICAgIGlmICghbm9kZSkgcmV0dXJuIE5hTjsKICAgIHZhciB2ID0gcGFyc2VGbG9hdChTdHJpbmcobm9kZS52YWx1ZSkucmVwbGFjZSgiLCIsICIuIikpOwogICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6IE5hTjsKICB9CgogIGZ1bmN0aW9uIGNsYW1wKHYsIGEsIGIpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHYpKTsgfQoKICBmdW5jdGlvbiByb3VuZFNtYXJ0KHYpIHsKICAgIGlmICghaXNGaW5pdGUodikpIHJldHVybiAiIjsKICAgIHZhciBhID0gTWF0aC5hYnModik7CiAgICB2YXIgZCA9IGEgPj0gMTAwID8gMiA6IGEgPj0gMTAgPyAzIDogYSA+PSAxID8gNCA6IDU7CiAgICByZXR1cm4gU3RyaW5nKE51bWJlcih2LnRvRml4ZWQoZCkpKTsKICB9CgogIGZ1bmN0aW9uIGZtdCh2LCBkKSB7CiAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gIuKAlCI7CiAgICByZXR1cm4gdi50b0xvY2FsZVN0cmluZygiZW4tVVMiLCB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogZCwgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pOwogIH0KCiAgZnVuY3Rpb24gZm10RGVnKGRlZykgewogICAgaWYgKCFpc0Zpbml0ZShkZWcpKSByZXR1cm4gIuKAlCI7CiAgICByZXR1cm4gZm10KGRlZywgMykgKyAiwrAiOwogIH0KCiAgZnVuY3Rpb24gc2V0RXJyKGtleSwgbXNnKSB7CiAgICB2YXIgbm9kZSA9IGJ5SWQoInRzbGNFcnIiICsga2V5KTsKICAgIHZhciBpbnB1dE1hcCA9IHsKICAgICAgRDogZWwuZCwgUDogZWwucCwgU3RhcnRzOiBlbC5zdGFydHMsIEQyOiBlbC5kMiwKICAgICAgTXU6IGVsLm11LCBUaHJlYWRBbmdsZTogZWwudGhyZWFkQW5nbGUsIEZleHQ6IGVsLmZleHQKICAgIH07CiAgICB2YXIgaW5wdXQgPSBpbnB1dE1hcFtrZXldOwogICAgaWYgKG5vZGUpIG5vZGUudGV4dENvbnRlbnQgPSBtc2cgfHwgIiI7CiAgICBpZiAoaW5wdXQpIHsKICAgICAgaWYgKG1zZykgaW5wdXQuY2xhc3NMaXN0LmFkZCgidHNsYy1pbnZhbGlkIik7CiAgICAgIGVsc2UgaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgidHNsYy1pbnZhbGlkIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjbGVhckVycnMoKSB7CiAgICBbIkQiLCAiUCIsICJTdGFydHMiLCAiRDIiLCAiTXUiLCAiVGhyZWFkQW5nbGUiLCAiRmV4dCJdLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgc2V0RXJyKGssICIiKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gaGFsZkFuZ2xlRGVnKHRocmVhZEFuZ2xlKSB7CiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhyZWFkQW5nbGUpIC8gMjsKICB9CgogIGZ1bmN0aW9uIGNvc0hhbGYodGhyZWFkQW5nbGUpIHsKICAgIHZhciBiZXRhID0gaGFsZkFuZ2xlRGVnKHRocmVhZEFuZ2xlKSAqIFJBRDsKICAgIHJldHVybiBNYXRoLmNvcyhiZXRhKSB8fCAxOwogIH0KCiAgZnVuY3Rpb24gY2FsY1BpdGNoRGlhbWV0ZXIoZCwgcCwgdHlwZUtleSwgdGhyZWFkQW5nbGUsIHVuaXQpIHsKICAgIGlmICghKGQgPiAwKSB8fCAhKHAgPiAwKSkgcmV0dXJuIE5hTjsKICAgIHZhciBzcGVjID0gVEhSRUFEX1RZUEVTW3R5cGVLZXldIHx8IFRIUkVBRF9UWVBFUy5jdXN0b207CiAgICB2YXIgcExlbiA9IHVuaXQgPT09ICJtZXRyaWMiID8gcCA6IE1NX1BFUl9JTiAvIHA7CiAgICB2YXIgZE1tID0gdW5pdCA9PT0gIm1ldHJpYyIgPyBkIDogZCAqIE1NX1BFUl9JTjsKICAgIHZhciBmYWN0b3IgPSBzcGVjLmQyRmFjdG9yOwogICAgaWYgKHR5cGVLZXkgPT09ICJjdXN0b20iKSB7CiAgICAgIHZhciBiZXRhID0gaGFsZkFuZ2xlRGVnKHRocmVhZEFuZ2xlKSAqIFJBRDsKICAgICAgZmFjdG9yID0gYmV0YSA8IDAuMDEgPyAwLjUgOiAwLjY0OTUxOTsKICAgICAgaWYgKHRocmVhZEFuZ2xlIDw9IDM1KSBmYWN0b3IgPSAwLjU7CiAgICB9CiAgICB2YXIgZDIgPSBkTW0gLSBmYWN0b3IgKiBwTGVuOwogICAgcmV0dXJuIGQyID4gMCA\/IGQyIDogTmFOOwogIH0KCiAgZnVuY3Rpb24gcmVmcmVzaEQyKCkgewogICAgaWYgKGVsLmQyTWFudWFsLmNoZWNrZWQpIHJldHVybjsKICAgIHZhciBkMiA9IGNhbGNQaXRjaERpYW1ldGVyKG51bShlbC5kKSwgbnVtKGVsLnApLCBlbC50aHJlYWRUeXBlLnZhbHVlLCBudW0oZWwudGhyZWFkQW5nbGUpLCBzdGF0ZS51bml0KTsKICAgIGlmIChpc0Zpbml0ZShkMikpIHsKICAgICAgaWYgKHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiKSBlbC5kMi52YWx1ZSA9IGQyID49IDEwID8gZDIudG9GaXhlZCgyKSA6IGQyLnRvRml4ZWQoMyk7CiAgICAgIGVsc2UgZWwuZDIudmFsdWUgPSByb3VuZFNtYXJ0KGQyIC8gTU1fUEVSX0lOKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7CiAgICB2YXIgbWV0cmljID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyI7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXVuaXQ9J2QnXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiaW4iOyB9KTsKICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0ncCddIikuZm9yRWFjaChmdW5jdGlvbiAobikgeyBuLnRleHRDb250ZW50ID0gbWV0cmljID8gIm1tIiA6ICJUUEkiOyB9KTsKICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0nZDInXSIpLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICJtbSIgOiAiaW4iOyB9KTsKICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdW5pdD0nbGVhZCddIikuZm9yRWFjaChmdW5jdGlvbiAobikgeyBuLnRleHRDb250ZW50ID0gbWV0cmljID8gIm1tIiA6ICJpbiI7IH0pOwogICAgZWwuYnRuTWV0cmljLmNsYXNzTGlzdC50b2dnbGUoInRzbGMtaXMtYWN0aXZlIiwgbWV0cmljKTsKICAgIGVsLmJ0bkltcGVyaWFsLmNsYXNzTGlzdC50b2dnbGUoInRzbGMtaXMtYWN0aXZlIiwgIW1ldHJpYyk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTaXplQ2hpcHMoKSB7CiAgICB2YXIgbGlzdCA9IHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiID8gU0laRVNfTSA6IFNJWkVTX0lOOwogICAgZWwuc2l6ZUNoaXBzLmlubmVySFRNTCA9ICIiOwogICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7CiAgICAgIHZhciBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgYnRuLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgYnRuLmNsYXNzTmFtZSA9ICJ0c2xjLWNoaXAiICsgKHN0YXRlLnNpemVJZCA9PT0gcy5sYWJlbCA\/ICIgdHNsYy1pcy1hY3RpdmUiIDogIiIpOwogICAgICBidG4udGV4dENvbnRlbnQgPSBzLmxhYmVsOwogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgc3RhdGUuc2l6ZUlkID0gcy5sYWJlbDsKICAgICAgICBpZiAoc3RhdGUudW5pdCA9PT0gIm1ldHJpYyIpIHsKICAgICAgICAgIGVsLmQudmFsdWUgPSBTdHJpbmcocy5kKTsKICAgICAgICAgIGVsLnAudmFsdWUgPSBTdHJpbmcocy5wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWwuZC52YWx1ZSA9IFN0cmluZyhzLmQpOwogICAgICAgICAgZWwucC52YWx1ZSA9IFN0cmluZyhzLnRwaSk7CiAgICAgICAgfQogICAgICAgIGlmICghZWwuZDJNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEQyKCk7CiAgICAgICAgcGFpbnRDaGlwcygpOwogICAgICB9KTsKICAgICAgZWwuc2l6ZUNoaXBzLmFwcGVuZENoaWxkKGJ0bik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHBhaW50Q2hpcHMoKSB7CiAgICBlbC5zaXplQ2hpcHMucXVlcnlTZWxlY3RvckFsbCgiLnRzbGMtY2hpcCIpLmZvckVhY2goZnVuY3Rpb24gKGJ0bikgewogICAgICBidG4uY2xhc3NMaXN0LnRvZ2dsZSgidHNsYy1pcy1hY3RpdmUiLCBidG4udGV4dENvbnRlbnQgPT09IHN0YXRlLnNpemVJZCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHRvU0koKSB7CiAgICB2YXIgbWV0cmljID0gc3RhdGUudW5pdCA9PT0gIm1ldHJpYyI7CiAgICB2YXIgZCA9IG51bShlbC5kKTsKICAgIHZhciBwID0gbnVtKGVsLnApOwogICAgdmFyIGQyID0gbnVtKGVsLmQyKTsKICAgIHZhciBkX21tID0gbWV0cmljID8gZCA6IGQgKiBNTV9QRVJfSU47CiAgICB2YXIgcF9tbSA9IG1ldHJpYyA\/IHAgOiAocCA+IDAgPyBNTV9QRVJfSU4gLyBwIDogTmFOKTsKICAgIHZhciBkMl9tbSA9IG1ldHJpYyA\/IGQyIDogZDIgKiBNTV9QRVJfSU47CiAgICByZXR1cm4geyBkOiBkLCBwOiBwLCBkMjogZDIsIGRfbW06IGRfbW0sIHBfbW06IHBfbW0sIGQyX21tOiBkMl9tbSB9OwogIH0KCiAgZnVuY3Rpb24gZmV4dFRvTigpIHsKICAgIHZhciB2ID0gbnVtKGVsLmZleHQpOwogICAgaWYgKCFpc0Zpbml0ZSh2KSB8fCB2ID09PSAwKSByZXR1cm4gMDsKICAgIHZhciB1ID0gZWwuZmV4dFVuaXQudmFsdWU7CiAgICBpZiAodSA9PT0gImtOIikgcmV0dXJuIHYgKiAxMDAwOwogICAgaWYgKHUgPT09ICJsYmYiKSByZXR1cm4gdiAvIExCRl9QRVJfTjsKICAgIHJldHVybiB2OwogIH0KCiAgZnVuY3Rpb24gYXBwbHlUaHJlYWRUeXBlKCkgewogICAgaWYgKHN0YXRlLmFwcGx5aW5nVHlwZSkgcmV0dXJuOwogICAgc3RhdGUuYXBwbHlpbmdUeXBlID0gdHJ1ZTsKICAgIHZhciBzcGVjID0gVEhSRUFEX1RZUEVTW2VsLnRocmVhZFR5cGUudmFsdWVdOwogICAgaWYgKHNwZWMgJiYgZWwudGhyZWFkVHlwZS52YWx1ZSAhPT0gImN1c3RvbSIpIHsKICAgICAgZWwudGhyZWFkQW5nbGUudmFsdWUgPSBTdHJpbmcoc3BlYy5hbmdsZSk7CiAgICB9CiAgICBpZiAoc3RhdGUudW5pdCA9PT0gImltcGVyaWFsIiAmJiAoZWwudGhyZWFkVHlwZS52YWx1ZSA9PT0gIm1ldHJpYyIgfHwgZWwudGhyZWFkVHlwZS52YWx1ZSA9PT0gInRyYXBlem9pZGFsIikpIHsKICAgICAgZWwudGhyZWFkVHlwZS52YWx1ZSA9ICJ1bmlmaWVkIjsKICAgIH0KICAgIHN0YXRlLmFwcGx5aW5nVHlwZSA9IGZhbHNlOwogICAgaWYgKCFlbC5kMk1hbnVhbC5jaGVja2VkKSByZWZyZXNoRDIoKTsKICB9CgogIGZ1bmN0aW9uIGFwcGx5THVicmljYXRpb24oKSB7CiAgICB2YXIgc3BlYyA9IExVQltlbC5sdWIudmFsdWVdOwogICAgaWYgKCFzcGVjKSByZXR1cm47CiAgICBzdGF0ZS5hcHBseWluZ0x1YiA9IHRydWU7CiAgICBlbC5tdS52YWx1ZSA9IHNwZWMubXUudG9GaXhlZCgyKTsKICAgIHN0YXRlLmFwcGx5aW5nTHViID0gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBtYXJrQ3VzdG9tTHViKCkgewogICAgaWYgKHN0YXRlLmFwcGx5aW5nTHViKSByZXR1cm47CiAgICBpZiAoZWwubHViLnZhbHVlICE9PSAiY3VzdG9tIikgZWwubHViLnZhbHVlID0gImN1c3RvbSI7CiAgfQoKICBmdW5jdGlvbiB2YWxpZGF0ZShzaSkgewogICAgdmFyIG9rID0gdHJ1ZTsKICAgIGNsZWFyRXJycygpOwoKICAgIGlmICghKHNpLmQgPiAwKSkgeyBzZXRFcnIoIkQiLCAiRGlhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTsgb2sgPSBmYWxzZTsgfQogICAgaWYgKCEoc2kucCA+IDApKSB7CiAgICAgIHNldEVycigiUCIsIHN0YXRlLnVuaXQgPT09ICJtZXRyaWMiID8gIlBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIiA6ICJUUEkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KICAgIGlmIChzdGF0ZS51bml0ID09PSAibWV0cmljIiAmJiBzaS5kID4gMCAmJiBzaS5wID4gMCAmJiBzaS5wID49IHNpLmQpIHsKICAgICAgc2V0RXJyKCJQIiwgIlBpdGNoIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBub21pbmFsIGRpYW1ldGVyLiIpOwogICAgICBvayA9IGZhbHNlOwogICAgfQoKICAgIHZhciBzdGFydHMgPSBudW0oZWwuc3RhcnRzKTsKICAgIGlmICghKHN0YXJ0cyA+PSAxKSB8fCBNYXRoLmZsb29yKHN0YXJ0cykgIT09IHN0YXJ0cykgewogICAgICBzZXRFcnIoIlN0YXJ0cyIsICJOdW1iZXIgb2Ygc3RhcnRzIG11c3QgYmUgYW4gaW50ZWdlciDiiaUgMS4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoIShzaS5kMiA+IDApKSB7IHNldEVycigiRDIiLCAiUGl0Y2ggZGlhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTsgb2sgPSBmYWxzZTsgfQoKICAgIHZhciBtdSA9IG51bShlbC5tdSk7CiAgICBpZiAoIShtdSA+IDApIHx8IG11ID49IDEpIHsKICAgICAgc2V0RXJyKCJNdSIsICJGcmljdGlvbiBjb2VmZmljaWVudCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAobXUgPCAwLjA1IHx8IG11ID4gMC4zMCkgewogICAgICBzZXRFcnIoIk11IiwgIlR5cGljYWwgZW5naW5lZXJpbmcgcmFuZ2UgaXMgMC4wNeKAkzAuMzAuIENvbmZpcm0gbWVhc3VyZWQgb3IgY2F0YWxvZyBkYXRhLiIpOwogICAgfQoKICAgIHZhciBhbmdsZSA9IG51bShlbC50aHJlYWRBbmdsZSk7CiAgICBpZiAoIShhbmdsZSA+PSAwKSB8fCBhbmdsZSA+IDkwKSB7CiAgICAgIHNldEVycigiVGhyZWFkQW5nbGUiLCAiVGhyZWFkIGFuZ2xlIG11c3QgYmUgYmV0d2VlbiAwwrAgYW5kIDkwwrAuIik7CiAgICAgIG9rID0gZmFsc2U7CiAgICB9CgogICAgaWYgKGVsLmZleHQudmFsdWUgIT09ICIiICYmICEobnVtKGVsLmZleHQpID49IDApKSB7CiAgICAgIHNldEVycigiRmV4dCIsICJFeHRlcm5hbCBsb2FkIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoc2kuZF9tbSA+IDAgJiYgc2kucF9tbSA+IDAgJiYgKHNpLmRfbW0gLSAwLjY0OTUxOSAqIHNpLnBfbW0pIDw9IDAgJiYgIWVsLmQyTWFudWFsLmNoZWNrZWQpIHsKICAgICAgc2V0RXJyKCJQIiwgIlBpdGNoIGlzIHRvbyBsYXJnZSBmb3IgdGhpcyBkaWFtZXRlcjsgcGl0Y2ggZGlhbWV0ZXIgd291bGQgYmUgemVybyBvciBuZWdhdGl2ZS4iKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gb2s7CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlKCkgewogICAgdmFyIHNpID0gdG9TSSgpOwogICAgdmFyIHN0YXJ0cyA9IG51bShlbC5zdGFydHMpOwogICAgdmFyIG11ID0gbnVtKGVsLm11KTsKICAgIHZhciB0aHJlYWRBbmdsZSA9IG51bShlbC50aHJlYWRBbmdsZSk7CiAgICB2YXIgY2ggPSBjb3NIYWxmKHRocmVhZEFuZ2xlKTsKCiAgICB2YXIgbGVhZF9tbSA9IHNpLnBfbW0gKiBzdGFydHM7CiAgICB2YXIgbGFtYmRhUmFkID0gTWF0aC5hdGFuMihsZWFkX21tLCBNYXRoLlBJICogc2kuZDJfbW0pOwogICAgdmFyIGxhbWJkYURlZyA9IGxhbWJkYVJhZCAqIERFRzsKCiAgICB2YXIgcGhpRWZmUmFkID0gTWF0aC5hdGFuKG11IC8gY2gpOwogICAgdmFyIHBoaUVmZkRlZyA9IHBoaUVmZlJhZCAqIERFRzsKICAgIHZhciBwaGlQbGFpbkRlZyA9IE1hdGguYXRhbihtdSkgKiBERUc7CgogICAgdmFyIGNyaXRNdSA9IE1hdGgudGFuKGxhbWJkYVJhZCkgKiBjaDsKICAgIHZhciBtYXJnaW5EZWcgPSBwaGlFZmZEZWcgLSBsYW1iZGFEZWc7CiAgICB2YXIgaXNTZWxmTG9ja2luZyA9IG1hcmdpbkRlZyA+IDA7CgogICAgdmFyIGV0YVJhaXNlID0gTWF0aC50YW4obGFtYmRhUmFkKSAvIE1hdGgudGFuKGxhbWJkYVJhZCArIHBoaUVmZlJhZCk7CiAgICBpZiAoIWlzRmluaXRlKGV0YVJhaXNlKSB8fCBldGFSYWlzZSA8IDApIGV0YVJhaXNlID0gMDsKICAgIGlmIChldGFSYWlzZSA+IDEpIGV0YVJhaXNlID0gMTsKCiAgICB2YXIgdmliID0gVklCW2VsLnZpYnJhdGlvbi52YWx1ZV0gfHwgVklCLnN0YXRpYzsKICAgIHZhciBlZmZlY3RpdmVNYXJnaW4gPSBtYXJnaW5EZWcgLSB2aWIubWFyZ2luUmVxOwoKICAgIHZhciBmZXh0TiA9IGZleHRUb04oKTsKICAgIHZhciBoYXNFeHQgPSBlbC5mZXh0LnZhbHVlICE9PSAiIiAmJiBmZXh0TiA+IDA7CgogICAgdmFyIHJpc2sgPSAibG93IjsKICAgIHZhciByaXNrVGV4dCA9ICJMb3cgcmlzayDigJQgc3Ryb25nIHNlbGYtbG9ja2luZyBtYXJnaW4gZm9yIHRoZSBzZWxlY3RlZCB2aWJyYXRpb24gbGV2ZWwuIjsKICAgIGlmICghaXNTZWxmTG9ja2luZykgewogICAgICByaXNrID0gImhpZ2giOwogICAgICByaXNrVGV4dCA9ICJIaWdoIHJpc2sg4oCUIHRocmVhZCBtYXkgYmFjay1kcml2ZSBvciBsb29zZW4gdW5kZXIgbG9hZCAoz4Yg4omkIM67KS4iOwogICAgfSBlbHNlIGlmIChlZmZlY3RpdmVNYXJnaW4gPD0gMCkgewogICAgICByaXNrID0gImhpZ2giOwogICAgICByaXNrVGV4dCA9ICJIaWdoIHJpc2sg4oCUIGxvY2tpbmcgbWFyZ2luIGlzIGluc3VmZmljaWVudCBmb3IgdGhlIHNlbGVjdGVkIHZpYnJhdGlvbiBlbnZpcm9ubWVudC4iOwogICAgfSBlbHNlIGlmIChlZmZlY3RpdmVNYXJnaW4gPCAyIHx8IChoYXNFeHQgJiYgZWZmZWN0aXZlTWFyZ2luIDwgNCkpIHsKICAgICAgcmlzayA9ICJtZWRpdW0iOwogICAgICByaXNrVGV4dCA9ICJNZWRpdW0gcmlzayDigJQgbGltaXRlZCBzZWxmLWxvY2tpbmcgbWFyZ2luOyBtb25pdG9yIGZvciBsb29zZW5pbmcgdW5kZXIgZHluYW1pYyBsb2FkLiI7CiAgICB9IGVsc2UgaWYgKHN0YXJ0cyA+IDEgJiYgZWZmZWN0aXZlTWFyZ2luIDwgNSkgewogICAgICByaXNrID0gIm1lZGl1bSI7CiAgICAgIHJpc2tUZXh0ID0gIk1lZGl1bSByaXNrIOKAlCBtdWx0aS1zdGFydCB0aHJlYWRzIHJlZHVjZSBlZmZlY3RpdmUgbG9ja2luZzsgY29uZmlybSB3aXRoIHRlc3RpbmcuIjsKICAgIH0KCiAgICBpZiAoaGFzRXh0ICYmICFpc1NlbGZMb2NraW5nKSB7CiAgICAgIHJpc2sgPSAiaGlnaCI7CiAgICAgIHJpc2tUZXh0ID0gIkhpZ2ggcmlzayDigJQgZXh0ZXJuYWwgYXhpYWwgbG9hZCBvbiBhIG5vbi1zZWxmLWxvY2tpbmcgdGhyZWFkIGNhbiBjYXVzZSBiYWNrLWRyaXZpbmcuIjsKICAgIH0KCiAgICB2YXIgc3RhdHVzID0gImxvY2siOwogICAgdmFyIHN0YXR1c1RpdGxlID0gIlNlbGYtbG9ja2luZyI7CiAgICB2YXIgc3RhdHVzTm90ZSA9ICJGcmljdGlvbiBhbmdsZSBleGNlZWRzIGhlbGl4IGFuZ2xlICjPhiA+IM67KS4gVGhlIHRocmVhZCByZXNpc3RzIGJhY2stZHJpdmluZyB1bmRlciBzdGF0aWMgY29uZGl0aW9ucy4iOwoKICAgIGlmICghaXNTZWxmTG9ja2luZykgewogICAgICBzdGF0dXMgPSAiYmFja2RyaXZlIjsKICAgICAgc3RhdHVzVGl0bGUgPSAiQmFjay1kcml2aW5nIHJpc2siOwogICAgICBzdGF0dXNOb3RlID0gIkhlbGl4IGFuZ2xlIGVxdWFscyBvciBleGNlZWRzIHRoZSBlZmZlY3RpdmUgZnJpY3Rpb24gYW5nbGUuIFRoZSBzY3JldyBtYXkgdW53aW5kIHVuZGVyIGF4aWFsIGxvYWQgb3IgdmlicmF0aW9uLiI7CiAgICB9IGVsc2UgaWYgKGVmZmVjdGl2ZU1hcmdpbiA8PSAwKSB7CiAgICAgIHN0YXR1cyA9ICJ1bnN0YWJsZSI7CiAgICAgIHN0YXR1c1RpdGxlID0gIlVuc3RhYmxlIGxvY2tpbmciOwogICAgICBzdGF0dXNOb3RlID0gIk5vbWluYWwgc2VsZi1sb2NraW5nIGlzIHByZXNlbnQgYnV0IHRoZSBzYWZldHkgbWFyZ2luIGlzIGNvbnN1bWVkIGJ5IHZpYnJhdGlvbiBvciBtdWx0aS1zdGFydCBlZmZlY3RzLiI7CiAgICB9IGVsc2UgaWYgKHJpc2sgPT09ICJtZWRpdW0iKSB7CiAgICAgIHN0YXR1cyA9ICJ1bnN0YWJsZSI7CiAgICAgIHN0YXR1c1RpdGxlID0gIkxpbWl0ZWQgc2VsZi1sb2NraW5nIjsKICAgICAgc3RhdHVzTm90ZSA9ICJUaHJlYWQgbWVldHMgz4YgPiDOuyBidXQgdGhlIG1hcmdpbiBpcyBuYXJyb3cuIENvbnNpZGVyIGZpbmVyIHBpdGNoLCBoaWdoZXIgZnJpY3Rpb24sIG9yIG1lY2hhbmljYWwgbG9ja2luZy4iOwogICAgfQoKICAgIHZhciByZWNzID0gW107CiAgICBpZiAoIWlzU2VsZkxvY2tpbmcpIHsKICAgICAgcmVjcy5wdXNoKCJJbmNyZWFzZSB0aHJlYWQgZnJpY3Rpb24gY29lZmZpY2llbnQgKGRyeSBzdXJmYWNlcywgY29hdGluZ3MsIG9yIHRocmVhZC1sb2NraW5nIGNvbXBvdW5kKS4iKTsKICAgICAgcmVjcy5wdXNoKCJSZWR1Y2UgbGVhZCBhbmdsZSDigJQgdXNlIGZpbmVyIHBpdGNoIG9yIGZld2VyIHN0YXJ0cy4iKTsKICAgICAgcmVjcy5wdXNoKCJBZGQgbWVjaGFuaWNhbCBsb2NraW5nOiBsb2NrIG51dHMsIHdpcmUgbG9ja2luZywgdGFiIHdhc2hlcnMsIG9yIHRocmVhZCBpbnNlcnRzLiIpOwogICAgfSBlbHNlIGlmIChlZmZlY3RpdmVNYXJnaW4gPCAzKSB7CiAgICAgIHJlY3MucHVzaCgiSW5jcmVhc2UgZnJpY3Rpb24gbWFyZ2luIHdpdGggY29udHJvbGxlZCBsdWJyaWNhbnQgc2VsZWN0aW9uIG9yIGFudGktbG9vc2VuaW5nIGNvbXBvdW5kcy4iKTsKICAgICAgaWYgKHN0YXJ0cyA+IDEpIHJlY3MucHVzaCgiU2luZ2xlLXN0YXJ0IHRocmVhZHMgcHJvdmlkZSBiZXR0ZXIgc2VsZi1sb2NraW5nIHRoYW4gbXVsdGktc3RhcnQgZGVzaWducy4iKTsKICAgICAgaWYgKHZpYi5tYXJnaW5SZXEgPiAwKSByZWNzLnB1c2goIkZvciB2aWJyYXRpb24gc2VydmljZSwgYWRkIHBvc2l0aXZlIGxvY2tpbmcgZmVhdHVyZXMgYmV5b25kIGZyaWN0aW9uIGFsb25lLiIpOwogICAgfSBlbHNlIHsKICAgICAgcmVjcy5wdXNoKCJDdXJyZW50IGdlb21ldHJ5IHNob3dzIGFkZXF1YXRlIHNlbGYtbG9ja2luZyBtYXJnaW4gZm9yIHN0YXRpYyBvciBsaWdodC1kdXR5IHNlcnZpY2UuIik7CiAgICAgIGlmICh2aWIubWFyZ2luUmVxID49IDMuNSkgcmVjcy5wdXNoKCJVbmRlciBtZWRpdW0vaGlnaCB2aWJyYXRpb24sIHN0aWxsIHZlcmlmeSB3aXRoIGpvaW50IHRlc3RpbmcgYW5kIHRvcnF1ZSBtb25pdG9yaW5nLiIpOwogICAgfQogICAgaWYgKG11IDwgY3JpdE11ICogMS4xICYmIGlzU2VsZkxvY2tpbmcpIHsKICAgICAgcmVjcy5wdXNoKCJBY3R1YWwgzrwgaXMgY2xvc2UgdG8gdGhlIGNyaXRpY2FsIHZhbHVlIHRhbijOuynCt2NvcyjOsikuIFNtYWxsIGx1YnJpY2F0aW9uIGNoYW5nZXMgbWF5IGVsaW1pbmF0ZSBsb2NraW5nLiIpOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHNpOiBzaSwKICAgICAgc3RhcnRzOiBzdGFydHMsCiAgICAgIG11OiBtdSwKICAgICAgdGhyZWFkQW5nbGU6IHRocmVhZEFuZ2xlLAogICAgICBsZWFkX21tOiBsZWFkX21tLAogICAgICBsYW1iZGFEZWc6IGxhbWJkYURlZywKICAgICAgcGhpRWZmRGVnOiBwaGlFZmZEZWcsCiAgICAgIHBoaVBsYWluRGVnOiBwaGlQbGFpbkRlZywKICAgICAgY3JpdE11OiBjcml0TXUsCiAgICAgIG1hcmdpbkRlZzogbWFyZ2luRGVnLAogICAgICBlZmZlY3RpdmVNYXJnaW46IGVmZmVjdGl2ZU1hcmdpbiwKICAgICAgaXNTZWxmTG9ja2luZzogaXNTZWxmTG9ja2luZywKICAgICAgZXRhUmFpc2U6IGV0YVJhaXNlLAogICAgICByaXNrOiByaXNrLAogICAgICByaXNrVGV4dDogcmlza1RleHQsCiAgICAgIHN0YXR1czogc3RhdHVzLAogICAgICBzdGF0dXNUaXRsZTogc3RhdHVzVGl0bGUsCiAgICAgIHN0YXR1c05vdGU6IHN0YXR1c05vdGUsCiAgICAgIHJlY3M6IHJlY3MsCiAgICAgIGhhc0V4dDogaGFzRXh0LAogICAgICBmZXh0TjogZmV4dE4sCiAgICAgIHZpYjogdmliCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gZm9ybWF0TGVuZ3RoKG1tKSB7CiAgICBpZiAoIWlzRmluaXRlKG1tKSkgcmV0dXJuICLigJQiOwogICAgaWYgKHN0YXRlLnVuaXQgPT09ICJpbXBlcmlhbCIpIHJldHVybiBmbXQobW0gLyBNTV9QRVJfSU4sIDQpICsgIiBpbiI7CiAgICByZXR1cm4gZm10KG1tLCAzKSArICIgbW0iOwogIH0KCiAgZnVuY3Rpb24gc2V0R2F1Z2UobWFyZ2luRGVnLCBtYXhEZWcpIHsKICAgIHZhciBtYXggPSBtYXhEZWcgfHwgMTU7CiAgICB2YXIgZnJhYyA9IGNsYW1wKChtYXJnaW5EZWcgKyA1KSAvIChtYXggKyA1KSwgMCwgMSk7CiAgICBlbC5nYXVnZUFyYy5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IiwgU3RyaW5nKEFSQ19MRU4gKiAoMSAtIGZyYWMpKSk7CiAgICB2YXIgYW5nID0gLTkwICsgZnJhYyAqIDE4MDsKICAgIGVsLmdhdWdlTmVlZGxlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgInJvdGF0ZSgiICsgYW5nICsgIiAxMjAgMTE4KSIpOwogIH0KCiAgZnVuY3Rpb24gc2V0Q29tcGFyZUNoYXJ0KGxhbWJkYURlZywgcGhpRGVnKSB7CiAgICB2YXIgbWF4SCA9IDE2MDsKICAgIHZhciBtYXggPSBNYXRoLm1heChsYW1iZGFEZWcsIHBoaURlZywgOCkgKiAxLjI1OwogICAgdmFyIGhTY2FsZSA9IG1heEggLyBtYXg7CiAgICB2YXIgaEhlbGl4ID0gY2xhbXAobGFtYmRhRGVnICogaFNjYWxlLCAwLCBtYXhIKTsKICAgIHZhciBoRnJpY3Rpb24gPSBjbGFtcChwaGlEZWcgKiBoU2NhbGUsIDAsIG1heEgpOwogICAgZWwuY29tcGFyZUhlbGl4LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgU3RyaW5nKGhIZWxpeCkpOwogICAgZWwuY29tcGFyZUhlbGl4LnNldEF0dHJpYnV0ZSgieSIsIFN0cmluZygxODAgLSBoSGVsaXgpKTsKICAgIGVsLmNvbXBhcmVGcmljdGlvbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIFN0cmluZyhoRnJpY3Rpb24pKTsKICAgIGVsLmNvbXBhcmVGcmljdGlvbi5zZXRBdHRyaWJ1dGUoInkiLCBTdHJpbmcoMTgwIC0gaEZyaWN0aW9uKSk7CiAgfQoKICBmdW5jdGlvbiBzZXRSaXNrTWV0ZXIocmlzaykgewogICAgdmFyIHBjdCA9IHJpc2sgPT09ICJoaWdoIiA\/IDkyIDogcmlzayA9PT0gIm1lZGl1bSIgPyA1NSA6IDE4OwogICAgdmFyIGNvbG9yID0gcmlzayA9PT0gImhpZ2giID8gIiNkYzI2MjYiIDogcmlzayA9PT0gIm1lZGl1bSIgPyAiI2Q5NzcwNiIgOiAiIzA1OTY2OSI7CiAgICBlbC5yaXNrRmlsbC5zdHlsZS53aWR0aCA9IHBjdCArICIlIjsKICAgIGVsLnJpc2tGaWxsLnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcjsKICAgIGVsLnJpc2tMYWJlbC50ZXh0Q29udGVudCA9IHJpc2sgPT09ICJoaWdoIiA\/ICJIaWdoIiA6IHJpc2sgPT09ICJtZWRpdW0iID8gIk1lZGl1bSIgOiAiTG93IjsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVRocmVhZFN2ZyhkX21tLCBwX21tLCBhbmdsZSkgewogICAgdmFyIGQgPSBjbGFtcChkX21tLCA0LCA4MCk7CiAgICB2YXIgcCA9IGNsYW1wKHBfbW0sIDAuNSwgNik7CiAgICB2YXIgc2NhbGUgPSA3MCAvIGQ7CiAgICB2YXIgcmQgPSBkICogc2NhbGUgKiAwLjM4OwogICAgdmFyIHJwID0gcCAqIHNjYWxlICogMC41NTsKICAgIHZhciBiZXRhID0gaGFsZkFuZ2xlRGVnKGFuZ2xlKTsKICAgIGVsLnRocmVhZFN2Zy5pbm5lckhUTUwgPQogICAgICAnPGxpbmUgeDE9IjIwIiB5MT0iMTEwIiB4Mj0iMjIwIiB5Mj0iMTEwIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMS41Ii8+JyArCiAgICAgICc8cGF0aCBkPSJNIDQwIDExMCBMIDQwICcgKyAoMTEwIC0gcmQgKiAyKSArICcgQSAnICsgcmQgKyAnICcgKyByZCArICcgMCAwIDEgJyArICg0MCArIHJwKSArICcgJyArICgxMTAgLSByZCAqIDIpICsKICAgICAgJyBMICcgKyAoMjAwIC0gcnApICsgJyAnICsgKDExMCAtIHJkICogMikgKyAnIEEgJyArIHJkICsgJyAnICsgcmQgKyAnIDAgMCAxIDIwMCAxMTAgWiIgZmlsbD0iI2UyZThmMCIgc3Ryb2tlPSIjMzM0MTU1IiBzdHJva2Utd2lkdGg9IjEuNSIvPicgKwogICAgICAnPHRleHQgeD0iMTIwIiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMSIgZmlsbD0iIzY0NzQ4YiI+VGhyZWFkIGFuZ2xlICcgKyBmbXQoYW5nbGUsIDApICsgJ8KwPC90ZXh0PicgKwogICAgICAnPHRleHQgeD0iMTIwIiB5PSIxMzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9IiM2NDc0OGIiPmQgPSAnICsgZm10KGRfbW0sIDEpICsgJyBtbSDCtyBwID0gJyArIGZtdChwX21tLCAyKSArICcgbW08L3RleHQ+JzsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZUhlbGl4U3ZnKGxhbWJkYURlZywgZDJfbW0pIHsKICAgIHZhciB0dXJucyA9IDIuMjsKICAgIHZhciBjeCA9IDEyMDsKICAgIHZhciBjeSA9IDk1OwogICAgdmFyIHIgPSA0MjsKICAgIHZhciBwaXRjaFB4ID0gY2xhbXAobGFtYmRhRGVnICogNC41LCA4LCAzNik7CiAgICB2YXIgcGF0aCA9ICIiOwogICAgdmFyIHN0ZXBzID0gODA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdGVwczsgaSsrKSB7CiAgICAgIHZhciB0ID0gaSAvIHN0ZXBzICogdHVybnMgKiBNYXRoLlBJICogMjsKICAgICAgdmFyIHggPSBjeCArIHIgKiBNYXRoLmNvcyh0KTsKICAgICAgdmFyIHkgPSBjeSArIHIgKiBNYXRoLnNpbih0KSArICh0IC8gKE1hdGguUEkgKiAyKSkgKiBwaXRjaFB4OwogICAgICBwYXRoICs9IChpID09PSAwID8gIk0iIDogIkwiKSArIHgudG9GaXhlZCgxKSArICIgIiArIHkudG9GaXhlZCgxKTsKICAgIH0KICAgIGVsLmhlbGl4U3ZnLmlubmVySFRNTCA9CiAgICAgICc8Y2lyY2xlIGN4PSInICsgY3ggKyAnIiBjeT0iJyArIGN5ICsgJyIgcj0iJyArIHIgKyAnIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMSIvPicgKwogICAgICAnPHBhdGggZD0iJyArIHBhdGggKyAnIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMjg0YzciIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nICsKICAgICAgJzx0ZXh0IHg9IjEyMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTEiIGZpbGw9IiM2NDc0OGIiPkhlbGl4IGFuZ2xlIM67ID0gJyArIGZtdChsYW1iZGFEZWcsIDMpICsgJ8KwPC90ZXh0PicgKwogICAgICAnPHRleHQgeD0iMTIwIiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9IiM2NDc0OGIiPkxlYWQgb24gcGl0Y2ggZGlhbWV0ZXIgZOKCgiA9ICcgKyBmbXQoZDJfbW0sIDIpICsgJyBtbTwvdGV4dD4nOwogIH0KCiAgZnVuY3Rpb24gY2FsY3VsYXRlKHNjcm9sbCkgewogICAgcmVmcmVzaEQyKCk7CiAgICB2YXIgc2kgPSB0b1NJKCk7CiAgICB2YXIgb2sgPSB2YWxpZGF0ZShzaSk7CiAgICBlbC5yZXN1bHRzLmNsYXNzTGlzdC5yZW1vdmUoInRzbGMtaGlkZGVuIik7CiAgICBpZiAoIW9rKSB7CiAgICAgIGVsLnN0YXR1c1RpdGxlLnRleHRDb250ZW50ID0gIkNoZWNrIGlucHV0cyI7CiAgICAgIGVsLnN0YXR1c05vdGUudGV4dENvbnRlbnQgPSAiQ29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZmllbGRzLCB0aGVuIGNhbGN1bGF0ZSBhZ2Fpbi4iOwogICAgICBlbC5iYW5uZXIuY2xhc3NOYW1lID0gInRzbGMtYmFubmVyIHRzbGMtYmFubmVyLWNhdXRpb24iOwogICAgICBpZiAoc2Nyb2xsKSB7CiAgICAgICAgdHJ5IHsgZWwucmVzdWx0cy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsgfSBjYXRjaCAoZSkge30KICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIHIgPSBjb21wdXRlKCk7CiAgICB2YXIgYWxlcnRzID0gW107CgogICAgaWYgKHIuc3RhcnRzID4gMSkgewogICAgICBhbGVydHMucHVzaCh7CiAgICAgICAgdHlwZTogIndhcm4iLAogICAgICAgIHRleHQ6ICJNdWx0aS1zdGFydCB0aHJlYWQgKCIgKyByLnN0YXJ0cyArICIgc3RhcnRzKTogbGVhZCBpcyAiICsgci5zdGFydHMgKyAiw5cgcGl0Y2gsIGluY3JlYXNpbmcgaGVsaXggYW5nbGUgYW5kIHJlZHVjaW5nIHNlbGYtbG9ja2luZyBjYXBhYmlsaXR5LiIKICAgICAgfSk7CiAgICB9CiAgICBpZiAoci5tdSA8IDAuMDUgfHwgci5tdSA+IDAuMzApIHsKICAgICAgYWxlcnRzLnB1c2goewogICAgICAgIHR5cGU6ICJ3YXJuIiwKICAgICAgICB0ZXh0OiAiRnJpY3Rpb24gY29lZmZpY2llbnQgzrwgPSAiICsgZm10KHIubXUsIDMpICsgIiBpcyBvdXRzaWRlIHRoZSB0eXBpY2FsIDAuMDXigJMwLjMwIHJhbmdlLiBWZXJpZnkgdGVzdCBvciBjYXRhbG9nIGRhdGEuIgogICAgICB9KTsKICAgIH0KICAgIGlmIChyLmhhc0V4dCkgewogICAgICBhbGVydHMucHVzaCh7CiAgICAgICAgdHlwZTogIndhcm4iLAogICAgICAgIHRleHQ6ICJFeHRlcm5hbCBheGlhbCBsb2FkIG9mICIgKyBmbXQoci5mZXh0TiAvIDEwMDAsIDIpICsgIiBrTiBpbmNsdWRlZCBpbiBxdWFsaXRhdGl2ZSBiYWNrLWRyaXZpbmcgYXNzZXNzbWVudC4iCiAgICAgIH0pOwogICAgfQogICAgaWYgKHIuaXNTZWxmTG9ja2luZyAmJiByLm1hcmdpbkRlZyA8IDIpIHsKICAgICAgYWxlcnRzLnB1c2goewogICAgICAgIHR5cGU6ICJ3YXJuIiwKICAgICAgICB0ZXh0OiAiU2VsZi1sb2NraW5nIG1hcmdpbiBpcyBvbmx5ICIgKyBmbXQoci5tYXJnaW5EZWcsIDIpICsgIsKwLiBTbWFsbCBjaGFuZ2VzIGluIGx1YnJpY2F0aW9uIG9yIHdlYXIgbWF5IGVsaW1pbmF0ZSBsb2NraW5nLiIKICAgICAgfSk7CiAgICB9CiAgICBpZiAoIXIuaXNTZWxmTG9ja2luZykgewogICAgICBhbGVydHMucHVzaCh7CiAgICAgICAgdHlwZTogInJpc2siLAogICAgICAgIHRleHQ6ICLOvCA9ICIgKyBmbXQoci5tdSwgMykgKyAiIGlzIGJlbG93IGNyaXRpY2FsIHZhbHVlICIgKyBmbXQoci5jcml0TXUsIDQpICsgIiAoPSB0YW4ozrspwrdjb3MozrIpKSByZXF1aXJlZCBmb3Igc2VsZi1sb2NraW5nLiIKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBhbGVydHMucHVzaCh7CiAgICAgICAgdHlwZTogIm9rIiwKICAgICAgICB0ZXh0OiAiU2VsZi1sb2NraW5nIGNvbmRpdGlvbiBzYXRpc2ZpZWQ6IM+GX2VmZiA9ICIgKyBmbXQoci5waGlFZmZEZWcsIDMpICsgIsKwID4gzrsgPSAiICsgZm10KHIubGFtYmRhRGVnLCAzKSArICLCsC4iCiAgICAgIH0pOwogICAgfQoKICAgIGVsLm91dEhlbGl4LnRleHRDb250ZW50ID0gZm10RGVnKHIubGFtYmRhRGVnKTsKICAgIGVsLm91dEZyaWN0aW9uLnRleHRDb250ZW50ID0gZm10RGVnKHIucGhpRWZmRGVnKTsKICAgIGVsLm91dENyaXRNdS50ZXh0Q29udGVudCA9IGZtdChyLmNyaXRNdSwgNCk7CiAgICBlbC5vdXRNdS50ZXh0Q29udGVudCA9IGZtdChyLm11LCAzKTsKICAgIGVsLm91dE1hcmdpbi50ZXh0Q29udGVudCA9IGZtdERlZyhyLm1hcmdpbkRlZyk7CiAgICBlbC5vdXRMZWFkLnRleHRDb250ZW50ID0gZm9ybWF0TGVuZ3RoKHIubGVhZF9tbSk7CiAgICBlbC5vdXREMi50ZXh0Q29udGVudCA9IGZvcm1hdExlbmd0aChyLnNpLmQyX21tKTsKICAgIGVsLm91dEVmZi50ZXh0Q29udGVudCA9IGZtdChyLmV0YVJhaXNlICogMTAwLCAxKSArICIlIjsKICAgIGVsLm91dFJlYy5pbm5lckhUTUwgPSByLnJlY3MubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiAi4oCiICIgKyB0OyB9KS5qb2luKCI8YnI+Iik7CgogICAgZWwuc3RhdHVzVGl0bGUudGV4dENvbnRlbnQgPSByLnN0YXR1c1RpdGxlOwogICAgZWwuc3RhdHVzTm90ZS50ZXh0Q29udGVudCA9IHIuc3RhdHVzTm90ZTsKICAgIGVsLmJhbm5lci5jbGFzc05hbWUgPSAidHNsYy1iYW5uZXIgdHNsYy1iYW5uZXItIiArIChyLnN0YXR1cyA9PT0gImxvY2siID8gIm9rIiA6IHIuc3RhdHVzID09PSAiYmFja2RyaXZlIiA\/ICJyaXNrIiA6ICJjYXV0aW9uIik7CgogICAgc2V0R2F1Z2Uoci5tYXJnaW5EZWcpOwogICAgc2V0Q29tcGFyZUNoYXJ0KHIubGFtYmRhRGVnLCByLnBoaUVmZkRlZyk7CiAgICBzZXRSaXNrTWV0ZXIoci5yaXNrKTsKICAgIHVwZGF0ZVRocmVhZFN2ZyhyLnNpLmRfbW0sIHIuc2kucF9tbSwgci50aHJlYWRBbmdsZSk7CiAgICB1cGRhdGVIZWxpeFN2ZyhyLmxhbWJkYURlZywgci5zaS5kMl9tbSk7CgogICAgZWwuYWxlcnRzLmlubmVySFRNTCA9ICIiOwogICAgYWxlcnRzLmZvckVhY2goZnVuY3Rpb24gKGEpIHsKICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBkaXYuY2xhc3NOYW1lID0gInRzbGMtYWxlcnQgdHNsYy1hbGVydC0iICsgKGEudHlwZSA9PT0gInJpc2siID8gInJpc2siIDogYS50eXBlID09PSAib2siID8gIm9rIiA6ICJ3YXJuIik7CiAgICAgIGRpdi50ZXh0Q29udGVudCA9IGEudGV4dDsKICAgICAgZWwuYWxlcnRzLmFwcGVuZENoaWxkKGRpdik7CiAgICB9KTsKCiAgICBpZiAoc2Nyb2xsKSB7CiAgICAgIHRyeSB7IGVsLmJhbm5lci5jbG9zZXN0KCIudHNsYy1jYXJkIikuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogInNtb290aCIsIGJsb2NrOiAibmVhcmVzdCIgfSk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzd2l0Y2hVbml0KG5leHQpIHsKICAgIGlmIChuZXh0ID09PSBzdGF0ZS51bml0KSByZXR1cm47CiAgICB2YXIgZCA9IG51bShlbC5kKTsKICAgIHZhciBwID0gbnVtKGVsLnApOwogICAgdmFyIGQyID0gbnVtKGVsLmQyKTsKICAgIHZhciBmZXh0ID0gbnVtKGVsLmZleHQpOwogICAgdmFyIGZyb21GZXh0VW5pdCA9IGVsLmZleHRVbml0LnZhbHVlOwoKICAgIGlmIChuZXh0ID09PSAiaW1wZXJpYWwiKSB7CiAgICAgIGlmIChpc0Zpbml0ZShkKSkgZWwuZC52YWx1ZSA9IHJvdW5kU21hcnQoZCAvIE1NX1BFUl9JTik7CiAgICAgIGlmIChpc0Zpbml0ZShwKSAmJiBwID4gMCkgZWwucC52YWx1ZSA9IHJvdW5kU21hcnQoTU1fUEVSX0lOIC8gcCk7CiAgICAgIGlmIChpc0Zpbml0ZShkMikpIGVsLmQyLnZhbHVlID0gcm91bmRTbWFydChkMiAvIE1NX1BFUl9JTik7CiAgICAgIGVsLmZleHRVbml0LnZhbHVlID0gImxiZiI7CiAgICB9IGVsc2UgewogICAgICBpZiAoaXNGaW5pdGUoZCkpIGVsLmQudmFsdWUgPSByb3VuZFNtYXJ0KGQgKiBNTV9QRVJfSU4pOwogICAgICBpZiAoaXNGaW5pdGUocCkgJiYgcCA+IDApIGVsLnAudmFsdWUgPSByb3VuZFNtYXJ0KE1NX1BFUl9JTiAvIHApOwogICAgICBpZiAoaXNGaW5pdGUoZDIpKSBlbC5kMi52YWx1ZSA9IHJvdW5kU21hcnQoZDIgKiBNTV9QRVJfSU4pOwogICAgICBlbC5mZXh0VW5pdC52YWx1ZSA9ICJrTiI7CiAgICB9CgogICAgaWYgKGlzRmluaXRlKGZleHQpKSB7CiAgICAgIHZhciBuID0gZmV4dDsKICAgICAgaWYgKGZyb21GZXh0VW5pdCA9PT0gImtOIikgbiAqPSAxMDAwOwogICAgICBpZiAoZnJvbUZleHRVbml0ID09PSAibGJmIikgbiAvPSBMQkZfUEVSX047CiAgICAgIGlmIChuZXh0ID09PSAiaW1wZXJpYWwiKSBlbC5mZXh0LnZhbHVlID0gcm91bmRTbWFydChuICogTEJGX1BFUl9OKTsKICAgICAgZWxzZSBlbC5mZXh0LnZhbHVlID0gcm91bmRTbWFydChuIC8gMTAwMCk7CiAgICB9CgogICAgc3RhdGUudW5pdCA9IG5leHQ7CiAgICBzdGF0ZS5zaXplSWQgPSAiIjsKICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsKICAgIHJlbmRlclNpemVDaGlwcygpOwogICAgaWYgKCFlbC5kMk1hbnVhbC5jaGVja2VkKSByZWZyZXNoRDIoKTsKICAgIGVsLnJlc3VsdHMuY2xhc3NMaXN0LmFkZCgidHNsYy1oaWRkZW4iKTsKICB9CgogIGZ1bmN0aW9uIHJlc2V0QWxsKCkgewogICAgc3RhdGUudW5pdCA9ICJtZXRyaWMiOwogICAgc3RhdGUuc2l6ZUlkID0gREVGQVVMVFMuc2l6ZTsKICAgIGVsLnRocmVhZFR5cGUudmFsdWUgPSBERUZBVUxUUy50aHJlYWRUeXBlOwogICAgZWwuZC52YWx1ZSA9IFN0cmluZyhERUZBVUxUUy5kKTsKICAgIGVsLnAudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMucCk7CiAgICBlbC5zdGFydHMudmFsdWUgPSBTdHJpbmcoREVGQVVMVFMuc3RhcnRzKTsKICAgIGVsLmQyTWFudWFsLmNoZWNrZWQgPSBmYWxzZTsKICAgIGVsLmQyLnJlYWRPbmx5ID0gdHJ1ZTsKICAgIGVsLm11LnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLm11KTsKICAgIGVsLmx1Yi52YWx1ZSA9IERFRkFVTFRTLmx1YjsKICAgIGVsLnRocmVhZEFuZ2xlLnZhbHVlID0gU3RyaW5nKERFRkFVTFRTLnRocmVhZEFuZ2xlKTsKICAgIGVsLmZleHQudmFsdWUgPSBERUZBVUxUUy5mZXh0OwogICAgZWwuZmV4dFVuaXQudmFsdWUgPSBERUZBVUxUUy5mZXh0VW5pdDsKICAgIGVsLnZpYnJhdGlvbi52YWx1ZSA9IERFRkFVTFRTLnZpYnJhdGlvbjsKICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsKICAgIHJlbmRlclNpemVDaGlwcygpOwogICAgYXBwbHlMdWJyaWNhdGlvbigpOwogICAgYXBwbHlUaHJlYWRUeXBlKCk7CiAgICByZWZyZXNoRDIoKTsKICAgIGVsLnJlc3VsdHMuY2xhc3NMaXN0LmFkZCgidHNsYy1oaWRkZW4iKTsKICAgIGNsZWFyRXJycygpOwogIH0KCiAgZWwuZDJNYW51YWwuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgewogICAgZWwuZDIucmVhZE9ubHkgPSAhZWwuZDJNYW51YWwuY2hlY2tlZDsKICAgIGlmICghZWwuZDJNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEQyKCk7CiAgfSk7CgogIGVsLnRocmVhZFR5cGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgYXBwbHlUaHJlYWRUeXBlKTsKICBlbC5sdWIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgYXBwbHlMdWJyaWNhdGlvbik7CiAgZWwubXUuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBtYXJrQ3VzdG9tTHViKTsKCiAgWyJkIiwgInAiXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgIGVsW2tleV0uYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7CiAgICAgIHN0YXRlLnNpemVJZCA9ICIiOwogICAgICBwYWludENoaXBzKCk7CiAgICAgIGlmICghZWwuZDJNYW51YWwuY2hlY2tlZCkgcmVmcmVzaEQyKCk7CiAgICB9KTsKICB9KTsKCiAgZWwuc3RhcnRzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKCkgewogICAgaWYgKCFlbC5kMk1hbnVhbC5jaGVja2VkKSByZWZyZXNoRDIoKTsKICB9KTsKCiAgZnVuY3Rpb24gb25Sb290Q2xpY2soZSkgewogICAgdmFyIGJ0biA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCJidXR0b24iKSA6IG51bGw7CiAgICBpZiAoIWJ0biB8fCAhcm9vdC5jb250YWlucyhidG4pKSByZXR1cm47CiAgICBpZiAoYnRuLmlkID09PSAidHNsY0J0bk1ldHJpYyIpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBzd2l0Y2hVbml0KCJtZXRyaWMiKTsgfQogICAgZWxzZSBpZiAoYnRuLmlkID09PSAidHNsY0J0bkltcGVyaWFsIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IHN3aXRjaFVuaXQoImltcGVyaWFsIik7IH0KICAgIGVsc2UgaWYgKGJ0bi5pZCA9PT0gInRzbGNCdG5SZXNldCIpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyByZXNldEFsbCgpOyB9CiAgICBlbHNlIGlmIChidG4uaWQgPT09ICJ0c2xjQnRuQ2FsY3VsYXRlIikgeyBlLnByZXZlbnREZWZhdWx0KCk7IGNhbGN1bGF0ZSh0cnVlKTsgfQogIH0KCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIG9uUm9vdENsaWNrKTsKICBpZiAoZWwuYnRuQ2FsYykgZWwuYnRuQ2FsYy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uICgpIHsgY2FsY3VsYXRlKHRydWUpOyB9KTsKCiAgd2luZG93LnRzbGNTd2l0Y2hVbml0ID0gc3dpdGNoVW5pdDsKICB3aW5kb3cudHNsY1Jlc2V0ID0gcmVzZXRBbGw7CiAgd2luZG93LnRzbGNDYWxjdWxhdGUgPSBmdW5jdGlvbiAoKSB7IGNhbGN1bGF0ZSh0cnVlKTsgfTsKCiAgdXBkYXRlVW5pdExhYmVscygpOwogIHJlbmRlclNpemVDaGlwcygpOwogIGFwcGx5THVicmljYXRpb24oKTsKICBhcHBseVRocmVhZFR5cGUoKTsKICByZWZyZXNoRDIoKTsKfSkoKTsK<\/textarea>\n<script id=\"tslc-boot-script\" type=\"text\/javascript\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\">\n(function(){\nfunction boot(){\nif(window.tslcCalculate){return;}\nvar el=document.getElementById(\"tslc-js-b64\");\nif(!el){return;}\nvar code=el.value;\nif(!code){code=el.textContent;}\nif(!code){return;}\ncode=code.replace(\/\\s\/g,\"\");\nvar js=atob(code);\nvar s=document.createElement(\"script\");\ns.type=\"text\/javascript\";\ns.setAttribute(\"data-no-minify\",\"1\");\ns.setAttribute(\"data-cfasync\",\"false\");\ns.text=js;\nvar p=document.body;\nif(!p){p=document.getElementsByTagName(\"head\")[0];}\nif(p){p.appendChild(s);}\n}\nwindow.tslcBoot=boot;\nif(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",boot);}\nelse{boot();}\n})();\n<\/script>\n\n<\/div>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Thread Self-Locking Condition Calculator is a practical engineering tool designed to evaluate whether a threaded connection can maintain self-locking performance under different operating conditions&#8230;.<\/p>","protected":false},"author":2,"featured_media":24700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8613,8615,8616,8614],"class_list":["post-24699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-fastener-analysis","tag-helix-angle","tag-thread-design","tag-thread-locking","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Thread-Self-Locking-Condition-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24699"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24699\/revisions"}],"predecessor-version":[{"id":24702,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24699\/revisions\/24702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24700"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24699"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}