{"id":24787,"date":"2026-08-31T02:43:58","date_gmt":"2026-08-31T02:43:58","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24787"},"modified":"2026-08-31T02:55:01","modified_gmt":"2026-08-31T02:55:01","slug":"allowable-stress-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ru\/allowable-stress-calculator\/","title":{"rendered":"Allowable Stress Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Allowable Stress Calculator<\/strong> is a practical engineering tool designed to determine safe working stress based on material strength and a selected safety factor. It helps engineers calculate allowable stress, maximum allowable load, required cross-sectional area, stress utilization, and margin of safety for mechanical components. The Allowable Stress Calculator supports tensile, compressive, shear, and bending applications, making it useful for material selection, component sizing, structural analysis, and preliminary safety verification in mechanical and structural engineering.<\/p>\n\n\n\n<!-- Allowable Stress Calculator - WordPress Embed -->\n<!-- Paste into Custom HTML block. If script is blocked, upload app.js to Media Library and use Option B at the bottom. -->\n<style>\n\/**\n * Allowable Stress Calculator \u2014 WordPress-safe scoped styles\n * All rules scoped under #asc-calculator to resist theme overrides.\n *\/\n\n#asc-calculator.asc-root {\n    --asc-primary: #1a5276;\n    --asc-primary-light: #2471a3;\n    --asc-primary-dark: #0e3d5c;\n    --asc-safe: #27ae60;\n    --asc-caution: #f39c12;\n    --asc-unsafe: #e74c3c;\n    --asc-bg: #ffffff;\n    --asc-card-bg: #ffffff;\n    --asc-text: #2c3e50;\n    --asc-text-muted: #7f8c8d;\n    --asc-border: #dce4ec;\n    --asc-shadow: 0 2px 8px rgba(26, 82, 118, 0.08);\n    --asc-radius: 8px;\n    --asc-radius-lg: 12px;\n    --asc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --asc-mono: Consolas, 'Courier New', monospace;\n\n    box-sizing: border-box !important;\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    font-family: var(--asc-font) !important;\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: var(--asc-text) !important;\n    background: var(--asc-bg) !important;\n    border-radius: var(--asc-radius-lg) !important;\n    padding: 8px !important;\n    margin: 0 auto !important;\n    isolation: isolate;\n    float: none !important;\n    clear: both !important;\n}\n\n#asc-calculator.asc-root *,\n#asc-calculator.asc-root *::before,\n#asc-calculator.asc-root *::after {\n    box-sizing: border-box !important;\n}\n\n#asc-calculator.asc-root h2,\n#asc-calculator.asc-root h3,\n#asc-calculator.asc-root p,\n#asc-calculator.asc-root ul,\n#asc-calculator.asc-root li,\n#asc-calculator.asc-root label {\n    font-family: inherit !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n#asc-calculator.asc-root h2,\n#asc-calculator.asc-root h3,\n#asc-calculator.asc-root p,\n#asc-calculator.asc-root ul,\n#asc-calculator.asc-root li {\n    margin: 0 !important;\n    padding: 0 !important;\n    line-height: inherit !important;\n}\n\n#asc-calculator.asc-root .asc-wrap {\n    max-width: 960px !important;\n    margin: 0 auto !important;\n    padding: 12px 8px !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 24px !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-input,\n#asc-calculator.asc-root .asc-output {\n    width: 100% !important;\n    display: block !important;\n    float: none !important;\n}\n\n#asc-calculator.asc-root .asc-card {\n    display: block !important;\n    background: var(--asc-card-bg) !important;\n    border-radius: var(--asc-radius-lg) !important;\n    padding: 20px 24px !important;\n    box-shadow: var(--asc-shadow) !important;\n    border: 1px solid var(--asc-border) !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#asc-calculator.asc-root .asc-card > h2 {\n    font-size: 1.1rem !important;\n    color: var(--asc-primary) !important;\n    margin: 0 0 16px !important;\n    padding: 0 0 8px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--asc-border) !important;\n    background: none !important;\n}\n\n#asc-calculator.asc-root .asc-section + .asc-section {\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--asc-border) !important;\n}\n\n#asc-calculator.asc-root .asc-section-title {\n    font-size: 1.05rem !important;\n    color: var(--asc-primary) !important;\n    margin: 0 0 14px !important;\n    padding: 0 0 6px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--asc-border) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    font-weight: 600 !important;\n    background: none !important;\n}\n\n#asc-calculator.asc-root .asc-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 14px !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-field {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 4px !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    width: 100% !important;\n    min-width: 0 !important;\n}\n\n#asc-calculator.asc-root .asc-field.asc-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n#asc-calculator.asc-root .asc-field > label {\n    font-size: 0.82rem !important;\n    font-weight: 600 !important;\n    color: var(--asc-text) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 4px !important;\n    margin: 0 0 4px !important;\n    padding: 0 !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-field input,\n#asc-calculator.asc-root .asc-field select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    margin: 0 !important;\n    padding: 9px 12px !important;\n    border: 1px solid var(--asc-border) !important;\n    border-radius: var(--asc-radius) !important;\n    font-size: 0.95rem !important;\n    font-family: var(--asc-font) !important;\n    background: #fafbfc !important;\n    color: var(--asc-text) !important;\n    line-height: 1.4 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    box-shadow: none !important;\n    outline: none !important;\n    -webkit-appearance: none !important;\n    appearance: none !important;\n}\n\n#asc-calculator.asc-root .asc-field select {\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%232c3e50' d='M1 1l5 5 5-5'\/%3E%3C\/svg%3E\") !important;\n    background-repeat: no-repeat !important;\n    background-position: right 12px center !important;\n    padding-right: 32px !important;\n}\n\n#asc-calculator.asc-root .asc-field input:focus,\n#asc-calculator.asc-root .asc-field select:focus {\n    border-color: var(--asc-primary-light) !important;\n    box-shadow: 0 0 0 3px rgba(36, 113, 163, 0.15) !important;\n    background-color: #fff !important;\n}\n\n#asc-calculator.asc-root .asc-field input::placeholder {\n    color: #b0bec5 !important;\n    opacity: 1 !important;\n}\n\n#asc-calculator.asc-root .asc-hidden {\n    display: none !important;\n}\n\n#asc-calculator.asc-root .asc-tip {\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(--asc-primary-light) !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    flex-shrink: 0 !important;\n    line-height: 1 !important;\n}\n\n#asc-calculator.asc-root .asc-tip::after {\n    content: attr(data-tip);\n    position: absolute;\n    bottom: calc(100% + 6px);\n    left: 50%;\n    transform: translateX(-50%);\n    background: var(--asc-primary-dark);\n    color: #fff;\n    padding: 6px 10px;\n    border-radius: 6px;\n    font-size: 0.75rem;\n    font-weight: 400;\n    white-space: normal;\n    width: max-content;\n    max-width: 240px;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity 0.2s;\n    z-index: 100;\n    line-height: 1.4;\n}\n\n#asc-calculator.asc-root .asc-tip:hover::after {\n    opacity: 1;\n}\n\n#asc-calculator.asc-root .asc-check-grid {\n    display: grid !important;\n    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)) !important;\n    gap: 6px !important;\n    margin-top: 6px !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-check-grid label {\n    display: flex !important;\n    align-items: center !important;\n    gap: 6px !important;\n    font-size: 0.82rem !important;\n    font-weight: 400 !important;\n    cursor: pointer !important;\n    padding: 4px 0 !important;\n    margin: 0 !important;\n    color: var(--asc-text) !important;\n}\n\n#asc-calculator.asc-root .asc-check-grid input[type=\"checkbox\"] {\n    width: auto !important;\n    min-height: 0 !important;\n    margin: 0 !important;\n    accent-color: var(--asc-primary);\n}\n\n#asc-calculator.asc-root .asc-actions {\n    display: flex !important;\n    justify-content: center !important;\n    align-items: center !important;\n    gap: 12px !important;\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--asc-border) !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-btn {\n    display: inline-block !important;\n    width: auto !important;\n    max-width: none !important;\n    padding: 10px 32px !important;\n    min-width: 140px !important;\n    border: none !important;\n    border-radius: var(--asc-radius) !important;\n    font-size: 1rem !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    font-family: var(--asc-font) !important;\n    line-height: 1.4 !important;\n    text-align: center !important;\n    text-decoration: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    transition: transform 0.15s, box-shadow 0.15s, background 0.2s;\n}\n\n#asc-calculator.asc-root .asc-btn-primary {\n    background: linear-gradient(135deg, var(--asc-primary) 0%, var(--asc-primary-light) 100%) !important;\n    color: #fff !important;\n    box-shadow: 0 3px 12px rgba(26, 82, 118, 0.3) !important;\n}\n\n#asc-calculator.asc-root .asc-btn-primary:hover {\n    background: linear-gradient(135deg, var(--asc-primary-light) 0%, var(--asc-primary) 100%) !important;\n    color: #fff !important;\n}\n\n#asc-calculator.asc-root .asc-results-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 10px !important;\n    width: 100% !important;\n}\n\n#asc-calculator.asc-root .asc-result {\n    display: flex !important;\n    flex-direction: column !important;\n    padding: 10px 14px !important;\n    background: #fafbfc !important;\n    border-radius: var(--asc-radius) !important;\n    border: 1px solid var(--asc-border) !important;\n}\n\n#asc-calculator.asc-root .asc-result.asc-result-hi {\n    grid-column: 1 \/ -1 !important;\n    background: linear-gradient(135deg, #eaf2f8 0%, #d4e6f1 100%) !important;\n    border-color: var(--asc-primary-light) !important;\n}\n\n#asc-calculator.asc-root .asc-result-label {\n    font-size: 0.75rem !important;\n    color: var(--asc-text-muted) !important;\n    font-weight: 500 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n}\n\n#asc-calculator.asc-root .asc-result-value {\n    font-size: 1.05rem !important;\n    font-weight: 700 !important;\n    color: var(--asc-primary-dark) !important;\n    font-family: var(--asc-mono) !important;\n    margin-top: 2px !important;\n}\n\n#asc-calculator.asc-root .asc-result-value.asc-safe { color: var(--asc-safe) !important; }\n#asc-calculator.asc-root .asc-result-value.asc-caution { color: var(--asc-caution) !important; }\n#asc-calculator.asc-root .asc-result-value.asc-unsafe { color: var(--asc-unsafe) !important; }\n\n#asc-calculator.asc-root .asc-warnings {\n    margin-bottom: 14px !important;\n}\n\n#asc-calculator.asc-root .asc-warning {\n    padding: 10px 14px !important;\n    border-radius: var(--asc-radius) !important;\n    margin-bottom: 8px !important;\n    font-size: 0.88rem !important;\n    display: flex !important;\n    align-items: flex-start !important;\n    gap: 8px !important;\n}\n\n#asc-calculator.asc-root .asc-warning-error {\n    background: #fadbd8 !important;\n    color: #922b21 !important;\n    border-left: 4px solid var(--asc-unsafe) !important;\n}\n\n#asc-calculator.asc-root .asc-warning-warn {\n    background: #fdebd0 !important;\n    color: #7d6608 !important;\n    border-left: 4px solid var(--asc-caution) !important;\n}\n\n#asc-calculator.asc-root .asc-warning-info {\n    background: #d6eaf8 !important;\n    color: #1a5276 !important;\n    border-left: 4px solid var(--asc-primary-light) !important;\n}\n\n@media (max-width: 600px) {\n    #asc-calculator.asc-root .asc-grid,\n    #asc-calculator.asc-root .asc-results-grid {\n        grid-template-columns: 1fr !important;\n    }\n\n    #asc-calculator.asc-root .asc-card {\n        padding: 16px !important;\n    }\n}\n\n<\/style>\n\n<div id=\"asc-calculator\" class=\"asc-root\">\n<div class=\"asc-wrap\">\n        <div class=\"asc-layout\">\n            <div class=\"asc-input\">\n                <section class=\"asc-card asc-inputs\">\n                    <div class=\"asc-section\">\n                        <h3 class=\"asc-section-title\">General Settings<\/h3>\n                        <div class=\"asc-grid\">\n                            <div class=\"asc-field\">\n                                <label for=\"asc-unitSystem\">Unit System<\/label>\n                                <select id=\"asc-unitSystem\">\n                                    <option value=\"metric\">Metric (MPa, N, mm)<\/option>\n                                    <option value=\"imperial\">Imperial (ksi, lbf, in)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-calcMode\">Calculation Mode\n                                    <span class=\"asc-tip\" data-tip=\"Select what you want to calculate\">?<\/span>\n                                <\/label>\n                                <select id=\"asc-calcMode\">\n                                    <option value=\"allowable\">Allowable Stress Calculation<\/option>\n                                    <option value=\"working\" selected>Working Stress Check<\/option>\n                                    <option value=\"maxLoad\">Maximum Allowable Load<\/option>\n                                    <option value=\"requiredArea\">Required Area Calculation<\/option>\n                                    <option value=\"requiredSF\">Required Safety Factor<\/option>\n                                    <option value=\"combined\">Combined Stress (Von Mises)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-stressType\">Stress Type\n                                    <span class=\"asc-tip\" data-tip=\"Type of loading: tension, compression, shear, bending, or combined\">?<\/span>\n                                <\/label>\n                                <select id=\"asc-stressType\">\n                                    <option value=\"tension\" selected>Tension<\/option>\n                                    <option value=\"compression\">Compression<\/option>\n                                    <option value=\"shear\">Shear<\/option>\n                                    <option value=\"bending\">Bending<\/option>\n                                    <option value=\"combined\">Combined<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"asc-section\">\n                        <h3 class=\"asc-section-title\">Material Properties<\/h3>\n                        <div class=\"asc-grid\">\n                            <div class=\"asc-field asc-span-full\">\n                                <label for=\"asc-material\">Material Preset<\/label>\n                                <select id=\"asc-material\">\n                                    <option value=\"structural_steel\" selected>Structural Steel<\/option>\n                                    <option value=\"carbon_steel\">Carbon Steel<\/option>\n                                    <option value=\"alloy_steel\">Alloy Steel<\/option>\n                                    <option value=\"stainless_steel\">Stainless Steel<\/option>\n                                    <option value=\"aluminum\">Aluminum Alloy<\/option>\n                                    <option value=\"titanium\">Titanium Alloy<\/option>\n                                    <option value=\"copper\">Copper<\/option>\n                                    <option value=\"brass\">Brass<\/option>\n                                    <option value=\"cast_iron\">Cast Iron<\/option>\n                                    <option value=\"plastic\">Engineering Plastic<\/option>\n                                    <option value=\"custom\">Custom Material<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-refStrengthType\">Reference Strength Type\n                                    <span class=\"asc-tip\" data-tip=\"Strength value used as basis for allowable stress: sigma_allow = Sref \/ SF\">?<\/span>\n                                <\/label>\n                                <select id=\"asc-refStrengthType\">\n                                    <option value=\"yield\" selected>Yield Strength<\/option>\n                                    <option value=\"ultimate\">Ultimate Tensile Strength<\/option>\n                                    <option value=\"compressive\">Compressive Strength<\/option>\n                                    <option value=\"shear\">Shear Strength<\/option>\n                                    <option value=\"custom\">Custom Reference Strength<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-yieldStrength\">Yield Strength (<span class=\"asc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-yieldStrength\" value=\"355\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-ultimateStrength\">Ultimate Tensile Strength (<span class=\"asc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-ultimateStrength\" value=\"510\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-compressiveStrength\">Compressive Strength (<span class=\"asc-u-stress\">MPa<\/span>)\n                                    <span class=\"asc-tip\" data-tip=\"Optional. Used when compressive strength is selected as reference.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-compressiveStrength\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-shearStrength\">Shear Strength (<span class=\"asc-u-stress\">MPa<\/span>)\n                                    <span class=\"asc-tip\" data-tip=\"Optional. If blank, estimated from material type.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-shearStrength\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                            <div class=\"asc-field asc-hidden\" id=\"asc-customStrengthGroup\">\n                                <label for=\"asc-customStrength\">Custom Reference Strength (<span class=\"asc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-customStrength\" value=\"\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-safetyFactor\">Design Safety Factor (SF)\n                                    <span class=\"asc-tip\" data-tip=\"Factor of safety applied to reference strength. Default: 2.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-safetyFactor\" value=\"2.0\" min=\"0.01\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-safetyFactorUlt\">Ultimate Safety Factor (SFu)\n                                    <span class=\"asc-tip\" data-tip=\"Optional separate SF for ultimate strength comparison\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-safetyFactorUlt\" value=\"\" min=\"0.01\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"asc-section\" id=\"asc-loadSection\">\n                        <h3 class=\"asc-section-title\">Applied Loads<\/h3>\n                        <div class=\"asc-grid\">\n                            <div class=\"asc-field asc-load-field\" data-types=\"tension,compression,combined,maxLoad,requiredArea,requiredSF,working\">\n                                <label for=\"asc-axialLoad\">Applied Axial Load (<span class=\"asc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-axialLoad\" value=\"40\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-load-field asc-hidden\" data-types=\"shear,combined\">\n                                <label for=\"asc-shearLoad\">Applied Shear Load (<span class=\"asc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-shearLoad\" value=\"0\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-load-field asc-hidden\" data-types=\"bending\">\n                                <label for=\"asc-bendingMoment\">Bending Moment (<span class=\"asc-u-moment\">N.m<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-bendingMoment\" value=\"0\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-load-field asc-hidden\" data-types=\"shear\">\n                                <label for=\"asc-shearPlanes\">Number of Shear Planes\n                                    <span class=\"asc-tip\" data-tip=\"tau = V \/ (n x A). Default: 1\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-shearPlanes\" value=\"1\" min=\"1\" step=\"1\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-stressConcentration\">Stress Concentration Factor (Kt)\n                                    <span class=\"asc-tip\" data-tip=\"Local stress = Kt x nominal stress. Default: 1.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-stressConcentration\" value=\"1.0\" min=\"1\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"asc-section\" id=\"asc-geometrySection\">\n                        <h3 class=\"asc-section-title\">Cross-Section Geometry<\/h3>\n                        <div class=\"asc-grid\">\n                            <div class=\"asc-field\">\n                                <label for=\"asc-sectionType\">Cross-Section Type<\/label>\n                                <select id=\"asc-sectionType\">\n                                    <option value=\"solid_round\" selected>Solid Round<\/option>\n                                    <option value=\"hollow_round\">Hollow Round<\/option>\n                                    <option value=\"rectangle\">Rectangle<\/option>\n                                    <option value=\"custom\">Custom Area<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field\" data-sections=\"solid_round\">\n                                <label for=\"asc-diameter\">Diameter (<span class=\"asc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-diameter\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"asc-outerDiameter\">Outer Diameter (<span class=\"asc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-outerDiameter\" value=\"25\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"asc-innerDiameter\">Inner Diameter (<span class=\"asc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-innerDiameter\" value=\"15\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"asc-width\">Width (<span class=\"asc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-width\" value=\"30\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"asc-thickness\">Thickness \/ Height (<span class=\"asc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-thickness\" value=\"10\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"custom\">\n                                <label for=\"asc-customArea\">Custom Area (<span class=\"asc-u-area\">mm2<\/span>)<\/label>\n                                <input type=\"number\" id=\"asc-customArea\" value=\"314.16\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"asc-field asc-geom-field asc-hidden\" data-sections=\"rectangle,bending\">\n                                <label for=\"asc-sectionModulus\">Section Modulus Z (<span class=\"asc-u-length\">mm<\/span>3)\n                                    <span class=\"asc-tip\" data-tip=\"Optional manual override for bending: sigma = M\/Z\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-sectionModulus\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Auto-calculated\">\n                            <\/div>\n                            <div class=\"asc-field\">\n                                <label for=\"asc-netAreaReduction\">Net Area Reduction (%)\n                                    <span class=\"asc-tip\" data-tip=\"Reduction for holes, threads, slots, grooves, notches\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"asc-netAreaReduction\" value=\"0\" min=\"0\" max=\"99\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"asc-section\">\n                        <h3 class=\"asc-section-title\">Material Comparison\n                            <span class=\"asc-tip\" data-tip=\"Compare allowable stress for multiple materials at the same safety factor\">?<\/span>\n                        <\/h3>\n                        <div class=\"asc-field\">\n                            <label>Select materials to compare:<\/label>\n                            <div class=\"asc-check-grid\" id=\"asc-materialCompare\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"asc-actions\">\n                        <button type=\"button\" id=\"asc-calculateBtn\" class=\"asc-btn asc-btn-primary\">Calculate<\/button>\n                    <\/div>\n                <\/section>\n            <\/div>\n\n            <div class=\"asc-output asc-hidden\" id=\"asc-resultsPanel\">\n                <section class=\"asc-card asc-results\">\n                    <h2>Calculation Results<\/h2>\n                    <div id=\"asc-warnings\" class=\"asc-warnings\" hidden><\/div>\n                    <div class=\"asc-results-grid\" id=\"asc-resultsGrid\">\n                        <div class=\"asc-result\"><span class=\"asc-result-label\">Reference Material Strength<\/span><span class=\"asc-result-value\" id=\"asc-resRefStrength\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\"><span class=\"asc-result-label\">Design Safety Factor<\/span><span class=\"asc-result-value\" id=\"asc-resSF\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\"><span class=\"asc-result-label\">Allowable Normal Stress<\/span><span class=\"asc-result-value\" id=\"asc-resAllowNormal\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemAllowShear\"><span class=\"asc-result-label\">Allowable Shear Stress<\/span><span class=\"asc-result-value\" id=\"asc-resAllowShear\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemActual\"><span class=\"asc-result-label\">Actual Working Stress<\/span><span class=\"asc-result-value\" id=\"asc-resActualStress\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemMaxLoad\"><span class=\"asc-result-label\">Maximum Allowable Load<\/span><span class=\"asc-result-value\" id=\"asc-resMaxLoad\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemRequiredArea\"><span class=\"asc-result-label\">Required Cross-Sectional Area<\/span><span class=\"asc-result-value\" id=\"asc-resRequiredArea\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemRequiredSF\"><span class=\"asc-result-label\">Required Safety Factor<\/span><span class=\"asc-result-value\" id=\"asc-resRequiredSF\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemUtilization\"><span class=\"asc-result-label\">Stress Utilization<\/span><span class=\"asc-result-value\" id=\"asc-resUtilization\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemStressReserve\"><span class=\"asc-result-label\">Stress Reserve<\/span><span class=\"asc-result-value\" id=\"asc-resStressReserve\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemLoadReserve\"><span class=\"asc-result-label\">Load Reserve<\/span><span class=\"asc-result-value\" id=\"asc-resLoadReserve\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result\" id=\"asc-resItemMOS\"><span class=\"asc-result-label\">Margin of Safety<\/span><span class=\"asc-result-value\" id=\"asc-resMOS\">&#8211;<\/span><\/div>\n                        <div class=\"asc-result asc-result-hi\"><span class=\"asc-result-label\">Design Status<\/span><span class=\"asc-result-value\" id=\"asc-resDesignStatus\">&#8211;<\/span><\/div>\n                    <\/div>\n                <\/section>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Option A: inline loader (no external files) -->\n<script type=\"text\/javascript\">\n(function(){\n  var b=\"LyoqDQogKiBBbGxvd2FibGUgU3RyZXNzIENhbGN1bGF0b3INCiAqIENvcmUgY2FsY3VsYXRpb24gZW5naW5lLCBVSSBsb2dpYywgYW5kIHZpc3VhbGl6YXRpb25zDQogKi8NCg0KKGZ1bmN0aW9uICgpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICAvLyAtLS0gTWF0ZXJpYWwgUHJlc2V0cyAodmFsdWVzIGluIE1QYSkgLS0tDQogICAgY29uc3QgTUFURVJJQUxTID0gew0KICAgICAgICBzdHJ1Y3R1cmFsX3N0ZWVsOiB7IG5hbWU6ICdTdHJ1Y3R1cmFsIFN0ZWVsJywgeWxkOiAzNTUsIHVsdGltYXRlOiA1MTAsIGNvbXByZXNzaXZlOiAzNTUsIHNoZWFyOiAyMTAsIHNoZWFyUmF0aW86IDAuNTgsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgY2FyYm9uX3N0ZWVsOiAgICAgeyBuYW1lOiAnQ2FyYm9uIFN0ZWVsJywgICAgIHlsZDogMjUwLCB1bHRpbWF0ZTogNDAwLCBjb21wcmVzc2l2ZTogMjUwLCBzaGVhcjogMTQ1LCBzaGVhclJhdGlvOiAwLjU4LCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGFsbG95X3N0ZWVsOiAgICAgIHsgbmFtZTogJ0FsbG95IFN0ZWVsJywgICAgICB5bGQ6IDY5MCwgdWx0aW1hdGU6IDg2MCwgY29tcHJlc3NpdmU6IDY5MCwgc2hlYXI6IDQwMCwgc2hlYXJSYXRpbzogMC41OCwgZHVjdGlsZTogdHJ1ZSB9LA0KICAgICAgICBzdGFpbmxlc3Nfc3RlZWw6ICB7IG5hbWU6ICdTdGFpbmxlc3MgU3RlZWwnLCAgeWxkOiAyMDUsIHVsdGltYXRlOiA1MTUsIGNvbXByZXNzaXZlOiAyMDUsIHNoZWFyOiAzMTAsIHNoZWFyUmF0aW86IDAuNjAsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgYWx1bWludW06ICAgICAgICAgeyBuYW1lOiAnQWx1bWludW0gQWxsb3knLCAgIHlsZDogMjc1LCB1bHRpbWF0ZTogMzEwLCBjb21wcmVzc2l2ZTogMjc1LCBzaGVhcjogMTY1LCBzaGVhclJhdGlvOiAwLjYwLCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIHRpdGFuaXVtOiAgICAgICAgIHsgbmFtZTogJ1RpdGFuaXVtIEFsbG95JywgICB5bGQ6IDg4MCwgdWx0aW1hdGU6IDk1MCwgY29tcHJlc3NpdmU6IDg4MCwgc2hlYXI6IDUxMCwgc2hlYXJSYXRpbzogMC41OCwgZHVjdGlsZTogdHJ1ZSB9LA0KICAgICAgICBjb3BwZXI6ICAgICAgICAgICB7IG5hbWU6ICdDb3BwZXInLCAgICAgICAgICAgeWxkOiA3MCwgIHVsdGltYXRlOiAyMjAsIGNvbXByZXNzaXZlOiA3MCwgIHNoZWFyOiAxMzAsIHNoZWFyUmF0aW86IDAuNjAsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgYnJhc3M6ICAgICAgICAgICAgeyBuYW1lOiAnQnJhc3MnLCAgICAgICAgICAgIHlsZDogMTI0LCB1bHRpbWF0ZTogMzM4LCBjb21wcmVzc2l2ZTogMTI0LCBzaGVhcjogMjAwLCBzaGVhclJhdGlvOiAwLjYwLCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGNhc3RfaXJvbjogICAgICAgIHsgbmFtZTogJ0Nhc3QgSXJvbicsICAgICAgICB5bGQ6IDEzMCwgdWx0aW1hdGU6IDIwMCwgY29tcHJlc3NpdmU6IDY1MCwgc2hlYXI6IDEzMCwgc2hlYXJSYXRpbzogMC42NSwg\"+\"ZHVjdGlsZTogZmFsc2UgfSwNCiAgICAgICAgcGxhc3RpYzogICAgICAgICAgeyBuYW1lOiAnRW5naW5lZXJpbmcgUGxhc3RpYycsIHlsZDogNTAsIHVsdGltYXRlOiA3MCwgY29tcHJlc3NpdmU6IDgwLCBzaGVhcjogMzUsIHNoZWFyUmF0aW86IDAuNTAsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgY3VzdG9tOiAgICAgICAgICAgeyBuYW1lOiAnQ3VzdG9tIE1hdGVyaWFsJywgIHlsZDogMCwgdWx0aW1hdGU6IDAsIGNvbXByZXNzaXZlOiAwLCBzaGVhcjogMCwgc2hlYXJSYXRpbzogMC41OCwgZHVjdGlsZTogdHJ1ZSB9DQogICAgfTsNCg0KICAgIGNvbnN0IE1BVEVSSUFMX0tFWVMgPSBPYmplY3Qua2V5cyhNQVRFUklBTFMpLmZpbHRlcihrID0+IGsgIT09ICdjdXN0b20nKTsNCg0KICAgIC8vIC0tLSBVbml0IENvbnZlcnNpb24gKGludGVybmFsOiBNUGEsIE4sIG1tLCBtbTIsIE5tbSkgLS0tDQogICAgY29uc3QgVU5JVFMgPSB7DQogICAgICAgIG1ldHJpYzogew0KICAgICAgICAgICAgc3RyZXNzOiAnTVBhJywgZm9yY2U6ICdrTicsIGxlbmd0aDogJ21tJywgYXJlYTogJ21tMicsDQogICAgICAgICAgICBtb21lbnQ6ICdOLm0nLCBzZWN0aW9uTW9kOiAnbW0zJywNCiAgICAgICAgICAgIHN0cmVzc0Zyb21JbnB1dDogdiA9PiB2LA0KICAgICAgICAgICAgc3RyZXNzVG9EaXNwbGF5OiB2ID0+IHYsDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogdiA9PiB2ICogMTAwMCwNCiAgICAgICAgICAgIGZvcmNlVG9EaXNwbGF5OiB2ID0+IHYgLyAxMDAwLA0KICAgICAgICAgICAgbGVuZ3RoRnJvbUlucHV0OiB2ID0+IHYsDQogICAgICAgICAgICBsZW5ndGhUb0Rpc3BsYXk6IHYgPT4gdiwNCiAgICAgICAgICAgIGFyZWFGcm9tSW5wdXQ6IHYgPT4gdiwNCiAgICAgICAgICAgIGFyZWFUb0Rpc3BsYXk6IHYgPT4gdiwNCiAgICAgICAgICAgIG1vbWVudEZyb21JbnB1dDogdiA9PiB2ICogMWU2LA0KICAgICAgICAgICAgbW9tZW50VG9EaXNwbGF5OiB2ID0+IHYgLyAxZTYNCiAgICAgICAgfSwNCiAgICAgICAgaW1wZXJpYWw6IHsNCiAgICAgICAgICAgIHN0cmVzczogJ2tzaScsIGZvcmNlOiAnbGJmJywgbGVuZ3RoOiAnaW4nLCBhcmVhOiAnaW4yJywNCiAgICAgICAgICAgIG1vbWVudDogJ2xiZi5mdCcsIHNlY3Rpb25Nb2Q6ICdpbjMnLA0KICAgICAgICAgICAgc3RyZXNzRnJvbUlucHV0OiB2ID0+IHYgKiA2Ljg5NDc2LA0KICAgICAgICAgICAgc3RyZXNzVG9EaXNwbGF5OiB2ID0+IHYgLyA2Ljg5NDc2LA0KICAgICAgICAgICAgZm9yY2VGcm9tSW5wdXQ6IHYgPT4gdiAqIDQuNDQ4MjIsDQogICAgICAgICAgICBmb3JjZVRvRGlzcGxheTogdiA9PiB2IC8gNC40NDgyMiwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogdiA9PiB2ICogMjUuNCwNCiAgICAgICAgICAgIGxlbmd0aFRvRGlzcGxheTogdiA9PiB2IC8gMjUuNCwNCiAgICAgICAgICAgIGFyZWFGcm9tSW5wdXQ6IHYgPT4gdiAqIDY0NS4xNiwNCiAgICAgICAgICAgIGFy\"+\"ZWFUb0Rpc3BsYXk6IHYgPT4gdiAvIDY0NS4xNiwNCiAgICAgICAgICAgIG1vbWVudEZyb21JbnB1dDogdiA9PiB2ICogMTM1NS44MiwNCiAgICAgICAgICAgIG1vbWVudFRvRGlzcGxheTogdiA9PiB2IC8gMTM1NS44Mg0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8vIC0tLSBET00gUmVmZXJlbmNlcyAtLS0NCiAgICBsZXQgcm9vdCA9IG51bGw7DQogICAgY29uc3QgZWxzID0ge307DQoNCiAgICBmdW5jdGlvbiAkKGlkKSB7DQogICAgICAgIHJldHVybiByb290ID8gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXNjLScgKyBpZCkgOiBudWxsOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHFzYShzZWxlY3Rvcikgew0KICAgICAgICByZXR1cm4gcm9vdCA\/IHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikgOiBbXTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYWNoZUVsZW1lbnRzKCkgew0KICAgICAgICBpZiAoIXJvb3QpIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXNjLWNhbGN1bGF0b3InKTsNCiAgICAgICAgaWYgKCFyb290KSByZXR1cm4gZmFsc2U7DQoNCiAgICAgICAgY29uc3QgaWRzID0gWw0KICAgICAgICAgICAgJ3VuaXRTeXN0ZW0nLCAnY2FsY01vZGUnLCAnc3RyZXNzVHlwZScsICdtYXRlcmlhbCcsICdyZWZTdHJlbmd0aFR5cGUnLA0KICAgICAgICAgICAgJ3lpZWxkU3RyZW5ndGgnLCAndWx0aW1hdGVTdHJlbmd0aCcsICdjb21wcmVzc2l2ZVN0cmVuZ3RoJywgJ3NoZWFyU3RyZW5ndGgnLA0KICAgICAgICAgICAgJ2N1c3RvbVN0cmVuZ3RoJywgJ2N1c3RvbVN0cmVuZ3RoR3JvdXAnLCAnc2FmZXR5RmFjdG9yJywgJ3NhZmV0eUZhY3RvclVsdCcsDQogICAgICAgICAgICAnYXhpYWxMb2FkJywgJ3NoZWFyTG9hZCcsICdiZW5kaW5nTW9tZW50JywgJ3NoZWFyUGxhbmVzJywgJ3N0cmVzc0NvbmNlbnRyYXRpb24nLA0KICAgICAgICAgICAgJ3NlY3Rpb25UeXBlJywgJ2RpYW1ldGVyJywgJ291dGVyRGlhbWV0ZXInLCAnaW5uZXJEaWFtZXRlcicsICd3aWR0aCcsICd0aGlja25lc3MnLA0KICAgICAgICAgICAgJ2N1c3RvbUFyZWEnLCAnc2VjdGlvbk1vZHVsdXMnLCAnbmV0QXJlYVJlZHVjdGlvbicsDQogICAgICAgICAgICAnY2FsY3VsYXRlQnRuJywgJ3dhcm5pbmdzJywgJ3Jlc3VsdHNQYW5lbCcsDQogICAgICAgICAgICAncmVzdWx0c0dyaWQnLCAnbWF0ZXJpYWxDb21wYXJlJywNCiAgICAgICAgICAgICdyZXNSZWZTdHJlbmd0aCcsICdyZXNTRicsICdyZXNBbGxvd05vcm1hbCcsICdyZXNBbGxvd1NoZWFyJywgJ3Jlc0FjdHVhbFN0cmVzcycsDQogICAgICAgICAgICAncmVzTWF4TG9hZCcsICdyZXNSZXF1aXJlZEFyZWEnLCAncmVzUmVxdWlyZWRTRicsDQogICAgICAgICAgICAncmVzVXRpbGl6YXRpb24nLCAncmVzU3RyZXNzUmVzZXJ2ZScsICdyZXNMb2FkUmVzZXJ2ZScsICdyZXNNT1MnLCAncmVzRGVzaWduU3RhdHVzJw0KICAgICAgICBdOw0KICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7IGVsc1tp\"+\"ZF0gPSAkKGlkKTsgfSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8vIC0tLSBIZWxwZXJzIC0tLQ0KICAgIGZ1bmN0aW9uIG51bShpZCkgew0KICAgICAgICBjb25zdCBlbCA9IGVsc1tpZF07DQogICAgICAgIGlmICghZWwpIHJldHVybiAwOw0KICAgICAgICBjb25zdCB2ID0gcGFyc2VGbG9hdChlbC52YWx1ZSk7DQogICAgICAgIHJldHVybiBpc05hTih2KSA\/IDAgOiB2Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZtdCh2YWwsIGRlY2ltYWxzID0gMikgew0KICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8ICFpc0Zpbml0ZSh2YWwpKSByZXR1cm4gJy0nOw0KICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA+PSAxZTYgfHwgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSAmJiB2YWwgIT09IDApKSByZXR1cm4gdmFsLnRvRXhwb25lbnRpYWwoMyk7DQogICAgICAgIHJldHVybiB2YWwudG9GaXhlZChkZWNpbWFscyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZ2V0VW5pdHMoKSB7DQogICAgICAgIHJldHVybiBVTklUU1tlbHMudW5pdFN5c3RlbS52YWx1ZV0gfHwgVU5JVFMubWV0cmljOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBxc2EoJy5hc2MtdS1zdHJlc3MnKS5mb3JFYWNoKGVsID0+IGVsLnRleHRDb250ZW50ID0gdS5zdHJlc3MpOw0KICAgICAgICBxc2EoJy5hc2MtdS1mb3JjZScpLmZvckVhY2goZWwgPT4gZWwudGV4dENvbnRlbnQgPSB1LmZvcmNlKTsNCiAgICAgICAgcXNhKCcuYXNjLXUtbGVuZ3RoJykuZm9yRWFjaChlbCA9PiBlbC50ZXh0Q29udGVudCA9IHUubGVuZ3RoKTsNCiAgICAgICAgcXNhKCcuYXNjLXUtYXJlYScpLmZvckVhY2goZWwgPT4gZWwudGV4dENvbnRlbnQgPSB1LmFyZWEpOw0KICAgICAgICBxc2EoJy5hc2MtdS1tb21lbnQnKS5mb3JFYWNoKGVsID0+IGVsLnRleHRDb250ZW50ID0gdS5tb21lbnQpOw0KICAgIH0NCg0KICAgIC8vIC0tLSBDcm9zcy1TZWN0aW9uIEdlb21ldHJ5IC0tLQ0KICAgIGZ1bmN0aW9uIGNhbGNHZW9tZXRyeSgpIHsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIGNvbnN0IHR5cGUgPSBlbHMuc2VjdGlvblR5cGUudmFsdWU7DQogICAgICAgIGxldCBhcmVhID0gMCwgc2VjdGlvbk1vZCA9IDAsIEkgPSAwLCBjID0gMDsNCg0KICAgICAgICBpZiAodHlwZSA9PT0gJ3NvbGlkX3JvdW5kJykgew0KICAgICAgICAgICAgY29uc3QgZCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnZGlhbWV0ZXInKSk7DQogICAgICAgICAgICBhcmVhID0gTWF0aC5QSSAqIGQgKiBkIC8gNDsNCiAgICAgICAgICAgIHNlY3Rpb25Nb2QgPSBNYXRoLlBJICogZCAqIGQgKiBkIC8gMzI7DQogICAgICAgICAgICBJID0gTWF0aC5QSSAqIE1hdGgucG93KGQsIDQpIC8gNjQ7DQogICAgICAgICAgICBjID0gZCAvIDI7DQogICAg\"+\"ICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2hvbGxvd19yb3VuZCcpIHsNCiAgICAgICAgICAgIGNvbnN0IEQgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ291dGVyRGlhbWV0ZXInKSk7DQogICAgICAgICAgICBjb25zdCBkID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdpbm5lckRpYW1ldGVyJykpOw0KICAgICAgICAgICAgYXJlYSA9IE1hdGguUEkgKiAoRCAqIEQgLSBkICogZCkgLyA0Ow0KICAgICAgICAgICAgc2VjdGlvbk1vZCA9IE1hdGguUEkgKiAoTWF0aC5wb3coRCwgNCkgLSBNYXRoLnBvdyhkLCA0KSkgLyAoMzIgKiBEKTsNCiAgICAgICAgICAgIEkgPSBNYXRoLlBJICogKE1hdGgucG93KEQsIDQpIC0gTWF0aC5wb3coZCwgNCkpIC8gNjQ7DQogICAgICAgICAgICBjID0gRCAvIDI7DQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlY3RhbmdsZScpIHsNCiAgICAgICAgICAgIGNvbnN0IGIgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ3dpZHRoJykpOw0KICAgICAgICAgICAgY29uc3QgaCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgndGhpY2tuZXNzJykpOw0KICAgICAgICAgICAgYXJlYSA9IGIgKiBoOw0KICAgICAgICAgICAgc2VjdGlvbk1vZCA9IGIgKiBoICogaCAvIDY7DQogICAgICAgICAgICBJID0gYiAqIE1hdGgucG93KGgsIDMpIC8gMTI7DQogICAgICAgICAgICBjID0gaCAvIDI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhcmVhID0gdS5hcmVhRnJvbUlucHV0KG51bSgnY3VzdG9tQXJlYScpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IG1hbnVhbFogPSBudW0oJ3NlY3Rpb25Nb2R1bHVzJyk7DQogICAgICAgIGlmIChtYW51YWxaID4gMCkgew0KICAgICAgICAgICAgc2VjdGlvbk1vZCA9IGVscy51bml0U3lzdGVtLnZhbHVlID09PSAnaW1wZXJpYWwnDQogICAgICAgICAgICAgICAgPyBtYW51YWxaICogTWF0aC5wb3coMjUuNCwgMykNCiAgICAgICAgICAgICAgICA6IG1hbnVhbFo7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCByZWR1Y3Rpb24gPSBudW0oJ25ldEFyZWFSZWR1Y3Rpb24nKSAvIDEwMDsNCiAgICAgICAgY29uc3QgbmV0QXJlYSA9IGFyZWEgKiAoMSAtIHJlZHVjdGlvbik7DQoNCiAgICAgICAgcmV0dXJuIHsgZ3Jvc3NBcmVhOiBhcmVhLCBhcmVhOiBuZXRBcmVhLCBzZWN0aW9uTW9kLCBJLCBjLCB0eXBlIH07DQogICAgfQ0KDQogICAgLy8gLS0tIFJlZmVyZW5jZSBTdHJlbmd0aCAtLS0NCiAgICBmdW5jdGlvbiBnZXRSZWZlcmVuY2VTdHJlbmd0aChzdHJlc3NUeXBlKSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCByZWZUeXBlID0gZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgbWF0S2V5ID0gZWxzLm1hdGVyaWFsLnZhbHVlOw0KICAgICAgICBjb25zdCBtYXQgPSBNQVRFUklBTFNbbWF0S2V5XTsNCg0KICAgICAgICBsZXQgc1JlZiA9IDA7DQogICAgICAgIGlmIChyZWZUeXBlID09PSAneWll\"+\"bGQnKSBzUmVmID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd5aWVsZFN0cmVuZ3RoJykpOw0KICAgICAgICBlbHNlIGlmIChyZWZUeXBlID09PSAndWx0aW1hdGUnKSBzUmVmID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd1bHRpbWF0ZVN0cmVuZ3RoJykpOw0KICAgICAgICBlbHNlIGlmIChyZWZUeXBlID09PSAnY29tcHJlc3NpdmUnKSB7DQogICAgICAgICAgICBjb25zdCBjb21wID0gbnVtKCdjb21wcmVzc2l2ZVN0cmVuZ3RoJyk7DQogICAgICAgICAgICBzUmVmID0gY29tcCA+IDAgPyB1LnN0cmVzc0Zyb21JbnB1dChjb21wKSA6IHUuc3RyZXNzRnJvbUlucHV0KG51bSgneWllbGRTdHJlbmd0aCcpKTsNCiAgICAgICAgfSBlbHNlIGlmIChyZWZUeXBlID09PSAnc2hlYXInKSB7DQogICAgICAgICAgICBjb25zdCBzaGVhciA9IG51bSgnc2hlYXJTdHJlbmd0aCcpOw0KICAgICAgICAgICAgaWYgKHNoZWFyID4gMCkgc1JlZiA9IHUuc3RyZXNzRnJvbUlucHV0KHNoZWFyKTsNCiAgICAgICAgICAgIGVsc2Ugc1JlZiA9IGVzdGltYXRlU2hlYXJTdHJlbmd0aChtYXQpOw0KICAgICAgICB9IGVsc2UgaWYgKHJlZlR5cGUgPT09ICdjdXN0b20nKSBzUmVmID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCdjdXN0b21TdHJlbmd0aCcpKTsNCg0KICAgICAgICByZXR1cm4gc1JlZjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBlc3RpbWF0ZVNoZWFyU3RyZW5ndGgobWF0KSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCBzaGVhcklucHV0ID0gbnVtKCdzaGVhclN0cmVuZ3RoJyk7DQogICAgICAgIGlmIChzaGVhcklucHV0ID4gMCkgcmV0dXJuIHUuc3RyZXNzRnJvbUlucHV0KHNoZWFySW5wdXQpOw0KDQogICAgICAgIGNvbnN0IHlpZWxkVmFsID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd5aWVsZFN0cmVuZ3RoJykpOw0KICAgICAgICBjb25zdCBjb21wID0gbnVtKCdjb21wcmVzc2l2ZVN0cmVuZ3RoJykgPiAwID8gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCdjb21wcmVzc2l2ZVN0cmVuZ3RoJykpIDogeWllbGRWYWw7DQoNCiAgICAgICAgaWYgKG1hdCAmJiBtYXQuc2hlYXIgPiAwICYmIGVscy5tYXRlcmlhbC52YWx1ZSAhPT0gJ2N1c3RvbScpIHsNCiAgICAgICAgICAgIHJldHVybiB1LnN0cmVzc0Zyb21JbnB1dChtYXQuc2hlYXIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB5aWVsZFZhbCAqIChtYXQgPyBtYXQuc2hlYXJSYXRpbyA6IDAuNTgpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldEFsbG93YWJsZVNoZWFyKHNmKSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCBzaGVhcklucHV0ID0gbnVtKCdzaGVhclN0cmVuZ3RoJyk7DQogICAgICAgIGxldCBzU2hlYXI7DQogICAgICAgIGlmIChzaGVhcklucHV0ID4gMCkgew0KICAgICAgICAgICAgc1NoZWFyID0gdS5zdHJlc3NGcm9tSW5wdXQoc2hlYXJJbnB1dCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAg\"+\"ICAgICBzU2hlYXIgPSBlc3RpbWF0ZVNoZWFyU3RyZW5ndGgoTUFURVJJQUxTW2Vscy5tYXRlcmlhbC52YWx1ZV0pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzU2hlYXIgLyBzZjsNCiAgICB9DQoNCiAgICAvLyAtLS0gVUkgVmlzaWJpbGl0eSAtLS0NCiAgICBmdW5jdGlvbiB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKSB7DQogICAgICAgIGNvbnN0IHN0cmVzc1R5cGUgPSBlbHMuc3RyZXNzVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IHNlY3Rpb25UeXBlID0gZWxzLnNlY3Rpb25UeXBlLnZhbHVlOw0KDQogICAgICAgIHFzYSgnLmFzYy1sb2FkLWZpZWxkJykuZm9yRWFjaChlbCA9PiB7DQogICAgICAgICAgICBjb25zdCB0eXBlcyA9IGVsLmRhdGFzZXQudHlwZXMuc3BsaXQoJywnKTsNCiAgICAgICAgICAgIGNvbnN0IHNob3cgPSB0eXBlcy5pbmNsdWRlcyhzdHJlc3NUeXBlKSB8fCB0eXBlcy5pbmNsdWRlcyhjYWxjTW9kZSk7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdhc2MtaGlkZGVuJywgIXNob3cpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBxc2EoJy5hc2MtZ2VvbS1maWVsZCcpLmZvckVhY2goZWwgPT4gew0KICAgICAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBlbC5kYXRhc2V0LnNlY3Rpb25zLnNwbGl0KCcsJyk7DQogICAgICAgICAgICBsZXQgc2hvdyA9IHNlY3Rpb25zLmluY2x1ZGVzKHNlY3Rpb25UeXBlKTsNCiAgICAgICAgICAgIGlmIChlbC5kYXRhc2V0LnNlY3Rpb25zLmluY2x1ZGVzKCdiZW5kaW5nJykgJiYgc3RyZXNzVHlwZSA9PT0gJ2JlbmRpbmcnKSBzaG93ID0gdHJ1ZTsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2FzYy1oaWRkZW4nLCAhc2hvdyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5jdXN0b21TdHJlbmd0aEdyb3VwLmNsYXNzTGlzdC50b2dnbGUoJ2FzYy1oaWRkZW4nLCBlbHMucmVmU3RyZW5ndGhUeXBlLnZhbHVlICE9PSAnY3VzdG9tJyk7DQoNCiAgICAgICAgaWYgKGNhbGNNb2RlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICBlbHMuc3RyZXNzVHlwZS52YWx1ZSA9ICdjb21iaW5lZCc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBhcHBseU1hdGVyaWFsUHJlc2V0KCkgew0KICAgICAgICBjb25zdCBrZXkgPSBlbHMubWF0ZXJpYWwudmFsdWU7DQogICAgICAgIGlmIChrZXkgPT09ICdjdXN0b20nKSByZXR1cm47DQogICAgICAgIGNvbnN0IG1hdCA9IE1BVEVSSUFMU1trZXldOw0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgZWxzLnlpZWxkU3RyZW5ndGgudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkobWF0LnlsZCksIDEpOw0KICAgICAgICBlbHMudWx0aW1hdGVTdHJlbmd0aC52YWx1ZSA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShtYXQudWx0aW1hdGUpLCAxKTsNCiAgICAgICAgaWYgKG1hdC5jb21w\"+\"cmVzc2l2ZSkgZWxzLmNvbXByZXNzaXZlU3RyZW5ndGgudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkobWF0LmNvbXByZXNzaXZlKSwgMSk7DQogICAgICAgIGlmIChtYXQuc2hlYXIpIGVscy5zaGVhclN0cmVuZ3RoLnZhbHVlID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KG1hdC5zaGVhciksIDEpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJ1aWxkTWF0ZXJpYWxDb21wYXJlQ2hlY2tib3hlcygpIHsNCiAgICAgICAgZWxzLm1hdGVyaWFsQ29tcGFyZS5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgTUFURVJJQUxfS0VZUy5mb3JFYWNoKGtleSA9PiB7DQogICAgICAgICAgICBjb25zdCBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7DQogICAgICAgICAgICBjb25zdCBjYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7DQogICAgICAgICAgICBjYi50eXBlID0gJ2NoZWNrYm94JzsNCiAgICAgICAgICAgIGNiLnZhbHVlID0ga2V5Ow0KICAgICAgICAgICAgY2IuZGF0YXNldC5rZXkgPSBrZXk7DQogICAgICAgICAgICBsYWJlbC5hcHBlbmRDaGlsZChjYik7DQogICAgICAgICAgICBsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShNQVRFUklBTFNba2V5XS5uYW1lKSk7DQogICAgICAgICAgICBlbHMubWF0ZXJpYWxDb21wYXJlLmFwcGVuZENoaWxkKGxhYmVsKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgLy8gLS0tIFZhbGlkYXRpb24gLS0tDQogICAgZnVuY3Rpb24gdmFsaWRhdGUoZ2VvKSB7DQogICAgICAgIGNvbnN0IHdhcm5pbmdzID0gW107DQogICAgICAgIGNvbnN0IGVycm9ycyA9IFtdOw0KICAgICAgICBjb25zdCBzZiA9IG51bSgnc2FmZXR5RmFjdG9yJyk7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KDQogICAgICAgIGlmIChzZiA8PSAwKSBlcnJvcnMucHVzaCgnRGVzaWduIHNhZmV0eSBmYWN0b3IgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgaWYgKG51bSgneWllbGRTdHJlbmd0aCcpIDw9IDAgJiYgZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZSA9PT0gJ3lpZWxkJykgZXJyb3JzLnB1c2goJ1lpZWxkIHN0cmVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChudW0oJ3VsdGltYXRlU3RyZW5ndGgnKSA8PSAwICYmIGVscy5yZWZTdHJlbmd0aFR5cGUudmFsdWUgPT09ICd1bHRpbWF0ZScpIGVycm9ycy5wdXNoKCdVbHRpbWF0ZSB0ZW5zaWxlIHN0cmVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChnZW8uYXJlYSA8PSAwKSBlcnJvcnMucHVzaCgnQ3Jvc3Mtc2VjdGlvbmFsIGFyZWEgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCg0KICAgICAgICBpZiAoZWxzLnNlY3Rpb25UeXBlLnZhbHVlID09PSAnaG9sbG93X3JvdW5kJykgew0KICAgICAgICAgICAgY29uc3Qgb2QgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ291dGVyRGlhbWV0\"+\"ZXInKSk7DQogICAgICAgICAgICBjb25zdCBpZCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnaW5uZXJEaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGlmIChpZCA+PSBvZCkgZXJyb3JzLnB1c2goJ0lubmVyIGRpYW1ldGVyIG11c3QgYmUgbGVzcyB0aGFuIG91dGVyIGRpYW1ldGVyLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgcGxhbmVzID0gbnVtKCdzaGVhclBsYW5lcycpOw0KICAgICAgICBpZiAoZWxzLnN0cmVzc1R5cGUudmFsdWUgPT09ICdzaGVhcicgJiYgcGxhbmVzIDwgMSkgZXJyb3JzLnB1c2goJ051bWJlciBvZiBzaGVhciBwbGFuZXMgbXVzdCBiZSBhdCBsZWFzdCAxLicpOw0KDQogICAgICAgIGlmIChzZiA8IDEuNSkgd2FybmluZ3MucHVzaCh7IHR5cGU6ICd3YXJuJywgbXNnOiAnU2FmZXR5IGZhY3RvciBiZWxvdyAxLjUgbWF5IGJlIHRvbyBsb3cgZm9yIHVuY2VydGFpbiBvciBkeW5hbWljIGxvYWRpbmcgY29uZGl0aW9ucy4nIH0pOw0KICAgICAgICBpZiAoc2YgPCAyLjAgJiYgc2YgPj0gMS41KSB3YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2luZm8nLCBtc2c6ICdDb25zaWRlciBhIGhpZ2hlciBzYWZldHkgZmFjdG9yICg+PTIuMCkgZm9yIGdlbmVyYWwgbWVjaGFuaWNhbCBkZXNpZ24uJyB9KTsNCg0KICAgICAgICBjb25zdCBtYXQgPSBNQVRFUklBTFNbZWxzLm1hdGVyaWFsLnZhbHVlXTsNCiAgICAgICAgY29uc3QgeWllbGRNUGEgPSB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ3lpZWxkU3RyZW5ndGgnKSk7DQogICAgICAgIGNvbnN0IHVsdE1QYSA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgndWx0aW1hdGVTdHJlbmd0aCcpKTsNCiAgICAgICAgY29uc3Qgc2ZVbHQgPSBudW0oJ3NhZmV0eUZhY3RvclVsdCcpOw0KDQogICAgICAgIGlmIChtYXQgJiYgbWF0LmR1Y3RpbGUgJiYgZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZSA9PT0gJ3VsdGltYXRlJykgew0KICAgICAgICAgICAgY29uc3QgYWxsb3dVbHQgPSB1bHRNUGEgLyBzZjsNCiAgICAgICAgICAgIGlmIChhbGxvd1VsdCA+IHlpZWxkTVBhKSB7DQogICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7IHR5cGU6ICd3YXJuJywgbXNnOiAnVWx0aW1hdGUtc3RyZW5ndGgtYmFzZWQgYWxsb3dhYmxlIHN0cmVzcyBleGNlZWRzIHlpZWxkIHN0cmVuZ3RoLiBGb3IgZHVjdGlsZSBtYXRlcmlhbHMsIHlpZWxkLWJhc2VkIGRlc2lnbiBpcyB0eXBpY2FsbHkgbW9yZSBjb25zZXJ2YXRpdmUuJyB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChudW0oJ3NoZWFyU3RyZW5ndGgnKSA8PSAwICYmIChlbHMuc3RyZXNzVHlwZS52YWx1ZSA9PT0gJ3NoZWFyJyB8fCBlbHMucmVmU3RyZW5ndGhUeXBlLnZhbHVlID09PSAnc2hlYXInKSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7IHR5cGU6ICdpbmZvJywgbXNnOiAnU2hlYXIgc3RyZW5ndGggZXN0aW1hdGVkIGZyb20gbWF0ZXJpYWwgdHlwZSAoYXBwcm94aW1hdGUgcmVsYXRpb25z\"+\"aGlwKS4gRW50ZXIgZGlyZWN0IHNoZWFyIHN0cmVuZ3RoIGZvciBhY2N1cmF0ZSByZXN1bHRzLicgfSk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geyBlcnJvcnMsIHdhcm5pbmdzIH07DQogICAgfQ0KDQogICAgLy8gLS0tIE1haW4gQ2FsY3VsYXRpb24gLS0tDQogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgY29uc3QgZ2VvID0gY2FsY0dlb21ldHJ5KCk7DQogICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZShnZW8pOw0KDQogICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9ycy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBzaG93UmVzdWx0c1BhbmVsKCk7DQogICAgICAgICAgICBzaG93V2FybmluZ3ModmFsaWRhdGlvbi5lcnJvcnMubWFwKGUgPT4gKHsgdHlwZTogJ2Vycm9yJywgbXNnOiBlIH0pKSk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBzZiA9IG51bSgnc2FmZXR5RmFjdG9yJyk7DQogICAgICAgIGNvbnN0IHNmVWx0ID0gbnVtKCdzYWZldHlGYWN0b3JVbHQnKSB8fCBzZjsNCiAgICAgICAgY29uc3Qga3QgPSBNYXRoLm1heChudW0oJ3N0cmVzc0NvbmNlbnRyYXRpb24nKSwgMSk7DQogICAgICAgIGNvbnN0IHN0cmVzc1R5cGUgPSBlbHMuc3RyZXNzVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQoNCiAgICAgICAgY29uc3Qgc1JlZiA9IGdldFJlZmVyZW5jZVN0cmVuZ3RoKHN0cmVzc1R5cGUpOw0KICAgICAgICBsZXQgc2lnbWFBbGxvdyA9IHNSZWYgLyBzZjsNCg0KICAgICAgICBjb25zdCB5aWVsZE1QYSA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgneWllbGRTdHJlbmd0aCcpKTsNCiAgICAgICAgY29uc3QgdWx0TVBhID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd1bHRpbWF0ZVN0cmVuZ3RoJykpOw0KICAgICAgICBjb25zdCBhbGxvd1lpZWxkID0geWllbGRNUGEgLyBzZjsNCiAgICAgICAgY29uc3QgYWxsb3dVbHQgPSB1bHRNUGEgLyBzZlVsdDsNCg0KICAgICAgICBpZiAobnVtKCdzYWZldHlGYWN0b3JVbHQnKSA+IDAgJiYgZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZSAhPT0gJ3VsdGltYXRlJykgew0KICAgICAgICAgICAgc2lnbWFBbGxvdyA9IE1hdGgubWluKHNpZ21hQWxsb3csIGFsbG93VWx0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHRhdUFsbG93ID0gZ2V0QWxsb3dhYmxlU2hlYXIoc2YpOw0KDQogICAgICAgIGxldCBzaWdtYUFjdHVhbCA9IDAsIHRhdUFjdHVhbCA9IDAsIEYgPSAwLCBWID0gMCwgTSA9IDA7DQoNCiAgICAgICAgRiA9IHUuZm9yY2VGcm9tSW5wdXQobnVtKCdheGlhbExvYWQnKSk7DQogICAgICAgIFYgPSB1LmZvcmNlRnJvbUlucHV0KG51bSgnc2hlYXJMb2FkJykpOw0KICAgICAgICBNID0gdS5tb21lbnRGcm9tSW5wdXQobnVtKCdiZW5kaW5nTW9tZW50JykpOw0KICAgICAgICBj\"+\"b25zdCBuID0gTWF0aC5tYXgobnVtKCdzaGVhclBsYW5lcycpLCAxKTsNCg0KICAgICAgICBpZiAoc3RyZXNzVHlwZSA9PT0gJ3RlbnNpb24nIHx8IHN0cmVzc1R5cGUgPT09ICdjb21wcmVzc2lvbicpIHsNCiAgICAgICAgICAgIHNpZ21hQWN0dWFsID0gRiAvIGdlby5hcmVhOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmVzc1R5cGUgPT09ICdzaGVhcicpIHsNCiAgICAgICAgICAgIHRhdUFjdHVhbCA9IFYgLyAobiAqIGdlby5hcmVhKTsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJlc3NUeXBlID09PSAnYmVuZGluZycpIHsNCiAgICAgICAgICAgIGlmIChnZW8uc2VjdGlvbk1vZCA+IDApIHsNCiAgICAgICAgICAgICAgICBzaWdtYUFjdHVhbCA9IE0gLyBnZW8uc2VjdGlvbk1vZDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2lnbWFBY3R1YWwgPSBnZW8uYyA+IDAgJiYgZ2VvLkkgPiAwID8gTSAqIGdlby5jIC8gZ2VvLkkgOiAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKHN0cmVzc1R5cGUgPT09ICdjb21iaW5lZCcgfHwgY2FsY01vZGUgPT09ICdjb21iaW5lZCcpIHsNCiAgICAgICAgICAgIHNpZ21hQWN0dWFsID0gRiAvIGdlby5hcmVhOw0KICAgICAgICAgICAgdGF1QWN0dWFsID0gViAvIChuICogZ2VvLmFyZWEpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3Qgc2lnbWFMb2NhbCA9IHNpZ21hQWN0dWFsICoga3Q7DQogICAgICAgIGNvbnN0IHRhdUxvY2FsID0gdGF1QWN0dWFsICoga3Q7DQogICAgICAgIGNvbnN0IHNpZ21hVk0gPSBNYXRoLnNxcnQoc2lnbWFBY3R1YWwgKiBzaWdtYUFjdHVhbCArIDMgKiB0YXVBY3R1YWwgKiB0YXVBY3R1YWwpOw0KICAgICAgICBjb25zdCBzaWdtYVZNTG9jYWwgPSBNYXRoLnNxcnQoc2lnbWFMb2NhbCAqIHNpZ21hTG9jYWwgKyAzICogdGF1TG9jYWwgKiB0YXVMb2NhbCk7DQoNCiAgICAgICAgbGV0IGV2YWxTdHJlc3MgPSBzaWdtYUFjdHVhbDsNCiAgICAgICAgbGV0IGV2YWxBbGxvdyA9IHNpZ21hQWxsb3c7DQogICAgICAgIGxldCBldmFsTG9jYWwgPSBzaWdtYUxvY2FsOw0KDQogICAgICAgIGlmIChzdHJlc3NUeXBlID09PSAnc2hlYXInKSB7DQogICAgICAgICAgICBldmFsU3RyZXNzID0gdGF1QWN0dWFsOw0KICAgICAgICAgICAgZXZhbEFsbG93ID0gdGF1QWxsb3c7DQogICAgICAgICAgICBldmFsTG9jYWwgPSB0YXVMb2NhbDsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJlc3NUeXBlID09PSAnY29tYmluZWQnIHx8IGNhbGNNb2RlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICBldmFsU3RyZXNzID0gc2lnbWFWTTsNCiAgICAgICAgICAgIGV2YWxBbGxvdyA9IHNpZ21hQWxsb3c7DQogICAgICAgICAgICBldmFsTG9jYWwgPSBzaWdtYVZNTG9jYWw7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCB1dGlsaXphdGlvbiA9IGV2YWxBbGxvdyA+IDAgPyAoZXZhbFN0cmVzcyAvIGV2YWxBbGxvdykgKiAxMDAgOiAwOw0KICAgICAg\"+\"ICBjb25zdCBsb2NhbFV0aWxpemF0aW9uID0gZXZhbEFsbG93ID4gMCA\/IChldmFsTG9jYWwgLyBldmFsQWxsb3cpICogMTAwIDogMDsNCiAgICAgICAgY29uc3QgbWFyZ2luT2ZTYWZldHkgPSBldmFsU3RyZXNzID4gMCA\/IGV2YWxBbGxvdyAvIGV2YWxTdHJlc3MgLSAxIDogSW5maW5pdHk7DQogICAgICAgIGNvbnN0IHJlcXVpcmVkU0YgPSBldmFsU3RyZXNzID4gMCA\/IHNSZWYgLyBldmFsU3RyZXNzIDogSW5maW5pdHk7DQogICAgICAgIGNvbnN0IHN0cmVzc1Jlc2VydmUgPSBldmFsQWxsb3cgLSBldmFsU3RyZXNzOw0KICAgICAgICBjb25zdCBtYXhMb2FkID0gc2lnbWFBbGxvdyAqIGdlby5hcmVhOw0KICAgICAgICBjb25zdCByZXF1aXJlZEFyZWEgPSBzaWdtYUFsbG93ID4gMCA\/IEYgLyBzaWdtYUFsbG93IDogMDsNCiAgICAgICAgY29uc3QgbG9hZFJlc2VydmUgPSBtYXhMb2FkIC0gRjsNCg0KICAgICAgICBsZXQgZGVzaWduU3RhdHVzID0gJ1NhZmUnOw0KICAgICAgICBsZXQgc3RhdHVzQ2xhc3MgPSAnc2FmZSc7DQoNCiAgICAgICAgY29uc3QgY2hlY2tTdHJlc3MgPSBrdCA+IDEgPyBldmFsTG9jYWwgOiBldmFsU3RyZXNzOw0KICAgICAgICBjb25zdCBjaGVja1V0aWwgPSBrdCA+IDEgPyBsb2NhbFV0aWxpemF0aW9uIDogdXRpbGl6YXRpb247DQoNCiAgICAgICAgaWYgKGNoZWNrU3RyZXNzID4gZXZhbEFsbG93IHx8IGNoZWNrVXRpbCA+IDEwMCkgew0KICAgICAgICAgICAgZGVzaWduU3RhdHVzID0gJ1Vuc2FmZSc7DQogICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICd1bnNhZmUnOw0KICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgbXNnOiAnV29ya2luZyBzdHJlc3MgZXhjZWVkcyBhbGxvd2FibGUgc3RyZXNzLiBEZXNpZ24gZG9lcyBub3QgbWVldCBzYWZldHkgcmVxdWlyZW1lbnRzLicgfSk7DQogICAgICAgIH0gZWxzZSBpZiAoY2hlY2tVdGlsID49IDgwKSB7DQogICAgICAgICAgICBkZXNpZ25TdGF0dXMgPSAnQ2F1dGlvbic7DQogICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdjYXV0aW9uJzsNCiAgICAgICAgICAgIHZhbGlkYXRpb24ud2FybmluZ3MucHVzaCh7IHR5cGU6ICd3YXJuJywgbXNnOiAnSGlnaCBzdHJlc3MgdXRpbGl6YXRpb24gKCcgKyBmbXQoY2hlY2tVdGlsLCAxKSArICclKS4gV29ya2luZyBzdHJlc3MgaXMgY2xvc2UgdG8gYWxsb3dhYmxlIGxpbWl0LicgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoa3QgPiAxICYmIGV2YWxMb2NhbCA+IGV2YWxBbGxvdykgew0KICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgbXNnOiAnTG9jYWwgc3RyZXNzIGV4Y2VlZHMgYWxsb3dhYmxlIHN0cmVzcyBkdWUgdG8gc3RyZXNzIGNvbmNlbnRyYXRpb24gZmFjdG9yIChLdCA9ICcgKyBmbXQoa3QsIDIpICsgJykuJyB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHNob3dSZXN1bHRzUGFuZWwoKTsNCiAgICAgICAg\"+\"ZGlzcGxheVJlc3VsdHMoew0KICAgICAgICAgICAgdSwgc1JlZiwgc2YsIHNpZ21hQWxsb3csIHRhdUFsbG93LCBzaWdtYUFjdHVhbCwgdGF1QWN0dWFsLA0KICAgICAgICAgICAgc2lnbWFMb2NhbCwgdGF1TG9jYWwsIHNpZ21hVk0sIHNpZ21hVk1Mb2NhbCwgbWF4TG9hZCwgcmVxdWlyZWRBcmVhLCByZXF1aXJlZFNGLA0KICAgICAgICAgICAgdXRpbGl6YXRpb24sIHN0cmVzc1Jlc2VydmUsIGxvYWRSZXNlcnZlLCBtYXJnaW5PZlNhZmV0eSwNCiAgICAgICAgICAgIGRlc2lnblN0YXR1cywgc3RhdHVzQ2xhc3MsIGdlbywgRiwgZXZhbFN0cmVzcywgZXZhbEFsbG93LCBldmFsTG9jYWwsDQogICAgICAgICAgICBhbGxvd1lpZWxkLCBhbGxvd1VsdCwgY2hlY2tVdGlsDQogICAgICAgIH0pOw0KDQogICAgICAgIHNob3dXYXJuaW5ncyh2YWxpZGF0aW9uLndhcm5pbmdzKTsNCiAgICAgICAgc2hvd1JlY29tbWVuZGF0aW9ucyhkZXNpZ25TdGF0dXMsIHN0YXR1c0NsYXNzLCBjaGVja1V0aWwsIGt0LCBzdHJlc3NUeXBlLCBzZik7DQogICAgICAgIHJlbmRlck1hdGVyaWFsQ29tcGFyaXNvbihzZik7DQogICAgfQ0KDQogICAgLy8gLS0tIERpc3BsYXkgUmVzdWx0cyAtLS0NCiAgICBmdW5jdGlvbiBkaXNwbGF5UmVzdWx0cyhyKSB7DQogICAgICAgIGNvbnN0IHUgPSByLnU7DQogICAgICAgIGNvbnN0IHN0ID0gZWxzLnN0cmVzc1R5cGUudmFsdWU7DQogICAgICAgIGNvbnN0IGNhbGNNb2RlID0gZWxzLmNhbGNNb2RlLnZhbHVlOw0KICAgICAgICBjb25zdCBrdCA9IE1hdGgubWF4KG51bSgnc3RyZXNzQ29uY2VudHJhdGlvbicpLCAxKTsNCiAgICAgICAgY29uc3QgaGFzV29ya2luZ1N0cmVzcyA9IHIuZXZhbFN0cmVzcyA+IDA7DQogICAgICAgIGNvbnN0IGlzU2hlYXIgPSBzdCA9PT0gJ3NoZWFyJzsNCiAgICAgICAgY29uc3QgaXNDb21iaW5lZCA9IHN0ID09PSAnY29tYmluZWQnIHx8IGNhbGNNb2RlID09PSAnY29tYmluZWQnOw0KDQogICAgICAgIGVscy5yZXNSZWZTdHJlbmd0aC50ZXh0Q29udGVudCA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNSZWYpKSArICcgJyArIHUuc3RyZXNzOw0KICAgICAgICBlbHMucmVzU0YudGV4dENvbnRlbnQgPSBmbXQoci5zZiwgMik7DQogICAgICAgIGVscy5yZXNBbGxvd05vcm1hbC50ZXh0Q29udGVudCA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNpZ21hQWxsb3cpKSArICcgJyArIHUuc3RyZXNzOw0KDQogICAgICAgIGlmIChpc1NoZWFyIHx8IGlzQ29tYmluZWQpIHsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BbGxvd1NoZWFyJywgZWxzLnJlc0FsbG93U2hlYXIsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnRhdUFsbG93KSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbUFsbG93U2hlYXInKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChoYXNXb3JraW5nU3RyZXNzKSB7DQogICAgICAg\"+\"ICAgICBpZiAoaXNTaGVhcikgew0KICAgICAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BY3R1YWwnLCBlbHMucmVzQWN0dWFsU3RyZXNzLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci50YXVBY3R1YWwpKSArICcgJyArIHUuc3RyZXNzICsgJyAodGF1KScpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NvbWJpbmVkKSB7DQogICAgICAgICAgICAgICAgbGV0IGFjdHVhbFRleHQgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zaWdtYUFjdHVhbCkpICsgJyAnICsgdS5zdHJlc3MgKyAnIChzaWdtYSknOw0KICAgICAgICAgICAgICAgIGlmIChyLnRhdUFjdHVhbCA+IDApIGFjdHVhbFRleHQgKz0gJywgdGF1PScgKyBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci50YXVBY3R1YWwpKSArICcsIHNpZ21hX3ZtPScgKyBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zaWdtYVZNKSk7DQogICAgICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUFjdHVhbCcsIGVscy5yZXNBY3R1YWxTdHJlc3MsIGFjdHVhbFRleHQpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBsZXQgYWN0dWFsVGV4dCA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNpZ21hQWN0dWFsKSkgKyAnICcgKyB1LnN0cmVzczsNCiAgICAgICAgICAgICAgICBpZiAoa3QgPiAxKSBhY3R1YWxUZXh0ICs9ICcgKEt0IGxvY2FsOiAnICsgZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIuZXZhbExvY2FsKSkgKyAnKSc7DQogICAgICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUFjdHVhbCcsIGVscy5yZXNBY3R1YWxTdHJlc3MsIGFjdHVhbFRleHQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVJlcXVpcmVkU0YnLCBlbHMucmVzUmVxdWlyZWRTRiwgZm10KHIucmVxdWlyZWRTRiwgMikpOw0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVV0aWxpemF0aW9uJywgZWxzLnJlc1V0aWxpemF0aW9uLCBmbXQoci51dGlsaXphdGlvbiwgMSkgKyAnICUnKTsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1TdHJlc3NSZXNlcnZlJywgZWxzLnJlc1N0cmVzc1Jlc2VydmUsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnN0cmVzc1Jlc2VydmUpKSArICcgJyArIHUuc3RyZXNzKTsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1NT1MnLCBlbHMucmVzTU9TLCBmbXQoci5tYXJnaW5PZlNhZmV0eSwgMykpOw0KICAgICAgICAgICAgZWxzLnJlc1V0aWxpemF0aW9uLmNsYXNzTmFtZSA9ICdhc2MtcmVzdWx0LXZhbHVlICcgKyAoci51dGlsaXphdGlvbiA+PSAxMDAgPyAnYXNjLXVuc2FmZScgOiByLnV0aWxpemF0aW9uID49IDgwID8gJ2FzYy1jYXV0aW9uJyA6ICdhc2Mtc2FmZScpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BY3R1YWwnKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVt\"+\"UmVxdWlyZWRTRicpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1VdGlsaXphdGlvbicpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1TdHJlc3NSZXNlcnZlJyk7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbU1PUycpOw0KICAgICAgICB9DQoNCiAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbU1heExvYWQnLCBlbHMucmVzTWF4TG9hZCwgZm10KHUuZm9yY2VUb0Rpc3BsYXkoci5tYXhMb2FkKSwgMikgKyAnICcgKyB1LmZvcmNlKTsNCg0KICAgICAgICBpZiAoci5yZXF1aXJlZEFyZWEgPiAwICYmIChudW0oJ2F4aWFsTG9hZCcpID4gMCB8fCBjYWxjTW9kZSA9PT0gJ3JlcXVpcmVkQXJlYScpKSB7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtUmVxdWlyZWRBcmVhJywgZWxzLnJlc1JlcXVpcmVkQXJlYSwgZm10KHUuYXJlYVRvRGlzcGxheShyLnJlcXVpcmVkQXJlYSksIDIpICsgJyAnICsgdS5hcmVhKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtUmVxdWlyZWRBcmVhJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobnVtKCdheGlhbExvYWQnKSA+IDAgJiYgaGFzV29ya2luZ1N0cmVzcykgew0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUxvYWRSZXNlcnZlJywgZWxzLnJlc0xvYWRSZXNlcnZlLCBmbXQodS5mb3JjZVRvRGlzcGxheShyLmxvYWRSZXNlcnZlKSwgMikgKyAnICcgKyB1LmZvcmNlKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtTG9hZFJlc2VydmUnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGVscy5yZXNEZXNpZ25TdGF0dXMudGV4dENvbnRlbnQgPSByLmRlc2lnblN0YXR1czsNCiAgICAgICAgZWxzLnJlc0Rlc2lnblN0YXR1cy5jbGFzc05hbWUgPSAnYXNjLXJlc3VsdC12YWx1ZSBhc2MtJyArIHIuc3RhdHVzQ2xhc3M7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0UmVzdWx0SXRlbShpdGVtSWQsIHZhbHVlRWwsIHRleHQpIHsNCiAgICAgICAgY29uc3QgaXRlbSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2FzYy0nICsgaXRlbUlkKTsNCiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYXNjLWhpZGRlbicpOw0KICAgICAgICB2YWx1ZUVsLnRleHRDb250ZW50ID0gdGV4dDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBoaWRlUmVzdWx0SXRlbShpdGVtSWQpIHsNCiAgICAgICAgY29uc3QgaXRlbSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2FzYy0nICsgaXRlbUlkKTsNCiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYXNjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNob3dXYXJuaW5ncyhpdGVtcykgew0KICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgew0KICAgICAgICAgICAgZWxzLndhcm5pbmdzLmhpZGRlbiA9IHRy\"+\"dWU7DQogICAgICAgICAgICBlbHMud2FybmluZ3MuaW5uZXJIVE1MID0gJyc7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgZWxzLndhcm5pbmdzLmhpZGRlbiA9IGZhbHNlOw0KICAgICAgICBlbHMud2FybmluZ3MuaW5uZXJIVE1MID0gaXRlbXMubWFwKHcgPT4gew0KICAgICAgICAgICAgY29uc3QgY2xzID0gdy50eXBlID09PSAnZXJyb3InID8gJ2FzYy13YXJuaW5nLWVycm9yJyA6IHcudHlwZSA9PT0gJ3dhcm4nID8gJ2FzYy13YXJuaW5nLXdhcm4nIDogJ2FzYy13YXJuaW5nLWluZm8nOw0KICAgICAgICAgICAgY29uc3QgaWNvbiA9IHcudHlwZSA9PT0gJ2Vycm9yJyA\/ICchJyA6IHcudHlwZSA9PT0gJ3dhcm4nID8gJyonIDogJ2knOw0KICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhc2Mtd2FybmluZyAnICsgY2xzICsgJyI+PHNwYW4+JyArIGljb24gKyAnPC9zcGFuPjxzcGFuPicgKyB3Lm1zZyArICc8L3NwYW4+PC9kaXY+JzsNCiAgICAgICAgfSkuam9pbignJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2hvd1Jlc3VsdHNQYW5lbCgpIHsNCiAgICAgICAgaWYgKGVscy5yZXN1bHRzUGFuZWwpIGVscy5yZXN1bHRzUGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnYXNjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNldFN0YXR1cygpIHt9DQoNCiAgICBmdW5jdGlvbiBzaG93UmVjb21tZW5kYXRpb25zKCkge30NCg0KICAgIC8vIC0tLSBNYXRlcmlhbCBDb21wYXJpc29uIC0tLQ0KICAgIGZ1bmN0aW9uIHJlbmRlck1hdGVyaWFsQ29tcGFyaXNvbigpIHt9DQoNCiAgICAvLyAtLS0gVW5pdCBDb252ZXJzaW9uIG9uIFN5c3RlbSBDaGFuZ2UgLS0tDQogICAgZnVuY3Rpb24gY29udmVydFZhbHVlc09uVW5pdENoYW5nZShuZXdTeXN0ZW0pIHsNCiAgICAgICAgY29uc3Qgb2xkU3lzdGVtID0gbmV3U3lzdGVtID09PSAnbWV0cmljJyA\/ICdpbXBlcmlhbCcgOiAnbWV0cmljJzsNCiAgICAgICAgY29uc3Qgb2xkVSA9IFVOSVRTW29sZFN5c3RlbV07DQogICAgICAgIGNvbnN0IG5ld1UgPSBVTklUU1tuZXdTeXN0ZW1dOw0KDQogICAgICAgIGNvbnN0IHN0cmVzc0ZpZWxkcyA9IFsneWllbGRTdHJlbmd0aCcsICd1bHRpbWF0ZVN0cmVuZ3RoJywgJ2NvbXByZXNzaXZlU3RyZW5ndGgnLCAnc2hlYXJTdHJlbmd0aCcsICdjdXN0b21TdHJlbmd0aCddOw0KICAgICAgICBzdHJlc3NGaWVsZHMuZm9yRWFjaChpZCA9PiB7DQogICAgICAgICAgICBjb25zdCB2ID0gbnVtKGlkKTsNCiAgICAgICAgICAgIGlmICh2ID4gMCkgZWxzW2lkXS52YWx1ZSA9IGZtdChuZXdVLnN0cmVzc1RvRGlzcGxheShvbGRVLnN0cmVzc0Zyb21JbnB1dCh2KSksIDIpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBjb25zdCBmb3JjZUZpZWxkcyA9IFsnYXhpYWxMb2FkJywgJ3NoZWFyTG9hZCddOw0KICAgICAgICBmb3JjZUZpZWxkcy5mb3JFYWNoKGlkID0+IHsNCiAgICAgICAgICAgIGNvbnN0IHYgPSBudW0oaWQpOw0K\"+\"ICAgICAgICAgICAgaWYgKHYgIT09IDApIGVsc1tpZF0udmFsdWUgPSBmbXQobmV3VS5mb3JjZVRvRGlzcGxheShvbGRVLmZvcmNlRnJvbUlucHV0KHYpKSwgMyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGNvbnN0IGxlbmd0aEZpZWxkcyA9IFsnZGlhbWV0ZXInLCAnb3V0ZXJEaWFtZXRlcicsICdpbm5lckRpYW1ldGVyJywgJ3dpZHRoJywgJ3RoaWNrbmVzcyddOw0KICAgICAgICBsZW5ndGhGaWVsZHMuZm9yRWFjaChpZCA9PiB7DQogICAgICAgICAgICBjb25zdCB2ID0gbnVtKGlkKTsNCiAgICAgICAgICAgIGlmICh2ID4gMCkgZWxzW2lkXS52YWx1ZSA9IGZtdChuZXdVLmxlbmd0aFRvRGlzcGxheShvbGRVLmxlbmd0aEZyb21JbnB1dCh2KSksIDMpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAobnVtKCdjdXN0b21BcmVhJykgPiAwKSB7DQogICAgICAgICAgICBlbHMuY3VzdG9tQXJlYS52YWx1ZSA9IGZtdChuZXdVLmFyZWFUb0Rpc3BsYXkob2xkVS5hcmVhRnJvbUlucHV0KG51bSgnY3VzdG9tQXJlYScpKSksIDIpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tIEV2ZW50IExpc3RlbmVycyAtLS0NCiAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkgew0KICAgICAgICBlbHMuY2FsY3VsYXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsY3VsYXRlKTsNCg0KICAgICAgICBlbHMubWF0ZXJpYWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gew0KICAgICAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBlbHMudW5pdFN5c3RlbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7DQogICAgICAgICAgICBjb252ZXJ0VmFsdWVzT25Vbml0Q2hhbmdlKGVscy51bml0U3lzdGVtLnZhbHVlKTsNCiAgICAgICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgWydjYWxjTW9kZScsICdzdHJlc3NUeXBlJywgJ3NlY3Rpb25UeXBlJywgJ3JlZlN0cmVuZ3RoVHlwZSddLmZvckVhY2goaWQgPT4gew0KICAgICAgICAgICAgZWxzW2lkXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGaWVsZFZpc2liaWxpdHkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBlbHMuY2FsY01vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gew0KICAgICAgICAgICAgaWYgKGVscy5jYWxjTW9kZS52YWx1ZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgICAgIGVscy5zdHJlc3NUeXBlLnZhbHVlID0gJ2NvbWJpbmVkJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICAvLyAtLS0gSW5pdCAtLS0NCiAgICBmdW5jdGlvbiBpbml0KCkgew0KICAgICAgICByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FzYy1jYWxjdWxhdG9yJyk7DQogICAgICAgIGlmICghcm9vdCB8fCByb290LmdldEF0\"+\"dHJpYnV0ZSgnZGF0YS1hc2MtcmVhZHknKSA9PT0gJzEnKSByZXR1cm47DQogICAgICAgIGlmICghY2FjaGVFbGVtZW50cygpKSByZXR1cm47DQogICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLWFzYy1yZWFkeScsICcxJyk7DQogICAgICAgIGJ1aWxkTWF0ZXJpYWxDb21wYXJlQ2hlY2tib3hlcygpOw0KICAgICAgICBhcHBseU1hdGVyaWFsUHJlc2V0KCk7DQogICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7DQogICAgICAgIGJpbmRFdmVudHMoKTsNCiAgICB9DQoNCiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7DQogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBpbml0KCk7DQogICAgfQ0KDQogICAgd2luZG93LkFTQ0luaXQgPSBpbml0Ow0KfSkoKTsNCg==\";\n  var c=\"\";\n  try{c=atob(b);}catch(e1){return;}\n  var s=document.createElement(\"script\");\n  s.type=\"text\/javascript\";\n  s.text=c;\n  document.head.appendChild(s);\n})();\n<\/script>\n\n<!-- Option B: replace YOUR-SITE-URL with your uploaded app.js URL\n<script type=\"text\/javascript\" src=\"YOUR-SITE-URL\/wp-content\/uploads\/app.js\"><\/script>\n-->\n","protected":false},"excerpt":{"rendered":"<p>The Allowable Stress Calculator is a practical engineering tool designed to determine safe working stress based on material strength and a selected safety factor. It&#8230;<\/p>","protected":false},"author":2,"featured_media":24788,"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":[8647],"tags":[8664,8536,8663,8665],"class_list":["post-24787","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-allowable-stress","tag-safety-factor","tag-stress-analysis","tag-working-stress","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Allowable-Stress-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24787","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/comments?post=24787"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24787\/revisions"}],"predecessor-version":[{"id":24792,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24787\/revisions\/24792"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media\/24788"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media?parent=24787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/categories?post=24787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/tags?post=24787"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}