{"id":24761,"date":"2026-08-28T03:28:45","date_gmt":"2026-08-28T03:28:45","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24761"},"modified":"2026-08-28T05:39:45","modified_gmt":"2026-08-28T05:39:45","slug":"friction-force-and-transmission-efficiency-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/fr\/friction-force-and-transmission-efficiency-calculator\/","title":{"rendered":"Friction Force and Transmission Efficiency Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Friction Force and Transmission Efficiency Calculator<\/strong> is a practical engineering tool designed to calculate friction force, power loss, output power, and mechanical transmission efficiency. By entering parameters such as normal force, friction coefficient, speed, torque, and input power, users can quickly evaluate energy losses and transmission performance. The Friction Force and Transmission Efficiency Calculator helps engineers optimize mechanical systems, improve power transfer efficiency, reduce friction-related heat, and support reliable machine and transmission design.<\/p>\n\n\n\n<!-- WordPress Custom HTML Block: copy ALL content below -->\n<!-- Do NOT wrap in DOCTYPE\/html\/head\/body. Use Code Editor mode. -->\n<!-- All CSS\/JS scoped to #friction-transmission-efficiency-calculator \u2014 will NOT affect theme header, footer, or other page content. -->\n<style>\n\/* Friction Force and Transmission Efficiency Calculator \u2014 WordPress-safe scoped styles\n * MUST NOT affect theme header, footer, navigation, or any content\n * outside #friction-transmission-efficiency-calculator. No html\/body\/universal selectors.\n * Paste wordpress-embed.html into a Custom HTML block (Code Editor).\n *\/\n\n.entry-content #friction-transmission-efficiency-calculator,\n.wp-block-html #friction-transmission-efficiency-calculator,\n.wp-block-custom-html #friction-transmission-efficiency-calculator,\n.elementor-widget-container #friction-transmission-efficiency-calculator,\n#friction-transmission-efficiency-calculator {\n    all: revert;\n    --ftec-primary: #1e40af;\n    --ftec-primary-light: #3b82f6;\n    --ftec-primary-dark: #1e3a8a;\n    --ftec-success: #16a34a;\n    --ftec-warning: #d97706;\n    --ftec-danger: #dc2626;\n    --ftec-card-bg: #ffffff;\n    --ftec-text: #1e293b;\n    --ftec-text-muted: #64748b;\n    --ftec-border: #e2e8f0;\n    --ftec-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 4px 12px rgba(0, 0, 0, 0.04);\n    --ftec-radius: 10px;\n    --ftec-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n\n    box-sizing: border-box !important;\n    display: block !important;\n    isolation: isolate !important;\n    contain: layout style !important;\n    float: none !important;\n    clear: both !important;\n    position: relative !important;\n    z-index: auto !important;\n    overflow: visible !important;\n    font-family: var(--ftec-font) !important;\n    font-size: 16px !important;\n    font-weight: 400 !important;\n    line-height: 1.6 !important;\n    color: var(--ftec-text) !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    background: transparent !important;\n    text-align: left !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    margin: 0 !important;\n    padding: 0 !important;\n}\n.entry-content #friction-transmission-efficiency-calculator *,\n.entry-content #friction-transmission-efficiency-calculator *::before,\n.entry-content #friction-transmission-efficiency-calculator *::after,\n.wp-block-html #friction-transmission-efficiency-calculator *,\n.wp-block-html #friction-transmission-efficiency-calculator *::before,\n.wp-block-html #friction-transmission-efficiency-calculator *::after,\n.wp-block-custom-html #friction-transmission-efficiency-calculator *,\n.wp-block-custom-html #friction-transmission-efficiency-calculator *::before,\n.wp-block-custom-html #friction-transmission-efficiency-calculator *::after,\n.elementor-widget-container #friction-transmission-efficiency-calculator *,\n.elementor-widget-container #friction-transmission-efficiency-calculator *::before,\n.elementor-widget-container #friction-transmission-efficiency-calculator *::after,\n#friction-transmission-efficiency-calculator *,\n#friction-transmission-efficiency-calculator *::before,\n#friction-transmission-efficiency-calculator *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #friction-transmission-efficiency-calculator section,\n.entry-content #friction-transmission-efficiency-calculator h1,\n.entry-content #friction-transmission-efficiency-calculator h2,\n.entry-content #friction-transmission-efficiency-calculator h3,\n.entry-content #friction-transmission-efficiency-calculator h4,\n.entry-content #friction-transmission-efficiency-calculator p,\n.entry-content #friction-transmission-efficiency-calculator ul,\n.entry-content #friction-transmission-efficiency-calculator ol,\n.entry-content #friction-transmission-efficiency-calculator li,\n.entry-content #friction-transmission-efficiency-calculator div,\n.entry-content #friction-transmission-efficiency-calculator span,\n.entry-content #friction-transmission-efficiency-calculator strong,\n.entry-content #friction-transmission-efficiency-calculator em,\n.entry-content #friction-transmission-efficiency-calculator svg,\n.entry-content #friction-transmission-efficiency-calculator g,\n.wp-block-html #friction-transmission-efficiency-calculator section,\n.wp-block-html #friction-transmission-efficiency-calculator h1,\n.wp-block-html #friction-transmission-efficiency-calculator h2,\n.wp-block-html #friction-transmission-efficiency-calculator h3,\n.wp-block-html #friction-transmission-efficiency-calculator h4,\n.wp-block-html #friction-transmission-efficiency-calculator p,\n.wp-block-html #friction-transmission-efficiency-calculator ul,\n.wp-block-html #friction-transmission-efficiency-calculator ol,\n.wp-block-html #friction-transmission-efficiency-calculator li,\n.wp-block-html #friction-transmission-efficiency-calculator div,\n.wp-block-html #friction-transmission-efficiency-calculator span,\n.wp-block-html #friction-transmission-efficiency-calculator strong,\n.wp-block-html #friction-transmission-efficiency-calculator em,\n.wp-block-html #friction-transmission-efficiency-calculator svg,\n.wp-block-html #friction-transmission-efficiency-calculator g,\n.wp-block-custom-html #friction-transmission-efficiency-calculator section,\n.wp-block-custom-html #friction-transmission-efficiency-calculator h1,\n.wp-block-custom-html #friction-transmission-efficiency-calculator h2,\n.wp-block-custom-html #friction-transmission-efficiency-calculator h3,\n.wp-block-custom-html #friction-transmission-efficiency-calculator h4,\n.wp-block-custom-html #friction-transmission-efficiency-calculator p,\n.wp-block-custom-html #friction-transmission-efficiency-calculator ul,\n.wp-block-custom-html #friction-transmission-efficiency-calculator ol,\n.wp-block-custom-html #friction-transmission-efficiency-calculator li,\n.wp-block-custom-html #friction-transmission-efficiency-calculator div,\n.wp-block-custom-html #friction-transmission-efficiency-calculator span,\n.wp-block-custom-html #friction-transmission-efficiency-calculator strong,\n.wp-block-custom-html #friction-transmission-efficiency-calculator em,\n.wp-block-custom-html #friction-transmission-efficiency-calculator svg,\n.wp-block-custom-html #friction-transmission-efficiency-calculator g,\n.elementor-widget-container #friction-transmission-efficiency-calculator section,\n.elementor-widget-container #friction-transmission-efficiency-calculator h1,\n.elementor-widget-container #friction-transmission-efficiency-calculator h2,\n.elementor-widget-container #friction-transmission-efficiency-calculator h3,\n.elementor-widget-container #friction-transmission-efficiency-calculator h4,\n.elementor-widget-container #friction-transmission-efficiency-calculator p,\n.elementor-widget-container #friction-transmission-efficiency-calculator ul,\n.elementor-widget-container #friction-transmission-efficiency-calculator ol,\n.elementor-widget-container #friction-transmission-efficiency-calculator li,\n.elementor-widget-container #friction-transmission-efficiency-calculator div,\n.elementor-widget-container #friction-transmission-efficiency-calculator span,\n.elementor-widget-container #friction-transmission-efficiency-calculator strong,\n.elementor-widget-container #friction-transmission-efficiency-calculator em,\n.elementor-widget-container #friction-transmission-efficiency-calculator svg,\n.elementor-widget-container #friction-transmission-efficiency-calculator g,\n#friction-transmission-efficiency-calculator section,\n#friction-transmission-efficiency-calculator h1,\n#friction-transmission-efficiency-calculator h2,\n#friction-transmission-efficiency-calculator h3,\n#friction-transmission-efficiency-calculator h4,\n#friction-transmission-efficiency-calculator p,\n#friction-transmission-efficiency-calculator ul,\n#friction-transmission-efficiency-calculator ol,\n#friction-transmission-efficiency-calculator li,\n#friction-transmission-efficiency-calculator div,\n#friction-transmission-efficiency-calculator span,\n#friction-transmission-efficiency-calculator strong,\n#friction-transmission-efficiency-calculator em,\n#friction-transmission-efficiency-calculator svg,\n#friction-transmission-efficiency-calculator g {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: none !important;\n    box-shadow: none !important;\n    float: none !important;\n    font-family: inherit !important;\n    line-height: inherit !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n}\n.entry-content #friction-transmission-efficiency-calculator button,\n.entry-content #friction-transmission-efficiency-calculator input,\n.entry-content #friction-transmission-efficiency-calculator select,\n.entry-content #friction-transmission-efficiency-calculator textarea,\n.entry-content #friction-transmission-efficiency-calculator label,\n.wp-block-html #friction-transmission-efficiency-calculator button,\n.wp-block-html #friction-transmission-efficiency-calculator input,\n.wp-block-html #friction-transmission-efficiency-calculator select,\n.wp-block-html #friction-transmission-efficiency-calculator textarea,\n.wp-block-html #friction-transmission-efficiency-calculator label,\n.wp-block-custom-html #friction-transmission-efficiency-calculator button,\n.wp-block-custom-html #friction-transmission-efficiency-calculator input,\n.wp-block-custom-html #friction-transmission-efficiency-calculator select,\n.wp-block-custom-html #friction-transmission-efficiency-calculator textarea,\n.wp-block-custom-html #friction-transmission-efficiency-calculator label,\n.elementor-widget-container #friction-transmission-efficiency-calculator button,\n.elementor-widget-container #friction-transmission-efficiency-calculator input,\n.elementor-widget-container #friction-transmission-efficiency-calculator select,\n.elementor-widget-container #friction-transmission-efficiency-calculator textarea,\n.elementor-widget-container #friction-transmission-efficiency-calculator label,\n#friction-transmission-efficiency-calculator button,\n#friction-transmission-efficiency-calculator input,\n#friction-transmission-efficiency-calculator select,\n#friction-transmission-efficiency-calculator textarea,\n#friction-transmission-efficiency-calculator label {\n    font: inherit !important;\n    color: inherit !important;\n    margin: 0 !important;\n    min-width: 0 !important;\n    max-width: none !important;\n    float: none !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    box-shadow: none !important;\n}\n\n.entry-content #friction-transmission-efficiency-calculator svg,\n.wp-block-html #friction-transmission-efficiency-calculator svg,\n.wp-block-custom-html #friction-transmission-efficiency-calculator svg,\n.elementor-widget-container #friction-transmission-efficiency-calculator svg,\n#friction-transmission-efficiency-calculator svg {\n    display: inline-block !important;\n    vertical-align: middle !important;\n    overflow: visible !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-js-store,\n#friction-transmission-efficiency-calculator .ftec-js-chunk {\n    display: none !important;\n    visibility: hidden !important;\n    width: 0 !important;\n    height: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    pointer-events: none !important;\n}\n#friction-transmission-efficiency-calculator .ftec-container {\n    max-width: 1140px !important;\n    margin: 0 auto !important;\n    padding: 0 !important;\n    width: 100% !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-layout {    display: flex !important;\n    flex-direction: column !important;\n    gap: 1.25rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-card {\n    background: var(--ftec-card-bg) !important;\n    border-radius: var(--ftec-radius) !important;\n    box-shadow: var(--ftec-shadow) !important;\n    padding: 1.5rem !important;\n    border: 1px solid var(--ftec-border) !important;\n    border-top: 3px solid var(--ftec-primary) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-card h2 {\n    font-size: 1.15rem !important;\n    font-weight: 700 !important;\n    color: var(--ftec-primary-dark) !important;\n    margin-bottom: 1rem !important;\n    padding-bottom: 0.5rem !important;\n    border-bottom: 1px solid var(--ftec-border) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-subsection-title {\n    font-size: 0.82rem !important;\n    font-weight: 700 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.04em !important;\n    color: var(--ftec-text-muted) !important;\n    margin: 1rem 0 0.65rem 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-input-grid {\n    display: grid !important;\n    grid-template-columns: repeat(2, 1fr) !important;\n    gap: 0.85rem 1rem !important;\n}\n\n@media (max-width: 640px) {\n    #friction-transmission-efficiency-calculator .ftec-input-grid {\n        grid-template-columns: 1fr !important;\n    }\n    #friction-transmission-efficiency-calculator .ftec-hero {\n        grid-template-columns: 1fr !important;\n    }\n    #friction-transmission-efficiency-calculator .ftec-viz-row {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n#friction-transmission-efficiency-calculator .ftec-form-group {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 0.35rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-full-width {\n    grid-column: 1 \/ -1 !important;\n}\n\n#friction-transmission-efficiency-calculator label {\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 0.35rem !important;\n    flex-wrap: wrap !important;\n}\n\n#friction-transmission-efficiency-calculator input[type=\"number\"],\n#friction-transmission-efficiency-calculator input[type=\"radio\"],\n#friction-transmission-efficiency-calculator select {\n    width: 100% !important;\n    padding: 0.55rem 0.65rem !important;\n    border: 1px solid var(--ftec-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.9rem !important;\n    background: #fff !important;\n    appearance: auto !important;\n    box-shadow: none !important;\n    line-height: normal !important;\n    height: auto !important;\n}\n\n#friction-transmission-efficiency-calculator input[type=\"radio\"] {\n    width: auto !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    flex-shrink: 0 !important;\n}\n#friction-transmission-efficiency-calculator .ftec-input-with-unit {\n    display: flex !important;\n    gap: 0.4rem !important;\n    align-items: stretch !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-input-with-unit input {\n    flex: 1 !important;\n    min-width: 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-input-with-unit select {\n    width: auto !important;\n    min-width: 4.5rem !important;\n    flex-shrink: 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-unit-label {\n    display: inline-flex !important;\n    align-items: center !important;\n    padding: 0 0.65rem !important;\n    background: #f1f5f9 !important;\n    border: 1px solid var(--ftec-border) !important;\n    border-radius: 6px !important;\n    font-size: 0.82rem !important;\n    color: var(--ftec-text-muted) !important;\n    white-space: nowrap !important;\n    flex-shrink: 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-unit-toggle {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 0.75rem 1.25rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-radio-label {\n    display: inline-flex !important;\n    align-items: center !important;\n    gap: 0.4rem !important;\n    font-size: 0.88rem !important;\n    cursor: pointer !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-mode-note,\n#friction-transmission-efficiency-calculator .ftec-range-hint {\n    font-size: 0.8rem !important;\n    color: var(--ftec-text-muted) !important;\n    font-style: italic !important;\n    grid-column: 1 \/ -1 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-tooltip {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 16px !important;\n    height: 16px !important;\n    border-radius: 50% !important;\n    background: var(--ftec-text-muted) !important;\n    color: #fff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    position: relative !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-tooltip::after {\n    content: attr(data-tip) !important;\n    position: absolute !important;\n    bottom: calc(100% + 6px) !important;\n    left: 50% !important;\n    transform: translateX(-50%) !important;\n    background: var(--ftec-text) !important;\n    color: #fff !important;\n    padding: 0.5rem 0.75rem !important;\n    border-radius: 6px !important;\n    font-size: 0.75rem !important;\n    font-weight: 400 !important;\n    white-space: normal !important;\n    width: max-content !important;\n    max-width: 260px !important;\n    opacity: 0 !important;\n    visibility: hidden !important;\n    z-index: 100 !important;\n    pointer-events: none !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-tooltip:hover::after {\n    opacity: 1 !important;\n    visibility: visible !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-hidden {\n    display: none !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-alert {\n    padding: 0.65rem 0.85rem !important;\n    border-radius: 4px !important;\n    font-size: 0.85rem !important;\n    margin-bottom: 0.5rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-alert-error {\n    background: #fee2e2 !important;\n    border-left: 4px solid var(--ftec-danger) !important;\n    color: #991b1b !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-alert-warn {\n    background: #fef3c7 !important;\n    border-left: 4px solid var(--ftec-warning) !important;\n    color: #92400e !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-btn-row {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    gap: 0.75rem !important;\n    justify-content: center !important;\n    margin-top: 1.25rem !important;\n    padding-top: 1rem !important;\n    border-top: 1px solid var(--ftec-border) !important;\n}\n\n#friction-transmission-efficiency-calculator button {\n    padding: 0.75rem 1.5rem !important;\n    border: none !important;\n    border-radius: 8px !important;\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    font-family: inherit !important;\n    line-height: normal !important;\n    cursor: pointer !important;\n    min-width: 160px !important;\n    box-shadow: none !important;\n    appearance: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n#friction-transmission-efficiency-calculator .ftec-btn-primary {\n    background: var(--ftec-primary) !important;\n    color: #fff !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-btn-primary:hover {\n    background: var(--ftec-primary-dark) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-btn-secondary {\n    background: #f1f5f9 !important;\n    color: var(--ftec-text) !important;\n    border: 1px solid var(--ftec-border) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner {\n    display: flex !important;\n    align-items: center !important;\n    gap: 1rem !important;\n    padding: 1rem 1.25rem !important;\n    border-radius: 8px !important;\n    margin-bottom: 1rem !important;\n    background: #f1f5f9 !important;\n    border-left: 4px solid var(--ftec-text-muted) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner.ftec-status-good {\n    background: #dcfce7 !important;\n    border-left-color: var(--ftec-success) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner.ftec-status-warn {\n    background: #fef3c7 !important;\n    border-left-color: var(--ftec-warning) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner.ftec-status-bad {\n    background: #fee2e2 !important;\n    border-left-color: var(--ftec-danger) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner strong {\n    display: block !important;\n    font-size: 1rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-status-banner p {\n    font-size: 0.85rem !important;\n    color: var(--ftec-text-muted) !important;\n    margin-top: 0.15rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-hero {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.75rem !important;\n    margin-bottom: 1rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-hero-card {\n    padding: 1rem !important;\n    background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%) !important;\n    border: 1px solid var(--ftec-primary-light) !important;\n    border-radius: 8px !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-hero-k {\n    font-size: 0.75rem !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.04em !important;\n    color: var(--ftec-text-muted) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-hero-v {\n    font-size: 1.45rem !important;\n    font-weight: 700 !important;\n    color: var(--ftec-primary-dark) !important;\n    margin: 0.25rem 0 !important;\n    font-variant-numeric: tabular-nums !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-viz-row {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.75rem !important;\n    margin-bottom: 1rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-viz-box {\n    padding: 1rem !important;\n    background: #f8fafc !important;\n    border: 1px solid var(--ftec-border) !important;\n    border-radius: 8px !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-viz-title {\n    font-size: 0.78rem !important;\n    font-weight: 700 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.04em !important;\n    color: var(--ftec-text-muted) !important;\n    margin-bottom: 0.75rem !important;\n    text-align: center !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-schematic {\n    width: 100% !important;\n    max-width: 280px !important;\n    display: block !important;\n    margin: 0 auto !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-block {\n    fill: #94a3b8 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-surface {\n    fill: #64748b !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-arrow-motion {\n    stroke: var(--ftec-primary) !important;\n    stroke-width: 2.5 !important;\n    fill: none !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-arrow-friction {\n    stroke: var(--ftec-danger) !important;\n    stroke-width: 2 !important;\n    fill: none !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-label {\n    font-size: 10px !important;\n    fill: var(--ftec-text-muted) !important;\n    font-family: var(--ftec-font) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-shaft {\n    fill: #475569 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-sch-gear {\n    fill: #64748b !important;\n    stroke: #334155 !important;\n    stroke-width: 1 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-power-flow {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    flex-wrap: wrap !important;\n    gap: 0.5rem !important;\n    padding: 0.75rem 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-flow-node {\n    padding: 0.5rem 0.75rem !important;\n    border-radius: 6px !important;\n    font-size: 0.78rem !important;\n    font-weight: 600 !important;\n    text-align: center !important;\n    min-width: 70px !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-flow-in {\n    background: #dbeafe !important;\n    color: #1e40af !important;\n    border: 1px solid #93c5fd !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-flow-loss {\n    background: #fee2e2 !important;\n    color: #991b1b !important;\n    border: 1px solid #fca5a5 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-flow-out {\n    background: #dcfce7 !important;\n    color: #166534 !important;\n    border: 1px solid #86efac !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-flow-arrow {\n    font-size: 1.2rem !important;\n    color: var(--ftec-text-muted) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-viz-caption {\n    font-size: 0.75rem !important;\n    color: var(--ftec-text-muted) !important;\n    text-align: center !important;\n    margin: 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-viz-caption-spaced {\n    margin-top: 0.75rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-heat-icon {    text-align: center !important;\n    font-size: 2rem !important;\n    margin: 0.5rem 0 !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-gauge-row {\n    display: flex !important;\n    align-items: center !important;\n    gap: 1rem !important;\n    justify-content: center !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-gauge-svg {\n    width: 180px !important;\n    height: auto !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-gauge-readout {\n    font-size: 1.5rem !important;\n    font-weight: 700 !important;\n    color: var(--ftec-primary-dark) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-util {\n    margin-bottom: 1rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-util-head {\n    display: flex !important;\n    justify-content: space-between !important;\n    font-size: 0.85rem !important;\n    margin-bottom: 0.35rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-util-track {\n    height: 10px !important;\n    background: #e2e8f0 !important;\n    border-radius: 5px !important;\n    overflow: hidden !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-util-fill {\n    height: 100% !important;\n    background: linear-gradient(90deg, var(--ftec-success), var(--ftec-warning), var(--ftec-danger)) !important;\n    border-radius: 5px !important;\n    width: 0 !important;\n    transition: width 0.3s ease !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-results-grid {\n    display: grid !important;\n    grid-template-columns: repeat(2, 1fr) !important;\n    gap: 0.65rem !important;\n    margin-bottom: 1rem !important;\n}\n\n@media (max-width: 520px) {\n    #friction-transmission-efficiency-calculator .ftec-results-grid {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n#friction-transmission-efficiency-calculator .ftec-result-item {\n    padding: 0.65rem 0.75rem !important;\n    background: #f8fafc !important;\n    border: 1px solid var(--ftec-border) !important;\n    border-radius: 6px !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-result-label {\n    display: block !important;\n    font-size: 0.72rem !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n    color: var(--ftec-text-muted) !important;\n    margin-bottom: 0.2rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-result-value {\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    font-variant-numeric: tabular-nums !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-out-status.ftec-status-good,\n#friction-transmission-efficiency-calculator .ftec-out-risk.ftec-risk-low {\n    color: var(--ftec-success) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-out-status.ftec-status-warn,\n#friction-transmission-efficiency-calculator .ftec-out-risk.ftec-risk-moderate {\n    color: var(--ftec-warning) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-out-status.ftec-status-bad,\n#friction-transmission-efficiency-calculator .ftec-out-risk.ftec-risk-high {\n    color: var(--ftec-danger) !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-rec-box {\n    padding: 1rem !important;\n    background: #eff6ff !important;\n    border: 1px solid #bfdbfe !important;\n    border-radius: 8px !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-rec-box h3 {\n    font-size: 0.9rem !important;\n    font-weight: 700 !important;\n    color: var(--ftec-primary-dark) !important;\n    margin-bottom: 0.5rem !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-rec-box ul {\n    padding-left: 1.25rem !important;\n    list-style: disc !important;\n}\n\n#friction-transmission-efficiency-calculator .ftec-rec-box li {\n    font-size: 0.85rem !important;\n    color: var(--ftec-text) !important;\n    margin-bottom: 0.35rem !important;\n}\n\n<\/style>\n\n<div id=\"friction-transmission-efficiency-calculator\"><div class=\"ftec-js-store\" aria-hidden=\"true\" hidden><span class=\"ftec-js-chunk\">LyoqDQogKiBGcmljdGlvbiBGb3JjZSBhbmQgVHJhbnNtaXNzaW9uIEVmZmljaWVuY3kgQ2FsY3VsYXRvcg0KICogU2NvcGVkIGZvciBXb3JkUHJlc3MgZW1iZWQg4oCUICNmcmljdGlvbi10cmFuc21pc3Npb24tZWZmaWNpZW5jeS1jYWxjdWxhdG9yDQogKi8NCihmdW5jdGlvbiAoKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgdmFyIFJPT1RfSUQgPSAnZnJpY3Rpb24tdHJhbnNtaXNzaW9uLWVmZmljaWVuY3ktY2FsY3VsYXRvcic7DQogICAgdmFyIE5fVE9fS04gPSAwLjAwMTsNCiAgICB2YXIgS05fVE9fTiA9IDEwMDA7DQogICAgdmFyIE5fVE9fTEJGID0gMC4yMjQ4MDg5NDM7DQogICAgdmFyIExCRl9UT19OID0gMSAvIE5fVE9fTEJGOw0KICAgIHZhciBOTV9UT19MQkZGVCA9IDAuNzM3NTYyMTQ5Ow0KICAgIHZhciBMQkZGVF9UT19OTSA9IDEgLyBOTV9UT19MQkZGVDsNCiAgICB2YXIgV19UT19LVyA9IDAuMDAxOw0KICAgIHZhciBLV19UT19XID0gMTAwMDsNCiAgICB2YXIgV19UT19IUCA9IDAuMDAxMzQxMDI7DQogICAgdmFyIEhQX1RPX1cgPSAxIC8gV19UT19IUDsNCiAgICB2YXIgRlRTX1RPX01QUyA9IDAuMzA0ODsNCiAgICB2YXIgTVBTX1RPX0ZUUyA9IDEgLyBGVFNfVE9fTVBTOw0KICAgIHZhciBGVFBNX1RPX01QUyA9IDAuMDA1MDg7DQogICAgdmFyIE1QU19UT19GVFBNID0gMSAvIEZUUE1fVE9fTVBTOw0KICAgIHZhciBHQVVHRV9BUkMgPSAyODIuNzQzOw0KICAgIHZhciBOQSA9ICfigJQnOw0KICAgIHZhciBQSTIgPSAyICogTWF0aC5QSTsNCg0KICAgIHZhciBNQVRFUklBTF9QUkVTRVRTID0gew0KICAgICAgICAnc3RlZWwtc3RlZWwnOiB7DQogICAgICAgICAgICBsYWJlbDogJ1N0ZWVsIG9uIFN0ZWVsJywNCiAgICAgICAgICAgIGRyeTogeyBtdXM6IDAuNzQsIG11azogMC41NyB9LA0KICAgICAgICAgICAgbGlnaHQ6IHsgbXVzOiAwLjE1LCBtdWs6IDAuMTAgfSwNCiAgICAgICAgICAgIG9pbDogeyBtdXM6IDAuMTIsIG11azogMC4wOCB9LA0KICAgICAgICAgICAgZ3JlYXNlOiB7IG11czogMC4xNCwgbXVrOiAwLjA5IH0sDQogICAgICAgICAgICBleGNlbGxlbnQ6IHsgbXVzOiAwLjA4LCBtdWs6IDAuMDUgfSwNCiAgICAgICAgICAgIGN1c3RvbTogbnVsbA0KICAgICAgICB9LA0KICAgICAgICAnc3RlZWwtYnJvbnplJzogew0KICAgICAgICAgICAgbGFiZWw6ICdTdGVlbCBvbiBCcm9uemUnLA0KICAgICAgICAgICAgZHJ5OiB7IG11czogMC4zNSwgbXVrOiAwLjI4IH0sDQogICAgICAgICAgICBsaWdodDogeyBtdXM6IDAuMTgsIG11azogMC4xNCB9LA0KICAgICAgICAgICAgb2lsOiB7IG11czogMC4xMiwgbXVrOiAwLjEwIH0sDQogICAgICAgICAgICBncmVhc2U6IHsgbXVzOiAwLjE0LCBtdWs6IDAuMTEgfSwNCiAgICAgICAgICAgIGV4Y2VsbGVudDogeyBtdXM6IDAuMDgsIG11azogMC4wNiB9LA0KICAgICAgICAgICAgY3VzdG9tOiBudWxsDQogICAgICAgIH0sDQogICAgICAgICdzdGVlbC1jYXN0LWlyb24nOiB7DQogICAgICAgICAgICBsYWJlbDogJ1N0ZWVsIG9uIENhc3QgSXJvbicsDQogICAgICAgICAgICBkcnk6IHsgbXVzOiAwLjQwLCBtdWs6IDAuMzAgfSwNCiAgICAgICAgICAgIGxpZ2h0OiB7IG11czogMC4xOCwgbXVrOiAwLjE0IH0sDQogICAgICAgICAgICBvaWw6IHsgbXVzOiAwLjEyLCBtdWs6IDAuMTAgfSwNCiAgICAgICAgICAgIGdyZWFzZTogeyBtdXM6IDAuMTUsIG11azogMC4xMSB9LA0KICAgICAgICAgICAgZXhjZWxsZW50OiB7IG11czogMC4wOSwgbXVrOiAwLjA2IH0sDQogICAgICAgICAgICBjdXN0b206IG51bGwNCiAgICAgICAgfSwNCiAgICAgICAgJ3N0ZWVsLXB0ZmUnOiB7DQogICAgICAgICAgICBsYWJlbDogJ1N0ZWVsIG9uIFBURkUnLA0KICAgICAgICAgICAgZHJ5OiB7IG11czogMC4xMCwgbXVrOiAwLjA4IH0sDQogICAgICAgICAgICBsaWdodDogeyBtdXM6IDAuMDgsIG11azogMC4wNiB9LA0KICAgICAgICAgICAgb2lsOiB7IG11czogMC4wNiwgbXVrOiAwLjA0IH0sDQogICAgICAgICAgICBncmVhc2U6IHsgbXVzOiAwLjA3LCBtdWs6IDAuMDUgfSwNCiAgICAgICAgICAgIGV4Y2VsbGVudDogeyBtdXM6IDAuMDQsIG11azogMC4wMyB9LA0KICAgICAgICAgICAgY3VzdG9tOiBudWxsDQogICAgICAgIH0sDQogICAgICAgICdhbHVtaW51bS1zdGVlbCc6IHsNCiAgICAgICAgICAgIGxhYmVsOiAnQWx1bWludW0gb24gU3RlZWwnLA0KICAgICAgICAgICAgZHJ5OiB7IG11czogMC40NSwgbXVrOiAwLjM1IH0sDQogICAgICAgICAgICBsaWdodDogeyBtdXM6IDAuMjIsIG11azogMC4xNiB9LA0KICAgICAgICAgICAgb2lsOiB7IG11czogMC4xNiwgbXVrOiAwLjEyIH0sDQogICAgICAgICAgICBncmVhc2U6IHsgbXVzOiAwLjE4LCBtdWs6IDAuMTMgfSwNCiAgICAgICAgICAgIGV4Y2VsbGVudDogeyBtdXM6IDAuMTAsIG11azogMC4wNyB9LA0KICAgICAgICAgICAgY3VzdG9tOiBudWxsDQogICAgICAgIH0sDQogICAgICAgIGN1c3RvbTogeyBsYWJlbDogJ0N1c3RvbScsIGRyeTogbnVsbCwgbGlnaHQ6IG51bGwsIG9pbDogbnVsbCwgZ3JlYXNlOiBudWxsLCBleGNlbGxlbnQ6IG51bGwsIGN1c3RvbTogbnVsbCB9DQogICAgfTsNCg0KICAgIHZhciBMVUJFX0xBQkVMUyA9IHsNCiAgICAgICAgZHJ5OiAnRHJ5JywNCiAgICAgICAgbGlnaHQ6ICdMaWdodCBMdWJyaWNhdGlvbicsDQogICAgICAgIG9pbDogJ09pbCBMdWJyaWNhdGVkJywNCiAgICAgICAgZ3JlYXNlOiAnR3JlYXNlIEx1YnJpY2F0ZWQnLA0KICAgICAgICBleGNlbGxlbnQ6ICdFeGNlbGxlbnQgTHVicmljYXRpb24nLA0KICAgICAgICBjdXN0b206ICdDdXN0b20nDQogICAgfTsNCg0KICAgIHZhciBERUZBVUxUUyA9IHsNCiAgICAgICAgdW5pdDogJ21ldHJpYycsDQogICAgICAgIG1vZGU6ICdjb21iaW5lZCcsDQogICAgICAgIG1vdGlvbjogJ2xpbmVhcicsDQogICAgICAgIG5vcm1hbEZvcmNlOiA1MDAwLA0KICAgICAgICBub3JtYWxGb3JjZVVuaXQ6ICdOJywNCiAgICAgICAgbXVzOiAnJywNCiAgICAgICAgbXVrOiAwLjEyLA0KICAgICAgICBzbGlkaW5nU3BlZWQ6IDAuNSwNCiAgICAgICAgc2xpZGluZ1NwZWVkVW5pdDogJ20vcycsDQogICAgICAgIGZyaWN0aW9uVG9ycXVlOiAnJywNCiAgICAgICAgZnJpY3Rpb25Ub3JxdWVVbml0OiAnTsK3bScsDQogICAgICAgIHJwbTogJycsDQogICAgICAgIGlucHV0UG93ZXI6IDIsDQogICAgICAgIGlucHV0UG93ZXJVbml0OiAna1cnLA0KICAgICAgICBpbnB1dFRvcnF1ZTogJycsDQogICAgICAgIGlucHV0VG9ycXVlVW5pdDogJ07Ct20nLA0KICAgICAgICBvdXRwdXRUb3JxdWU6ICcnLA0KICAgICAgICBvdXRwdXRUb3JxdWVVbml0OiAnTsK3bScsDQogICAgICAgIGlucHV0U3BlZWQ6ICcnLA0KICAgICAgICBvdXRwdXRTcGVlZDogJycsDQogICAgICAgIGx1YmU6ICdvaWwnLA0KICAgICAgICBtYXRlcmlhbDogJ3N0ZWVsLWJyb256ZScsDQogICAgICAgIHRlbXA6ICcnDQogICAgfTsNCg0KICAgIHZhciByb290LCBlbHMsIHN0YXRlLCBtYW51YWxNdU92ZXJyaWRlOw0KDQogICAgZnVuY3Rpb24gJChpZCkgew0KICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBwYXJzZU51bSh2KSB7DQogICAgICAgIGlmICh2ID09PSAnJyB8fCB2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7DQogICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodikucmVwbGFjZSgnLCcsICcuJykpOw0KICAgICAgICByZXR1cm4gaXNOYU4obikgPyBudWxsIDogbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmbXQodiwgZCkgew0KICAgICAgICBpZiAoIWlzRmluaXRlKHYpKSByZXR1cm4gTkE7DQogICAgICAgIHJldHVybiB2LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsNCiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZCwNCiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMA0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZXRWaXNpYmxlKG5vZGVzLCBzaG93KSB7DQogICAgICAgIFtdLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBpZiAoIWVsKSByZXR1cm47DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdmdGVjLWhpZGRlbicsICFzaG93KTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdG9NZXRyaWNGb3JjZSh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnTicpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2tOJykgcmV0dXJuIHYgKiBLTl9UT19OOw0KICAgICAgICByZXR1cm4gdiAqIExCRl9UT19OOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZyb21NZXRyaWNGb3JjZSh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnTicpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2tO<\/span><span class=\"ftec-js-chunk\">JykgcmV0dXJuIHYgKiBOX1RPX0tOOw0KICAgICAgICByZXR1cm4gdiAqIE5fVE9fTEJGOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTWV0cmljVG9ycXVlKHYsIHVuaXQpIHsNCiAgICAgICAgaWYgKHVuaXQgPT09ICdOwrdtJykgcmV0dXJuIHY7DQogICAgICAgIHJldHVybiB2ICogTEJGRlRfVE9fTk07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZnJvbU1ldHJpY1RvcnF1ZSh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnTsK3bScpIHJldHVybiB2Ow0KICAgICAgICByZXR1cm4gdiAqIE5NX1RPX0xCRkZUOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTWV0cmljUG93ZXIodiwgdW5pdCkgew0KICAgICAgICBpZiAodW5pdCA9PT0gJ1cnKSByZXR1cm4gdjsNCiAgICAgICAgaWYgKHVuaXQgPT09ICdrVycpIHJldHVybiB2ICogS1dfVE9fVzsNCiAgICAgICAgcmV0dXJuIHYgKiBIUF9UT19XOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZyb21NZXRyaWNQb3dlcih2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnVycpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2tXJykgcmV0dXJuIHYgKiBXX1RPX0tXOw0KICAgICAgICByZXR1cm4gdiAqIFdfVE9fSFA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdG9NZXRyaWNTcGVlZCh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnbS9zJykgcmV0dXJuIHY7DQogICAgICAgIGlmICh1bml0ID09PSAnZnQvcycpIHJldHVybiB2ICogRlRTX1RPX01QUzsNCiAgICAgICAgcmV0dXJuIHYgKiBGVFBNX1RPX01QUzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmcm9tTWV0cmljU3BlZWQodiwgdW5pdCkgew0KICAgICAgICBpZiAodW5pdCA9PT0gJ20vcycpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2Z0L3MnKSByZXR1cm4gdiAqIE1QU19UT19GVFM7DQogICAgICAgIHJldHVybiB2ICogTVBTX1RPX0ZUUE07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcnBtVG9PbWVnYShycG0pIHsNCiAgICAgICAgcmV0dXJuIFBJMiAqIHJwbSAvIDYwOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzTGluZWFyTW90aW9uKCkgew0KICAgICAgICByZXR1cm4gc3RhdGUubW90aW9uID09PSAnbGluZWFyJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc1JvdGF0aW9uYWxNb3Rpb24oKSB7DQogICAgICAgIHJldHVybiBzdGF0ZS5tb3Rpb24gIT09ICdsaW5lYXInOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG1vZGVOZWVkc1Bvd2VyKCkgew0KICAgICAgICByZXR1cm4gc3RhdGUubW9kZSA9PT0gJ3Bvd2VyLWxvc3MnIHx8IHN0YXRlLm1vZGUgPT09ICdlZmZpY2llbmN5JyB8fCBzdGF0ZS5tb2RlID09PSAnY29tYmluZWQnOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG1vZGVOZWVkc0VmZmljaWVuY3koKSB7DQogICAgICAgIHJldHVybiBzdGF0ZS5tb2RlID09PSAnZWZmaWNpZW5jeScgfHwgc3RhdGUubW9kZSA9PT0gJ2NvbWJpbmVkJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKSB7DQogICAgICAgIHZhciBsaW5lYXIgPSBpc0xpbmVhck1vdGlvbigpOw0KICAgICAgICB2YXIgcm90YXRpb25hbCA9IGlzUm90YXRpb25hbE1vdGlvbigpOw0KICAgICAgICB2YXIgbmVlZHNQb3dlciA9IG1vZGVOZWVkc1Bvd2VyKCk7DQogICAgICAgIHZhciBuZWVkc0VmZiA9IG1vZGVOZWVkc0VmZmljaWVuY3koKTsNCg0KICAgICAgICBzZXRWaXNpYmxlKHJvb3QucXVlcnlTZWxlY3RvckFsbCgnLmZ0ZWMtZmllbGQtbGluZWFyJyksIGxpbmVhcik7DQogICAgICAgIHNldFZpc2libGUocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuZnRlYy1maWVsZC1yb3RhdGlvbmFsJyksIHJvdGF0aW9uYWwpOw0KICAgICAgICBzZXRWaXNpYmxlKHJvb3QucXVlcnlTZWxlY3RvckFsbCgnLmZ0ZWMtZmllbGQtcG93ZXInKSwgbmVlZHNQb3dlcik7DQogICAgICAgIHNldFZpc2libGUocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuZnRlYy1maWVsZC10b3JxdWUtZWZmJyksIG5lZWRzRWZmICYmIHJvdGF0aW9uYWwpOw0KICAgICAgICBzZXRWaXNpYmxlKHJvb3QucXVlcnlTZWxlY3RvckFsbCgnLmZ0ZWMtZmllbGQtcnBtJyksIHJvdGF0aW9uYWwgJiYgbmVlZHNQb3dlcik7DQogICAgICAgIHNldFZpc2libGUocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuZnRlYy1maWVsZC1mcmljdGlvbicpLCBzdGF0ZS5tb2RlICE9PSAnZWZmaWNpZW5jeScgfHwgbGluZWFyKTsNCg0KICAgICAgICB2YXIgbW9kZU5vdGVzID0gew0KICAgICAgICAgICAgJ2ZyaWN0aW9uLWZvcmNlJzogJ0NhbGN1bGF0ZSBzdGF0aWMgYW5kIGtpbmV0aWMgZnJpY3Rpb24gZm9yY2UgZnJvbSBub3JtYWwgbG9hZCBhbmQgZnJpY3Rpb24gY29lZmZpY2llbnRzLicsDQogICAgICAgICAgICAncG93ZXItbG9zcyc6ICdDYWxjdWxhdGUgZnJpY3Rpb25hbCBwb3dlciBsb3NzIGZyb20gZnJpY3Rpb24gZm9yY2UvdG9ycXVlIGFuZCBzcGVlZC4nLA0KICAgICAgICAgICAgJ2VmZmljaWVuY3knOiAnQ2FsY3VsYXRlIHRyYW5zbWlzc2lvbiBlZmZpY2llbmN5IGZyb20gaW5wdXQvb3V0cHV0IHBvd2VyIG9yIHRvcnF1ZSBhbmQgc3BlZWQuJywNCiAgICAgICAgICAgIGNvbWJpbmVkOiAnQ29tcGxldGUgZnJpY3Rpb24gZm9yY2UsIHBvd2VyIGxvc3MsIG91dHB1dCBwb3dlciwgZWZmaWNpZW5jeSwgYW5kIHJpc2sgYW5hbHlzaXMuJw0KICAgICAgICB9Ow0KICAgICAgICBpZiAoZWxzLm1vZGVOb3RlKSB7DQogICAgICAgICAgICBlbHMubW9kZU5vdGUudGV4dENvbnRlbnQgPSBtb2RlTm90ZXNbc3RhdGUubW9kZV0gfHwgJyc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgew0KICAgICAgICB2YXIgbWV0cmljID0gc3RhdGUudW5pdCA9PT0gJ21ldHJpYyc7DQogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdW5pdD0ic3BlZWQiXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICdtL3MnIDogJ2Z0L21pbic7DQogICAgICAgIH0pOw0KICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXVuaXQ9InRlbXAiXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IG1ldHJpYyA\/ICfCsEMnIDogJ8KwRic7DQogICAgICAgIH0pOw0KICAgICAgICBpZiAoZWxzLnNsaWRpbmdTcGVlZFVuaXQpIHsNCiAgICAgICAgICAgIGVscy5zbGlkaW5nU3BlZWRVbml0LmlubmVySFRNTCA9IG1ldHJpYw0KICAgICAgICAgICAgICAgID8gJzxvcHRpb24gdmFsdWU9Im0vcyI+bS9zPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZnQvcyI+ZnQvczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImZ0L21pbiI+ZnQvbWluPC9vcHRpb24+Jw0KICAgICAgICAgICAgICAgIDogJzxvcHRpb24gdmFsdWU9ImZ0L21pbiI+ZnQvbWluPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZnQvcyI+ZnQvczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im0vcyI+bS9zPC9vcHRpb24+JzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGFwcGx5TWF0ZXJpYWxQcmVzZXQoKSB7DQogICAgICAgIGlmIChtYW51YWxNdU92ZXJyaWRlKSByZXR1cm47DQogICAgICAgIHZhciBtYXQgPSBNQVRFUklBTF9QUkVTRVRTW3N0YXRlLm1hdGVyaWFsXTsNCiAgICAgICAgaWYgKCFtYXQpIHJldHVybjsNCiAgICAgICAgdmFyIHByZXNldCA9IG1hdFtzdGF0ZS5sdWJlXTsNCiAgICAgICAgaWYgKCFwcmVzZXQpIHsNCiAgICAgICAgICAgIGlmIChlbHMucHJlc2V0SGludCkgew0KICAgICAgICAgICAgICAgIGVscy5wcmVzZXRIaW50LnRleHRDb250ZW50ID0gJ0N1c3RvbSBtYXRlcmlhbC9sdWJyaWNhdGlvbiDigJQgZW50ZXIgZnJpY3Rpb24gY29lZmZpY2llbnRzIG1hbnVhbGx5Lic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVscy5tdXMgJiYgIWVscy5tdXMudmFsdWUpIHsNCiAgICAgICAgICAgIGVscy5tdXMucGxhY2Vob2xkZXIgPSAnVHlwaWNhbDogJyArIHByZXNldC5tdXM7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVscy5tdWspIHsNCiAgICAgICAgICAgIGVscy5tdWsudmFsdWUgPSBwcmVzZXQubXVrOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbHMucHJlc2V0SGludCkgew0KICAgICAgICAgICAgZWxzLnByZXNldEhpbnQudGV4dENvbnRlbnQgPSBtYXQubGFiZWwgKyAnIC8gJyArIExVQkVfTEFCRUxTW3N0YXRlLmx1YmVdICsNCiAgICAgICAgICAgICAgICAnIOKAlCB0eXBpY2FsIHJhbmdlOiDOvHMg4omIICcgKyBwcmVzZXQubXVzICsgJywgzrxrIOKJiCAnICsgcHJlc2V0Lm11ayArDQogICAgICAgICAgICAgICAgJyAoZWRpdGFibGU7IG5vdCB1bml2ZXJzYWwgY29uc3RhbnRzKS4nOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVhZElucHV0cygp<\/span><span class=\"ftec-js-chunk\">IHsNCiAgICAgICAgc3RhdGUubW9kZSA9IGVscy5tb2RlLnZhbHVlOw0KICAgICAgICBzdGF0ZS5tb3Rpb24gPSBlbHMubW90aW9uLnZhbHVlOw0KICAgICAgICBzdGF0ZS51bml0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJmdGVjLXVuaXRTeXN0ZW0iXTpjaGVja2VkJykudmFsdWU7DQogICAgICAgIHN0YXRlLmx1YmUgPSBlbHMubHViZS52YWx1ZTsNCiAgICAgICAgc3RhdGUubWF0ZXJpYWwgPSBlbHMubWF0ZXJpYWwudmFsdWU7DQoNCiAgICAgICAgdmFyIE4gPSB0b01ldHJpY0ZvcmNlKHBhcnNlTnVtKGVscy5ub3JtYWxGb3JjZS52YWx1ZSkgfHwgMCwgZWxzLm5vcm1hbEZvcmNlVW5pdC52YWx1ZSk7DQogICAgICAgIHZhciBtdXNWYWwgPSBwYXJzZU51bShlbHMubXVzLnZhbHVlKTsNCiAgICAgICAgdmFyIG11a1ZhbCA9IHBhcnNlTnVtKGVscy5tdWsudmFsdWUpOw0KICAgICAgICB2YXIgdiA9IHBhcnNlTnVtKGVscy5zbGlkaW5nU3BlZWQudmFsdWUpOw0KICAgICAgICB2YXIgdlVuaXQgPSBlbHMuc2xpZGluZ1NwZWVkVW5pdCA\/IGVscy5zbGlkaW5nU3BlZWRVbml0LnZhbHVlIDogJ20vcyc7DQogICAgICAgIHZhciBUZiA9IHBhcnNlTnVtKGVscy5mcmljdGlvblRvcnF1ZS52YWx1ZSk7DQogICAgICAgIHZhciBUZlVuaXQgPSBlbHMuZnJpY3Rpb25Ub3JxdWVVbml0LnZhbHVlOw0KICAgICAgICB2YXIgcnBtID0gcGFyc2VOdW0oZWxzLnJwbS52YWx1ZSk7DQogICAgICAgIHZhciBQaW4gPSBwYXJzZU51bShlbHMuaW5wdXRQb3dlci52YWx1ZSk7DQogICAgICAgIHZhciBQaW5Vbml0ID0gZWxzLmlucHV0UG93ZXJVbml0LnZhbHVlOw0KICAgICAgICB2YXIgVGluID0gcGFyc2VOdW0oZWxzLmlucHV0VG9ycXVlLnZhbHVlKTsNCiAgICAgICAgdmFyIFRpblVuaXQgPSBlbHMuaW5wdXRUb3JxdWVVbml0LnZhbHVlOw0KICAgICAgICB2YXIgVG91dCA9IHBhcnNlTnVtKGVscy5vdXRwdXRUb3JxdWUudmFsdWUpOw0KICAgICAgICB2YXIgVG91dFVuaXQgPSBlbHMub3V0cHV0VG9ycXVlVW5pdC52YWx1ZTsNCiAgICAgICAgdmFyIG5pbiA9IHBhcnNlTnVtKGVscy5pbnB1dFNwZWVkLnZhbHVlKTsNCiAgICAgICAgdmFyIG5vdXQgPSBwYXJzZU51bShlbHMub3V0cHV0U3BlZWQudmFsdWUpOw0KICAgICAgICB2YXIgdGVtcCA9IHBhcnNlTnVtKGVscy50ZW1wLnZhbHVlKTsNCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgTjogTiwNCiAgICAgICAgICAgIG11czogbXVzVmFsLA0KICAgICAgICAgICAgbXVrOiBtdWtWYWwgIT09IG51bGwgPyBtdWtWYWwgOiAwLA0KICAgICAgICAgICAgdjogdiAhPT0gbnVsbCA\/IHRvTWV0cmljU3BlZWQodiwgdlVuaXQpIDogbnVsbCwNCiAgICAgICAgICAgIFRmOiBUZiAhPT0gbnVsbCA\/IHRvTWV0cmljVG9ycXVlKFRmLCBUZlVuaXQpIDogbnVsbCwNCiAgICAgICAgICAgIHJwbTogcnBtLA0KICAgICAgICAgICAgUGluOiBQaW4gIT09IG51bGwgPyB0b01ldHJpY1Bvd2VyKFBpbiwgUGluVW5pdCkgOiBudWxsLA0KICAgICAgICAgICAgVGluOiBUaW4gIT09IG51bGwgPyB0b01ldHJpY1RvcnF1ZShUaW4sIFRpblVuaXQpIDogbnVsbCwNCiAgICAgICAgICAgIFRvdXQ6IFRvdXQgIT09IG51bGwgPyB0b01ldHJpY1RvcnF1ZShUb3V0LCBUb3V0VW5pdCkgOiBudWxsLA0KICAgICAgICAgICAgbmluOiBuaW4sDQogICAgICAgICAgICBub3V0OiBub3V0LA0KICAgICAgICAgICAgdGVtcDogdGVtcA0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHZhbGlkYXRlKGlucCkgew0KICAgICAgICB2YXIgZXJyb3JzID0gW107DQogICAgICAgIHZhciB3YXJuaW5ncyA9IFtdOw0KDQogICAgICAgIGlmIChpbnAuTiA8IDApIGVycm9ycy5wdXNoKCdOb3JtYWwgZm9yY2UgY2Fubm90IGJlIG5lZ2F0aXZlLicpOw0KICAgICAgICBpZiAoaW5wLm11ayA8IDApIGVycm9ycy5wdXNoKCdLaW5ldGljIGZyaWN0aW9uIGNvZWZmaWNpZW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlLicpOw0KICAgICAgICBpZiAoaW5wLm11cyAhPT0gbnVsbCAmJiBpbnAubXVzIDwgMCkgZXJyb3JzLnB1c2goJ1N0YXRpYyBmcmljdGlvbiBjb2VmZmljaWVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4nKTsNCiAgICAgICAgaWYgKGlucC5QaW4gIT09IG51bGwgJiYgaW5wLlBpbiA8IDApIGVycm9ycy5wdXNoKCdJbnB1dCBwb3dlciBjYW5ub3QgYmUgbmVnYXRpdmUuJyk7DQoNCiAgICAgICAgaWYgKGlzTGluZWFyTW90aW9uKCkpIHsNCiAgICAgICAgICAgIGlmIChtb2RlTmVlZHNQb3dlcigpICYmIChpbnAudiA9PT0gbnVsbCB8fCBpbnAudiA8IDApKSB7DQogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0VudGVyIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIHNsaWRpbmcgc3BlZWQgZm9yIHBvd2VyIGxvc3MgY2FsY3VsYXRpb24uJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAobW9kZU5lZWRzUG93ZXIoKSAmJiBpbnAucnBtID09PSBudWxsICYmIGlucC5uaW4gPT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCgnRW50ZXIgcm90YXRpb25hbCBzcGVlZCAocnBtKSBmb3IgcG93ZXIgY2FsY3VsYXRpb25zLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09ICdmcmljdGlvbi1mb3JjZScgJiYgaW5wLk4gPD0gMCkgew0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0VudGVyIGEgcG9zaXRpdmUgbm9ybWFsIGZvcmNlLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsgZXJyb3JzOiBlcnJvcnMsIHdhcm5pbmdzOiB3YXJuaW5ncyB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNvbXB1dGUoaW5wKSB7DQogICAgICAgIHZhciByZXN1bHQgPSB7DQogICAgICAgICAgICBGZjogbnVsbCwNCiAgICAgICAgICAgIEZzTWF4OiBudWxsLA0KICAgICAgICAgICAgVGY6IG51bGwsDQogICAgICAgICAgICBvbWVnYTogbnVsbCwNCiAgICAgICAgICAgIFBpbjogaW5wLlBpbiwNCiAgICAgICAgICAgIFBsb3NzOiBudWxsLA0KICAgICAgICAgICAgUG91dDogbnVsbCwNCiAgICAgICAgICAgIGV0YTogbnVsbCwNCiAgICAgICAgICAgIGV0YUxvc3M6IG51bGwsDQogICAgICAgICAgICBsb3NzUmF0aW86IG51bGwsDQogICAgICAgICAgICBoZWF0OiBudWxsLA0KICAgICAgICAgICAgd2FybmluZ3M6IFtdDQogICAgICAgIH07DQoNCiAgICAgICAgdmFyIG11ayA9IGlucC5tdWs7DQogICAgICAgIHZhciBtdXMgPSBpbnAubXVzICE9PSBudWxsID8gaW5wLm11cyA6IG11ayAqIDEuMjsNCg0KICAgICAgICBpZiAoaXNMaW5lYXJNb3Rpb24oKSkgew0KICAgICAgICAgICAgcmVzdWx0LkZmID0gbXVrICogaW5wLk47DQogICAgICAgICAgICByZXN1bHQuRnNNYXggPSBtdXMgKiBpbnAuTjsNCg0KICAgICAgICAgICAgaWYgKGlucC52ICE9PSBudWxsICYmIGlucC52ID49IDApIHsNCiAgICAgICAgICAgICAgICByZXN1bHQuUGxvc3MgPSByZXN1bHQuRmYgKiBpbnAudjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmIChpbnAuVGYgIT09IG51bGwgJiYgaW5wLlRmID49IDApIHsNCiAgICAgICAgICAgICAgICByZXN1bHQuVGYgPSBpbnAuVGY7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGlucC5OID4gMCAmJiBtdWsgPiAwKSB7DQogICAgICAgICAgICAgICAgcmVzdWx0LlRmID0gbXVrICogaW5wLk4gKiAwLjA1Ow0KICAgICAgICAgICAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKCdGcmljdGlvbiB0b3JxdWUgZXN0aW1hdGVkIGFzIM68ayDDlyBOIMOXIDAuMDUgbSBlcXVpdmFsZW50IHJhZGl1cy4gRW50ZXIgZnJpY3Rpb24gdG9ycXVlIGRpcmVjdGx5IGZvciBhY2N1cmFjeS4nKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHJwbSA9IGlucC5ycG0gIT09IG51bGwgPyBpbnAucnBtIDogKGlucC5uaW4gIT09IG51bGwgPyBpbnAubmluIDogbnVsbCk7DQogICAgICAgICAgICBpZiAocnBtICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgcmVzdWx0Lm9tZWdhID0gcnBtVG9PbWVnYShycG0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAocmVzdWx0LlRmICE9PSBudWxsICYmIHJlc3VsdC5vbWVnYSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIHJlc3VsdC5QbG9zcyA9IHJlc3VsdC5UZiAqIHJlc3VsdC5vbWVnYTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmVzdWx0LkZmID0gcmVzdWx0LlRmICE9PSBudWxsID8gcmVzdWx0LlRmIC8gMC4wNSA6IG11ayAqIGlucC5OOw0KICAgICAgICAgICAgcmVzdWx0LkZzTWF4ID0gbXVzICogaW5wLk47DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaW5wLlRpbiAhPT0gbnVsbCAmJiBpbnAubmluICE9PSBudWxsKSB7DQogICAgICAgICAgICB2YXIgb21lZ2FJbiA9IHJwbVRvT21lZ2EoaW5wLm5pbik7DQogICAgICAgICAgICB2YXIgY2FsY1BpbiA9<\/span><span class=\"ftec-js-chunk\">IGlucC5UaW4gKiBvbWVnYUluOw0KICAgICAgICAgICAgaWYgKHJlc3VsdC5QaW4gPT09IG51bGwpIHJlc3VsdC5QaW4gPSBjYWxjUGluOw0KICAgICAgICAgICAgZWxzZSBpZiAoTWF0aC5hYnMoY2FsY1BpbiAtIHJlc3VsdC5QaW4pIC8gTWF0aC5tYXgocmVzdWx0LlBpbiwgMSkgPiAwLjA1KSB7DQogICAgICAgICAgICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goJ0lucHV0IHBvd2VyIGRpZmZlcnMgZnJvbSBUaW4gw5cgz4lpbiDigJQgdmVyaWZ5IGNvbnNpc3RlbmN5LicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlucC5Ub3V0ICE9PSBudWxsICYmIGlucC5ub3V0ICE9PSBudWxsICYmIGlucC5UaW4gIT09IG51bGwgJiYgaW5wLm5pbiAhPT0gbnVsbCkgew0KICAgICAgICAgICAgdmFyIGV0YVRvcnF1ZSA9IChpbnAuVG91dCAqIHJwbVRvT21lZ2EoaW5wLm5vdXQpKSAvIChpbnAuVGluICogcnBtVG9PbWVnYShpbnAubmluKSkgKiAxMDA7DQogICAgICAgICAgICBpZiAobW9kZU5lZWRzRWZmaWNpZW5jeSgpKSB7DQogICAgICAgICAgICAgICAgcmVzdWx0LmV0YSA9IGV0YVRvcnF1ZTsNCiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LlBpbiAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICByZXN1bHQuUG91dCA9IHJlc3VsdC5QaW4gKiBldGFUb3JxdWUgLyAxMDA7DQogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5QbG9zcyA9IHJlc3VsdC5QaW4gLSByZXN1bHQuUG91dDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAocmVzdWx0LlBpbiAhPT0gbnVsbCAmJiByZXN1bHQuUGxvc3MgIT09IG51bGwgJiYgcmVzdWx0LmV0YSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgaWYgKHJlc3VsdC5QbG9zcyA+IHJlc3VsdC5QaW4pIHsNCiAgICAgICAgICAgICAgICByZXN1bHQud2FybmluZ3MucHVzaCgnRnJpY3Rpb24gcG93ZXIgbG9zcyBleGNlZWRzIGlucHV0IHBvd2VyIOKAlCBjaGVjayBpbnB1dHMuJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXN1bHQuUG91dCA9IHJlc3VsdC5QaW4gLSByZXN1bHQuUGxvc3M7DQogICAgICAgICAgICBpZiAocmVzdWx0LlBvdXQgPCAwKSB7DQogICAgICAgICAgICAgICAgcmVzdWx0Lndhcm5pbmdzLnB1c2goJ0NhbGN1bGF0ZWQgb3V0cHV0IHBvd2VyIGlzIG5lZ2F0aXZlIOKAlCBpbmNvbnNpc3RlbnQgaW5wdXRzLicpOw0KICAgICAgICAgICAgICAgIHJlc3VsdC5Qb3V0ID0gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChyZXN1bHQuUGluID4gMCkgew0KICAgICAgICAgICAgICAgIHJlc3VsdC5ldGEgPSAocmVzdWx0LlBvdXQgLyByZXN1bHQuUGluKSAqIDEwMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChyZXN1bHQuUGluICE9PSBudWxsICYmIHJlc3VsdC5QbG9zcyAhPT0gbnVsbCAmJiByZXN1bHQuUGluID4gMCkgew0KICAgICAgICAgICAgcmVzdWx0Lmxvc3NSYXRpbyA9IChyZXN1bHQuUGxvc3MgLyByZXN1bHQuUGluKSAqIDEwMDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChyZXN1bHQuZXRhICE9PSBudWxsKSB7DQogICAgICAgICAgICByZXN1bHQuZXRhTG9zcyA9IDEwMCAtIHJlc3VsdC5ldGE7DQogICAgICAgICAgICBpZiAocmVzdWx0LmV0YSA+IDEwMCkgew0KICAgICAgICAgICAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKCdFZmZpY2llbmN5IGV4Y2VlZHMgMTAwJSDigJQgaW5wdXQgdmFsdWVzIG1heSBiZSBpbmNvbnNpc3RlbnQuJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAocmVzdWx0LlBsb3NzICE9PSBudWxsKSB7DQogICAgICAgICAgICByZXN1bHQuaGVhdCA9IHJlc3VsdC5QbG9zczsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChzdGF0ZS5sdWJlID09PSAnZHJ5JyAmJiBpc0xpbmVhck1vdGlvbigpICYmIGlucC52ICE9PSBudWxsICYmIGlucC52ID4gMSAmJiBpbnAuTiA+IDEwMDApIHsNCiAgICAgICAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKCdEcnkgb3BlcmF0aW9uIHdpdGggaGlnaCBzcGVlZCBhbmQgbG9hZCDigJQgZWxldmF0ZWQgd2VhciBhbmQgaGVhdGluZyByaXNrLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmVzdWx0LmVmZlN0YXR1cyA9IGNsYXNzaWZ5RWZmaWNpZW5jeShyZXN1bHQuZXRhKTsNCiAgICAgICAgcmVzdWx0LmZyaWN0aW9uUmlzayA9IGNsYXNzaWZ5RnJpY3Rpb25SaXNrKG11aywgcmVzdWx0LlBsb3NzLCByZXN1bHQuZXRhLCBzdGF0ZS5sdWJlLCBpbnAudGVtcCk7DQoNCiAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjbGFzc2lmeUVmZmljaWVuY3koZXRhKSB7DQogICAgICAgIGlmIChldGEgPT09IG51bGwpIHJldHVybiB7IGxhYmVsOiBOQSwgY2xzOiAnJyB9Ow0KICAgICAgICBpZiAoZXRhID49IDkwKSByZXR1cm4geyBsYWJlbDogJ0hpZ2ggRWZmaWNpZW5jeScsIGNsczogJ2Z0ZWMtc3RhdHVzLWdvb2QnIH07DQogICAgICAgIGlmIChldGEgPj0gNzUpIHJldHVybiB7IGxhYmVsOiAnQWNjZXB0YWJsZScsIGNsczogJ2Z0ZWMtc3RhdHVzLXdhcm4nIH07DQogICAgICAgIHJldHVybiB7IGxhYmVsOiAnTG93IEVmZmljaWVuY3knLCBjbHM6ICdmdGVjLXN0YXR1cy1iYWQnIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2xhc3NpZnlGcmljdGlvblJpc2sobXVrLCBQbG9zcywgZXRhLCBsdWJlLCB0ZW1wKSB7DQogICAgICAgIHZhciBzY29yZSA9IDA7DQogICAgICAgIGlmIChtdWsgPiAwLjMpIHNjb3JlICs9IDI7DQogICAgICAgIGVsc2UgaWYgKG11ayA+IDAuMTUpIHNjb3JlICs9IDE7DQogICAgICAgIGlmIChsdWJlID09PSAnZHJ5Jykgc2NvcmUgKz0gMjsNCiAgICAgICAgZWxzZSBpZiAobHViZSA9PT0gJ2xpZ2h0Jykgc2NvcmUgKz0gMTsNCiAgICAgICAgaWYgKFBsb3NzICE9PSBudWxsICYmIFBsb3NzID4gNTAwMCkgc2NvcmUgKz0gMTsNCiAgICAgICAgaWYgKGV0YSAhPT0gbnVsbCAmJiBldGEgPCA3NSkgc2NvcmUgKz0gMjsNCiAgICAgICAgZWxzZSBpZiAoZXRhICE9PSBudWxsICYmIGV0YSA8IDg1KSBzY29yZSArPSAxOw0KICAgICAgICBpZiAodGVtcCAhPT0gbnVsbCAmJiB0ZW1wID4gODApIHNjb3JlICs9IDE7DQoNCiAgICAgICAgaWYgKHNjb3JlID49IDQpIHJldHVybiB7IGxhYmVsOiAnSGlnaCcsIGNsczogJ2Z0ZWMtcmlzay1oaWdoJyB9Ow0KICAgICAgICBpZiAoc2NvcmUgPj0gMikgcmV0dXJuIHsgbGFiZWw6ICdNb2RlcmF0ZScsIGNsczogJ2Z0ZWMtcmlzay1tb2RlcmF0ZScgfTsNCiAgICAgICAgcmV0dXJuIHsgbGFiZWw6ICdMb3cnLCBjbHM6ICdmdGVjLXJpc2stbG93JyB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJ1aWxkUmVjb21tZW5kYXRpb25zKHJlcywgaW5wKSB7DQogICAgICAgIHZhciByZWNzID0gW107DQogICAgICAgIGlmIChpbnAubXVrID4gMC4yKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0ZyaWN0aW9uIGNvZWZmaWNpZW50IGlzIHJlbGF0aXZlbHkgaGlnaCDigJQgY29uc2lkZXIgaW1wcm92aW5nIGx1YnJpY2F0aW9uIG9yIHVzaW5nIGEgbG93ZXItZnJpY3Rpb24gbWF0ZXJpYWwgcGFpci4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoc3RhdGUubHViZSA9PT0gJ2RyeScpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnRHJ5IGNvbnRhY3QgaW5jcmVhc2VzIGZyaWN0aW9uIGFuZCB3ZWFyIOKAlCBhcHBseSBhcHByb3ByaWF0ZSBsdWJyaWNhdGlvbiB3aGVyZSBwb3NzaWJsZS4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVzLmV0YSAhPT0gbnVsbCAmJiByZXMuZXRhIDwgODUpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnVHJhbnNtaXNzaW9uIGVmZmljaWVuY3kgaXMgYmVsb3cgdHlwaWNhbCBleHBlY3RhdGlvbnMg4oCUIGluc3BlY3QgYmVhcmluZ3MsIGdlYXJzLCBzZWFscywgYW5kIGFsaWdubWVudC4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVzLlBsb3NzICE9PSBudWxsICYmIHJlcy5QbG9zcyA+IDMwMDApIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnU2lnbmlmaWNhbnQgZnJpY3Rpb25hbCBwb3dlciBsb3NzIGRldGVjdGVkIOKAlCB2ZXJpZnkgY29tcG9uZW50IGNvbmRpdGlvbiBhbmQgcmVkdWNlIHVubmVjZXNzYXJ5IHByZWxvYWQgb3Igbm9ybWFsIGZvcmNlLicpOw0KICAgICAgICB9DQogICAgICAgIGlmIChpbnAudGVtcCAhPT0gbnVsbCAmJiBpbnAudGVtcCA+IDcwKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ09wZXJhdGluZyB0ZW1wZXJhdHVyZSBpcyBlbGV2YXRlZCDigJQgaW1wcm92ZSBjb29saW5nIGFuZCB2ZXJpZnkgbHVicmljYXRpb24gYWRlcXVhY3kuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlzTGluZWFyTW90aW9uKCkgJiYgaW5wLnYgIT09IG51bGwgJiYgaW5wLnYgPiAyICYmIHJlcy5QbG9zcyAhPT0gbnVsbCAmJiByZXMuUGxvc3MgPiAxMDAwKSB7DQog<\/span><span class=\"ftec-js-chunk\">ICAgICAgICAgICByZWNzLnB1c2goJ0hpZ2ggc2xpZGluZyBzcGVlZCB3aXRoIHN1YnN0YW50aWFsIGZyaWN0aW9uIGhlYXRpbmcg4oCUIGNvbnNpZGVyIHNwZWVkIHJlZHVjdGlvbiBvciBlbmhhbmNlZCBjb29saW5nLicpOw0KICAgICAgICB9DQogICAgICAgIGlmIChyZWNzLmxlbmd0aCA9PT0gMCkgew0KICAgICAgICAgICAgcmVjcy5wdXNoKCdPcGVyYXRpbmcgcGFyYW1ldGVycyBhcHBlYXIgd2l0aGluIHR5cGljYWwgcmFuZ2VzIOKAlCBjb250aW51ZSBtb25pdG9yaW5nIGx1YnJpY2F0aW9uIGFuZCBhbGlnbm1lbnQgZHVyaW5nIHNlcnZpY2UuJyk7DQogICAgICAgIH0NCiAgICAgICAgcmVjcy5wdXNoKCdWZXJpZnkgbWFudWZhY3R1cmVyIGVmZmljaWVuY3kgZGF0YSBmb3IgZ2VhcmJveGVzIGFuZCB0cmFuc21pc3Npb24gY29tcG9uZW50cyBpbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMuJyk7DQogICAgICAgIHJldHVybiByZWNzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZvcm1hdEZvcmNlKHZOKSB7DQogICAgICAgIHZhciB1ID0gZWxzLm5vcm1hbEZvcmNlVW5pdC52YWx1ZTsNCiAgICAgICAgcmV0dXJuIGZtdChmcm9tTWV0cmljRm9yY2Uodk4sIHUpLCB1ID09PSAna04nID8gMyA6IDEpICsgJyAnICsgdTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmb3JtYXRUb3JxdWUodk5tKSB7DQogICAgICAgIHZhciB1ID0gZWxzLmZyaWN0aW9uVG9ycXVlVW5pdC52YWx1ZTsNCiAgICAgICAgcmV0dXJuIGZtdChmcm9tTWV0cmljVG9ycXVlKHZObSwgdSksIDIpICsgJyAnICsgdTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmb3JtYXRQb3dlcih2VywgdW5pdCkgew0KICAgICAgICByZXR1cm4gZm10KGZyb21NZXRyaWNQb3dlcih2VywgdW5pdCksIHVuaXQgPT09ICdrVycgPyAzIDogdW5pdCA9PT0gJ2hwJyA\/IDIgOiAwKSArICcgJyArIHVuaXQ7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZm9ybWF0U3BlZWQodk1wcykgew0KICAgICAgICB2YXIgdSA9IGVscy5zbGlkaW5nU3BlZWRVbml0ID8gZWxzLnNsaWRpbmdTcGVlZFVuaXQudmFsdWUgOiAnbS9zJzsNCiAgICAgICAgcmV0dXJuIGZtdChmcm9tTWV0cmljU3BlZWQodk1wcywgdSksIDMpICsgJyAnICsgdTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZW5kZXJSZXN1bHRzKHJlcywgaW5wKSB7DQogICAgICAgIGlmIChlbHMub3V0RmYpIGVscy5vdXRGZi50ZXh0Q29udGVudCA9IHJlcy5GZiAhPT0gbnVsbCA\/IGZvcm1hdEZvcmNlKHJlcy5GZikgOiBOQTsNCiAgICAgICAgaWYgKGVscy5vdXRGc01heCkgZWxzLm91dEZzTWF4LnRleHRDb250ZW50ID0gcmVzLkZzTWF4ICE9PSBudWxsID8gZm9ybWF0Rm9yY2UocmVzLkZzTWF4KSA6IE5BOw0KICAgICAgICBpZiAoZWxzLm91dFRmKSBlbHMub3V0VGYudGV4dENvbnRlbnQgPSByZXMuVGYgIT09IG51bGwgPyBmb3JtYXRUb3JxdWUocmVzLlRmKSA6IE5BOw0KICAgICAgICBpZiAoZWxzLm91dE9tZWdhKSBlbHMub3V0T21lZ2EudGV4dENvbnRlbnQgPSByZXMub21lZ2EgIT09IG51bGwgPyBmbXQocmVzLm9tZWdhLCAzKSArICcgcmFkL3MnIDogTkE7DQogICAgICAgIGlmIChlbHMub3V0UGluKSBlbHMub3V0UGluLnRleHRDb250ZW50ID0gcmVzLlBpbiAhPT0gbnVsbCA\/IGZvcm1hdFBvd2VyKHJlcy5QaW4sIGVscy5pbnB1dFBvd2VyVW5pdC52YWx1ZSkgOiBOQTsNCiAgICAgICAgaWYgKGVscy5vdXRQbG9zcykgZWxzLm91dFBsb3NzLnRleHRDb250ZW50ID0gcmVzLlBsb3NzICE9PSBudWxsID8gZm9ybWF0UG93ZXIocmVzLlBsb3NzLCBlbHMuaW5wdXRQb3dlclVuaXQudmFsdWUpIDogTkE7DQogICAgICAgIGlmIChlbHMub3V0UG91dCkgZWxzLm91dFBvdXQudGV4dENvbnRlbnQgPSByZXMuUG91dCAhPT0gbnVsbCA\/IGZvcm1hdFBvd2VyKHJlcy5Qb3V0LCBlbHMuaW5wdXRQb3dlclVuaXQudmFsdWUpIDogTkE7DQogICAgICAgIGlmIChlbHMub3V0RXRhKSBlbHMub3V0RXRhLnRleHRDb250ZW50ID0gcmVzLmV0YSAhPT0gbnVsbCA\/IGZtdChyZXMuZXRhLCAyKSArICcgJScgOiBOQTsNCiAgICAgICAgaWYgKGVscy5vdXRFdGFMb3NzKSBlbHMub3V0RXRhTG9zcy50ZXh0Q29udGVudCA9IHJlcy5ldGFMb3NzICE9PSBudWxsID8gZm10KHJlcy5ldGFMb3NzLCAyKSArICcgJScgOiBOQTsNCiAgICAgICAgaWYgKGVscy5vdXRMb3NzUmF0aW8pIGVscy5vdXRMb3NzUmF0aW8udGV4dENvbnRlbnQgPSByZXMubG9zc1JhdGlvICE9PSBudWxsID8gZm10KHJlcy5sb3NzUmF0aW8sIDIpICsgJyAlJyA6IE5BOw0KICAgICAgICBpZiAoZWxzLm91dEhlYXQpIGVscy5vdXRIZWF0LnRleHRDb250ZW50ID0gcmVzLmhlYXQgIT09IG51bGwgPyBmb3JtYXRQb3dlcihyZXMuaGVhdCwgJ2tXJykgOiBOQTsNCg0KICAgICAgICBpZiAoZWxzLm91dEVmZlN0YXR1cykgew0KICAgICAgICAgICAgZWxzLm91dEVmZlN0YXR1cy50ZXh0Q29udGVudCA9IHJlcy5lZmZTdGF0dXMubGFiZWw7DQogICAgICAgICAgICBlbHMub3V0RWZmU3RhdHVzLmNsYXNzTmFtZSA9ICdmdGVjLXJlc3VsdC12YWx1ZSBmdGVjLW91dC1zdGF0dXMgJyArIHJlcy5lZmZTdGF0dXMuY2xzOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbHMub3V0RnJpY3Rpb25SaXNrKSB7DQogICAgICAgICAgICBlbHMub3V0RnJpY3Rpb25SaXNrLnRleHRDb250ZW50ID0gcmVzLmZyaWN0aW9uUmlzay5sYWJlbDsNCiAgICAgICAgICAgIGVscy5vdXRGcmljdGlvblJpc2suY2xhc3NOYW1lID0gJ2Z0ZWMtcmVzdWx0LXZhbHVlIGZ0ZWMtb3V0LXJpc2sgJyArIHJlcy5mcmljdGlvblJpc2suY2xzOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVscy5oZXJvRWZmaWNpZW5jeSkgew0KICAgICAgICAgICAgZWxzLmhlcm9FZmZpY2llbmN5LnRleHRDb250ZW50ID0gcmVzLmV0YSAhPT0gbnVsbCA\/IGZtdChyZXMuZXRhLCAxKSArICclJyA6IE5BOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbHMuaGVyb1Bsb3NzKSB7DQogICAgICAgICAgICBlbHMuaGVyb1Bsb3NzLnRleHRDb250ZW50ID0gcmVzLlBsb3NzICE9PSBudWxsID8gZm9ybWF0UG93ZXIocmVzLlBsb3NzLCBlbHMuaW5wdXRQb3dlclVuaXQudmFsdWUpIDogTkE7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdXRpbFBjdCA9IHJlcy5ldGFMb3NzICE9PSBudWxsID8gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCByZXMuZXRhTG9zcykpIDogMDsNCiAgICAgICAgaWYgKGVscy51dGlsRmlsbCkgew0KICAgICAgICAgICAgZWxzLnV0aWxGaWxsLnN0eWxlLndpZHRoID0gdXRpbFBjdCArICclJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZWxzLnV0aWxMYWJlbCkgew0KICAgICAgICAgICAgZWxzLnV0aWxMYWJlbC50ZXh0Q29udGVudCA9IHJlcy5ldGFMb3NzICE9PSBudWxsID8gZm10KHJlcy5ldGFMb3NzLCAxKSArICclIGxvc3MnIDogTkE7DQogICAgICAgIH0NCg0KICAgICAgICB1cGRhdGVHYXVnZShyZXMuZXRhKTsNCiAgICAgICAgdXBkYXRlU2NoZW1hdGljKHJlcywgaW5wKTsNCiAgICAgICAgdXBkYXRlUG93ZXJGbG93KHJlcyk7DQoNCiAgICAgICAgdmFyIGFsbFdhcm5pbmdzID0gW10uY29uY2F0KHJlcy53YXJuaW5ncyk7DQogICAgICAgIHJlbmRlcldhcm5pbmdzKGFsbFdhcm5pbmdzKTsNCg0KICAgICAgICBpZiAoZWxzLnJlY29tbWVuZGF0aW9ucykgew0KICAgICAgICAgICAgZWxzLnJlY29tbWVuZGF0aW9ucy5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgICAgIGJ1aWxkUmVjb21tZW5kYXRpb25zKHJlcywgaW5wKS5mb3JFYWNoKGZ1bmN0aW9uICh0ZXh0KSB7DQogICAgICAgICAgICAgICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsNCiAgICAgICAgICAgICAgICBsaS50ZXh0Q29udGVudCA9IHRleHQ7DQogICAgICAgICAgICAgICAgZWxzLnJlY29tbWVuZGF0aW9ucy5hcHBlbmRDaGlsZChsaSk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChlbHMuc3RhdHVzQmFubmVyKSB7DQogICAgICAgICAgICBlbHMuc3RhdHVzQmFubmVyLmNsYXNzTmFtZSA9ICdmdGVjLXN0YXR1cy1iYW5uZXIgJyArIChyZXMuZWZmU3RhdHVzLmNscyB8fCAnZnRlYy1zdGF0dXMtbmV1dHJhbCcpOw0KICAgICAgICAgICAgaWYgKGVscy5zdGF0dXNUaXRsZSkgZWxzLnN0YXR1c1RpdGxlLnRleHRDb250ZW50ID0gcmVzLmVmZlN0YXR1cy5sYWJlbCAhPT0gTkEgPyByZXMuZWZmU3RhdHVzLmxhYmVsIDogJ1Jlc3VsdHMgUmVhZHknOw0KICAgICAgICAgICAgaWYgKGVscy5zdGF0dXNTdWIpIHsNCiAgICAgICAgICAgICAgICBlbHMuc3RhdHVzU3ViLnRleHRDb250ZW50ID0gcmVzLmV0YSAhPT0gbnVsbA0KICAgICAgICAgICAgICAgICAgICA\/ICdUcmFuc21pc3Npb24gZWZmaWNpZW5jeSDOtyA9ICcgKyBmbXQocmVzLmV0YSwgMikgKyAnJSB8IEZyaWN0aW9uIHJpc2s6ICcgKyByZXMuZnJpY3Rpb25SaXNrLmxhYmVsDQogICAgICAgICAgICAgICAgICAgIDogJ0ZyaWN0aW9u<\/span><span class=\"ftec-js-chunk\">IGFuYWx5c2lzIGNvbXBsZXRlJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUdhdWdlKGV0YSkgew0KICAgICAgICBpZiAoIWVscy5nYXVnZUFyYyB8fCAhZWxzLmdhdWdlTmVlZGxlKSByZXR1cm47DQogICAgICAgIHZhciBwY3QgPSBldGEgIT09IG51bGwgPyBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGV0YSkpIDogMDsNCiAgICAgICAgdmFyIG9mZnNldCA9IEdBVUdFX0FSQyAqICgxIC0gcGN0IC8gMTAwKTsNCiAgICAgICAgZWxzLmdhdWdlQXJjLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnLCBvZmZzZXQudG9GaXhlZCgyKSk7DQogICAgICAgIHZhciBhbmdsZSA9IC05MCArIChwY3QgLyAxMDApICogMTgwOw0KICAgICAgICBlbHMuZ2F1Z2VOZWVkbGUuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcgKyBhbmdsZS50b0ZpeGVkKDEpICsgJyAxMjAgMTE4KScpOw0KICAgICAgICBpZiAoZWxzLmdhdWdlUmVhZCkgZWxzLmdhdWdlUmVhZC50ZXh0Q29udGVudCA9IGV0YSAhPT0gbnVsbCA\/IGZtdChldGEsIDEpICsgJyUnIDogTkE7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0R3JvdXBWaXNpYmxlKG5vZGVzLCBzaG93KSB7DQogICAgICAgIFtdLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBpZiAoIWVsKSByZXR1cm47DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdmdGVjLWhpZGRlbicsICFzaG93KTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlU2NoZW1hdGljKHJlcywgaW5wKSB7DQogICAgICAgIGlmICghZWxzLnNjaGVtYXRpYykgcmV0dXJuOw0KICAgICAgICB2YXIgc3ZnID0gZWxzLnNjaGVtYXRpYzsNCiAgICAgICAgdmFyIGxpbmVhckVscyA9IHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuZnRlYy1zY2gtbGluZWFyJyk7DQogICAgICAgIHZhciByb3RFbHMgPSBzdmcucXVlcnlTZWxlY3RvckFsbCgnLmZ0ZWMtc2NoLXJvdGF0aW9uYWwnKTsNCg0KICAgICAgICBpZiAoaXNMaW5lYXJNb3Rpb24oKSkgew0KICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZSgnZGF0YS1tb3Rpb24nLCAnbGluZWFyJyk7DQogICAgICAgICAgICBzZXRHcm91cFZpc2libGUobGluZWFyRWxzLCB0cnVlKTsNCiAgICAgICAgICAgIHNldEdyb3VwVmlzaWJsZShyb3RFbHMsIGZhbHNlKTsNCiAgICAgICAgICAgIGlmIChlbHMuc2NoRm9yY2UpIGVscy5zY2hGb3JjZS50ZXh0Q29udGVudCA9ICdGZiA9ICcgKyAocmVzLkZmICE9PSBudWxsID8gZm9ybWF0Rm9yY2UocmVzLkZmKSA6IE5BKTsNCiAgICAgICAgICAgIGlmIChlbHMuc2NoTm9ybWFsKSBlbHMuc2NoTm9ybWFsLnRleHRDb250ZW50ID0gJ04gPSAnICsgZm9ybWF0Rm9yY2UoaW5wLk4pOw0KICAgICAgICAgICAgaWYgKGVscy5zY2hTcGVlZCkgZWxzLnNjaFNwZWVkLnRleHRDb250ZW50ID0gaW5wLnYgIT09IG51bGwgPyAndiA9ICcgKyBmb3JtYXRTcGVlZChpbnAudikgOiAndiA9IOKAlCc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCdkYXRhLW1vdGlvbicsICdyb3RhdGlvbmFsJyk7DQogICAgICAgICAgICBzZXRHcm91cFZpc2libGUobGluZWFyRWxzLCBmYWxzZSk7DQogICAgICAgICAgICBzZXRHcm91cFZpc2libGUocm90RWxzLCB0cnVlKTsNCiAgICAgICAgICAgIGlmIChlbHMuc2NoVG9ycXVlKSBlbHMuc2NoVG9ycXVlLnRleHRDb250ZW50ID0gcmVzLlRmICE9PSBudWxsID8gJ1RmID0gJyArIGZvcm1hdFRvcnF1ZShyZXMuVGYpIDogJ1RmID0g4oCUJzsNCiAgICAgICAgICAgIGlmIChlbHMuc2NoUnBtKSBlbHMuc2NoUnBtLnRleHRDb250ZW50ID0gaW5wLnJwbSAhPT0gbnVsbCA\/IGlucC5ycG0gKyAnIHJwbScgOiAoaW5wLm5pbiAhPT0gbnVsbCA\/IGlucC5uaW4gKyAnIHJwbScgOiAn4oCUIHJwbScpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlUG93ZXJGbG93KHJlcykgew0KICAgICAgICBpZiAoIWVscy5mbG93UGluKSByZXR1cm47DQogICAgICAgIGVscy5mbG93UGluLnRleHRDb250ZW50ID0gcmVzLlBpbiAhPT0gbnVsbCA\/IGZvcm1hdFBvd2VyKHJlcy5QaW4sIGVscy5pbnB1dFBvd2VyVW5pdC52YWx1ZSkgOiAnUGluJzsNCiAgICAgICAgZWxzLmZsb3dQbG9zcy50ZXh0Q29udGVudCA9IHJlcy5QbG9zcyAhPT0gbnVsbCA\/IGZvcm1hdFBvd2VyKHJlcy5QbG9zcywgZWxzLmlucHV0UG93ZXJVbml0LnZhbHVlKSA6ICdQbG9zcyc7DQogICAgICAgIGVscy5mbG93UG91dC50ZXh0Q29udGVudCA9IHJlcy5Qb3V0ICE9PSBudWxsID8gZm9ybWF0UG93ZXIocmVzLlBvdXQsIGVscy5pbnB1dFBvd2VyVW5pdC52YWx1ZSkgOiAnUG91dCc7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVuZGVyRXJyb3JzKGVycm9ycykgew0KICAgICAgICBpZiAoIWVscy53YXJuaW5ncykgcmV0dXJuOw0KICAgICAgICBlbHMud2FybmluZ3MuaW5uZXJIVE1MID0gJyc7DQogICAgICAgIGVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsNCiAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgPSAnZnRlYy1hbGVydCBmdGVjLWFsZXJ0LWVycm9yJzsNCiAgICAgICAgICAgIGRpdi50ZXh0Q29udGVudCA9IG1zZzsNCiAgICAgICAgICAgIGVscy53YXJuaW5ncy5hcHBlbmRDaGlsZChkaXYpOw0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZW5kZXJXYXJuaW5ncyh3YXJuaW5ncykgew0KICAgICAgICBpZiAoIWVscy53YXJuaW5ncykgcmV0dXJuOw0KICAgICAgICB2YXIgZXhpc3RpbmcgPSBlbHMud2FybmluZ3MucXVlcnlTZWxlY3RvckFsbCgnLmZ0ZWMtYWxlcnQtd2FybicpOw0KICAgICAgICBbXS5mb3JFYWNoLmNhbGwoZXhpc3RpbmcsIGZ1bmN0aW9uIChlbCkgeyBlbC5yZW1vdmUoKTsgfSk7DQogICAgICAgIHdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKG1zZykgew0KICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICdmdGVjLWFsZXJ0IGZ0ZWMtYWxlcnQtd2Fybic7DQogICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSBtc2c7DQogICAgICAgICAgICBlbHMud2FybmluZ3MuYXBwZW5kQ2hpbGQoZGl2KTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaGlkZVJlc3VsdHMoKSB7DQogICAgICAgIGlmICghZWxzLnJlc3VsdHMpIHJldHVybjsNCiAgICAgICAgZWxzLnJlc3VsdHMuY2xhc3NMaXN0LmFkZCgnZnRlYy1oaWRkZW4nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93UmVzdWx0cygpIHsNCiAgICAgICAgaWYgKCFlbHMucmVzdWx0cykgcmV0dXJuOw0KICAgICAgICBlbHMucmVzdWx0cy5jbGFzc0xpc3QucmVtb3ZlKCdmdGVjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsNCiAgICAgICAgc3RhdGUubW9kZSA9IGVscy5tb2RlLnZhbHVlOw0KICAgICAgICBzdGF0ZS5tb3Rpb24gPSBlbHMubW90aW9uLnZhbHVlOw0KICAgICAgICB2YXIgaW5wID0gcmVhZElucHV0cygpOw0KICAgICAgICB2YXIgdmFsID0gdmFsaWRhdGUoaW5wKTsNCg0KICAgICAgICByZW5kZXJFcnJvcnMoW10pOw0KICAgICAgICBpZiAodmFsLmVycm9ycy5sZW5ndGgpIHsNCiAgICAgICAgICAgIHJlbmRlckVycm9ycyh2YWwuZXJyb3JzKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRzKCk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgcmVzID0gY29tcHV0ZShpbnApOw0KICAgICAgICByZW5kZXJSZXN1bHRzKHJlcywgaW5wKTsNCiAgICAgICAgc2hvd1Jlc3VsdHMoKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkgew0KICAgICAgICBlbHMubW9kZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBzdGF0ZS5tb2RlID0gZWxzLm1vZGUudmFsdWU7DQogICAgICAgICAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsNCiAgICAgICAgfSk7DQogICAgICAgIGVscy5tb3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgc3RhdGUubW90aW9uID0gZWxzLm1vdGlvbi52YWx1ZTsNCiAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICB9KTsNCiAgICAgICAgZWxzLmx1YmUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgc3RhdGUubHViZSA9IGVscy5sdWJlLnZhbHVlOw0KICAgICAgICAgICAgbWFudWFsTXVPdmVycmlkZSA9IGZhbHNlOw0KICAgICAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB9KTsNCiAgICAgICAgZWxzLm1h<\/span><span class=\"ftec-js-chunk\">dGVyaWFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHN0YXRlLm1hdGVyaWFsID0gZWxzLm1hdGVyaWFsLnZhbHVlOw0KICAgICAgICAgICAgbWFudWFsTXVPdmVycmlkZSA9IGZhbHNlOw0KICAgICAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB9KTsNCiAgICAgICAgZWxzLm11ay5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIG1hbnVhbE11T3ZlcnJpZGUgPSB0cnVlOw0KICAgICAgICB9KTsNCiAgICAgICAgZWxzLm11cy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIG1hbnVhbE11T3ZlcnJpZGUgPSB0cnVlOw0KICAgICAgICB9KTsNCg0KICAgICAgICBbXS5mb3JFYWNoLmNhbGwocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPSJmdGVjLXVuaXRTeXN0ZW0iXScpLCBmdW5jdGlvbiAocmFkaW8pIHsNCiAgICAgICAgICAgIHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBzdGF0ZS51bml0ID0gcmFkaW8udmFsdWU7DQogICAgICAgICAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5jYWxjQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsY3VsYXRlKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYWNoZUVsZW1lbnRzKCkgew0KICAgICAgICBlbHMgPSB7DQogICAgICAgICAgICBtb2RlOiAkKCdmdGVjTW9kZScpLA0KICAgICAgICAgICAgbW90aW9uOiAkKCdmdGVjTW90aW9uJyksDQogICAgICAgICAgICBtb2RlTm90ZTogJCgnZnRlY01vZGVOb3RlJyksDQogICAgICAgICAgICBub3JtYWxGb3JjZTogJCgnZnRlY05vcm1hbEZvcmNlJyksDQogICAgICAgICAgICBub3JtYWxGb3JjZVVuaXQ6ICQoJ2Z0ZWNOb3JtYWxGb3JjZVVuaXQnKSwNCiAgICAgICAgICAgIG11czogJCgnZnRlY011cycpLA0KICAgICAgICAgICAgbXVrOiAkKCdmdGVjTXVrJyksDQogICAgICAgICAgICBzbGlkaW5nU3BlZWQ6ICQoJ2Z0ZWNTbGlkaW5nU3BlZWQnKSwNCiAgICAgICAgICAgIHNsaWRpbmdTcGVlZFVuaXQ6ICQoJ2Z0ZWNTbGlkaW5nU3BlZWRVbml0JyksDQogICAgICAgICAgICBmcmljdGlvblRvcnF1ZTogJCgnZnRlY0ZyaWN0aW9uVG9ycXVlJyksDQogICAgICAgICAgICBmcmljdGlvblRvcnF1ZVVuaXQ6ICQoJ2Z0ZWNGcmljdGlvblRvcnF1ZVVuaXQnKSwNCiAgICAgICAgICAgIHJwbTogJCgnZnRlY1JwbScpLA0KICAgICAgICAgICAgaW5wdXRQb3dlcjogJCgnZnRlY0lucHV0UG93ZXInKSwNCiAgICAgICAgICAgIGlucHV0UG93ZXJVbml0OiAkKCdmdGVjSW5wdXRQb3dlclVuaXQnKSwNCiAgICAgICAgICAgIGlucHV0VG9ycXVlOiAkKCdmdGVjSW5wdXRUb3JxdWUnKSwNCiAgICAgICAgICAgIGlucHV0VG9ycXVlVW5pdDogJCgnZnRlY0lucHV0VG9ycXVlVW5pdCcpLA0KICAgICAgICAgICAgb3V0cHV0VG9ycXVlOiAkKCdmdGVjT3V0cHV0VG9ycXVlJyksDQogICAgICAgICAgICBvdXRwdXRUb3JxdWVVbml0OiAkKCdmdGVjT3V0cHV0VG9ycXVlVW5pdCcpLA0KICAgICAgICAgICAgaW5wdXRTcGVlZDogJCgnZnRlY0lucHV0U3BlZWQnKSwNCiAgICAgICAgICAgIG91dHB1dFNwZWVkOiAkKCdmdGVjT3V0cHV0U3BlZWQnKSwNCiAgICAgICAgICAgIGx1YmU6ICQoJ2Z0ZWNMdWJlJyksDQogICAgICAgICAgICBtYXRlcmlhbDogJCgnZnRlY01hdGVyaWFsJyksDQogICAgICAgICAgICB0ZW1wOiAkKCdmdGVjVGVtcCcpLA0KICAgICAgICAgICAgcHJlc2V0SGludDogJCgnZnRlY1ByZXNldEhpbnQnKSwNCiAgICAgICAgICAgIHdhcm5pbmdzOiAkKCdmdGVjV2FybmluZ3MnKSwNCiAgICAgICAgICAgIHJlc3VsdHM6ICQoJ2Z0ZWNSZXN1bHRzJyksDQogICAgICAgICAgICBjYWxjQnRuOiAkKCdmdGVjQ2FsY3VsYXRlQnRuJyksDQogICAgICAgICAgICBzdGF0dXNCYW5uZXI6ICQoJ2Z0ZWNTdGF0dXNCYW5uZXInKSwNCiAgICAgICAgICAgIHN0YXR1c1RpdGxlOiAkKCdmdGVjU3RhdHVzVGl0bGUnKSwNCiAgICAgICAgICAgIHN0YXR1c1N1YjogJCgnZnRlY1N0YXR1c1N1YicpLA0KICAgICAgICAgICAgaGVyb0VmZmljaWVuY3k6ICQoJ2Z0ZWNIZXJvRWZmaWNpZW5jeScpLA0KICAgICAgICAgICAgaGVyb1Bsb3NzOiAkKCdmdGVjSGVyb1Bsb3NzJyksDQogICAgICAgICAgICBvdXRGZjogJCgnZnRlY091dEZmJyksDQogICAgICAgICAgICBvdXRGc01heDogJCgnZnRlY091dEZzTWF4JyksDQogICAgICAgICAgICBvdXRUZjogJCgnZnRlY091dFRmJyksDQogICAgICAgICAgICBvdXRPbWVnYTogJCgnZnRlY091dE9tZWdhJyksDQogICAgICAgICAgICBvdXRQaW46ICQoJ2Z0ZWNPdXRQaW4nKSwNCiAgICAgICAgICAgIG91dFBsb3NzOiAkKCdmdGVjT3V0UGxvc3MnKSwNCiAgICAgICAgICAgIG91dFBvdXQ6ICQoJ2Z0ZWNPdXRQb3V0JyksDQogICAgICAgICAgICBvdXRFdGE6ICQoJ2Z0ZWNPdXRFdGEnKSwNCiAgICAgICAgICAgIG91dEV0YUxvc3M6ICQoJ2Z0ZWNPdXRFdGFMb3NzJyksDQogICAgICAgICAgICBvdXRMb3NzUmF0aW86ICQoJ2Z0ZWNPdXRMb3NzUmF0aW8nKSwNCiAgICAgICAgICAgIG91dEhlYXQ6ICQoJ2Z0ZWNPdXRIZWF0JyksDQogICAgICAgICAgICBvdXRFZmZTdGF0dXM6ICQoJ2Z0ZWNPdXRFZmZTdGF0dXMnKSwNCiAgICAgICAgICAgIG91dEZyaWN0aW9uUmlzazogJCgnZnRlY091dEZyaWN0aW9uUmlzaycpLA0KICAgICAgICAgICAgdXRpbEZpbGw6ICQoJ2Z0ZWNVdGlsRmlsbCcpLA0KICAgICAgICAgICAgdXRpbExhYmVsOiAkKCdmdGVjVXRpbExhYmVsJyksDQogICAgICAgICAgICBnYXVnZUFyYzogJCgnZnRlY0dhdWdlQXJjJyksDQogICAgICAgICAgICBnYXVnZU5lZWRsZTogJCgnZnRlY0dhdWdlTmVlZGxlJyksDQogICAgICAgICAgICBnYXVnZVJlYWQ6ICQoJ2Z0ZWNHYXVnZVJlYWQnKSwNCiAgICAgICAgICAgIHNjaGVtYXRpYzogJCgnZnRlY1NjaGVtYXRpYycpLA0KICAgICAgICAgICAgc2NoRm9yY2U6ICQoJ2Z0ZWNTY2hGb3JjZScpLA0KICAgICAgICAgICAgc2NoTm9ybWFsOiAkKCdmdGVjU2NoTm9ybWFsJyksDQogICAgICAgICAgICBzY2hTcGVlZDogJCgnZnRlY1NjaFNwZWVkJyksDQogICAgICAgICAgICBzY2hUb3JxdWU6ICQoJ2Z0ZWNTY2hUb3JxdWUnKSwNCiAgICAgICAgICAgIHNjaFJwbTogJCgnZnRlY1NjaFJwbScpLA0KICAgICAgICAgICAgZmxvd1BpbjogJCgnZnRlY0Zsb3dQaW4nKSwNCiAgICAgICAgICAgIGZsb3dQbG9zczogJCgnZnRlY0Zsb3dQbG9zcycpLA0KICAgICAgICAgICAgZmxvd1BvdXQ6ICQoJ2Z0ZWNGbG93UG91dCcpLA0KICAgICAgICAgICAgcmVjb21tZW5kYXRpb25zOiAkKCdmdGVjUmVjb21tZW5kYXRpb25zJykNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbml0KCkgew0KICAgICAgICByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUk9PVF9JRCk7DQogICAgICAgIGlmICghcm9vdCkgcmV0dXJuOw0KICAgICAgICBjYWNoZUVsZW1lbnRzKCk7DQogICAgICAgIHN0YXRlID0geyB1bml0OiAnbWV0cmljJywgbW9kZTogREVGQVVMVFMubW9kZSwgbW90aW9uOiBERUZBVUxUUy5tb3Rpb24sIGx1YmU6IERFRkFVTFRTLmx1YmUsIG1hdGVyaWFsOiBERUZBVUxUUy5tYXRlcmlhbCB9Ow0KICAgICAgICBtYW51YWxNdU92ZXJyaWRlID0gZmFsc2U7DQogICAgICAgIGJpbmRFdmVudHMoKTsNCiAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsNCiAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICBoaWRlUmVzdWx0cygpOw0KICAgIH0NCg0KICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGluaXQoKTsNCiAgICB9DQp9KSgpOw0K<\/span><\/div>\n    <div class=\"ftec-container\">\n\n        <div class=\"ftec-layout\">\n            <section class=\"ftec-card ftec-input-section\">\n                <h2>Input Parameters<\/h2>\n\n                <h3 class=\"ftec-subsection-title\">General Settings<\/h3>\n                <div class=\"ftec-input-grid\">\n                    <div class=\"ftec-form-group ftec-full-width\">\n                        <label>Unit System<\/label>\n                        <div class=\"ftec-unit-toggle\">\n                            <label class=\"ftec-radio-label\">\n                                <input type=\"radio\" name=\"ftec-unitSystem\" value=\"metric\" checked>\n                                <span>Metric (N, N&middot;m, m\/s, kW, &deg;C)<\/span>\n                            <\/label>\n                            <label class=\"ftec-radio-label\">\n                                <input type=\"radio\" name=\"ftec-unitSystem\" value=\"imperial\">\n                                <span>Imperial (lbf, lbf&middot;ft, ft\/min, hp, &deg;F)<\/span>\n                            <\/label>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group\">\n                        <label for=\"ftecMode\">\n                            Calculation Mode\n                            <span class=\"ftec-tooltip\" data-tip=\"Select friction force, power loss, efficiency, or combined analysis.\">?<\/span>\n                        <\/label>\n                        <select id=\"ftecMode\">\n                            <option value=\"friction-force\">Friction Force<\/option>\n                            <option value=\"power-loss\">Power Loss<\/option>\n                            <option value=\"efficiency\">Transmission Efficiency<\/option>\n                            <option value=\"combined\" selected>Combined Analysis<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"ftec-form-group\">\n                        <label for=\"ftecMotion\">Motion Type<\/label>\n                        <select id=\"ftecMotion\">\n                            <option value=\"linear\" selected>Linear Sliding<\/option>\n                            <option value=\"rotational\">Rotational<\/option>\n                            <option value=\"belt\">Belt Drive<\/option>\n                            <option value=\"screw\">Screw Drive<\/option>\n                            <option value=\"gear\">Gear Transmission<\/option>\n                            <option value=\"custom\">Custom<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <p class=\"ftec-mode-note ftec-full-width\" id=\"ftecModeNote\">\n                        Complete friction force, power loss, output power, efficiency, and risk analysis.\n                    <\/p>\n                <\/div>\n\n                <h3 class=\"ftec-subsection-title\">Friction &amp; Contact<\/h3>\n                <div class=\"ftec-input-grid\">\n                    <div class=\"ftec-form-group ftec-field-friction\">\n                        <label for=\"ftecMaterial\">Contact Material Pair<\/label>\n                        <select id=\"ftecMaterial\">\n                            <option value=\"steel-steel\">Steel on Steel<\/option>\n                            <option value=\"steel-bronze\" selected>Steel on Bronze<\/option>\n                            <option value=\"steel-cast-iron\">Steel on Cast Iron<\/option>\n                            <option value=\"steel-ptfe\">Steel on PTFE<\/option>\n                            <option value=\"aluminum-steel\">Aluminum on Steel<\/option>\n                            <option value=\"custom\">Custom<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-friction\">\n                        <label for=\"ftecLube\">Lubrication Condition<\/label>\n                        <select id=\"ftecLube\">\n                            <option value=\"dry\">Dry<\/option>\n                            <option value=\"light\">Light Lubrication<\/option>\n                            <option value=\"oil\" selected>Oil Lubricated<\/option>\n                            <option value=\"grease\">Grease Lubricated<\/option>\n                            <option value=\"excellent\">Excellent Lubrication<\/option>\n                            <option value=\"custom\">Custom<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <p class=\"ftec-range-hint ftec-full-width\" id=\"ftecPresetHint\"><\/p>\n\n                    <div class=\"ftec-form-group ftec-field-friction\">\n                        <label for=\"ftecNormalForce\">\n                            Normal Force (N)\n                            <span class=\"ftec-tooltip\" data-tip=\"Normal force perpendicular to the sliding contact surface. Ff = &mu; &times; N.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecNormalForce\" value=\"5000\" step=\"any\" min=\"0\">\n                            <select id=\"ftecNormalForceUnit\" aria-label=\"Force unit\">\n                                <option value=\"N\" selected>N<\/option>\n                                <option value=\"kN\">kN<\/option>\n                                <option value=\"lbf\">lbf<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-friction\">\n                        <label for=\"ftecMus\">\n                            Static Friction Coefficient (&mu;s)\n                            <span class=\"ftec-tooltip\" data-tip=\"Optional. Maximum static friction: Fs,max = &mu;s &times; N.\">?<\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"ftecMus\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-friction\">\n                        <label for=\"ftecMuk\">\n                            Kinetic Friction Coefficient (&mu;k)\n                            <span class=\"ftec-tooltip\" data-tip=\"Main friction coefficient for sliding calculation. Ff = &mu;k &times; N. Always editable.\">?<\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"ftecMuk\" value=\"0.12\" step=\"any\" min=\"0\">\n                    <\/div>\n\n                    <div class=\"ftec-form-group\">\n                        <label for=\"ftecTemp\">\n                            Operating Temperature (optional)\n                            <span class=\"ftec-tooltip\" data-tip=\"Operating temperature for friction risk evaluation.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecTemp\" placeholder=\"Optional\" step=\"any\">\n                            <span class=\"ftec-unit-label\" data-unit=\"temp\">&deg;C<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <h3 class=\"ftec-subsection-title\">Motion &amp; Speed<\/h3>\n                <div class=\"ftec-input-grid\">\n                    <div class=\"ftec-form-group ftec-field-linear\">\n                        <label for=\"ftecSlidingSpeed\">\n                            Sliding Speed (v)\n                            <span class=\"ftec-tooltip\" data-tip=\"Sliding velocity for linear motion. Ploss = Ff &times; v.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecSlidingSpeed\" value=\"0.5\" step=\"any\" min=\"0\">\n                            <select id=\"ftecSlidingSpeedUnit\" aria-label=\"Speed unit\">\n                                <option value=\"m\/s\" selected>m\/s<\/option>\n                                <option value=\"ft\/s\">ft\/s<\/option>\n                                <option value=\"ft\/min\">ft\/min<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-rotational\">\n                        <label for=\"ftecFrictionTorque\">\n                            Friction Torque (Tf)\n                            <span class=\"ftec-tooltip\" data-tip=\"Friction torque for rotational systems. Ploss = Tf &times; &omega;.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecFrictionTorque\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <select id=\"ftecFrictionTorqueUnit\" aria-label=\"Torque unit\">\n                                <option value=\"N\u00b7m\" selected>N&middot;m<\/option>\n                                <option value=\"lbf\u00b7ft\">lbf&middot;ft<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-rpm\">\n                        <label for=\"ftecRpm\">\n                            Rotational Speed (n)\n                            <span class=\"ftec-tooltip\" data-tip=\"Rotational speed in rpm. &omega; = 2&pi;n \/ 60 rad\/s.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecRpm\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <span class=\"ftec-unit-label\">rpm<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <h3 class=\"ftec-subsection-title\">Power &amp; Torque<\/h3>\n                <div class=\"ftec-input-grid\">\n                    <div class=\"ftec-form-group ftec-field-power\">\n                        <label for=\"ftecInputPower\">\n                            Input Power (Pin)\n                            <span class=\"ftec-tooltip\" data-tip=\"Input power to the transmission. Pout = Pin - Ploss.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecInputPower\" value=\"2\" step=\"any\" min=\"0\">\n                            <select id=\"ftecInputPowerUnit\" aria-label=\"Power unit\">\n                                <option value=\"W\">W<\/option>\n                                <option value=\"kW\" selected>kW<\/option>\n                                <option value=\"hp\">hp<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-torque-eff\">\n                        <label for=\"ftecInputTorque\">\n                            Input Torque (Tin)\n                            <span class=\"ftec-tooltip\" data-tip=\"Optional. Pin = Tin &times; &omega;in when speed is known.\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecInputTorque\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <select id=\"ftecInputTorqueUnit\" aria-label=\"Input torque unit\">\n                                <option value=\"N\u00b7m\" selected>N&middot;m<\/option>\n                                <option value=\"lbf\u00b7ft\">lbf&middot;ft<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-torque-eff\">\n                        <label for=\"ftecOutputTorque\">\n                            Output Torque (Tout)\n                            <span class=\"ftec-tooltip\" data-tip=\"Optional for direct efficiency: &eta; = (Tout &times; &omega;out) \/ (Tin &times; &omega;in).\">?<\/span>\n                        <\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecOutputTorque\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <select id=\"ftecOutputTorqueUnit\" aria-label=\"Output torque unit\">\n                                <option value=\"N\u00b7m\" selected>N&middot;m<\/option>\n                                <option value=\"lbf\u00b7ft\">lbf&middot;ft<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-torque-eff\">\n                        <label for=\"ftecInputSpeed\">Input Speed (n<sub>in<\/sub>)<\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecInputSpeed\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <span class=\"ftec-unit-label\">rpm<\/span>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-form-group ftec-field-torque-eff\">\n                        <label for=\"ftecOutputSpeed\">Output Speed (n<sub>out<\/sub>)<\/label>\n                        <div class=\"ftec-input-with-unit\">\n                            <input type=\"number\" id=\"ftecOutputSpeed\" placeholder=\"Optional\" step=\"any\" min=\"0\">\n                            <span class=\"ftec-unit-label\">rpm<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div id=\"ftecWarnings\" aria-live=\"polite\"><\/div>\n\n                <div class=\"ftec-btn-row\">\n                    <button type=\"button\" id=\"ftecCalculateBtn\" class=\"ftec-btn ftec-btn-primary\">Calculate<\/button>\n                <\/div>\n            <\/section>\n\n            <section class=\"ftec-card ftec-hidden\" id=\"ftecResults\">\n                <h2>Calculation Results<\/h2>\n\n                <div class=\"ftec-status-banner ftec-status-neutral\" id=\"ftecStatusBanner\">\n                    <span class=\"ftec-status-icon\">&#9881;<\/span>\n                    <div>\n                        <strong id=\"ftecStatusTitle\">Results Ready<\/strong>\n                        <p id=\"ftecStatusSub\">Friction and efficiency analysis complete<\/p>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ftec-hero\">\n                    <div class=\"ftec-hero-card\">\n                        <div class=\"ftec-hero-k\">Transmission Efficiency<\/div>\n                        <div class=\"ftec-hero-v\" id=\"ftecHeroEfficiency\">&mdash;<\/div>\n                        <div class=\"ftec-hero-k\">&eta; = Pout \/ Pin &times; 100%<\/div>\n                    <\/div>\n                    <div class=\"ftec-hero-card\">\n                        <div class=\"ftec-hero-k\">Friction Power Loss<\/div>\n                        <div class=\"ftec-hero-v\" id=\"ftecHeroPloss\">&mdash;<\/div>\n                        <div class=\"ftec-hero-k\">Ploss = Ff &times; v or Tf &times; &omega;<\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ftec-viz-row\">\n                    <div class=\"ftec-viz-box\">\n                        <div class=\"ftec-viz-title\">Friction &amp; Motion Diagram<\/div>\n                        <svg class=\"ftec-schematic\" id=\"ftecSchematic\" viewBox=\"0 0 240 180\" role=\"img\" aria-label=\"Friction and motion schematic\" data-motion=\"linear\">\n                            <g class=\"ftec-sch-linear\">\n                                <rect class=\"ftec-sch-surface\" x=\"20\" y=\"130\" width=\"200\" height=\"20\" rx=\"2\"\/>\n                                <rect class=\"ftec-sch-block\" x=\"50\" y=\"85\" width=\"100\" height=\"45\" rx=\"3\"\/>\n                                <line class=\"ftec-sch-arrow-motion\" x1=\"60\" y1=\"107\" x2=\"140\" y2=\"107\" marker-end=\"url(#ftecArrowMotion)\"\/>\n                                <line class=\"ftec-sch-arrow-friction\" x1=\"150\" y1=\"107\" x2=\"70\" y2=\"107\" marker-end=\"url(#ftecArrowFriction)\"\/>\n                                <line x1=\"100\" y1=\"70\" x2=\"100\" y2=\"85\" stroke=\"#334155\" stroke-width=\"2\"\/>\n                                <polygon points=\"95,78 100,70 105,78\" fill=\"#334155\"\/>\n                                <text class=\"ftec-sch-label\" x=\"100\" y=\"62\" text-anchor=\"middle\" id=\"ftecSchNormal\">N = 5000 N<\/text>\n                                <text class=\"ftec-sch-label\" x=\"100\" y=\"170\" text-anchor=\"middle\" id=\"ftecSchForce\">Ff = \u2014<\/text>\n                                <text class=\"ftec-sch-label\" x=\"170\" y=\"100\" text-anchor=\"start\">motion \u2192<\/text>\n                                <text class=\"ftec-sch-label\" x=\"30\" y=\"100\" text-anchor=\"start\">\u2190 friction<\/text>\n                                <text class=\"ftec-sch-label\" x=\"100\" y=\"15\" text-anchor=\"middle\" id=\"ftecSchSpeed\">v = 0.5 m\/s<\/text>\n                            <\/g>\n                            <g class=\"ftec-sch-rotational ftec-hidden\">\n                                <rect class=\"ftec-sch-shaft\" x=\"75\" y=\"88\" width=\"90\" height=\"12\" rx=\"2\"\/>\n                                <circle class=\"ftec-sch-gear\" cx=\"60\" cy=\"94\" r=\"22\"\/>\n                                <circle class=\"ftec-sch-gear\" cx=\"180\" cy=\"94\" r=\"22\"\/>\n                                <circle fill=\"#fff\" cx=\"60\" cy=\"94\" r=\"6\"\/>\n                                <circle fill=\"#fff\" cx=\"180\" cy=\"94\" r=\"6\"\/>\n                                <path class=\"ftec-sch-arrow-motion\" d=\"M 120 55 A 25 25 0 1 1 95 70\" fill=\"none\" marker-end=\"url(#ftecArrowMotion)\"\/>\n                                <text class=\"ftec-sch-label\" x=\"120\" y=\"45\" text-anchor=\"middle\" id=\"ftecSchTorque\">Tf = \u2014<\/text>\n                                <text class=\"ftec-sch-label\" x=\"120\" y=\"155\" text-anchor=\"middle\" id=\"ftecSchRpm\">\u2014 rpm<\/text>\n                                <text class=\"ftec-sch-label\" x=\"120\" y=\"170\" text-anchor=\"middle\">Rotational friction<\/text>\n                            <\/g>\n                            <defs>\n                                <marker id=\"ftecArrowMotion\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\">\n                                    <path d=\"M0,0 L6,3 L0,6\" fill=\"var(--ftec-primary)\"\/>\n                                <\/marker>\n                                <marker id=\"ftecArrowFriction\" markerWidth=\"8\" markerHeight=\"8\" refX=\"6\" refY=\"3\" orient=\"auto\">\n                                    <path d=\"M0,0 L6,3 L0,6\" fill=\"var(--ftec-danger)\"\/>\n                                <\/marker>\n                            <\/defs>\n                        <\/svg>\n                    <\/div>\n\n                    <div class=\"ftec-viz-box\">\n                        <div class=\"ftec-viz-title\">Power Flow &amp; Heat Generation<\/div>\n                        <div class=\"ftec-power-flow\">\n                            <div class=\"ftec-flow-node ftec-flow-in\" id=\"ftecFlowPin\">Pin<\/div>\n                            <span class=\"ftec-flow-arrow\">&rarr;<\/span>\n                            <div class=\"ftec-flow-node ftec-flow-loss\" id=\"ftecFlowPloss\">Ploss<\/div>\n                            <span class=\"ftec-flow-arrow\">+<\/span>\n                            <div class=\"ftec-flow-node ftec-flow-out\" id=\"ftecFlowPout\">Pout<\/div>\n                        <\/div>\n                        <div class=\"ftec-heat-icon\" title=\"Frictional heat generation\">&#128293;<\/div>\n                        <p class=\"ftec-viz-caption\">Q&#775; &asymp; Ploss (heat generation rate)<\/p>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ftec-viz-row\">\n                    <div class=\"ftec-viz-box\">\n                        <div class=\"ftec-viz-title\">Transmission Efficiency Gauge<\/div>\n                        <div class=\"ftec-gauge-row\">\n                            <svg class=\"ftec-gauge-svg\" viewBox=\"0 0 240 140\" aria-hidden=\"true\">\n                                <defs>\n                                    <linearGradient id=\"ftec-gauge-grad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                                        <stop offset=\"0%\" stop-color=\"#dc2626\"\/>\n                                        <stop offset=\"50%\" stop-color=\"#d97706\"\/>\n                                        <stop offset=\"100%\" stop-color=\"#16a34a\"\/>\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=\"ftecGaugeArc\" d=\"M 30 118 A 90 90 0 0 1 210 118\" fill=\"none\" stroke=\"url(#ftec-gauge-grad)\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-dasharray=\"282.7\" stroke-dashoffset=\"282.7\"\/>\n                                <g id=\"ftecGaugeNeedle\" 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=\"ftec-result-label\">Efficiency<\/div>\n                                <div class=\"ftec-gauge-readout\" id=\"ftecGaugeRead\">&mdash;<\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ftec-viz-box\">\n                        <div class=\"ftec-viz-title\">Efficiency Loss<\/div>\n                        <div class=\"ftec-util\">\n                            <div class=\"ftec-util-head\">\n                                <span>Loss from friction &amp; transmission<\/span>\n                                <strong id=\"ftecUtilLabel\">&mdash;<\/strong>\n                            <\/div>\n                            <div class=\"ftec-util-track\" aria-hidden=\"true\">\n                                <div class=\"ftec-util-fill\" id=\"ftecUtilFill\"><\/div>\n                            <\/div>\n                        <\/div>\n                        <p class=\"ftec-viz-caption ftec-viz-caption-spaced\">Efficiency Loss = 100% &minus; &eta;<\/p>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ftec-results-grid\">\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Friction Force (Ff)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutFf\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Maximum Static Friction (Fs,max)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutFsMax\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Friction Torque (Tf)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutTf\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Angular Velocity (&omega;)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutOmega\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Input Power (Pin)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutPin\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Friction Power Loss (Ploss)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutPloss\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Output Power (Pout)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutPout\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Transmission Efficiency (&eta;)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutEta\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Efficiency Loss<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutEtaLoss\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Friction Loss Ratio<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutLossRatio\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Estimated Heat Generation (Q&#775;)<\/span>\n                        <span class=\"ftec-result-value\" id=\"ftecOutHeat\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Efficiency Status<\/span>\n                        <span class=\"ftec-result-value ftec-out-status\" id=\"ftecOutEffStatus\">&mdash;<\/span>\n                    <\/div>\n                    <div class=\"ftec-result-item\">\n                        <span class=\"ftec-result-label\">Friction Risk<\/span>\n                        <span class=\"ftec-result-value ftec-out-risk\" id=\"ftecOutFrictionRisk\">&mdash;<\/span>\n                    <\/div>\n                <\/div>\n\n                <div class=\"ftec-rec-box\">\n                    <h3>Engineering Recommendations<\/h3>\n                    <ul id=\"ftecRecommendations\"><\/ul>\n                <\/div>\n            <\/section>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">(function(){var r=document.getElementById(\"friction-transmission-efficiency-calculator\");if(!r)return;var p=r.querySelectorAll(\".ftec-js-chunk\"),b=\"\",i;for(i=0;i<p.length;i++)b+=p[i].textContent;if(!b)return;try{(new Function(atob(b)))();}catch(e){console.error(\"Friction Transmission Efficiency Calculator failed:\",e);}})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Friction Force and Transmission Efficiency Calculator is a practical engineering tool designed to calculate friction force, power loss, output power, and mechanical transmission efficiency&#8230;.<\/p>","protected":false},"author":2,"featured_media":24762,"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":[8645,3632,8553,8646],"class_list":["post-24761","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-friction-force","tag-mechanical-efficiency","tag-power-loss","tag-transmission-efficiency","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Friction-Force-and-Transmission-Efficiency-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/comments?post=24761"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24761\/revisions"}],"predecessor-version":[{"id":24763,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24761\/revisions\/24763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media\/24762"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media?parent=24761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/categories?post=24761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/tags?post=24761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}