{"id":24670,"date":"2026-08-18T01:47:18","date_gmt":"2026-08-18T01:47:18","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24670"},"modified":"2026-08-18T01:57:36","modified_gmt":"2026-08-18T01:57:36","slug":"bearing-failure-risk-assessment-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/es\/bearing-failure-risk-assessment-calculator\/","title":{"rendered":"Bearing Failure Risk Assessment Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bearing Failure Risk Assessment Calculator<\/strong> is an advanced engineering tool designed to evaluate the potential failure risks of bearings by analyzing key operating conditions such as load, speed, temperature, lubrication status, vibration level, and service time. It helps engineers and maintenance teams identify early warning signs of bearing damage, predict possible failure causes, and develop effective preventive maintenance strategies. The Bearing Failure Risk Assessment Calculator improves equipment reliability, reduces unexpected downtime, and supports better decision-making for industrial machinery maintenance.<\/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=\"Bearing Failure Risk Assessment Calculator and Bearing Failure Prediction Tool. Screen load, speed, temperature, lubrication, vibration, alignment and contamination for industrial bearing health monitoring and reliability analysis.\" \/>\n  <title>Bearing Failure Risk Assessment Calculator | Bearing Failure Prediction Tool<\/title>\n  <style id=\"bfra-calc-styles\">\n    \/*\n     * WordPress-safe: every rule is scoped under #bfra-root.\n     * This stylesheet must not restyle theme header, footer, or content\n     * outside the calculator. No body\/html\/universal selectors.\n     *\/\n    #bfra-root {\n      all: revert;\n      --bfra-bg: transparent;\n      --bfra-surface: #ffffff;\n      --bfra-surface-2: #f1f5f9;\n      --bfra-ink: #0f172a;\n      --bfra-muted: #64748b;\n      --bfra-line: #e2e8f0;\n      --bfra-steel: #1e293b;\n      --bfra-accent: #2563eb;\n      --bfra-accent-hover: #1d4ed8;\n      --bfra-accent-soft: rgba(37, 99, 235, 0.12);\n      --bfra-ok: #16a34a;\n      --bfra-ok-bg: #dcfce7;\n      --bfra-ok-ink: #166534;\n      --bfra-med: #d97706;\n      --bfra-med-bg: #fef3c7;\n      --bfra-med-ink: #92400e;\n      --bfra-high: #ea580c;\n      --bfra-high-bg: #ffedd5;\n      --bfra-high-ink: #9a3412;\n      --bfra-crit: #dc2626;\n      --bfra-crit-bg: #fee2e2;\n      --bfra-crit-ink: #991b1b;\n      --bfra-radius: 12px;\n      --bfra-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 8px 24px rgba(15, 23, 42, 0.06);\n      --bfra-mono: ui-monospace, \"Cascadia Mono\", \"Segoe UI Mono\", Consolas, monospace;\n      --bfra-sans: \"Segoe UI\", system-ui, -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n      --bfra-serif-math: \"Cambria Math\", Cambria, \"Times New Roman\", serif;\n\n      box-sizing: border-box;\n      display: block;\n      isolation: isolate;\n      contain: layout style;\n      font-family: var(--bfra-sans);\n      font-size: 15px;\n      font-weight: 400;\n      line-height: 1.5;\n      color: var(--bfra-ink);\n      background: var(--bfra-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      float: none;\n      position: relative;\n      z-index: auto;\n    }\n\n    #bfra-root *,\n    #bfra-root *::before,\n    #bfra-root *::after { box-sizing: border-box; }\n\n    #bfra-root h1, #bfra-root h2, #bfra-root h3, #bfra-root h4,\n    #bfra-root p, #bfra-root ul, #bfra-root ol, #bfra-root li,\n    #bfra-root figure, #bfra-root blockquote, #bfra-root section,\n    #bfra-root header, #bfra-root footer, #bfra-root div, #bfra-root span,\n    #bfra-root strong, #bfra-root em, #bfra-root i, #bfra-root b {\n      margin: 0;\n      padding: 0;\n      border: none;\n      background: none;\n      box-shadow: none;\n      font-family: inherit;\n      font-size: inherit;\n      font-weight: inherit;\n      font-style: inherit;\n      line-height: inherit;\n      color: inherit;\n      letter-spacing: inherit;\n      text-transform: none;\n      text-decoration: none;\n      float: none;\n    }\n\n    #bfra-root button, #bfra-root input, #bfra-root select, #bfra-root textarea, #bfra-root label {\n      font: inherit;\n      color: inherit;\n      margin: 0;\n      max-width: none;\n      min-width: 0;\n      float: none;\n    }\n\n    #bfra-root button {\n      cursor: pointer;\n      background: transparent;\n      border: none;\n      padding: 0;\n      box-shadow: none;\n      text-decoration: none;\n      appearance: none;\n      -webkit-appearance: none;\n    }\n\n    #bfra-root img, #bfra-root svg, #bfra-root video, #bfra-root canvas {\n      display: block;\n      max-width: 100%;\n      height: auto;\n    }\n    #bfra-root a { color: inherit; text-decoration: none; }\n    #bfra-root table { border-collapse: collapse; border-spacing: 0; width: auto; }\n    #bfra-root sub, #bfra-root sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n    #bfra-root sub { bottom: -0.2em; }\n    #bfra-root sup { top: -0.45em; }\n    #bfra-root .bfra-sym { font-family: var(--bfra-serif-math); font-style: italic; }\n    #bfra-root .bfra-mono { font-family: var(--bfra-mono); }\n\n    #bfra-root .bfra-stack {\n      display: flex;\n      flex-direction: column;\n      gap: 1.1rem;\n    }\n\n    #bfra-root .bfra-card {\n      background: var(--bfra-surface);\n      border: 1px solid var(--bfra-line);\n      border-radius: var(--bfra-radius);\n      box-shadow: var(--bfra-shadow);\n      overflow: hidden;\n    }\n\n    #bfra-root .bfra-card-head {\n      display: flex;\n      align-items: center;\n      gap: 0.55rem;\n      padding: 0.85rem 1.15rem;\n      background: var(--bfra-surface-2);\n      border-bottom: 1px solid var(--bfra-line);\n      font-size: 0.72rem;\n      font-weight: 700;\n      letter-spacing: 0.07em;\n      text-transform: uppercase;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-card-head svg { flex-shrink: 0; color: var(--bfra-accent); }\n    #bfra-root .bfra-card-body { padding: 1.15rem 1.15rem 1.25rem; }\n\n    #bfra-root .bfra-presets {\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 0.5rem;\n      margin-bottom: 1.1rem;\n    }\n\n    #bfra-root .bfra-preset {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      text-align: left !important;\n      padding: 0.65rem 0.75rem !important;\n      border: 1px solid var(--bfra-line) !important;\n      border-radius: 9px !important;\n      background: #fff !important;\n      color: var(--bfra-ink) !important;\n      box-shadow: none !important;\n      cursor: pointer !important;\n      transition: border-color 0.15s, background 0.15s;\n    }\n\n    #bfra-root .bfra-preset strong {\n      display: block;\n      font-size: 0.8rem;\n      font-weight: 700;\n    }\n\n    #bfra-root .bfra-preset span {\n      display: block;\n      margin-top: 0.12rem;\n      font-size: 0.68rem;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-preset:hover,\n    #bfra-root .bfra-preset.bfra-is-active {\n      border-color: var(--bfra-accent) !important;\n      background: var(--bfra-accent-soft) !important;\n    }\n\n    #bfra-root .bfra-group { margin-bottom: 1.15rem; }\n    #bfra-root .bfra-group:last-child { margin-bottom: 0; }\n\n    #bfra-root .bfra-group-title {\n      font-size: 0.68rem;\n      font-weight: 700;\n      letter-spacing: 0.07em;\n      text-transform: uppercase;\n      color: var(--bfra-accent);\n      margin-bottom: 0.7rem;\n      padding-bottom: 0.4rem;\n      border-bottom: 1px dashed var(--bfra-line);\n    }\n\n    #bfra-root .bfra-fields {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.75rem 0.85rem;\n    }\n\n    #bfra-root .bfra-field { display: flex; flex-direction: column; gap: 0.32rem; min-width: 0; }\n    #bfra-root .bfra-field.bfra-span-2 { grid-column: 1 \/ -1; }\n\n    #bfra-root .bfra-label {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      gap: 0.5rem;\n      font-size: 0.8rem;\n      font-weight: 500;\n    }\n\n    #bfra-root .bfra-unit {\n      color: var(--bfra-muted);\n      font-size: 0.72rem;\n      font-weight: 400;\n      font-family: var(--bfra-mono);\n      white-space: nowrap;\n    }\n\n    #bfra-root .bfra-input,\n    #bfra-root .bfra-select {\n      display: block !important;\n      width: 100% !important;\n      max-width: 100% !important;\n      height: auto !important;\n      min-height: 0 !important;\n      background: var(--bfra-surface-2) !important;\n      border: 1px solid var(--bfra-line) !important;\n      border-radius: 7px !important;\n      padding: 0.5rem 0.7rem !important;\n      font-size: 0.95rem !important;\n      font-family: inherit !important;\n      color: var(--bfra-ink) !important;\n      line-height: 1.4 !important;\n      outline: none !important;\n      box-shadow: none !important;\n      transition: border-color 0.15s, box-shadow 0.15s;\n      -moz-appearance: textfield;\n      appearance: textfield;\n    }\n\n    #bfra-root .bfra-select { appearance: auto; cursor: pointer; }\n\n    #bfra-root .bfra-input::-webkit-outer-spin-button,\n    #bfra-root .bfra-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n\n    #bfra-root .bfra-input:focus,\n    #bfra-root .bfra-select:focus {\n      border-color: var(--bfra-accent) !important;\n      box-shadow: 0 0 0 3px var(--bfra-accent-soft) !important;\n      background: #fff !important;\n    }\n\n    #bfra-root .bfra-input.bfra-is-invalid {\n      border-color: var(--bfra-crit) !important;\n      box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.12) !important;\n    }\n\n    #bfra-root .bfra-input-row {\n      display: flex;\n      gap: 0.45rem;\n      align-items: stretch;\n    }\n\n    #bfra-root .bfra-input-row .bfra-input { flex: 1; }\n\n    #bfra-root .bfra-unit-select {\n      flex: 0 0 72px !important;\n      width: 72px !important;\n      padding: 0.5rem 0.4rem !important;\n    }\n\n    #bfra-root .bfra-hint {\n      font-size: 0.72rem;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-slider-head {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    #bfra-root .bfra-slider-val {\n      font-family: var(--bfra-mono);\n      font-size: 0.78rem;\n      font-weight: 650;\n      color: var(--bfra-accent);\n      background: var(--bfra-accent-soft);\n      padding: 0.12rem 0.48rem;\n      border-radius: 4px;\n      white-space: nowrap;\n    }\n\n    #bfra-root input[type=\"range\"].bfra-range {\n      -webkit-appearance: none;\n      appearance: none;\n      width: 100%;\n      height: 6px;\n      border-radius: 3px;\n      background: var(--bfra-line);\n      outline: none;\n      margin: 0.35rem 0 0;\n      padding: 0;\n      border: none;\n      cursor: pointer;\n    }\n\n    #bfra-root input[type=\"range\"].bfra-range::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      width: 18px;\n      height: 18px;\n      border-radius: 50%;\n      background: var(--bfra-accent);\n      border: 2px solid #fff;\n      box-shadow: 0 1px 4px rgba(15, 23, 42, 0.2);\n      cursor: pointer;\n    }\n\n    #bfra-root input[type=\"range\"].bfra-range::-moz-range-thumb {\n      width: 18px;\n      height: 18px;\n      border-radius: 50%;\n      background: var(--bfra-accent);\n      border: 2px solid #fff;\n      box-shadow: 0 1px 4px rgba(15, 23, 42, 0.2);\n      cursor: pointer;\n    }\n\n    #bfra-root .bfra-pc {\n      margin-top: 0.55rem;\n      padding: 0.5rem 0.7rem;\n      background: var(--bfra-accent-soft);\n      border-radius: 7px;\n      font-size: 0.8rem;\n      color: #1d4ed8;\n    }\n\n    #bfra-root .bfra-actions {\n      display: flex;\n      justify-content: center;\n      flex-wrap: wrap;\n      gap: 0.65rem;\n      margin-top: 0.25rem;\n      padding-top: 1.1rem;\n      border-top: 1px solid var(--bfra-line);\n    }\n\n    #bfra-root #bfraBtnCalculate.bfra-btn-primary {\n      appearance: none !important;\n      -webkit-appearance: none !important;\n      display: inline-flex !important;\n      align-items: center !important;\n      justify-content: center !important;\n      min-width: 220px !important;\n      width: auto !important;\n      max-width: 100% !important;\n      margin: 0 !important;\n      padding: 0.8rem 2.5rem !important;\n      font-size: 1.05rem !important;\n      font-weight: 700 !important;\n      font-family: inherit !important;\n      line-height: 1.25 !important;\n      letter-spacing: 0.02em !important;\n      border-radius: 8px !important;\n      cursor: pointer !important;\n      text-decoration: none !important;\n      text-transform: none !important;\n      color: #fff !important;\n      background: var(--bfra-accent) !important;\n      border: none !important;\n      box-shadow: 0 1px 2px rgba(37, 99, 235, 0.25) !important;\n      transition: background 0.15s, transform 0.1s;\n    }\n\n    #bfra-root #bfraBtnCalculate.bfra-btn-primary:hover { background: var(--bfra-accent-hover) !important; color: #fff !important; }\n    #bfra-root #bfraBtnCalculate.bfra-btn-primary:active { transform: scale(0.98); }\n\n    #bfra-root #bfra-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    #bfra-root .bfra-hidden { display: none !important; }\n    #bfra-root #bfraResults.bfra-visible { display: block !important; }\n\n    #bfra-root .bfra-error {\n      padding: 0.85rem 1rem;\n      background: var(--bfra-crit-bg);\n      border: 1px solid #fca5a5;\n      border-radius: 10px;\n      color: var(--bfra-crit-ink);\n      font-size: 0.85rem;\n      margin-bottom: 1rem;\n    }\n\n    #bfra-root .bfra-hero {\n      display: grid;\n      grid-template-columns: 0.9fr 1.1fr;\n      gap: 0.9rem;\n      margin-bottom: 1.1rem;\n    }\n\n    #bfra-root .bfra-gauge-card {\n      padding: 0.85rem 0.7rem 0.55rem;\n      border: 1px solid var(--bfra-line);\n      border-radius: 10px;\n      background: linear-gradient(180deg, #f8fafc, #fff);\n      text-align: center;\n    }\n\n    #bfra-root .bfra-kicker {\n      font-size: 0.65rem;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-gauge-svg { width: 100%; max-width: 280px; margin: 0 auto; overflow: visible; }\n    #bfra-root .bfra-gauge-svg .bfra-arc { transition: stroke-dashoffset 0.55s ease; }\n\n    #bfra-root .bfra-score-wrap { margin-top: -0.35rem; }\n    #bfra-root .bfra-score {\n      font-family: var(--bfra-mono);\n      font-size: 2.15rem;\n      font-weight: 750;\n      letter-spacing: -0.04em;\n      line-height: 1;\n      font-variant-numeric: tabular-nums;\n    }\n\n    #bfra-root .bfra-score-unit {\n      font-size: 0.78rem;\n      color: var(--bfra-muted);\n      margin-top: 0.2rem;\n    }\n\n    #bfra-root .bfra-risk-banner {\n      padding: 1rem 1.05rem 1.1rem;\n      border-radius: 10px;\n      border: 2px solid var(--bfra-line);\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      gap: 0.4rem;\n      min-width: 0;\n    }\n\n    #bfra-root .bfra-risk-banner.bfra-low { background: var(--bfra-ok-bg); border-color: #86efac; }\n    #bfra-root .bfra-risk-banner.bfra-med { background: var(--bfra-med-bg); border-color: #fcd34d; }\n    #bfra-root .bfra-risk-banner.bfra-high { background: var(--bfra-high-bg); border-color: #fdba74; }\n    #bfra-root .bfra-risk-banner.bfra-crit { background: var(--bfra-crit-bg); border-color: #fca5a5; }\n\n    #bfra-root .bfra-risk-title {\n      font-size: 1.28rem;\n      font-weight: 750;\n      letter-spacing: -0.02em;\n      line-height: 1.2;\n    }\n\n    #bfra-root .bfra-risk-banner.bfra-low .bfra-risk-title { color: var(--bfra-ok-ink); }\n    #bfra-root .bfra-risk-banner.bfra-med .bfra-risk-title { color: var(--bfra-med-ink); }\n    #bfra-root .bfra-risk-banner.bfra-high .bfra-risk-title { color: var(--bfra-high-ink); }\n    #bfra-root .bfra-risk-banner.bfra-crit .bfra-risk-title { color: var(--bfra-crit-ink); }\n\n    #bfra-root .bfra-risk-note { font-size: 0.82rem; color: var(--bfra-steel); opacity: 0.9; }\n\n    #bfra-root .bfra-metrics {\n      display: grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 0.55rem;\n      margin-bottom: 1.1rem;\n    }\n\n    #bfra-root .bfra-metric {\n      padding: 0.65rem 0.7rem;\n      background: var(--bfra-surface-2);\n      border: 1px solid var(--bfra-line);\n      border-radius: 9px;\n      min-width: 0;\n    }\n\n    #bfra-root .bfra-metric .bfra-lbl {\n      font-size: 0.62rem;\n      font-weight: 700;\n      letter-spacing: 0.05em;\n      text-transform: uppercase;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-metric .bfra-val {\n      font-family: var(--bfra-mono);\n      font-weight: 700;\n      font-size: 1.05rem;\n      margin-top: 0.12rem;\n    }\n\n    #bfra-root .bfra-metric .bfra-sub { font-size: 0.7rem; color: var(--bfra-muted); margin-top: 0.08rem; }\n\n    #bfra-root .bfra-bars { display: flex; flex-direction: column; gap: 0.55rem; }\n\n    #bfra-root .bfra-bar-row { display: grid; grid-template-columns: 1.15fr 2fr auto; gap: 0.55rem; align-items: center; }\n    #bfra-root .bfra-bar-name { font-size: 0.78rem; font-weight: 600; min-width: 0; }\n    #bfra-root .bfra-bar-track {\n      height: 8px;\n      background: var(--bfra-line);\n      border-radius: 99px;\n      overflow: hidden;\n    }\n    #bfra-root .bfra-bar-fill {\n      height: 100%;\n      width: 0;\n      border-radius: 99px;\n      transition: width 0.45s ease, background 0.3s;\n    }\n    #bfra-root .bfra-bar-fill.bfra-ok { background: var(--bfra-ok); }\n    #bfra-root .bfra-bar-fill.bfra-med { background: var(--bfra-med); }\n    #bfra-root .bfra-bar-fill.bfra-high { background: var(--bfra-high); }\n    #bfra-root .bfra-bar-fill.bfra-crit { background: var(--bfra-crit); }\n\n    #bfra-root .bfra-bar-score {\n      font-family: var(--bfra-mono);\n      font-size: 0.75rem;\n      font-weight: 650;\n      color: var(--bfra-muted);\n      min-width: 2.4rem;\n      text-align: right;\n    }\n\n    #bfra-root .bfra-causes {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.4rem;\n    }\n\n    #bfra-root .bfra-chip {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.35rem;\n      padding: 0.32rem 0.62rem;\n      border-radius: 999px;\n      border: 1px solid #fecaca;\n      background: #fef2f2;\n      color: var(--bfra-crit-ink);\n      font-size: 0.75rem;\n      font-weight: 650;\n    }\n\n    #bfra-root .bfra-chip.bfra-watch {\n      border-color: #fde68a;\n      background: #fffbeb;\n      color: var(--bfra-med-ink);\n    }\n\n    #bfra-root .bfra-chip.bfra-ok {\n      border-color: #86efac;\n      background: var(--bfra-ok-bg);\n      color: var(--bfra-ok-ink);\n    }\n\n    #bfra-root .bfra-recs {\n      list-style: none;\n      display: flex;\n      flex-direction: column;\n      gap: 0.5rem;\n    }\n\n    #bfra-root .bfra-recs li {\n      padding: 0.65rem 0.75rem;\n      border-radius: 8px;\n      border: 1px solid #fde68a;\n      background: #fffbeb;\n      color: #92400e;\n      font-size: 0.82rem;\n    }\n\n    #bfra-root .bfra-recs li strong { font-weight: 700; }\n    #bfra-root .bfra-recs li.bfra-ok {\n      border-color: #86efac;\n      background: var(--bfra-ok-bg);\n      color: var(--bfra-ok-ink);\n    }\n\n    #bfra-root .bfra-notes {\n      font-size: 0.75rem;\n      color: var(--bfra-muted);\n    }\n\n    #bfra-root .bfra-notes ul {\n      margin: 0.4rem 0 0 1.1rem;\n      padding: 0;\n    }\n\n    #bfra-root .bfra-notes li { margin: 0.22rem 0; }\n\n    @media (max-width: 840px) {\n      #bfra-root .bfra-hero { grid-template-columns: 1fr; }\n      #bfra-root .bfra-metrics { grid-template-columns: 1fr 1fr; }\n      #bfra-root .bfra-presets { grid-template-columns: 1fr; }\n    }\n\n    @media (max-width: 560px) {\n      #bfra-root .bfra-fields { grid-template-columns: 1fr; }\n      #bfra-root .bfra-field.bfra-span-2 { grid-column: auto; }\n      #bfra-root .bfra-metrics { grid-template-columns: 1fr; }\n      #bfra-root .bfra-bar-row { grid-template-columns: 1fr auto; }\n      #bfra-root .bfra-bar-track { grid-column: 1 \/ -1; }\n      #bfra-root #bfraBtnCalculate.bfra-btn-primary { min-width: 0 !important; width: 100% !important; }\n    }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"bfra-root\">\n    <div class=\"bfra-stack\">\n      <section class=\"bfra-card\">\n        <div class=\"bfra-card-head\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M12 2v3M12 19v3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M2 12h3M19 12h3M4.9 19.1L7 17M17 7l2.1-2.1\"\/><\/svg>\n          Operating Inputs\n        <\/div>\n        <div class=\"bfra-card-body\">\n          <div class=\"bfra-presets\" id=\"bfraPresets\"><\/div>\n\n          <div class=\"bfra-group\">\n            <div class=\"bfra-group-title\">Bearing &amp; load<\/div>\n            <div class=\"bfra-fields\">\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\"><label for=\"bfraType\">Bearing type<\/label><\/div>\n                <select class=\"bfra-select\" id=\"bfraType\">\n                  <option value=\"ball\" selected>Ball Bearing<\/option>\n                  <option value=\"roller\">Roller Bearing<\/option>\n                  <option value=\"cylindrical\">Cylindrical Roller Bearing<\/option>\n                  <option value=\"tapered\">Tapered Roller Bearing<\/option>\n                  <option value=\"spherical\">Spherical Bearing<\/option>\n                  <option value=\"other\">Other<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\"><label for=\"bfraLoadKind\">Load direction<\/label><\/div>\n                <select class=\"bfra-select\" id=\"bfraLoadKind\">\n                  <option value=\"radial\" selected>Radial<\/option>\n                  <option value=\"axial\">Axial<\/option>\n                  <option value=\"combined\">Combined<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\">\n                  <label for=\"bfraLoad\">Operating load <span class=\"bfra-sym\">P<\/span><\/label>\n                <\/div>\n                <div class=\"bfra-input-row\">\n                  <input class=\"bfra-input\" id=\"bfraLoad\" type=\"number\" min=\"0\" step=\"0.1\" value=\"8\" \/>\n                  <select class=\"bfra-select bfra-unit-select\" id=\"bfraLoadUnit\">\n                    <option value=\"kN\" selected>kN<\/option>\n                    <option value=\"N\">N<\/option>\n                  <\/select>\n                <\/div>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\">\n                  <label for=\"bfraC\">Dynamic load rating <span class=\"bfra-sym\">C<\/span><\/label>\n                <\/div>\n                <div class=\"bfra-input-row\">\n                  <input class=\"bfra-input\" id=\"bfraC\" type=\"number\" min=\"0\" step=\"0.1\" value=\"45\" \/>\n                  <select class=\"bfra-select bfra-unit-select\" id=\"bfraCUnit\">\n                    <option value=\"kN\" selected>kN<\/option>\n                    <option value=\"N\">N<\/option>\n                  <\/select>\n                <\/div>\n                <p class=\"bfra-hint\">Catalog basic dynamic load rating from ISO 281. Used for the load-stress factor <span class=\"bfra-sym\">P<\/span>\/<span class=\"bfra-sym\">C<\/span>.<\/p>\n              <\/div>\n              <div class=\"bfra-field bfra-span-2\">\n                <div class=\"bfra-pc\" id=\"bfraPcReadout\">Load ratio P \/ C = 0.178 \u00b7 moderate duty<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfra-group\">\n            <div class=\"bfra-group-title\">Speed, temperature &amp; vibration<\/div>\n            <div class=\"bfra-fields\">\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\">\n                  <label for=\"bfraRpm\">Bearing speed <span class=\"bfra-sym\">n<\/span><\/label>\n                  <span class=\"bfra-unit\">RPM<\/span>\n                <\/div>\n                <input class=\"bfra-input\" id=\"bfraRpm\" type=\"number\" min=\"1\" step=\"1\" value=\"1500\" \/>\n                <input class=\"bfra-range\" id=\"bfraRpmRange\" type=\"range\" min=\"50\" max=\"12000\" step=\"50\" value=\"1500\" \/>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-slider-head\">\n                  <div class=\"bfra-label\" style=\"margin:0;\">\n                    <label for=\"bfraTemp\">Operating temperature<\/label>\n                    <span class=\"bfra-unit\">\u00b0C<\/span>\n                  <\/div>\n                  <span class=\"bfra-slider-val\" id=\"bfraTempVal\">70 \u00b0C<\/span>\n                <\/div>\n                <input class=\"bfra-input\" id=\"bfraTemp\" type=\"number\" min=\"-40\" max=\"250\" step=\"1\" value=\"70\" \/>\n                <input class=\"bfra-range\" id=\"bfraTempRange\" type=\"range\" min=\"-20\" max=\"180\" step=\"1\" value=\"70\" \/>\n              <\/div>\n              <div class=\"bfra-field bfra-span-2\">\n                <div class=\"bfra-slider-head\">\n                  <div class=\"bfra-label\" style=\"margin:0;\">\n                    <label for=\"bfraVib\">Vibration level<\/label>\n                    <span class=\"bfra-unit\">mm\/s RMS<\/span>\n                  <\/div>\n                  <span class=\"bfra-slider-val\" id=\"bfraVibVal\">2.8 mm\/s<\/span>\n                <\/div>\n                <input class=\"bfra-input\" id=\"bfraVib\" type=\"number\" min=\"0\" max=\"50\" step=\"0.1\" value=\"2.8\" \/>\n                <input class=\"bfra-range\" id=\"bfraVibRange\" type=\"range\" min=\"0\" max=\"20\" step=\"0.1\" value=\"2.8\" \/>\n                <p class=\"bfra-hint\">Velocity RMS, typically ISO 20816 \/ ISO 10816 machine zones. Rising vibration often precedes spalling, looseness or misalignment.<\/p>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfra-group\">\n            <div class=\"bfra-group-title\">Condition factors<\/div>\n            <div class=\"bfra-fields\">\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\"><label for=\"bfraLub\">Lubrication condition<\/label><\/div>\n                <select class=\"bfra-select\" id=\"bfraLub\">\n                  <option value=\"excellent\">Excellent<\/option>\n                  <option value=\"good\">Good<\/option>\n                  <option value=\"normal\" selected>Normal<\/option>\n                  <option value=\"poor\">Poor<\/option>\n                  <option value=\"none\">No Lubrication<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\"><label for=\"bfraInstall\">Installation condition<\/label><\/div>\n                <select class=\"bfra-select\" id=\"bfraInstall\">\n                  <option value=\"correct\" selected>Correct Alignment<\/option>\n                  <option value=\"minor\">Minor Misalignment<\/option>\n                  <option value=\"severe\">Severe Misalignment<\/option>\n                  <option value=\"unknown\">Unknown<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-label\"><label for=\"bfraContam\">Contamination level<\/label><\/div>\n                <select class=\"bfra-select\" id=\"bfraContam\">\n                  <option value=\"clean\">Clean<\/option>\n                  <option value=\"slight\" selected>Slight Contamination<\/option>\n                  <option value=\"moderate\">Moderate Contamination<\/option>\n                  <option value=\"heavy\">Heavy Contamination<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"bfra-field\">\n                <div class=\"bfra-slider-head\">\n                  <div class=\"bfra-label\" style=\"margin:0;\">\n                    <label for=\"bfraHours\">Operating hours<\/label>\n                    <span class=\"bfra-unit\">h<\/span>\n                  <\/div>\n                  <span class=\"bfra-slider-val\" id=\"bfraHoursVal\">8 000 h<\/span>\n                <\/div>\n                <input class=\"bfra-input\" id=\"bfraHours\" type=\"number\" min=\"0\" max=\"200000\" step=\"100\" value=\"8000\" \/>\n                <input class=\"bfra-range\" id=\"bfraHoursRange\" type=\"range\" min=\"0\" max=\"60000\" step=\"100\" value=\"8000\" \/>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"bfra-actions\">\n            <button type=\"button\" class=\"bfra-btn-primary\" id=\"bfraBtnCalculate\" onclick=\"(function(){if(window.bfraCalculate){window.bfraCalculate();return false;}var t=document.getElementById('bfra-js-b64');if(!t){return false;}var c=t.value;if(!c){c=t.textContent;}if(!c){return false;}c=c.replace(\/\\s\/g,'');var s=document.createElement('script');s.type='text\/javascript';s.text=atob(c);(document.body||document.getElementsByTagName('head')[0]).appendChild(s);setTimeout(function(){if(window.bfraCalculate){window.bfraCalculate();}},150);return false;})()\">Calculate<\/button>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <section class=\"bfra-card bfra-hidden\" id=\"bfraResults\">\n        <div class=\"bfra-card-head\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 9v4M12 17h.01\"\/><path d=\"M10.3 3.9L1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z\"\/><\/svg>\n          Risk Assessment Results\n        <\/div>\n        <div class=\"bfra-card-body\">\n          <div class=\"bfra-error bfra-hidden\" id=\"bfraError\"><\/div>\n          <div id=\"bfraResultBlock\">\n            <div class=\"bfra-hero\">\n              <div class=\"bfra-gauge-card\">\n                <div class=\"bfra-kicker\">Bearing failure risk score<\/div>\n                <svg class=\"bfra-gauge-svg\" viewBox=\"0 0 240 140\" aria-hidden=\"true\">\n                  <defs>\n                    <linearGradient id=\"bfraGaugeGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                      <stop offset=\"0%\" stop-color=\"#16a34a\" \/>\n                      <stop offset=\"32%\" stop-color=\"#eab308\" \/>\n                      <stop offset=\"62%\" stop-color=\"#ea580c\" \/>\n                      <stop offset=\"100%\" stop-color=\"#dc2626\" \/>\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=\"bfraGaugeArc\" class=\"bfra-arc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#bfraGaugeGrad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\" \/>\n                  <g id=\"bfraNeedle\" class=\"bfra-needle\" 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 class=\"bfra-score-wrap\">\n                  <div class=\"bfra-score\" id=\"bfraScore\">\u2014<\/div>\n                  <div class=\"bfra-score-unit\">points \/ 100<\/div>\n                <\/div>\n              <\/div>\n              <div class=\"bfra-risk-banner bfra-med\" id=\"bfraRiskBanner\">\n                <div class=\"bfra-kicker\">Risk level<\/div>\n                <div class=\"bfra-risk-title\" id=\"bfraRiskTitle\">\u2014<\/div>\n                <p class=\"bfra-risk-note\" id=\"bfraRiskNote\">Enter operating conditions and press Calculate.<\/p>\n              <\/div>\n            <\/div>\n\n            <div class=\"bfra-metrics\">\n              <div class=\"bfra-metric\">\n                <div class=\"bfra-lbl\">Load ratio P \/ C<\/div>\n                <div class=\"bfra-val\" id=\"bfraOutPc\">\u2014<\/div>\n                <div class=\"bfra-sub\" id=\"bfraOutPcNote\">ISO 281 duty indicator<\/div>\n              <\/div>\n              <div class=\"bfra-metric\">\n                <div class=\"bfra-lbl\">Dominant cause<\/div>\n                <div class=\"bfra-val\" id=\"bfraOutTop\">\u2014<\/div>\n                <div class=\"bfra-sub\">Highest weighted factor<\/div>\n              <\/div>\n              <div class=\"bfra-metric\">\n                <div class=\"bfra-lbl\">Factors in alert<\/div>\n                <div class=\"bfra-val\" id=\"bfraOutAlert\">\u2014<\/div>\n                <div class=\"bfra-sub\">Score \u2265 50 on a 0\u2013100 scale<\/div>\n              <\/div>\n            <\/div>\n\n            <div class=\"bfra-group\">\n              <div class=\"bfra-group-title\">Weighted risk factors<\/div>\n              <div class=\"bfra-bars\" id=\"bfraBars\"><\/div>\n            <\/div>\n\n            <div class=\"bfra-group\">\n              <div class=\"bfra-group-title\">Main failure causes<\/div>\n              <div class=\"bfra-causes\" id=\"bfraCauses\"><\/div>\n            <\/div>\n\n            <div class=\"bfra-group\">\n              <div class=\"bfra-group-title\">Maintenance recommendations<\/div>\n              <ul class=\"bfra-recs\" id=\"bfraRecs\"><\/ul>\n            <\/div>\n\n            <div class=\"bfra-group\">\n              <div class=\"bfra-group-title\">Method notes<\/div>\n              <div class=\"bfra-notes\">\n                <p>\n                  This Bearing Failure Risk Assessment Calculator is a screening aid for industrial bearing reliability analysis,\n                  not a substitute for ISO 15243 failure investigation, OEM catalog checks, or measured condition monitoring.\n                <\/p>\n                <ul>\n                  <li>Load stress uses <span class=\"bfra-sym\">P<\/span>\/<span class=\"bfra-sym\">C<\/span> with type and load-direction modifiers (ISO 281 duty, not a full life calculation).<\/li>\n                  <li>Temperature risk follows typical grease thermal limits (~70 \u00b0C continuous, rapid film breakdown above ~110 \u00b0C).<\/li>\n                  <li>Vibration bands follow ISO 20816 \/ ISO 10816 velocity zones for general machinery.<\/li>\n                  <li>Lubrication, contamination and mounting dominate field failures; they carry the largest weights in this Bearing Failure Prediction Tool.<\/li>\n                  <li>Operating hours contribute an aging-wear term. Compare against the application L<sub>10<\/sub> before scheduling replacement.<\/li>\n                <\/ul>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n    <\/div>\n  <\/div>\n\n<!-- WordPress Custom HTML: paste from the style tag through this boot script. If Calculate still fails, exclude bfra-js-b64 and bfra-boot-script in WP Rocket \/ LiteSpeed. -->\n<textarea id=\"bfra-js-b64\" aria-hidden=\"true\" style=\"display:none!important;width:0;height:0;border:0;padding:0;position:absolute;left:-9999px\">KGZ1bmN0aW9uICgpIHsKICAgICAgInVzZSBzdHJpY3QiOwoKICAgICAgZnVuY3Rpb24gc3RhcnRCZnJhKCkgewogICAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZnJhLXJvb3QiKTsKICAgICAgaWYgKCFyb290KSByZXR1cm47CiAgICAgIGlmIChyb290LmdldEF0dHJpYnV0ZSgiZGF0YS1iZnJhLXJlYWR5IikgPT09ICIxIikgcmV0dXJuOwogICAgICByb290LnNldEF0dHJpYnV0ZSgiZGF0YS1iZnJhLXJlYWR5IiwgIjEiKTsKCiAgICAgIGZ1bmN0aW9uIGJ5SWQoaWQpIHsKICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCIjIiArIGlkKTsKICAgICAgfQoKICAgICAgdmFyIEFSQ19MRU4gPSAyODIuNzQzOyAvLyBwaSAqIDkwCgogICAgICB2YXIgVFlQRSA9IHsKICAgICAgICBiYWxsOiAgICAgICAgeyBsb2FkVG9sOiAwLjg4LCBzcGVlZEFsZXJ0OiA2MDAwLCBtaXNhbGlnbjogMC45NSwgYXhpYWw6IDEuMTgsIGxhYmVsOiAiQmFsbCBCZWFyaW5nIiB9LAogICAgICAgIHJvbGxlcjogICAgICB7IGxvYWRUb2w6IDEuMTIsIHNwZWVkQWxlcnQ6IDM1MDAsIG1pc2FsaWduOiAwLjkwLCBheGlhbDogMS4yNSwgbGFiZWw6ICJSb2xsZXIgQmVhcmluZyIgfSwKICAgICAgICBjeWxpbmRyaWNhbDogeyBsb2FkVG9sOiAxLjE4LCBzcGVlZEFsZXJ0OiA0MDAwLCBtaXNhbGlnbjogMC43MiwgYXhpYWw6IDEuNTUsIGxhYmVsOiAiQ3lsaW5kcmljYWwgUm9sbGVyIEJlYXJpbmciIH0sCiAgICAgICAgdGFwZXJlZDogICAgIHsgbG9hZFRvbDogMS4yMiwgc3BlZWRBbGVydDogMjUwMCwgbWlzYWxpZ246IDAuODIsIGF4aWFsOiAwLjkyLCBsYWJlbDogIlRhcGVyZWQgUm9sbGVyIEJlYXJpbmciIH0sCiAgICAgICAgc3BoZXJpY2FsOiAgIHsgbG9hZFRvbDogMS4xMiwgc3BlZWRBbGVydDogMjAwMCwgbWlzYWxpZ246IDEuNDAsIGF4aWFsOiAxLjEwLCBsYWJlbDogIlNwaGVyaWNhbCBCZWFyaW5nIiB9LAogICAgICAgIG90aGVyOiAgICAgICB7IGxvYWRUb2w6IDEuMDAsIHNwZWVkQWxlcnQ6IDQwMDAsIG1pc2FsaWduOiAxLjAwLCBheGlhbDogMS4xNSwgbGFiZWw6ICJPdGhlciIgfQogICAgICB9OwoKICAgICAgdmFyIExVQiA9IHsKICAgICAgICBleGNlbGxlbnQ6IDQsCiAgICAgICAgZ29vZDogMTYsCiAgICAgICAgbm9ybWFsOiAzMiwKICAgICAgICBwb29yOiA3MiwKICAgICAgICBub25lOiA5OAogICAgICB9OwoKICAgICAgdmFyIElOU1RBTEwgPSB7CiAgICAgICAgY29ycmVjdDogNSwKICAgICAgICBtaW5vcjogNDIsCiAgICAgICAgc2V2ZXJlOiA4OCwKICAgICAgICB1bmtub3duOiAyOAogICAgICB9OwoKICAgICAgdmFyIENPTlRBTSA9IHsKICAgICAgICBjbGVhbjogNiwKICAgICAgICBzbGlnaHQ6IDI4LAogICAgICAgIG1vZGVyYXRlOiA1OCwKICAgICAgICBoZWF2eTogOTAKICAgICAgfTsKCiAgICAgIHZhciBXRUlHSFRTID0gewogICAgICAgIGxvYWQ6IDAuMTYsCiAgICAgICAgdGVtcGVyYXR1cmU6IDAuMTMsCiAgICAgICAgbHVicmljYXRpb246IDAuMjIsCiAgICAgICAgdmlicmF0aW9uOiAwLjE1LAogICAgICAgIGluc3RhbGxhdGlvbjogMC4xMywKICAgICAgICBjb250YW1pbmF0aW9uOiAwLjEzLAogICAgICAgIGFnaW5nOiAwLjA4CiAgICAgIH07CgogICAgICB2YXIgUFJFU0VUUyA9IFsKICAgICAgICB7CiAgICAgICAgICBpZDogImhlYWx0aHkiLAogICAgICAgICAgbmFtZTogIkhlYWx0aHkgbW90b3IiLAogICAgICAgICAgaGludDogIkdvb2QgZmlsbSwgYWxpZ25lZCwgbG93IHZpYnJhdGlvbiIsCiAgICAgICAgICB0eXBlOiAiYmFsbCIsIGxvYWRLaW5kOiAicmFkaWFsIiwgbG9hZDogNiwgbG9hZFVuaXQ6ICJrTiIsIEM6IDUyLCBDVW5pdDogImtOIiwKICAgICAgICAgIHJwbTogMTQ1MCwgdGVtcDogNTgsIHZpYjogMS42LCBsdWI6ICJnb29kIiwgaW5zdGFsbDogImNvcnJlY3QiLCBjb250YW06ICJjbGVhbiIsIGhvdXJzOiAzNTAwCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInR5cGljYWwiLAogICAgICAgICAgbmFtZTogIlR5cGljYWwgaW5kdXN0cmlhbCIsCiAgICAgICAgICBoaW50OiAiTW9kZXJhdGUgUC9DLCBub3JtYWwgZ3JlYXNlLCA4IDAwMCBoIiwKICAgICAgICAgIHR5cGU6ICJiYWxsIiwgbG9hZEtpbmQ6ICJyYWRpYWwiLCBsb2FkOiA4LCBsb2FkVW5pdDogImtOIiwgQzogNDUsIENVbml0OiAia04iLAogICAgICAgICAgcnBtOiAxNTAwLCB0ZW1wOiA3MCwgdmliOiAyLjgsIGx1YjogIm5vcm1hbCIsIGluc3RhbGw6ICJjb3JyZWN0IiwgY29udGFtOiAic2xpZ2h0IiwgaG91cnM6IDgwMDAKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZGlzdHJlc3MiLAogICAgICAgICAgbmFtZTogIkRpc3RyZXNzZWQgYmVhcmluZyIsCiAgICAgICAgICBoaW50OiAiSG90LCBkcnksIG5vaXN5LCBtaXNhbGlnbmVkIiwKICAgICAgICAgIHR5cGU6ICJyb2xsZXIiLCBsb2FkS2luZDogImNvbWJpbmVkIiwgbG9hZDogMjIsIGxvYWRVbml0OiAia04iLCBDOiA0OCwgQ1VuaXQ6ICJrTiIsCiAgICAgICAgICBycG06IDI4MDAsIHRlbXA6IDEwOCwgdmliOiA4LjQsIGx1YjogInBvb3IiLCBpbnN0YWxsOiAic2V2ZXJlIiwgY29udGFtOiAiaGVhdnkiLCBob3VyczogMjQwMDAKICAgICAgICB9CiAgICAgIF07CgogICAgICB2YXIgREVGQVVMVFMgPSBQUkVTRVRTWzFdOwogICAgICB2YXIgYWN0aXZlUHJlc2V0ID0gInR5cGljYWwiOwoKICAgICAgdmFyIGVsID0gewogICAgICAgIHR5cGU6IGJ5SWQoImJmcmFUeXBlIiksCiAgICAgICAgbG9hZEtpbmQ6IGJ5SWQoImJmcmFMb2FkS2luZCIpLAogICAgICAgIGxvYWQ6IGJ5SWQoImJmcmFMb2FkIiksCiAgICAgICAgbG9hZFVuaXQ6IGJ5SWQoImJmcmFMb2FkVW5pdCIpLAogICAgICAgIEM6IGJ5SWQoImJmcmFDIiksCiAgICAgICAgQ1VuaXQ6IGJ5SWQoImJmcmFDVW5pdCIpLAogICAgICAgIHJwbTogYnlJZCgiYmZyYVJwbSIpLAogICAgICAgIHJwbVJhbmdlOiBieUlkKCJiZnJhUnBtUmFuZ2UiKSwKICAgICAgICB0ZW1wOiBieUlkKCJiZnJhVGVtcCIpLAogICAgICAgIHRlbXBSYW5nZTogYnlJZCgiYmZyYVRlbXBSYW5nZSIpLAogICAgICAgIHRlbXBWYWw6IGJ5SWQoImJmcmFUZW1wVmFsIiksCiAgICAgICAgdmliOiBieUlkKCJiZnJhVmliIiksCiAgICAgICAgdmliUmFuZ2U6IGJ5SWQoImJmcmFWaWJSYW5nZSIpLAogICAgICAgIHZpYlZhbDogYnlJZCgiYmZyYVZpYlZhbCIpLAogICAgICAgIGx1YjogYnlJZCgiYmZyYUx1YiIpLAogICAgICAgIGluc3RhbGw6IGJ5SWQoImJmcmFJbnN0YWxsIiksCiAgICAgICAgY29udGFtOiBieUlkKCJiZnJhQ29udGFtIiksCiAgICAgICAgaG91cnM6IGJ5SWQoImJmcmFIb3VycyIpLAogICAgICAgIGhvdXJzUmFuZ2U6IGJ5SWQoImJmcmFIb3Vyc1JhbmdlIiksCiAgICAgICAgaG91cnNWYWw6IGJ5SWQoImJmcmFIb3Vyc1ZhbCIpLAogICAgICAgIHBjUmVhZG91dDogYnlJZCgiYmZyYVBjUmVhZG91dCIpLAogICAgICAgIHByZXNldHM6IGJ5SWQoImJmcmFQcmVzZXRzIiksCiAgICAgICAgcmVzdWx0czogYnlJZCgiYmZyYVJlc3VsdHMiKSwKICAgICAgICBlcnJvcjogYnlJZCgiYmZyYUVycm9yIiksCiAgICAgICAgcmVzdWx0QmxvY2s6IGJ5SWQoImJmcmFSZXN1bHRCbG9jayIpLAogICAgICAgIHNjb3JlOiBieUlkKCJiZnJhU2NvcmUiKSwKICAgICAgICBhcmM6IGJ5SWQoImJmcmFHYXVnZUFyYyIpLAogICAgICAgIG5lZWRsZTogYnlJZCgiYmZyYU5lZWRsZSIpLAogICAgICAgIGJhbm5lcjogYnlJZCgiYmZyYVJpc2tCYW5uZXIiKSwKICAgICAgICByaXNrVGl0bGU6IGJ5SWQoImJmcmFSaXNrVGl0bGUiKSwKICAgICAgICByaXNrTm90ZTogYnlJZCgiYmZyYVJpc2tOb3RlIiksCiAgICAgICAgb3V0UGM6IGJ5SWQoImJmcmFPdXRQYyIpLAogICAgICAgIG91dFBjTm90ZTogYnlJZCgiYmZyYU91dFBjTm90ZSIpLAogICAgICAgIG91dFRvcDogYnlJZCgiYmZyYU91dFRvcCIpLAogICAgICAgIG91dEFsZXJ0OiBieUlkKCJiZnJhT3V0QWxlcnQiKSwKICAgICAgICBiYXJzOiBieUlkKCJiZnJhQmFycyIpLAogICAgICAgIGNhdXNlczogYnlJZCgiYmZyYUNhdXNlcyIpLAogICAgICAgIHJlY3M6IGJ5SWQoImJmcmFSZWNzIiksCiAgICAgICAgYnRuQ2FsYzogYnlJZCgiYmZyYUJ0bkNhbGN1bGF0ZSIpCiAgICAgIH07CgogICAgICBmdW5jdGlvbiBudW0obm9kZSkgewogICAgICAgIHZhciB2ID0gcGFyc2VGbG9hdChub2RlLnZhbHVlKTsKICAgICAgICByZXR1cm4gaXNGaW5pdGUodikgPyB2IDogTmFOOwogICAgICB9CgogICAgICBmdW5jdGlvbiBjbGFtcCh2LCBhLCBiKSB7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHYpKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gdG9LTih2YWx1ZSwgdW5pdCkgewogICAgICAgIHJldHVybiB1bml0ID09PSAiTiIgPyB2YWx1ZSAvIDEwMDAgOiB2YWx1ZTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gZm10KHYsIGQpIHsKICAgICAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gIi0iOwogICAgICAgIHJldHVybiB2LnRvRml4ZWQoZCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGZtdEhvdXJzKGgpIHsKICAgICAgICBpZiAoIWlzRmluaXRlKGgpKSByZXR1cm4gIi0iOwogICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGgpLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIpICsgIiBoIjsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gbGVycEJhbmQoeCwgeDAsIHgxLCB5MCwgeTEpIHsKICAgICAgICBpZiAoeCA8PSB4MCkgcmV0dXJuIHkwOwogICAgICAgIGlmICh4ID49IHgxKSByZXR1cm4geTE7CiAgICAgICAgcmV0dXJuIHkwICsgKHkxIC0geTApICogKCh4IC0geDApIC8gKHgxIC0geDApKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gbG9hZFNjb3JlKHBjKSB7CiAgICAgICAgaWYgKHBjIDwgMC4wMikgcmV0dXJuIDIwOwogICAgICAgIGlmIChwYyA8IDAuMDYpIHJldHVybiBsZXJwQmFuZChwYywgMC4wMiwgMC4wNiwgMTQsIDEwKTsKICAgICAgICBpZiAocGMgPCAwLjEyKSByZXR1cm4gbGVycEJhbmQocGMsIDAuMDYsIDAuMTIsIDEwLCAxOCk7CiAgICAgICAgaWYgKHBjIDwgMC4yMCkgcmV0dXJuIGxlcnBCYW5kKHBjLCAwLjEyLCAwLjIwLCAxOCwgMzYpOwogICAgICAgIGlmIChwYyA8IDAuMzApIHJldHVybiBsZXJwQmFuZChwYywgMC4yMCwgMC4zMCwgMzYsIDU4KTsKICAgICAgICBpZiAocGMgPCAwLjQwKSByZXR1cm4gbGVycEJhbmQocGMsIDAuMzAsIDAuNDAsIDU4LCA3Nik7CiAgICAgICAgaWYgKHBjIDwgMC41NSkgcmV0dXJuIGxlcnBCYW5kKHBjLCAwLjQwLCAwLjU1LCA3NiwgOTIpOwogICAgICAgIHJldHVybiBjbGFtcCg5MiArIChwYyAtIDAuNTUpICogNDAsIDAsIDk5KTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gdGVtcFNjb3JlKHQpIHsKICAgICAgICBpZiAodCA8IDQwKSByZXR1cm4gODsKICAgICAgICBpZiAodCA8IDcwKSByZXR1cm4gbGVycEJhbmQodCwgNDAsIDcwLCA4LCAyMCk7CiAgICAgICAgaWYgKHQgPCA5MCkgcmV0dXJuIGxlcnBCYW5kKHQsIDcwLCA5MCwgMjAsIDQ2KTsKICAgICAgICBpZiAodCA8IDExMCkgcmV0dXJuIGxlcnBCYW5kKHQsIDkwLCAxMTAsIDQ2LCA3MCk7CiAgICAgICAgaWYgKHQgPCAxMzApIHJldHVybiBsZXJwQmFuZCh0LCAxMTAsIDEzMCwgNzAsIDkwKTsKICAgICAgICByZXR1cm4gY2xhbXAoOTAgKyAodCAtIDEzMCkgKiAwLjQsIDAsIDk5KTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gdmliU2NvcmUodikgewogICAgICAgIGlmICh2IDwgMS40KSByZXR1cm4gbGVycEJhbmQodiwgMCwgMS40LCA0LCAxMCk7CiAgICAgICAgaWYgKHYgPCAyLjgpIHJldHVybiBsZXJwQmFuZCh2LCAxLjQsIDIuOCwgMTAsIDIyKTsKICAgICAgICBpZiAodiA8IDQuNSkgcmV0dXJuIGxlcnBCYW5kKHYsIDIuOCwgNC41LCAyMiwgNDApOwogICAgICAgIGlmICh2IDwgNy4xKSByZXR1cm4gbGVycEJhbmQodiwgNC41LCA3LjEsIDQwLCA2Mik7CiAgICAgICAgaWYgKHYgPCAxMS4yKSByZXR1cm4gbGVycEJhbmQodiwgNy4xLCAxMS4yLCA2MiwgODIpOwogICAgICAgIGlmICh2IDwgMTgpIHJldHVybiBsZXJwQmFuZCh2LCAxMS4yLCAxOCwgODIsIDk0KTsKICAgICAgICByZXR1cm4gOTc7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFnaW5nU2NvcmUoaCkgewogICAgICAgIGlmIChoIDwgMjAwMCkgcmV0dXJuIGxlcnBCYW5kKGgsIDAsIDIwMDAsIDQsIDEwKTsKICAgICAgICBpZiAoaCA8IDgwMDApIHJldHVybiBsZXJwQmFuZChoLCAyMDAwLCA4MDAwLCAxMCwgMjYpOwogICAgICAgIGlmIChoIDwgMjAwMDApIHJldHVybiBsZXJwQmFuZChoLCA4MDAwLCAyMDAwMCwgMjYsIDU0KTsKICAgICAgICBpZiAoaCA8IDQwMDAwKSByZXR1cm4gbGVycEJhbmQoaCwgMjAwMDAsIDQwMDAwLCA1NCwgODIpOwogICAgICAgIHJldHVybiBjbGFtcCg4MiArIChoIC0gNDAwMDApIC8gMjAwMDAgKiAxMywgMCwgOTUpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBwY0R1dHkocGMpIHsKICAgICAgICBpZiAocGMgPCAwLjA2KSByZXR1cm4gInZlcnkgbGlnaHQgLSB3YXRjaCBmb3Igc2tpZGRpbmcgYXQgc3BlZWQiOwogICAgICAgIGlmIChwYyA8IDAuMTUpIHJldHVybiAibGlnaHQgdG8gbW9kZXJhdGUgZHV0eSI7CiAgICAgICAgaWYgKHBjIDwgMC4yNSkgcmV0dXJuICJtb2RlcmF0ZSBkdXR5IjsKICAgICAgICBpZiAocGMgPCAwLjM1KSByZXR1cm4gImhlYXZ5IGR1dHkiOwogICAgICAgIHJldHVybiAib3ZlcmxvYWQgcmVnaW9uIC0gbGlmZSBkcm9wcyBzdGVlcGx5IjsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gYmFyQ2xhc3Moc2NvcmUpIHsKICAgICAgICBpZiAoc2NvcmUgPCAyNSkgcmV0dXJuICJiZnJhLW9rIjsKICAgICAgICBpZiAoc2NvcmUgPCA1MCkgcmV0dXJuICJiZnJhLW1lZCI7CiAgICAgICAgaWYgKHNjb3JlIDwgNzUpIHJldHVybiAiYmZyYS1oaWdoIjsKICAgICAgICByZXR1cm4gImJmcmEtY3JpdCI7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHJpc2tMZXZlbChzY29yZSkgewogICAgICAgIGlmIChzY29yZSA8IDI1KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBrZXk6ICJsb3ciLAogICAgICAgICAgICBsYWJlbDogIkxvdyBSaXNrIiwKICAgICAgICAgICAgY2xzOiAiYmZyYS1sb3ciLAogICAgICAgICAgICBub3RlOiAiT3BlcmF0aW5nIGNvbmRpdGlvbnMgbG9vayBzdGFibGUuIEtlZXAgdGhlIGN1cnJlbnQgbHVicmljYXRpb24gaW50ZXJ2YWwgYW5kIGEgcGVyaW9kaWMgdmlicmF0aW9uIHJvdXRlIGZvciBiZWFyaW5nIGhlYWx0aCBtb25pdG9yaW5nLiIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChzY29yZSA8IDUwKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBrZXk6ICJtZWQiLAogICAgICAgICAgICBsYWJlbDogIk1lZGl1bSBSaXNrIiwKICAgICAgICAgICAgY2xzOiAiYmZyYS1tZWQiLAogICAgICAgICAgICBub3RlOiAiT25lIG9yIG1vcmUgZmFjdG9ycyBhcmUgZWxldmF0ZWQuIFRpZ2h0ZW4gaW5zcGVjdGlvbiBhbmQgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgY2F1c2VzIGJlZm9yZSB0aGV5IGNvbXBvdW5kIGludG8gYSBIaWdoIFJpc2sgZXZlbnQuIgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHNjb3JlIDwgNzUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGtleTogImhpZ2giLAogICAgICAgICAgICBsYWJlbDogIkhpZ2ggUmlzayIsCiAgICAgICAgICAgIGNsczogImJmcmEtaGlnaCIsCiAgICAgICAgICAgIG5vdGU6ICJGYWlsdXJlIHByb2JhYmlsaXR5IGlzIHNpZ25pZmljYW50LiBQbGFuIGludGVydmVudGlvbiBhdCB0aGUgbmV4dCBhdmFpbGFibGUgd2luZG93IC0gbHVicmljYW50LCBhbGlnbm1lbnQsIHNlYWxpbmcgb3IgcmVwbGFjZW1lbnQgYXMgaW5kaWNhdGVkIGJlbG93LiIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBrZXk6ICJjcml0IiwKICAgICAgICAgIGxhYmVsOiAiQ3JpdGljYWwgUmlzayIsCiAgICAgICAgICBjbHM6ICJiZnJhLWNyaXQiLAogICAgICAgICAgbm90ZTogIkNvbmRpdGlvbnMgYXJlIGNvbnNpc3RlbnQgd2l0aCBpbW1pbmVudCBkYW1hZ2UuIFJlZHVjZSBsb2FkIG9yIHNwZWVkIGlmIHBvc3NpYmxlLCBpbmNyZWFzZSBtb25pdG9yaW5nIGZyZXF1ZW5jeSwgYW5kIHByZXBhcmUgYSBzcGFyZSBiZWFyaW5nIGZvciByZXBsYWNlbWVudC4iCiAgICAgICAgfTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcmVhZElucHV0cygpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogZWwudHlwZS52YWx1ZSwKICAgICAgICAgIGxvYWRLaW5kOiBlbC5sb2FkS2luZC52YWx1ZSwKICAgICAgICAgIGxvYWRLTjogdG9LTihudW0oZWwubG9hZCksIGVsLmxvYWRVbml0LnZhbHVlKSwKICAgICAgICAgIENLTjogdG9LTihudW0oZWwuQyksIGVsLkNVbml0LnZhbHVlKSwKICAgICAgICAgIHJwbTogbnVtKGVsLnJwbSksCiAgICAgICAgICB0ZW1wOiBudW0oZWwudGVtcCksCiAgICAgICAgICB2aWI6IG51bShlbC52aWIpLAogICAgICAgICAgbHViOiBlbC5sdWIudmFsdWUsCiAgICAgICAgICBpbnN0YWxsOiBlbC5pbnN0YWxsLnZhbHVlLAogICAgICAgICAgY29udGFtOiBlbC5jb250YW0udmFsdWUsCiAgICAgICAgICBob3VyczogbnVtKGVsLmhvdXJzKQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHApIHsKICAgICAgICB2YXIgZXJyb3JzID0gW107CiAgICAgICAgaWYgKCEocC5sb2FkS04gPiAwKSkgZXJyb3JzLnB1c2goIk9wZXJhdGluZyBsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7CiAgICAgICAgaWYgKCEocC5DS04gPiAwKSkgZXJyb3JzLnB1c2goIkR5bmFtaWMgbG9hZCByYXRpbmcgQyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpOwogICAgICAgIGlmICghKHAucnBtID4gMCkpIGVycm9ycy5wdXNoKCJCZWFyaW5nIHNwZWVkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7CiAgICAgICAgaWYgKCFpc0Zpbml0ZShwLnRlbXApIHx8IHAudGVtcCA8IC00MCB8fCBwLnRlbXAgPiAyNTApIGVycm9ycy5wdXNoKCJUZW1wZXJhdHVyZSBtdXN0IGJlIGJldHdlZW4gLTQwICBDIGFuZCAyNTAgIEMuIik7CiAgICAgICAgaWYgKCFpc0Zpbml0ZShwLnZpYikgfHwgcC52aWIgPCAwKSBlcnJvcnMucHVzaCgiVmlicmF0aW9uIG11c3QgYmUgemVybyBvciBwb3NpdGl2ZS4iKTsKICAgICAgICBpZiAoIWlzRmluaXRlKHAuaG91cnMpIHx8IHAuaG91cnMgPCAwKSBlcnJvcnMucHVzaCgiT3BlcmF0aW5nIGhvdXJzIG11c3QgYmUgemVybyBvciBwb3NpdGl2ZS4iKTsKICAgICAgICByZXR1cm4gZXJyb3JzOwogICAgICB9CgogICAgICBmdW5jdGlvbiBhc3Nlc3MocCkgewogICAgICAgIHZhciBzcGVjID0gVFlQRVtwLnR5cGVdIHx8IFRZUEUub3RoZXI7CiAgICAgICAgdmFyIHBjUmF3ID0gcC5sb2FkS04gLyBwLkNLTjsKICAgICAgICB2YXIgZGlyTXVsID0gMTsKICAgICAgICBpZiAocC5sb2FkS2luZCA9PT0gImF4aWFsIikgZGlyTXVsID0gc3BlYy5heGlhbDsKICAgICAgICBlbHNlIGlmIChwLmxvYWRLaW5kID09PSAiY29tYmluZWQiKSBkaXJNdWwgPSAoMSArIHNwZWMuYXhpYWwpIC8gMjsKICAgICAgICB2YXIgcGNFZmYgPSAocGNSYXcgKiBkaXJNdWwpIC8gc3BlYy5sb2FkVG9sOwogICAgICAgIGlmIChwLnJwbSA+IHNwZWMuc3BlZWRBbGVydCAmJiBwY0VmZiA+IDAuMTgpIHBjRWZmICo9IDEuMTI7CgogICAgICAgIHZhciBzTG9hZCA9IGNsYW1wKGxvYWRTY29yZShwY0VmZiksIDAsIDEwMCk7CiAgICAgICAgdmFyIHNUZW1wID0gY2xhbXAodGVtcFNjb3JlKHAudGVtcCksIDAsIDEwMCk7CiAgICAgICAgdmFyIHNMdWIgPSBMVUJbcC5sdWJdOwogICAgICAgIHZhciBzVmliID0gY2xhbXAodmliU2NvcmUocC52aWIpLCAwLCAxMDApOwogICAgICAgIHZhciBzSW5zdCA9IElOU1RBTExbcC5pbnN0YWxsXTsKICAgICAgICB2YXIgc0NvbnQgPSBDT05UQU1bcC5jb250YW1dOwogICAgICAgIHZhciBzQWdlID0gY2xhbXAoYWdpbmdTY29yZShwLmhvdXJzKSwgMCwgMTAwKTsKCiAgICAgICAgaWYgKHAucnBtID4gc3BlYy5zcGVlZEFsZXJ0ICogMC43NSAmJiBzTHViIDwgNDApIHNMdWIgPSBjbGFtcChzTHViICsgMTIsIDAsIDEwMCk7CiAgICAgICAgaWYgKHAubHViID09PSAicG9vciIgfHwgcC5sdWIgPT09ICJub25lIikgc1RlbXAgPSBjbGFtcChzVGVtcCArIDgsIDAsIDEwMCk7CiAgICAgICAgaWYgKHAudGVtcCA+PSA5NSAmJiAocC5sdWIgPT09ICJub3JtYWwiIHx8IHAubHViID09PSAiZ29vZCIpKSBzTHViID0gY2xhbXAoc0x1YiArIDEwLCAwLCAxMDApOwoKICAgICAgICBzSW5zdCA9IGNsYW1wKHNJbnN0IC8gc3BlYy5taXNhbGlnbiwgMCwgMTAwKTsKICAgICAgICBpZiAocC50eXBlID09PSAic3BoZXJpY2FsIiAmJiBwLmluc3RhbGwgIT09ICJjb3JyZWN0Iikgc0luc3QgKj0gMC42MjsKICAgICAgICBpZiAocC50eXBlID09PSAiY3lsaW5kcmljYWwiICYmIHAuaW5zdGFsbCAhPT0gImNvcnJlY3QiKSBzSW5zdCA9IGNsYW1wKHNJbnN0ICogMS4xOCwgMCwgMTAwKTsKCiAgICAgICAgdmFyIGZhY3RvcnMgPSBbCiAgICAgICAgICB7IGlkOiAibG9hZCIsIG5hbWU6ICJMb2FkIHN0cmVzcyIsIGRldGFpbDogIlAvQyA9ICIgKyBmbXQocGNSYXcsIDMpICsgIiAoZWZmZWN0aXZlICIgKyBmbXQocGNFZmYsIDMpICsgIikiLCBzY29yZTogc0xvYWQsIGNhdXNlOiAiT3ZlcmxvYWQiIH0sCiAgICAgICAgICB7IGlkOiAidGVtcGVyYXR1cmUiLCBuYW1lOiAiVGVtcGVyYXR1cmUiLCBkZXRhaWw6IGZtdChwLnRlbXAsIDApICsgIiAgQyBvcGVyYXRpbmciLCBzY29yZTogc1RlbXAsIGNhdXNlOiAiT3ZlcmhlYXRpbmciIH0sCiAgICAgICAgICB7IGlkOiAibHVicmljYXRpb24iLCBuYW1lOiAiTHVicmljYXRpb24iLCBkZXRhaWw6IGVsLmx1Yi5vcHRpb25zW2VsLmx1Yi5zZWxlY3RlZEluZGV4XS50ZXh0LCBzY29yZTogc0x1YiwgY2F1c2U6ICJMdWJyaWNhdGlvbiBGYWlsdXJlIiB9LAogICAgICAgICAgeyBpZDogInZpYnJhdGlvbiIsIG5hbWU6ICJWaWJyYXRpb24iLCBkZXRhaWw6IGZtdChwLnZpYiwgMSkgKyAiIG1tL3MgUk1TIiwgc2NvcmU6IHNWaWIsIGNhdXNlOiAiRXhjZXNzaXZlIFZpYnJhdGlvbiIgfSwKICAgICAgICAgIHsgaWQ6ICJpbnN0YWxsYXRpb24iLCBuYW1lOiAiSW5zdGFsbGF0aW9uIiwgZGV0YWlsOiBlbC5pbnN0YWxsLm9wdGlvbnNbZWwuaW5zdGFsbC5zZWxlY3RlZEluZGV4XS50ZXh0LCBzY29yZTogc0luc3QsIGNhdXNlOiAiTWlzYWxpZ25tZW50IiB9LAogICAgICAgICAgeyBpZDogImNvbnRhbWluYXRpb24iLCBuYW1lOiAiQ29udGFtaW5hdGlvbiIsIGRldGFpbDogZWwuY29udGFtLm9wdGlvbnNbZWwuY29udGFtLnNlbGVjdGVkSW5kZXhdLnRleHQsIHNjb3JlOiBzQ29udCwgY2F1c2U6ICJDb250YW1pbmF0aW9uIiB9LAogICAgICAgICAgeyBpZDogImFnaW5nIiwgbmFtZTogIlNlcnZpY2UgdGltZSIsIGRldGFpbDogZm10SG91cnMocC5ob3VycyksIHNjb3JlOiBzQWdlLCBjYXVzZTogIkFnaW5nIFdlYXIiIH0KICAgICAgICBdOwoKICAgICAgICB2YXIgdG90YWwgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjdG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgZmFjdG9yc1tpXS53ZWlnaHQgPSBXRUlHSFRTW2ZhY3RvcnNbaV0uaWRdOwogICAgICAgICAgZmFjdG9yc1tpXS5jb250cmliID0gZmFjdG9yc1tpXS5zY29yZSAqIGZhY3RvcnNbaV0ud2VpZ2h0OwogICAgICAgICAgdG90YWwgKz0gZmFjdG9yc1tpXS5jb250cmliOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNMdWIgPj0gNzAgJiYgc1RlbXAgPj0gNTUpIHRvdGFsICs9IDQ7CiAgICAgICAgaWYgKHNWaWIgPj0gNTggJiYgc0luc3QgPj0gNDUpIHRvdGFsICs9IDM7CiAgICAgICAgaWYgKHNDb250ID49IDU1ICYmIHNMdWIgPj0gNTApIHRvdGFsICs9IDQ7CiAgICAgICAgaWYgKHNBZ2UgPj0gNjAgJiYgKHNMdWIgPj0gNTAgfHwgc1ZpYiA+PSA1MCkpIHRvdGFsICs9IDM7CiAgICAgICAgaWYgKHAubHViID09PSAibm9uZSIpIHRvdGFsICs9IDY7CgogICAgICAgIHRvdGFsID0gY2xhbXAoTWF0aC5yb3VuZCh0b3RhbCksIDAsIDEwMCk7CiAgICAgICAgZmFjdG9ycy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLmNvbnRyaWIgLSBhLmNvbnRyaWI7IH0pOwogICAgICAgIHJldHVybiB7IHRvdGFsOiB0b3RhbCwgcGNSYXc6IHBjUmF3LCBwY0VmZjogcGNFZmYsIGZhY3RvcnM6IGZhY3RvcnMsIHNwZWM6IHNwZWMgfTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gY2F1c2VzRnJvbShmYWN0b3JzKSB7CiAgICAgICAgdmFyIG91dCA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjdG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGYgPSBmYWN0b3JzW2ldOwogICAgICAgICAgaWYgKGYuc2NvcmUgPj0gNDUgfHwgZi5jb250cmliID49IDgpIHsKICAgICAgICAgICAgb3V0LnB1c2goewogICAgICAgICAgICAgIG5hbWU6IGYuY2F1c2UsCiAgICAgICAgICAgICAgd2F0Y2g6IGYuc2NvcmUgPCA2MCwKICAgICAgICAgICAgICBzY29yZTogZi5zY29yZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvdXQubGVuZ3RoKSB7CiAgICAgICAgICB2YXIgdG9wID0gZmFjdG9yc1swXTsKICAgICAgICAgIGlmICh0b3AgJiYgdG9wLnNjb3JlID49IDMwKSBvdXQucHVzaCh7IG5hbWU6IHRvcC5jYXVzZSwgd2F0Y2g6IHRydWUsIHNjb3JlOiB0b3Auc2NvcmUgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHJlY3NGcm9tKHAsIHJlc3VsdCwgbGV2ZWwsIGNhdXNlcykgewogICAgICAgIHZhciByZWNzID0gW107CiAgICAgICAgdmFyIGNhdXNlU2V0ID0ge307CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYXVzZXMubGVuZ3RoOyBpKyspIGNhdXNlU2V0W2NhdXNlc1tpXS5uYW1lXSA9IHRydWU7CgogICAgICAgIGlmIChjYXVzZVNldFsiTHVicmljYXRpb24gRmFpbHVyZSJdKSB7CiAgICAgICAgICByZWNzLnB1c2goIkx1YnJpY2FudCByZXBsYWNlbWVudDogcHVyZ2UgY29udGFtaW5hdGVkIGdyZWFzZSBvciBjaGFuZ2Ugb2lsLCByZXN0b3JlIHRoZSBjb3JyZWN0IGZpbGwgcXVhbnRpdHksIGFuZCByZXNldCB0aGUgcmVsdWJyaWNhdGlvbiBpbnRlcnZhbCBmb3IgdGhlIGFjdHVhbCB0ZW1wZXJhdHVyZSBhbmQgc3BlZWQuIik7CiAgICAgICAgfQogICAgICAgIGlmIChjYXVzZVNldFsiRXhjZXNzaXZlIFZpYnJhdGlvbiJdKSB7CiAgICAgICAgICByZWNzLnB1c2goIlZpYnJhdGlvbiBpbnNwZWN0aW9uOiBydW4gYW4gSVNPIDIwODE2IHN1cnZleSBhbmQgY2hlY2sgYmVhcmluZyBkZWZlY3QgZnJlcXVlbmNpZXMgKEJQRk8gLyBCUEZJIC8gQlNGIC8gRlRGKSwgdW5iYWxhbmNlLCBsb29zZW5lc3MgYW5kIHN0cnVjdHVyYWwgcmVzb25hbmNlLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoY2F1c2VTZXRbIk1pc2FsaWdubWVudCJdKSB7CiAgICAgICAgICByZWNzLnB1c2goIkFsaWdubWVudCBhZGp1c3RtZW50OiBjb3JyZWN0IHNoYWZ0IGFuZCBob3VzaW5nIGFsaWdubWVudCAobGFzZXIgcHJlZmVycmVkKS4gQ3lsaW5kcmljYWwgcm9sbGVyIGJlYXJpbmdzIGFyZSBzZW5zaXRpdmUgdG8gbWlzYWxpZ25tZW50OyBzcGhlcmljYWwgdHlwZXMgdG9sZXJhdGUgbW9yZSBhbmd1bGFyIGVycm9yLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoY2F1c2VTZXRbIk92ZXJoZWF0aW5nIl0pIHsKICAgICAgICAgIHJlY3MucHVzaCgiVGVtcGVyYXR1cmUgbW9uaXRvcmluZzogdmVyaWZ5IGx1YnJpY2FudCB2aXNjb3NpdHkgYXQgb3BlcmF0aW5nIHRlbXBlcmF0dXJlLCBsb29rIGZvciBleGNlc3NpdmUgcHJlbG9hZCBvciBzZWFsIGRyYWcsIGFuZCBpbXByb3ZlIGNvb2xpbmcgaWYgdGhlIHJpbmcgc3RheXMgYWJvdmUgfjkwICBDLiIpOwogICAgICAgIH0KICAgICAgICBpZiAoY2F1c2VTZXRbIk92ZXJsb2FkIl0pIHsKICAgICAgICAgIHJlY3MucHVzaCgiTG9hZCByZXZpZXc6IGNvbmZpcm0gZXF1aXZhbGVudCBsb2FkIGFnYWluc3QgY2F0YWxvZyBDLiBSZWR1Y2Ugb3ZlcmxvYWQgb3Igc2hvY2ssIG9yIHN0ZXAgdXAgdG8gYSBoaWdoZXItY2FwYWNpdHkgcm9sbGVyIC8gdGFwZXJlZCBzZXJpZXMgaWYgUC9DIHN0YXlzIGluIHRoZSBoZWF2eS1kdXR5IGJhbmQuIik7CiAgICAgICAgfQogICAgICAgIGlmIChjYXVzZVNldFsiQ29udGFtaW5hdGlvbiJdKSB7CiAgICAgICAgICByZWNzLnB1c2goIkNvbnRhbWluYXRpb24gY29udHJvbDogdXBncmFkZSBzZWFsaW5nIChjb250YWN0LCBsYWJ5cmludGggb3IgdGFjb25pdGUpLCBpbXByb3ZlIGZpbHRyYXRpb24sIGFuZCByZXBsYWNlIGx1YnJpY2FudCBhZnRlciBpbmdyZXNzIG9mIGR1c3QsIHByb2Nlc3MgZmx1aWQgb3Igd2F0ZXIuIik7CiAgICAgICAgfQogICAgICAgIGlmIChjYXVzZVNldFsiQWdpbmcgV2VhciJdKSB7CiAgICAgICAgICByZWNzLnB1c2goIkJlYXJpbmcgcmVwbGFjZW1lbnQ6IHNlcnZpY2UgaG91cnMgYXJlIGEgbGFyZ2UgZnJhY3Rpb24gb2YgdHlwaWNhbCBMMTAuIFN0YWdlIGEgc3BhcmUsIGluY3JlYXNlIGluc3BlY3Rpb24gZnJlcXVlbmN5LCBhbmQgcmVwbGFjZSBhdCBhIHBsYW5uZWQgd2luZG93IHJhdGhlciB0aGFuIGFmdGVyIHNlaXp1cmUuIik7CiAgICAgICAgfQogICAgICAgIGlmIChsZXZlbC5rZXkgPT09ICJoaWdoIiB8fCBsZXZlbC5rZXkgPT09ICJjcml0IikgewogICAgICAgICAgcmVjcy5wdXNoKCJSZWd1bGFyIG1haW50ZW5hbmNlIHNjaGVkdWxpbmc6IHRyZWF0IHRoaXMgdW5pdCBhcyBhIHByaW9yaXR5IG9uIHRoZSBCZWFyaW5nIE1haW50ZW5hbmNlIENhbGN1bGF0b3Igcm91dGUgLSBzaG9ydGVuIGdyZWFzZSBpbnRlcnZhbCwgYWRkIHRlbXBlcmF0dXJlL3ZpYnJhdGlvbiB0cmVuZGluZywgYW5kIGxvY2sgYSBjaGFuZ2Utb3V0IGRhdGUuIik7CiAgICAgICAgfQogICAgICAgIGlmICghcmVjcy5sZW5ndGgpIHsKICAgICAgICAgIHJlY3MucHVzaCgiQ29udGludWUgcm91dGluZSBsdWJyaWNhdGlvbiwga2VlcCBhbGlnbm1lbnQgYW5kIHNlYWxzIGluIHNwZWNpZmljYXRpb24sIGFuZCByZXRhaW4gcGVyaW9kaWMgdmlicmF0aW9uIGFuZCB0ZW1wZXJhdHVyZSBjaGVja3MgYXMgdGhlIGJhc2VsaW5lIGZvciBiZWFyaW5nIGhlYWx0aCBtb25pdG9yaW5nLiIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVjczsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc3luY1JlYWRvdXQoKSB7CiAgICAgICAgdmFyIHAgPSByZWFkSW5wdXRzKCk7CiAgICAgICAgaWYgKHAubG9hZEtOID4gMCAmJiBwLkNLTiA+IDApIHsKICAgICAgICAgIHZhciBwYyA9IHAubG9hZEtOIC8gcC5DS047CiAgICAgICAgICBlbC5wY1JlYWRvdXQudGV4dENvbnRlbnQgPSAiTG9hZCByYXRpbyBQIC8gQyA9ICIgKyBmbXQocGMsIDMpICsgIiB8ICIgKyBwY0R1dHkocGMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbC5wY1JlYWRvdXQudGV4dENvbnRlbnQgPSAiRW50ZXIgbG9hZCBhbmQgY2F0YWxvZyBDIHRvIGV2YWx1YXRlIFAgLyBDLiI7CiAgICAgICAgfQogICAgICAgIGVsLnRlbXBWYWwudGV4dENvbnRlbnQgPSAoaXNGaW5pdGUobnVtKGVsLnRlbXApKSA\/IE1hdGgucm91bmQobnVtKGVsLnRlbXApKSA6ICItIikgKyAiICBDIjsKICAgICAgICBlbC52aWJWYWwudGV4dENvbnRlbnQgPSAoaXNGaW5pdGUobnVtKGVsLnZpYikpID8gZm10KG51bShlbC52aWIpLCAxKSA6ICItIikgKyAiIG1tL3MiOwogICAgICAgIGVsLmhvdXJzVmFsLnRleHRDb250ZW50ID0gZm10SG91cnMobnVtKGVsLmhvdXJzKSk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIG1hcmtJbnZhbGlkKG5vZGUsIGJhZCkgewogICAgICAgIGlmIChiYWQpIG5vZGUuY2xhc3NMaXN0LmFkZCgiYmZyYS1pcy1pbnZhbGlkIik7CiAgICAgICAgZWxzZSBub2RlLmNsYXNzTGlzdC5yZW1vdmUoImJmcmEtaXMtaW52YWxpZCIpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBzZXRHYXVnZShzY29yZSkgewogICAgICAgIGVsLmFyYy5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IiwgU3RyaW5nKEFSQ19MRU4gKiAoMSAtIHNjb3JlIC8gMTAwKSkpOwogICAgICAgIGVsLm5lZWRsZS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsICJyb3RhdGUoIiArICgtOTAgKyBzY29yZSAqIDEuOCkgKyAiIDEyMCAxMTgpIik7CiAgICAgICAgZWwuc2NvcmUudGV4dENvbnRlbnQgPSBTdHJpbmcoc2NvcmUpOwogICAgICB9CgogICAgICBmdW5jdGlvbiByZW5kZXJCYXJzKGZhY3RvcnMpIHsKICAgICAgICBlbC5iYXJzLmlubmVySFRNTCA9ICIiOwogICAgICAgIHZhciBvcmRlcmVkID0gZmFjdG9ycy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgIHZhciBvcmRlciA9IFsibG9hZCIsICJ0ZW1wZXJhdHVyZSIsICJsdWJyaWNhdGlvbiIsICJ2aWJyYXRpb24iLCAiaW5zdGFsbGF0aW9uIiwgImNvbnRhbWluYXRpb24iLCAiYWdpbmciXTsKICAgICAgICAgIHJldHVybiBvcmRlci5pbmRleE9mKGEuaWQpIC0gb3JkZXIuaW5kZXhPZihiLmlkKTsKICAgICAgICB9KTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyZWQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBmID0gb3JkZXJlZFtpXTsKICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHJvdy5jbGFzc05hbWUgPSAiYmZyYS1iYXItcm93IjsKICAgICAgICAgIHZhciBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBuYW1lLmNsYXNzTmFtZSA9ICJiZnJhLWJhci1uYW1lIjsKICAgICAgICAgIG5hbWUudGV4dENvbnRlbnQgPSBmLm5hbWUgKyAiICB8ICAiICsgTWF0aC5yb3VuZChmLndlaWdodCAqIDEwMCkgKyAiJSI7CiAgICAgICAgICB2YXIgdHJhY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIHRyYWNrLmNsYXNzTmFtZSA9ICJiZnJhLWJhci10cmFjayI7CiAgICAgICAgICB2YXIgZmlsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgZmlsbC5jbGFzc05hbWUgPSAiYmZyYS1iYXItZmlsbCAiICsgYmFyQ2xhc3MoZi5zY29yZSk7CiAgICAgICAgICBmaWxsLnN0eWxlLndpZHRoID0gY2xhbXAoZi5zY29yZSwgMCwgMTAwKSArICIlIjsKICAgICAgICAgIHRyYWNrLmFwcGVuZENoaWxkKGZpbGwpOwogICAgICAgICAgdmFyIHNjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBzYy5jbGFzc05hbWUgPSAiYmZyYS1iYXItc2NvcmUiOwogICAgICAgICAgc2MudGV4dENvbnRlbnQgPSBNYXRoLnJvdW5kKGYuc2NvcmUpOwogICAgICAgICAgcm93LmFwcGVuZENoaWxkKG5hbWUpOwogICAgICAgICAgcm93LmFwcGVuZENoaWxkKHRyYWNrKTsKICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChzYyk7CiAgICAgICAgICBlbC5iYXJzLmFwcGVuZENoaWxkKHJvdyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiByZW5kZXJDYXVzZXMoY2F1c2VzKSB7CiAgICAgICAgZWwuY2F1c2VzLmlubmVySFRNTCA9ICIiOwogICAgICAgIGlmICghY2F1c2VzLmxlbmd0aCkgewogICAgICAgICAgdmFyIG9rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgb2suY2xhc3NOYW1lID0gImJmcmEtY2hpcCBiZnJhLW9rIjsKICAgICAgICAgIG9rLnRleHRDb250ZW50ID0gIk5vIGRvbWluYW50IGZhaWx1cmUgbW9kZSBpZGVudGlmaWVkIjsKICAgICAgICAgIGVsLmNhdXNlcy5hcHBlbmRDaGlsZChvayk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2F1c2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgIGNoaXAuY2xhc3NOYW1lID0gImJmcmEtY2hpcCIgKyAoY2F1c2VzW2ldLndhdGNoID8gIiBiZnJhLXdhdGNoIiA6ICIiKTsKICAgICAgICAgIGNoaXAudGV4dENvbnRlbnQgPSBjYXVzZXNbaV0ubmFtZTsKICAgICAgICAgIGVsLmNhdXNlcy5hcHBlbmRDaGlsZChjaGlwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHJlbmRlclJlY3MoaXRlbXMsIGxldmVsKSB7CiAgICAgICAgZWwucmVjcy5pbm5lckhUTUwgPSAiIjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwogICAgICAgICAgaWYgKGxldmVsLmtleSA9PT0gImxvdyIgJiYgaSA9PT0gMCAmJiBpdGVtcy5sZW5ndGggPT09IDEpIGxpLmNsYXNzTmFtZSA9ICJiZnJhLW9rIjsKICAgICAgICAgIGxpLnRleHRDb250ZW50ID0gaXRlbXNbaV07CiAgICAgICAgICBlbC5yZWNzLmFwcGVuZENoaWxkKGxpKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFwcGx5UHJlc2V0KHByZXNldCwgbWFya0FjdGl2ZSkgewogICAgICAgIGVsLnR5cGUudmFsdWUgPSBwcmVzZXQudHlwZTsKICAgICAgICBlbC5sb2FkS2luZC52YWx1ZSA9IHByZXNldC5sb2FkS2luZDsKICAgICAgICBlbC5sb2FkLnZhbHVlID0gU3RyaW5nKHByZXNldC5sb2FkKTsKICAgICAgICBlbC5sb2FkVW5pdC52YWx1ZSA9IHByZXNldC5sb2FkVW5pdDsKICAgICAgICBlbC5DLnZhbHVlID0gU3RyaW5nKHByZXNldC5DKTsKICAgICAgICBlbC5DVW5pdC52YWx1ZSA9IHByZXNldC5DVW5pdDsKICAgICAgICBlbC5ycG0udmFsdWUgPSBTdHJpbmcocHJlc2V0LnJwbSk7CiAgICAgICAgZWwucnBtUmFuZ2UudmFsdWUgPSBTdHJpbmcoY2xhbXAocHJlc2V0LnJwbSwgNTAsIDEyMDAwKSk7CiAgICAgICAgZWwudGVtcC52YWx1ZSA9IFN0cmluZyhwcmVzZXQudGVtcCk7CiAgICAgICAgZWwudGVtcFJhbmdlLnZhbHVlID0gU3RyaW5nKGNsYW1wKHByZXNldC50ZW1wLCAtMjAsIDE4MCkpOwogICAgICAgIGVsLnZpYi52YWx1ZSA9IFN0cmluZyhwcmVzZXQudmliKTsKICAgICAgICBlbC52aWJSYW5nZS52YWx1ZSA9IFN0cmluZyhjbGFtcChwcmVzZXQudmliLCAwLCAyMCkpOwogICAgICAgIGVsLmx1Yi52YWx1ZSA9IHByZXNldC5sdWI7CiAgICAgICAgZWwuaW5zdGFsbC52YWx1ZSA9IHByZXNldC5pbnN0YWxsOwogICAgICAgIGVsLmNvbnRhbS52YWx1ZSA9IHByZXNldC5jb250YW07CiAgICAgICAgZWwuaG91cnMudmFsdWUgPSBTdHJpbmcocHJlc2V0LmhvdXJzKTsKICAgICAgICBlbC5ob3Vyc1JhbmdlLnZhbHVlID0gU3RyaW5nKGNsYW1wKHByZXNldC5ob3VycywgMCwgNjAwMDApKTsKICAgICAgICBpZiAobWFya0FjdGl2ZSkgewogICAgICAgICAgYWN0aXZlUHJlc2V0ID0gcHJlc2V0LmlkOwogICAgICAgICAgcGFpbnRQcmVzZXRzKCk7CiAgICAgICAgfQogICAgICAgIHN5bmNSZWFkb3V0KCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHBhaW50UHJlc2V0cygpIHsKICAgICAgICB2YXIgYnV0dG9ucyA9IGVsLnByZXNldHMucXVlcnlTZWxlY3RvckFsbCgiLmJmcmEtcHJlc2V0Iik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBidXR0b25zW2ldLmNsYXNzTGlzdC50b2dnbGUoImJmcmEtaXMtYWN0aXZlIiwgYnV0dG9uc1tpXS5nZXRBdHRyaWJ1dGUoImRhdGEtaWQiKSA9PT0gYWN0aXZlUHJlc2V0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGJ1aWxkUHJlc2V0cygpIHsKICAgICAgICBlbC5wcmVzZXRzLmlubmVySFRNTCA9ICIiOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUFJFU0VUUy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIHAgPSBQUkVTRVRTW2ldOwogICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgYnRuLnR5cGUgPSAiYnV0dG9uIjsKICAgICAgICAgIGJ0bi5jbGFzc05hbWUgPSAiYmZyYS1wcmVzZXQiICsgKHAuaWQgPT09IGFjdGl2ZVByZXNldCA\/ICIgYmZyYS1pcy1hY3RpdmUiIDogIiIpOwogICAgICAgICAgYnRuLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsIHAuaWQpOwogICAgICAgICAgdmFyIHN0cm9uZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIpOwogICAgICAgICAgc3Ryb25nLnRleHRDb250ZW50ID0gcC5uYW1lOwogICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gcC5oaW50OwogICAgICAgICAgYnRuLmFwcGVuZENoaWxkKHN0cm9uZyk7CiAgICAgICAgICBidG4uYXBwZW5kQ2hpbGQoc3Bhbik7CiAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZnVuY3Rpb24gKHByZXNldCkgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGFwcGx5UHJlc2V0KHByZXNldCwgdHJ1ZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9KShwKSk7CiAgICAgICAgICBlbC5wcmVzZXRzLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBsaW5rUGFpcihudW1iZXJFbCwgcmFuZ2VFbCwgb25OdW1iZXIpIHsKICAgICAgICBudW1iZXJFbC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciB2ID0gbnVtKG51bWJlckVsKTsKICAgICAgICAgIGlmIChpc0Zpbml0ZSh2KSkgcmFuZ2VFbC52YWx1ZSA9IFN0cmluZyhjbGFtcCh2LCBOdW1iZXIocmFuZ2VFbC5taW4pLCBOdW1iZXIocmFuZ2VFbC5tYXgpKSk7CiAgICAgICAgICBhY3RpdmVQcmVzZXQgPSAiIjsKICAgICAgICAgIHBhaW50UHJlc2V0cygpOwogICAgICAgICAgb25OdW1iZXIoKTsKICAgICAgICB9KTsKICAgICAgICByYW5nZUVsLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgbnVtYmVyRWwudmFsdWUgPSByYW5nZUVsLnZhbHVlOwogICAgICAgICAgYWN0aXZlUHJlc2V0ID0gIiI7CiAgICAgICAgICBwYWludFByZXNldHMoKTsKICAgICAgICAgIG9uTnVtYmVyKCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHJ1bkNhbGN1bGF0ZSgpIHsKICAgICAgICBpZiAoIWVsLnJlc3VsdHMgfHwgIWVsLmxvYWQgfHwgIWVsLkMpIHJldHVybjsKICAgICAgICB2YXIgcCA9IHJlYWRJbnB1dHMoKTsKICAgICAgICB2YXIgZXJyb3JzID0gdmFsaWRhdGUocCk7CiAgICAgICAgbWFya0ludmFsaWQoZWwubG9hZCwgIShwLmxvYWRLTiA+IDApKTsKICAgICAgICBtYXJrSW52YWxpZChlbC5DLCAhKHAuQ0tOID4gMCkpOwogICAgICAgIG1hcmtJbnZhbGlkKGVsLnJwbSwgIShwLnJwbSA+IDApKTsKICAgICAgICBtYXJrSW52YWxpZChlbC50ZW1wLCAhaXNGaW5pdGUocC50ZW1wKSB8fCBwLnRlbXAgPCAtNDAgfHwgcC50ZW1wID4gMjUwKTsKICAgICAgICBtYXJrSW52YWxpZChlbC52aWIsICFpc0Zpbml0ZShwLnZpYikgfHwgcC52aWIgPCAwKTsKICAgICAgICBtYXJrSW52YWxpZChlbC5ob3VycywgIWlzRmluaXRlKHAuaG91cnMpIHx8IHAuaG91cnMgPCAwKTsKCiAgICAgICAgZWwucmVzdWx0cy5jbGFzc0xpc3QucmVtb3ZlKCJiZnJhLWhpZGRlbiIpOwogICAgICAgIGVsLnJlc3VsdHMuY2xhc3NMaXN0LmFkZCgiYmZyYS12aXNpYmxlIik7CgogICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7CiAgICAgICAgICBlbC5lcnJvci50ZXh0Q29udGVudCA9IGVycm9ycy5qb2luKCIgIik7CiAgICAgICAgICBlbC5lcnJvci5jbGFzc0xpc3QucmVtb3ZlKCJiZnJhLWhpZGRlbiIpOwogICAgICAgICAgZWwucmVzdWx0QmxvY2suY2xhc3NMaXN0LmFkZCgiYmZyYS1oaWRkZW4iKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGVsLmVycm9yLmNsYXNzTGlzdC5hZGQoImJmcmEtaGlkZGVuIik7CiAgICAgICAgZWwucmVzdWx0QmxvY2suY2xhc3NMaXN0LnJlbW92ZSgiYmZyYS1oaWRkZW4iKTsKCiAgICAgICAgdmFyIHJlc3VsdCA9IGFzc2VzcyhwKTsKICAgICAgICB2YXIgbGV2ZWwgPSByaXNrTGV2ZWwocmVzdWx0LnRvdGFsKTsKICAgICAgICB2YXIgY2F1c2VzID0gY2F1c2VzRnJvbShyZXN1bHQuZmFjdG9ycyk7CiAgICAgICAgdmFyIHJlY3MgPSByZWNzRnJvbShwLCByZXN1bHQsIGxldmVsLCBjYXVzZXMpOwoKICAgICAgICBzZXRHYXVnZShyZXN1bHQudG90YWwpOwogICAgICAgIGVsLmJhbm5lci5jbGFzc05hbWUgPSAiYmZyYS1yaXNrLWJhbm5lciAiICsgbGV2ZWwuY2xzOwogICAgICAgIGVsLnJpc2tUaXRsZS50ZXh0Q29udGVudCA9IGxldmVsLmxhYmVsOwogICAgICAgIGVsLnJpc2tOb3RlLnRleHRDb250ZW50ID0gbGV2ZWwubm90ZTsKICAgICAgICBlbC5vdXRQYy50ZXh0Q29udGVudCA9IGZtdChyZXN1bHQucGNSYXcsIDMpOwogICAgICAgIGVsLm91dFBjTm90ZS50ZXh0Q29udGVudCA9IHBjRHV0eShyZXN1bHQucGNSYXcpOwogICAgICAgIGVsLm91dFRvcC50ZXh0Q29udGVudCA9IHJlc3VsdC5mYWN0b3JzWzBdID8gcmVzdWx0LmZhY3RvcnNbMF0uY2F1c2UgOiAiLSI7CiAgICAgICAgdmFyIGFsZXJ0cyA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQuZmFjdG9ycy5sZW5ndGg7IGkrKykgaWYgKHJlc3VsdC5mYWN0b3JzW2ldLnNjb3JlID49IDUwKSBhbGVydHMrKzsKICAgICAgICBlbC5vdXRBbGVydC50ZXh0Q29udGVudCA9IFN0cmluZyhhbGVydHMpOwoKICAgICAgICByZW5kZXJCYXJzKHJlc3VsdC5mYWN0b3JzKTsKICAgICAgICByZW5kZXJDYXVzZXMoY2F1c2VzKTsKICAgICAgICByZW5kZXJSZWNzKHJlY3MsIGxldmVsKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGVsLnJlc3VsdHMuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogInNtb290aCIsIGJsb2NrOiAibmVhcmVzdCIgfSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgfQoKICAgICAgYnVpbGRQcmVzZXRzKCk7CiAgICAgIGFwcGx5UHJlc2V0KERFRkFVTFRTLCB0cnVlKTsKCiAgICAgIGxpbmtQYWlyKGVsLnJwbSwgZWwucnBtUmFuZ2UsIHN5bmNSZWFkb3V0KTsKICAgICAgbGlua1BhaXIoZWwudGVtcCwgZWwudGVtcFJhbmdlLCBzeW5jUmVhZG91dCk7CiAgICAgIGxpbmtQYWlyKGVsLnZpYiwgZWwudmliUmFuZ2UsIHN5bmNSZWFkb3V0KTsKICAgICAgbGlua1BhaXIoZWwuaG91cnMsIGVsLmhvdXJzUmFuZ2UsIHN5bmNSZWFkb3V0KTsKCiAgICAgIFsidHlwZSIsICJsb2FkS2luZCIsICJsb2FkIiwgImxvYWRVbml0IiwgIkMiLCAiQ1VuaXQiLCAibHViIiwgImluc3RhbGwiLCAiY29udGFtIl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgaWYgKCFlbFtrZXldKSByZXR1cm47CiAgICAgICAgZWxba2V5XS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGFjdGl2ZVByZXNldCA9ICIiOwogICAgICAgICAgcGFpbnRQcmVzZXRzKCk7CiAgICAgICAgICBzeW5jUmVhZG91dCgpOwogICAgICAgIH0pOwogICAgICAgIGVsW2tleV0uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgYWN0aXZlUHJlc2V0ID0gIiI7CiAgICAgICAgICBwYWludFByZXNldHMoKTsKICAgICAgICAgIHN5bmNSZWFkb3V0KCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgaWYgKGVsLmJ0bkNhbGMpIGVsLmJ0bkNhbGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBydW5DYWxjdWxhdGUpOwoKICAgICAgd2luZG93LmJmcmFSdW5DYWxjdWxhdGUgPSBydW5DYWxjdWxhdGU7CiAgICB9CgogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJsb2FkaW5nIikgewogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgc3RhcnRCZnJhKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXJ0QmZyYSgpOwogICAgfQoKICAgIHdpbmRvdy5iZnJhQ2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgewogICAgICBzdGFydEJmcmEoKTsKICAgICAgaWYgKHdpbmRvdy5iZnJhUnVuQ2FsY3VsYXRlKSB3aW5kb3cuYmZyYVJ1bkNhbGN1bGF0ZSgpOwogICAgfTsKICAgIH0pKCk7<\/textarea>\n<script id=\"bfra-boot-script\" type=\"text\/javascript\" data-no-minify=\"1\" data-no-defer=\"1\" data-cfasync=\"false\">\n(function(){\nvar el=document.getElementById(\"bfra-js-b64\");\nif(!el){return;}\nvar code=el.value;\nif(!code){code=el.textContent;}\nif(!code){return;}\ncode=code.replace(\/\\s\/g,\"\");\nvar s=document.createElement(\"script\");\ns.type=\"text\/javascript\";\ns.text=atob(code);\nvar p=document.body;\nif(!p){p=document.getElementsByTagName(\"head\")[0];}\nif(p){p.appendChild(s);}\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Bearing Failure Risk Assessment Calculator is an advanced engineering tool designed to evaluate the potential failure risks of bearings by analyzing key operating conditions&#8230;<\/p>","protected":false},"author":2,"featured_media":24671,"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":[8590,8592,8591,8593],"class_list":["post-24670","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bearing-failure","tag-bearing-maintenance","tag-reliability-analysis","tag-risk-assessment","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Bearing-Failure-Risk-Assessment-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/comments?post=24670"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24670\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media\/24671"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media?parent=24670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/categories?post=24670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/tags?post=24670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}