{"id":24793,"date":"2026-08-31T03:14:36","date_gmt":"2026-08-31T03:14:36","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24793"},"modified":"2026-08-31T03:19:55","modified_gmt":"2026-08-31T03:19:55","slug":"permissible-stress-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/permissible-stress-calculator\/","title":{"rendered":"Permissible Stress Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Permissible Stress Calculator<\/strong> is a practical engineering tool for determining the maximum safe working stress of a material based on its strength and selected safety factor. As an effective <strong>Allowable Stress Calculator<\/strong>, it can also evaluate permissible load, actual working stress, required cross-sectional area, stress utilization, and safety margin. This calculator is useful for tensile, compression, shear, and bending applications, helping engineers with component sizing, material selection, structural analysis, and preliminary safety verification.<\/p>\n\n\n\n<!-- Permissible 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 * Permissible Stress Calculator \u2014 WordPress-safe scoped styles\n * All rules scoped under #psc-calculator to resist theme overrides.\n *\/\n\n#psc-calculator.psc-root {\n    --psc-primary: #1a5276;\n    --psc-primary-light: #2471a3;\n    --psc-primary-dark: #0e3d5c;\n    --psc-safe: #27ae60;\n    --psc-caution: #f39c12;\n    --psc-unsafe: #e74c3c;\n    --psc-bg: #f4f7fa;\n    --psc-card-bg: #ffffff;\n    --psc-text: #2c3e50;\n    --psc-text-muted: #7f8c8d;\n    --psc-border: #dce4ec;\n    --psc-shadow: 0 2px 8px rgba(26, 82, 118, 0.08);\n    --psc-radius: 8px;\n    --psc-radius-lg: 12px;\n    --psc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --psc-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(--psc-font) !important;\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: var(--psc-text) !important;\n    background: var(--psc-bg) !important;\n    border-radius: var(--psc-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#psc-calculator.psc-root *,\n#psc-calculator.psc-root *::before,\n#psc-calculator.psc-root *::after {\n    box-sizing: border-box !important;\n}\n\n#psc-calculator.psc-root h1,\n#psc-calculator.psc-root h2,\n#psc-calculator.psc-root h3,\n#psc-calculator.psc-root h4,\n#psc-calculator.psc-root p,\n#psc-calculator.psc-root ul,\n#psc-calculator.psc-root li,\n#psc-calculator.psc-root label {\n    font-family: inherit !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n}\n\n#psc-calculator.psc-root h1,\n#psc-calculator.psc-root h2,\n#psc-calculator.psc-root h3,\n#psc-calculator.psc-root h4,\n#psc-calculator.psc-root p,\n#psc-calculator.psc-root ul,\n#psc-calculator.psc-root li {\n    margin: 0 !important;\n    padding: 0 !important;\n    line-height: inherit !important;\n}\n\n#psc-calculator.psc-root .psc-wrap {\n    max-width: 1100px !important;\n    margin: 0 auto !important;\n    padding: 12px 8px !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-header {\n    margin-bottom: 20px !important;\n    padding: 0 4px !important;\n}\n\n#psc-calculator.psc-root .psc-title {\n    font-size: 1.75rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 12px !important;\n    font-weight: 700 !important;\n}\n\n#psc-calculator.psc-root .psc-intro {\n    font-size: 0.95rem !important;\n    color: var(--psc-text-muted) !important;\n    line-height: 1.7 !important;\n}\n\n#psc-calculator.psc-root .psc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 24px !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-input,\n#psc-calculator.psc-root .psc-output {\n    width: 100% !important;\n    display: block !important;\n    float: none !important;\n}\n\n#psc-calculator.psc-root .psc-card {\n    display: block !important;\n    background: var(--psc-card-bg) !important;\n    border-radius: var(--psc-radius-lg) !important;\n    padding: 20px 24px !important;\n    box-shadow: var(--psc-shadow) !important;\n    border: 1px solid var(--psc-border) !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#psc-calculator.psc-root .psc-card > h2 {\n    font-size: 1.1rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 16px !important;\n    padding: 0 0 8px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--psc-border) !important;\n    background: none !important;\n}\n\n#psc-calculator.psc-root .psc-section + .psc-section {\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--psc-border) !important;\n}\n\n#psc-calculator.psc-root .psc-section-title {\n    font-size: 1.05rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 14px !important;\n    padding: 0 0 6px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--psc-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#psc-calculator.psc-root .psc-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 14px !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-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#psc-calculator.psc-root .psc-field.psc-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n#psc-calculator.psc-root .psc-field > label {\n    font-size: 0.82rem !important;\n    font-weight: 600 !important;\n    color: var(--psc-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#psc-calculator.psc-root .psc-field input,\n#psc-calculator.psc-root .psc-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(--psc-border) !important;\n    border-radius: var(--psc-radius) !important;\n    font-size: 0.95rem !important;\n    font-family: var(--psc-font) !important;\n    background: #fafbfc !important;\n    color: var(--psc-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#psc-calculator.psc-root .psc-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#psc-calculator.psc-root .psc-field input:focus,\n#psc-calculator.psc-root .psc-field select:focus {\n    border-color: var(--psc-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#psc-calculator.psc-root .psc-field input::placeholder {\n    color: #b0bec5 !important;\n    opacity: 1 !important;\n}\n\n#psc-calculator.psc-root .psc-hidden {\n    display: none !important;\n}\n\n#psc-calculator.psc-root .psc-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(--psc-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#psc-calculator.psc-root .psc-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(--psc-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#psc-calculator.psc-root .psc-tip:hover::after {\n    opacity: 1;\n}\n\n#psc-calculator.psc-root .psc-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#psc-calculator.psc-root .psc-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(--psc-text) !important;\n}\n\n#psc-calculator.psc-root .psc-check-grid input[type=\"checkbox\"] {\n    width: auto !important;\n    min-height: 0 !important;\n    margin: 0 !important;\n    accent-color: var(--psc-primary);\n}\n\n#psc-calculator.psc-root .psc-actions {\n    display: flex !important;\n    justify-content: center !important;\n    align-items: center !important;\n    flex-wrap: wrap !important;\n    gap: 12px !important;\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--psc-border) !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-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(--psc-radius) !important;\n    font-size: 1rem !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    font-family: var(--psc-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#psc-calculator.psc-root .psc-btn-primary {\n    background: linear-gradient(135deg, var(--psc-primary) 0%, var(--psc-primary-light) 100%) !important;\n    color: #fff !important;\n    box-shadow: 0 3px 12px rgba(26, 82, 118, 0.3) !important;\n}\n\n#psc-calculator.psc-root .psc-btn-primary:hover {\n    background: linear-gradient(135deg, var(--psc-primary-light) 0%, var(--psc-primary) 100%) !important;\n    color: #fff !important;\n    transform: translateY(-1px);\n}\n\n#psc-calculator.psc-root .psc-btn-secondary {\n    background: #ecf0f1 !important;\n    color: var(--psc-text) !important;\n    border: 1px solid var(--psc-border) !important;\n}\n\n#psc-calculator.psc-root .psc-btn-secondary:hover {\n    background: #dfe6e9 !important;\n}\n\n\/* Visualizations *\/\n#psc-calculator.psc-root .psc-viz-row {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 16px !important;\n    margin-bottom: 20px !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-viz-card {\n    background: #fafbfc !important;\n    border: 1px solid var(--psc-border) !important;\n    border-radius: var(--psc-radius) !important;\n    padding: 14px !important;\n}\n\n#psc-calculator.psc-root .psc-viz-card h4 {\n    font-size: 0.85rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#psc-calculator.psc-root .psc-illustration {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-height: 100px !important;\n}\n\n#psc-calculator.psc-root .psc-illustration svg {\n    max-width: 100% !important;\n    height: auto !important;\n}\n\n#psc-calculator.psc-root .psc-stress-bar-wrap {\n    padding: 8px 0 !important;\n}\n\n#psc-calculator.psc-root .psc-stress-bar-labels {\n    display: flex !important;\n    justify-content: space-between !important;\n    font-size: 0.75rem !important;\n    color: var(--psc-text-muted) !important;\n    margin-bottom: 6px !important;\n}\n\n#psc-calculator.psc-root .psc-stress-bar {\n    position: relative !important;\n    height: 28px !important;\n    background: #ecf0f1 !important;\n    border-radius: 14px !important;\n    overflow: hidden !important;\n}\n\n#psc-calculator.psc-root .psc-stress-fill {\n    position: absolute !important;\n    left: 0 !important;\n    top: 0 !important;\n    height: 100% !important;\n    width: 0 !important;\n    background: linear-gradient(90deg, var(--psc-safe), var(--psc-caution)) !important;\n    border-radius: 14px !important;\n    transition: width 0.4s ease !important;\n}\n\n#psc-calculator.psc-root .psc-stress-fill.psc-over {\n    background: linear-gradient(90deg, var(--psc-caution), var(--psc-unsafe)) !important;\n}\n\n#psc-calculator.psc-root .psc-stress-limit {\n    position: absolute !important;\n    top: -2px !important;\n    bottom: -2px !important;\n    width: 3px !important;\n    background: var(--psc-primary) !important;\n    border-radius: 2px !important;\n    left: 100% !important;\n    transform: translateX(-50%) !important;\n    z-index: 2 !important;\n}\n\n#psc-calculator.psc-root .psc-stress-bar-scale {\n    font-size: 0.72rem !important;\n    color: var(--psc-text-muted) !important;\n    margin-top: 6px !important;\n    text-align: center !important;\n}\n\n#psc-calculator.psc-root .psc-util-bar-wrap {\n    display: flex !important;\n    align-items: center !important;\n    gap: 12px !important;\n}\n\n#psc-calculator.psc-root .psc-util-bar {\n    flex: 1 !important;\n    height: 22px !important;\n    background: #ecf0f1 !important;\n    border-radius: 11px !important;\n    overflow: hidden !important;\n    position: relative !important;\n}\n\n#psc-calculator.psc-root .psc-util-fill {\n    height: 100% !important;\n    width: 0 !important;\n    background: var(--psc-safe) !important;\n    border-radius: 11px !important;\n    transition: width 0.4s ease, background 0.3s !important;\n}\n\n#psc-calculator.psc-root .psc-util-fill.psc-caution {\n    background: var(--psc-caution) !important;\n}\n\n#psc-calculator.psc-root .psc-util-fill.psc-unsafe {\n    background: var(--psc-unsafe) !important;\n}\n\n#psc-calculator.psc-root .psc-util-text {\n    font-size: 1.1rem !important;\n    font-weight: 700 !important;\n    font-family: var(--psc-mono) !important;\n    min-width: 52px !important;\n    text-align: right !important;\n}\n\n#psc-calculator.psc-root .psc-util-zones {\n    display: flex !important;\n    justify-content: space-between !important;\n    margin-top: 8px !important;\n    font-size: 0.68rem !important;\n    color: var(--psc-text-muted) !important;\n}\n\n#psc-calculator.psc-root .psc-zone-safe { color: var(--psc-safe) !important; }\n#psc-calculator.psc-root .psc-zone-caution { color: var(--psc-caution) !important; }\n#psc-calculator.psc-root .psc-zone-unsafe { color: var(--psc-unsafe) !important; }\n\n#psc-calculator.psc-root .psc-fos-gauge {\n    text-align: center !important;\n    position: relative !important;\n}\n\n#psc-calculator.psc-root .psc-gauge-svg {\n    width: 100% !important;\n    max-width: 200px !important;\n    margin: 0 auto !important;\n    display: block !important;\n}\n\n#psc-calculator.psc-root .psc-fos-value {\n    font-size: 1.3rem !important;\n    font-weight: 700 !important;\n    font-family: var(--psc-mono) !important;\n    color: var(--psc-primary-dark) !important;\n    margin-top: -8px !important;\n}\n\n#psc-calculator.psc-root .psc-status-banner {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    gap: 10px !important;\n    padding: 14px 20px !important;\n    border-radius: var(--psc-radius) !important;\n    margin-bottom: 20px !important;\n    font-size: 1.1rem !important;\n    font-weight: 700 !important;\n}\n\n#psc-calculator.psc-root .psc-status-banner.psc-safe {\n    background: #d5f5e3 !important;\n    color: #1e8449 !important;\n    border: 1px solid var(--psc-safe) !important;\n}\n\n#psc-calculator.psc-root .psc-status-banner.psc-caution {\n    background: #fdebd0 !important;\n    color: #9a7d0a !important;\n    border: 1px solid var(--psc-caution) !important;\n}\n\n#psc-calculator.psc-root .psc-status-banner.psc-unsafe {\n    background: #fadbd8 !important;\n    color: #922b21 !important;\n    border: 1px solid var(--psc-unsafe) !important;\n}\n\n#psc-calculator.psc-root .psc-status-icon {\n    font-size: 1.4rem !important;\n}\n\n\/* Results grid *\/\n#psc-calculator.psc-root .psc-results-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 10px !important;\n    width: 100% !important;\n}\n\n#psc-calculator.psc-root .psc-result {\n    display: flex !important;\n    flex-direction: column !important;\n    padding: 10px 14px !important;\n    background: #fafbfc !important;\n    border-radius: var(--psc-radius) !important;\n    border: 1px solid var(--psc-border) !important;\n}\n\n#psc-calculator.psc-root .psc-result.psc-result-hi {\n    grid-column: 1 \/ -1 !important;\n    background: linear-gradient(135deg, #eaf2f8 0%, #d4e6f1 100%) !important;\n    border-color: var(--psc-primary-light) !important;\n}\n\n#psc-calculator.psc-root .psc-result-label {\n    font-size: 0.75rem !important;\n    color: var(--psc-text-muted) !important;\n    font-weight: 500 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n}\n\n#psc-calculator.psc-root .psc-result-value {\n    font-size: 1.05rem !important;\n    font-weight: 700 !important;\n    color: var(--psc-primary-dark) !important;\n    font-family: var(--psc-mono) !important;\n    margin-top: 2px !important;\n}\n\n#psc-calculator.psc-root .psc-result-value.psc-safe { color: var(--psc-safe) !important; }\n#psc-calculator.psc-root .psc-result-value.psc-caution { color: var(--psc-caution) !important; }\n#psc-calculator.psc-root .psc-result-value.psc-unsafe { color: var(--psc-unsafe) !important; }\n\n#psc-calculator.psc-root .psc-warnings {\n    margin-bottom: 14px !important;\n}\n\n#psc-calculator.psc-root .psc-warning {\n    padding: 10px 14px !important;\n    border-radius: var(--psc-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#psc-calculator.psc-root .psc-warning-error {\n    background: #fadbd8 !important;\n    color: #922b21 !important;\n    border-left: 4px solid var(--psc-unsafe) !important;\n}\n\n#psc-calculator.psc-root .psc-warning-warn {\n    background: #fdebd0 !important;\n    color: #7d6608 !important;\n    border-left: 4px solid var(--psc-caution) !important;\n}\n\n#psc-calculator.psc-root .psc-warning-info {\n    background: #d6eaf8 !important;\n    color: #1a5276 !important;\n    border-left: 4px solid var(--psc-primary-light) !important;\n}\n\n#psc-calculator.psc-root .psc-recommendations {\n    margin-top: 20px !important;\n    padding: 16px !important;\n    background: #f8f9fa !important;\n    border-radius: var(--psc-radius) !important;\n    border: 1px solid var(--psc-border) !important;\n}\n\n#psc-calculator.psc-root .psc-recommendations h4 {\n    font-size: 0.9rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#psc-calculator.psc-root .psc-recommendations ul {\n    list-style: disc !important;\n    padding-left: 20px !important;\n}\n\n#psc-calculator.psc-root .psc-recommendations li {\n    font-size: 0.88rem !important;\n    color: var(--psc-text) !important;\n    margin-bottom: 6px !important;\n    line-height: 1.5 !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table-wrap {\n    margin-top: 20px !important;\n    overflow-x: auto !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table-wrap h4 {\n    font-size: 0.9rem !important;\n    color: var(--psc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table {\n    width: 100% !important;\n    border-collapse: collapse !important;\n    font-size: 0.85rem !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table th,\n#psc-calculator.psc-root .psc-compare-table td {\n    padding: 8px 12px !important;\n    text-align: left !important;\n    border: 1px solid var(--psc-border) !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table th {\n    background: var(--psc-primary) !important;\n    color: #fff !important;\n    font-weight: 600 !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table tr:nth-child(even) {\n    background: #fafbfc !important;\n}\n\n#psc-calculator.psc-root .psc-compare-table .psc-safe { color: var(--psc-safe) !important; font-weight: 600 !important; }\n#psc-calculator.psc-root .psc-compare-table .psc-caution { color: var(--psc-caution) !important; font-weight: 600 !important; }\n#psc-calculator.psc-root .psc-compare-table .psc-unsafe { color: var(--psc-unsafe) !important; font-weight: 600 !important; }\n\n\/* Formulas & Disclaimer *\/\n#psc-calculator.psc-root .psc-formulas {\n    margin-top: 24px !important;\n    background: var(--psc-card-bg) !important;\n    border: 1px solid var(--psc-border) !important;\n    border-radius: var(--psc-radius-lg) !important;\n    padding: 16px 20px !important;\n}\n\n#psc-calculator.psc-root .psc-formulas summary {\n    cursor: pointer !important;\n    font-weight: 600 !important;\n    color: var(--psc-primary) !important;\n    font-size: 0.95rem !important;\n}\n\n#psc-calculator.psc-root .psc-formulas-body {\n    margin-top: 14px !important;\n    font-size: 0.88rem !important;\n    color: var(--psc-text) !important;\n}\n\n#psc-calculator.psc-root .psc-formulas-body h4 {\n    font-size: 0.9rem !important;\n    color: var(--psc-primary) !important;\n    margin: 14px 0 8px !important;\n    font-weight: 600 !important;\n}\n\n#psc-calculator.psc-root .psc-formulas-body ul {\n    list-style: disc !important;\n    padding-left: 20px !important;\n}\n\n#psc-calculator.psc-root .psc-formulas-body li {\n    margin-bottom: 4px !important;\n    line-height: 1.5 !important;\n}\n\n#psc-calculator.psc-root .psc-disclaimer {\n    margin-top: 20px !important;\n    padding: 16px !important;\n    background: #fef9e7 !important;\n    border: 1px solid #f9e79f !important;\n    border-radius: var(--psc-radius) !important;\n    font-size: 0.82rem !important;\n    color: #7d6608 !important;\n    line-height: 1.6 !important;\n}\n\n@media (max-width: 768px) {\n    #psc-calculator.psc-root .psc-grid,\n    #psc-calculator.psc-root .psc-results-grid,\n    #psc-calculator.psc-root .psc-viz-row {\n        grid-template-columns: 1fr !important;\n    }\n\n    #psc-calculator.psc-root .psc-card {\n        padding: 16px !important;\n    }\n\n    #psc-calculator.psc-root .psc-title {\n        font-size: 1.4rem !important;\n    }\n}\n\n@media (max-width: 480px) {\n    #psc-calculator.psc-root .psc-btn {\n        width: 100% !important;\n    }\n}\n\n<\/style>\n\n<div id=\"psc-calculator\" class=\"psc-root\">\n    <div class=\"psc-wrap\">\n        <div class=\"psc-layout\">\n            <div class=\"psc-input\">\n                <section class=\"psc-card psc-inputs\">\n                    <div class=\"psc-section\">\n                        <h3 class=\"psc-section-title\">General Settings<\/h3>\n                        <div class=\"psc-grid\">\n                            <div class=\"psc-field\">\n                                <label for=\"psc-unitSystem\">Unit System<\/label>\n                                <select id=\"psc-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=\"psc-field\">\n                                <label for=\"psc-calcMode\">Calculation Mode\n                                    <span class=\"psc-tip\" data-tip=\"Select what you want to calculate\">?<\/span>\n                                <\/label>\n                                <select id=\"psc-calcMode\">\n                                    <option value=\"permissible\">Permissible Stress Calculation<\/option>\n                                    <option value=\"working\" selected>Working Stress Check<\/option>\n                                    <option value=\"maxLoad\">Maximum Permissible Load<\/option>\n                                    <option value=\"requiredArea\">Required Area Calculation<\/option>\n                                    <option value=\"requiredDiameter\">Required Diameter Calculation<\/option>\n                                    <option value=\"factorOfSafety\">Factor of Safety Calculation<\/option>\n                                    <option value=\"combined\">Combined Stress Check<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-stressType\">Stress Type\n                                    <span class=\"psc-tip\" data-tip=\"Type of loading: tension, compression, shear, bending, or combined\">?<\/span>\n                                <\/label>\n                                <select id=\"psc-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=\"psc-section\">\n                        <h3 class=\"psc-section-title\">Material Properties<\/h3>\n                        <div class=\"psc-grid\">\n                            <div class=\"psc-field psc-span-full\">\n                                <label for=\"psc-material\">Material Preset<\/label>\n                                <select id=\"psc-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=\"brass\">Brass<\/option>\n                                    <option value=\"copper\">Copper<\/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=\"psc-field\">\n                                <label for=\"psc-refStrengthType\">Reference Strength Type\n                                    <span class=\"psc-tip\" data-tip=\"Strength value used as basis: sigma_perm = Sref \/ FoS\">?<\/span>\n                                <\/label>\n                                <select id=\"psc-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=\"psc-field\">\n                                <label for=\"psc-yieldStrength\">Yield Strength (<span class=\"psc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-yieldStrength\" value=\"355\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-ultimateStrength\">Ultimate Tensile Strength (<span class=\"psc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-ultimateStrength\" value=\"510\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-compressiveStrength\">Compressive Strength (<span class=\"psc-u-stress\">MPa<\/span>)\n                                    <span class=\"psc-tip\" data-tip=\"Optional. Used when compressive strength is selected as reference.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-compressiveStrength\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-shearStrength\">Shear Strength (<span class=\"psc-u-stress\">MPa<\/span>)\n                                    <span class=\"psc-tip\" data-tip=\"Optional. If blank, estimated from material type.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-shearStrength\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                            <div class=\"psc-field psc-hidden\" id=\"psc-customStrengthGroup\">\n                                <label for=\"psc-customStrength\">Custom Reference Strength (<span class=\"psc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-customStrength\" value=\"\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-safetyFactor\">Factor of Safety (FoS)\n                                    <span class=\"psc-tip\" data-tip=\"Factor of safety applied to reference strength. Default: 2.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-safetyFactor\" value=\"2.0\" min=\"0.01\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-safetyFactorUlt\">Ultimate Factor of Safety (FoSu)\n                                    <span class=\"psc-tip\" data-tip=\"Optional separate FoS for ultimate strength comparison\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-safetyFactorUlt\" value=\"\" min=\"0.01\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"psc-section\" id=\"psc-loadSection\">\n                        <h3 class=\"psc-section-title\">Applied Loads<\/h3>\n                        <div class=\"psc-grid\">\n                            <div class=\"psc-field psc-load-field\" data-types=\"tension,compression,combined,maxLoad,requiredArea,requiredDiameter,factorOfSafety,working\">\n                                <label for=\"psc-axialLoad\">Applied Axial Load (<span class=\"psc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-axialLoad\" value=\"40\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-load-field psc-hidden\" data-types=\"shear,combined\">\n                                <label for=\"psc-shearLoad\">Applied Shear Force (<span class=\"psc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-shearLoad\" value=\"0\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-load-field psc-hidden\" data-types=\"bending\">\n                                <label for=\"psc-bendingMoment\">Bending Moment (<span class=\"psc-u-moment\">N.m<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-bendingMoment\" value=\"0\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-load-field psc-hidden\" data-types=\"shear,combined\">\n                                <label for=\"psc-shearPlanes\">Number of Shear Planes\n                                    <span class=\"psc-tip\" data-tip=\"tau = V \/ (n x A). Default: 1\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-shearPlanes\" value=\"1\" min=\"1\" step=\"1\">\n                            <\/div>\n                            <div class=\"psc-field psc-load-field\" data-types=\"tension,compression,shear,bending,combined,working,factorOfSafety\">\n                                <label for=\"psc-stressConcentration\">Stress Concentration Factor (Kt)\n                                    <span class=\"psc-tip\" data-tip=\"Local stress = Kt x nominal stress. Default: 1.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-stressConcentration\" value=\"1.0\" min=\"1\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"psc-section\" id=\"psc-geometrySection\">\n                        <h3 class=\"psc-section-title\">Cross-Section Geometry<\/h3>\n                        <div class=\"psc-grid\">\n                            <div class=\"psc-field\">\n                                <label for=\"psc-sectionType\">Cross-Section Type<\/label>\n                                <select id=\"psc-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=\"psc-field psc-geom-field\" data-sections=\"solid_round\">\n                                <label for=\"psc-diameter\">Diameter (<span class=\"psc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-diameter\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"psc-outerDiameter\">Outer Diameter (<span class=\"psc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-outerDiameter\" value=\"25\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"psc-innerDiameter\">Inner Diameter (<span class=\"psc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-innerDiameter\" value=\"15\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"psc-width\">Width (<span class=\"psc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-width\" value=\"30\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"psc-thickness\">Thickness \/ Height (<span class=\"psc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-thickness\" value=\"10\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"custom\">\n                                <label for=\"psc-customArea\">Custom Cross-Sectional Area (<span class=\"psc-u-area\">mm2<\/span>)<\/label>\n                                <input type=\"number\" id=\"psc-customArea\" value=\"314.16\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"psc-field psc-geom-field psc-hidden\" data-sections=\"rectangle,bending\">\n                                <label for=\"psc-sectionModulus\">Section Modulus Z (<span class=\"psc-u-sectionMod\">mm3<\/span>)\n                                    <span class=\"psc-tip\" data-tip=\"Optional manual override for bending: sigma = M\/Z\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-sectionModulus\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Auto-calculated\">\n                            <\/div>\n                            <div class=\"psc-field\">\n                                <label for=\"psc-netAreaReduction\">Net Area Reduction (%)\n                                    <span class=\"psc-tip\" data-tip=\"Reduction for holes, threads, slots, grooves, notches\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"psc-netAreaReduction\" value=\"0\" min=\"0\" max=\"99\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"psc-actions\">\n                        <button type=\"button\" id=\"psc-calculateBtn\" class=\"psc-btn psc-btn-primary\">Calculate<\/button>\n                    <\/div>\n                <\/section>\n            <\/div>\n\n            <div class=\"psc-output psc-hidden\" id=\"psc-resultsPanel\">\n                <section class=\"psc-card psc-results\">\n                    <h2>Calculation Results<\/h2>\n                    <div id=\"psc-warnings\" class=\"psc-warnings\" hidden><\/div>\n\n                    <div class=\"psc-results-grid\" id=\"psc-resultsGrid\">\n                        <div class=\"psc-result\"><span class=\"psc-result-label\">Reference Material Strength<\/span><span class=\"psc-result-value\" id=\"psc-resRefStrength\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\"><span class=\"psc-result-label\">Factor of Safety<\/span><span class=\"psc-result-value\" id=\"psc-resSF\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\"><span class=\"psc-result-label\">Permissible Normal Stress<\/span><span class=\"psc-result-value\" id=\"psc-resPermNormal\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemPermYield\"><span class=\"psc-result-label\">Permissible (Yield-Based)<\/span><span class=\"psc-result-value\" id=\"psc-resPermYield\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemPermUlt\"><span class=\"psc-result-label\">Permissible (Ultimate-Based)<\/span><span class=\"psc-result-value\" id=\"psc-resPermUlt\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemGoverning\"><span class=\"psc-result-label\">Governing Permissible Stress<\/span><span class=\"psc-result-value\" id=\"psc-resGoverning\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemPermShear\"><span class=\"psc-result-label\">Permissible Shear Stress<\/span><span class=\"psc-result-value\" id=\"psc-resPermShear\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemActual\"><span class=\"psc-result-label\">Actual Working Stress<\/span><span class=\"psc-result-value\" id=\"psc-resActualStress\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result psc-hidden\" id=\"psc-resItemLocal\"><span class=\"psc-result-label\">Local Stress (Kt)<\/span><span class=\"psc-result-value\" id=\"psc-resLocalStress\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result psc-hidden\" id=\"psc-resItemVM\"><span class=\"psc-result-label\">Von Mises Equivalent Stress<\/span><span class=\"psc-result-value\" id=\"psc-resVMStress\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemMaxLoad\"><span class=\"psc-result-label\">Maximum Permissible Load<\/span><span class=\"psc-result-value\" id=\"psc-resMaxLoad\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemRequiredArea\"><span class=\"psc-result-label\">Required Cross-Sectional Area<\/span><span class=\"psc-result-value\" id=\"psc-resRequiredArea\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemRequiredDia\"><span class=\"psc-result-label\">Required Diameter<\/span><span class=\"psc-result-value\" id=\"psc-resRequiredDia\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemActualFoS\"><span class=\"psc-result-label\">Actual Factor of Safety<\/span><span class=\"psc-result-value\" id=\"psc-resActualFoS\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemUtilization\"><span class=\"psc-result-label\">Stress Utilization<\/span><span class=\"psc-result-value\" id=\"psc-resUtilization\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemSafetyMargin\"><span class=\"psc-result-label\">Safety Margin<\/span><span class=\"psc-result-value\" id=\"psc-resSafetyMargin\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemMOS\"><span class=\"psc-result-label\">Margin of Safety<\/span><span class=\"psc-result-value\" id=\"psc-resMOS\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemReserveRatio\"><span class=\"psc-result-label\">Stress Reserve Ratio<\/span><span class=\"psc-result-value\" id=\"psc-resReserveRatio\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result\" id=\"psc-resItemLoadReserve\"><span class=\"psc-result-label\">Load Reserve<\/span><span class=\"psc-result-value\" id=\"psc-resLoadReserve\">&#8211;<\/span><\/div>\n                        <div class=\"psc-result psc-result-hi\"><span class=\"psc-result-label\">Design Status<\/span><span class=\"psc-result-value\" id=\"psc-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=\"LyoqDQogKiBQZXJtaXNzaWJsZSBTdHJlc3MgQ2FsY3VsYXRvcg0KICogQ29yZSBjYWxjdWxhdGlvbiBlbmdpbmUsIFVJIGxvZ2ljLCBhbmQgdmlzdWFsaXphdGlvbnMNCiAqLw0KDQooZnVuY3Rpb24gKCkgew0KICAgICd1c2Ugc3RyaWN0JzsNCg0KICAgIGNvbnN0IE1BVEVSSUFMUyA9IHsNCiAgICAgICAgc3RydWN0dXJhbF9zdGVlbDogeyBuYW1lOiAnU3RydWN0dXJhbCBTdGVlbCcsIHlsZDogMzU1LCB1bHRpbWF0ZTogNTEwLCBjb21wcmVzc2l2ZTogMzU1LCBzaGVhcjogMjEwLCBzaGVhclJhdGlvOiAwLjU4LCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGNhcmJvbl9zdGVlbDogICAgIHsgbmFtZTogJ0NhcmJvbiBTdGVlbCcsICAgICB5bGQ6IDI1MCwgdWx0aW1hdGU6IDQwMCwgY29tcHJlc3NpdmU6IDI1MCwgc2hlYXI6IDE0NSwgc2hlYXJSYXRpbzogMC41OCwgZHVjdGlsZTogdHJ1ZSB9LA0KICAgICAgICBhbGxveV9zdGVlbDogICAgICB7IG5hbWU6ICdBbGxveSBTdGVlbCcsICAgICAgeWxkOiA2OTAsIHVsdGltYXRlOiA4NjAsIGNvbXByZXNzaXZlOiA2OTAsIHNoZWFyOiA0MDAsIHNoZWFyUmF0aW86IDAuNTgsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgc3RhaW5sZXNzX3N0ZWVsOiAgeyBuYW1lOiAnU3RhaW5sZXNzIFN0ZWVsJywgIHlsZDogMjA1LCB1bHRpbWF0ZTogNTE1LCBjb21wcmVzc2l2ZTogMjA1LCBzaGVhcjogMzEwLCBzaGVhclJhdGlvOiAwLjYwLCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGFsdW1pbnVtOiAgICAgICAgIHsgbmFtZTogJ0FsdW1pbnVtIEFsbG95JywgICB5bGQ6IDI3NSwgdWx0aW1hdGU6IDMxMCwgY29tcHJlc3NpdmU6IDI3NSwgc2hlYXI6IDE2NSwgc2hlYXJSYXRpbzogMC42MCwgZHVjdGlsZTogdHJ1ZSB9LA0KICAgICAgICB0aXRhbml1bTogICAgICAgICB7IG5hbWU6ICdUaXRhbml1bSBBbGxveScsICAgeWxkOiA4ODAsIHVsdGltYXRlOiA5NTAsIGNvbXByZXNzaXZlOiA4ODAsIHNoZWFyOiA1MTAsIHNoZWFyUmF0aW86IDAuNTgsIGR1Y3RpbGU6IHRydWUgfSwNCiAgICAgICAgYnJhc3M6ICAgICAgICAgICAgeyBuYW1lOiAnQnJhc3MnLCAgICAgICAgICAgIHlsZDogMTI0LCB1bHRpbWF0ZTogMzM4LCBjb21wcmVzc2l2ZTogMTI0LCBzaGVhcjogMjAwLCBzaGVhclJhdGlvOiAwLjYwLCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGNvcHBlcjogICAgICAgICAgIHsgbmFtZTogJ0NvcHBlcicsICAgICAgICAgICB5bGQ6IDcwLCAgdWx0aW1hdGU6IDIyMCwgY29tcHJlc3NpdmU6IDcwLCAgc2hlYXI6IDEzMCwgc2hlYXJSYXRpbzogMC42MCwgZHVjdGlsZTogdHJ1ZSB9LA0KICAgICAgICBjYXN0X2lyb246ICAgICAgICB7IG5hbWU6ICdDYXN0IElyb24nLCAgICAgICAgeWxkOiAxMzAsIHVsdGltYXRlOiAyMDAsIGNvbXByZXNzaXZlOiA2NTAsIHNoZWFyOiAxMzAsIHNoZWFyUmF0aW86IDAuNjUsIGR1Y3RpbGU6IGZhbHNlIH0sDQogICAgICAgIHBsYXN0aWM6ICAgICAgICAgIHsg\"+\"bmFtZTogJ0VuZ2luZWVyaW5nIFBsYXN0aWMnLCB5bGQ6IDUwLCB1bHRpbWF0ZTogNzAsIGNvbXByZXNzaXZlOiA4MCwgc2hlYXI6IDM1LCBzaGVhclJhdGlvOiAwLjUwLCBkdWN0aWxlOiB0cnVlIH0sDQogICAgICAgIGN1c3RvbTogICAgICAgICAgIHsgbmFtZTogJ0N1c3RvbSBNYXRlcmlhbCcsICB5bGQ6IDAsIHVsdGltYXRlOiAwLCBjb21wcmVzc2l2ZTogMCwgc2hlYXI6IDAsIHNoZWFyUmF0aW86IDAuNTgsIGR1Y3RpbGU6IHRydWUgfQ0KICAgIH07DQoNCiAgICBjb25zdCBVTklUUyA9IHsNCiAgICAgICAgbWV0cmljOiB7DQogICAgICAgICAgICBzdHJlc3M6ICdNUGEnLCBmb3JjZTogJ2tOJywgbGVuZ3RoOiAnbW0nLCBhcmVhOiAnbW1cdTAwQjInLA0KICAgICAgICAgICAgbW9tZW50OiAnTlx1MDBCN20nLCBzZWN0aW9uTW9kOiAnbW1cdTAwQjMnLA0KICAgICAgICAgICAgc3RyZXNzRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIHN0cmVzc1RvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAxMDAwOyB9LA0KICAgICAgICAgICAgZm9yY2VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMTAwMDsgfSwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBsZW5ndGhUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgYXJlYUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBhcmVhVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIG1vbWVudEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAxZTY7IH0sDQogICAgICAgICAgICBtb21lbnRUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMWU2OyB9DQogICAgICAgIH0sDQogICAgICAgIGltcGVyaWFsOiB7DQogICAgICAgICAgICBzdHJlc3M6ICdrc2knLCBmb3JjZTogJ2xiZicsIGxlbmd0aDogJ2luJywgYXJlYTogJ2luXHUwMEIyJywNCiAgICAgICAgICAgIG1vbWVudDogJ2xiZlx1MDBCN2Z0Jywgc2VjdGlvbk1vZDogJ2luXHUwMEIzJywNCiAgICAgICAgICAgIHN0cmVzc0Zyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgc3RyZXNzVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDYuODk0NzY7IH0sDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA0LjQ0ODIyOyB9LA0KICAgICAgICAgICAgZm9yY2VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNC40NDgyMjsgfSwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogZnVu\"+\"Y3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAyNS40OyB9LA0KICAgICAgICAgICAgbGVuZ3RoVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDI1LjQ7IH0sDQogICAgICAgICAgICBhcmVhRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDY0NS4xNjsgfSwNCiAgICAgICAgICAgIGFyZWFUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNjQ1LjE2OyB9LA0KICAgICAgICAgICAgbW9tZW50RnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDEzNTUuODI7IH0sDQogICAgICAgICAgICBtb21lbnRUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMTM1NS44MjsgfQ0KICAgICAgICB9DQogICAgfTsNCg0KICAgIGxldCByb290ID0gbnVsbDsNCiAgICBjb25zdCBlbHMgPSB7fTsNCg0KICAgIGZ1bmN0aW9uICQoaWQpIHsNCiAgICAgICAgcmV0dXJuIHJvb3QgPyByb290LnF1ZXJ5U2VsZWN0b3IoJyNwc2MtJyArIGlkKSA6IG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcXNhKHNlbGVjdG9yKSB7DQogICAgICAgIHJldHVybiByb290ID8gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSA6IFtdOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhY2hlRWxlbWVudHMoKSB7DQogICAgICAgIGlmICghcm9vdCkgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwc2MtY2FsY3VsYXRvcicpOw0KICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsNCg0KICAgICAgICBjb25zdCBpZHMgPSBbDQogICAgICAgICAgICAndW5pdFN5c3RlbScsICdjYWxjTW9kZScsICdzdHJlc3NUeXBlJywgJ21hdGVyaWFsJywgJ3JlZlN0cmVuZ3RoVHlwZScsDQogICAgICAgICAgICAneWllbGRTdHJlbmd0aCcsICd1bHRpbWF0ZVN0cmVuZ3RoJywgJ2NvbXByZXNzaXZlU3RyZW5ndGgnLCAnc2hlYXJTdHJlbmd0aCcsDQogICAgICAgICAgICAnY3VzdG9tU3RyZW5ndGgnLCAnY3VzdG9tU3RyZW5ndGhHcm91cCcsICdzYWZldHlGYWN0b3InLCAnc2FmZXR5RmFjdG9yVWx0JywNCiAgICAgICAgICAgICdheGlhbExvYWQnLCAnc2hlYXJMb2FkJywgJ2JlbmRpbmdNb21lbnQnLCAnc2hlYXJQbGFuZXMnLCAnc3RyZXNzQ29uY2VudHJhdGlvbicsDQogICAgICAgICAgICAnc2VjdGlvblR5cGUnLCAnZGlhbWV0ZXInLCAnb3V0ZXJEaWFtZXRlcicsICdpbm5lckRpYW1ldGVyJywgJ3dpZHRoJywgJ3RoaWNrbmVzcycsDQogICAgICAgICAgICAnY3VzdG9tQXJlYScsICdzZWN0aW9uTW9kdWx1cycsICduZXRBcmVhUmVkdWN0aW9uJywNCiAgICAgICAgICAgICdjYWxjdWxhdGVCdG4nLCAnd2FybmluZ3MnLCAncmVzdWx0c1BhbmVsJywNCiAgICAgICAgICAgICdyZXN1bHRzR3JpZCcsDQogICAgICAgICAgICAncmVzUmVmU3RyZW5ndGgnLCAncmVzU0YnLCAncmVzUGVybU5vcm1hbCcsICdyZXNQZXJtWWllbGQnLCAncmVzUGVybVVsdCcsICdyZXNHb3Zlcm5pbmcnLA0KICAgICAgICAg\"+\"ICAgJ3Jlc1Blcm1TaGVhcicsICdyZXNBY3R1YWxTdHJlc3MnLCAncmVzTG9jYWxTdHJlc3MnLCAncmVzVk1TdHJlc3MnLA0KICAgICAgICAgICAgJ3Jlc01heExvYWQnLCAncmVzUmVxdWlyZWRBcmVhJywgJ3Jlc1JlcXVpcmVkRGlhJywgJ3Jlc0FjdHVhbEZvUycsDQogICAgICAgICAgICAncmVzVXRpbGl6YXRpb24nLCAncmVzU2FmZXR5TWFyZ2luJywgJ3Jlc01PUycsICdyZXNSZXNlcnZlUmF0aW8nLCAncmVzTG9hZFJlc2VydmUnLCAncmVzRGVzaWduU3RhdHVzJw0KICAgICAgICBdOw0KICAgICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHsgZWxzW2lkXSA9ICQoaWQpOyB9KTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gbnVtKGlkKSB7DQogICAgICAgIGNvbnN0IGVsID0gZWxzW2lkXTsNCiAgICAgICAgaWYgKCFlbCkgcmV0dXJuIDA7DQogICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KGVsLnZhbHVlKTsNCiAgICAgICAgcmV0dXJuIGlzTmFOKHYpID8gMCA6IHY7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZm10KHZhbCwgZGVjaW1hbHMpIHsNCiAgICAgICAgZGVjaW1hbHMgPSBkZWNpbWFscyA9PT0gdW5kZWZpbmVkID8gMiA6IGRlY2ltYWxzOw0KICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8ICFpc0Zpbml0ZSh2YWwpKSByZXR1cm4gJy0nOw0KICAgICAgICBpZiAoTWF0aC5hYnModmFsKSA+PSAxZTYgfHwgKE1hdGguYWJzKHZhbCkgPCAwLjAwMSAmJiB2YWwgIT09IDApKSByZXR1cm4gdmFsLnRvRXhwb25lbnRpYWwoMyk7DQogICAgICAgIHJldHVybiB2YWwudG9GaXhlZChkZWNpbWFscyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZ2V0VW5pdHMoKSB7DQogICAgICAgIHJldHVybiBVTklUU1tlbHMudW5pdFN5c3RlbS52YWx1ZV0gfHwgVU5JVFMubWV0cmljOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBxc2EoJy5wc2MtdS1zdHJlc3MnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUuc3RyZXNzOyB9KTsNCiAgICAgICAgcXNhKCcucHNjLXUtZm9yY2UnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUuZm9yY2U7IH0pOw0KICAgICAgICBxc2EoJy5wc2MtdS1sZW5ndGgnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUubGVuZ3RoOyB9KTsNCiAgICAgICAgcXNhKCcucHNjLXUtYXJlYScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS5hcmVhOyB9KTsNCiAgICAgICAgcXNhKCcucHNjLXUtbW9tZW50JykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1Lm1vbWVudDsgfSk7DQogICAgICAgIHFzYSgnLnBzYy11LXNlY3Rpb25Nb2QnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50\"+\"ZXh0Q29udGVudCA9IHUuc2VjdGlvbk1vZDsgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY0dlb21ldHJ5KCkgew0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgY29uc3QgdHlwZSA9IGVscy5zZWN0aW9uVHlwZS52YWx1ZTsNCiAgICAgICAgbGV0IGFyZWEgPSAwLCBzZWN0aW9uTW9kID0gMCwgSSA9IDAsIGMgPSAwOw0KDQogICAgICAgIGlmICh0eXBlID09PSAnc29saWRfcm91bmQnKSB7DQogICAgICAgICAgICBjb25zdCBkID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdkaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGFyZWEgPSBNYXRoLlBJICogZCAqIGQgLyA0Ow0KICAgICAgICAgICAgc2VjdGlvbk1vZCA9IE1hdGguUEkgKiBkICogZCAqIGQgLyAzMjsNCiAgICAgICAgICAgIEkgPSBNYXRoLlBJICogTWF0aC5wb3coZCwgNCkgLyA2NDsNCiAgICAgICAgICAgIGMgPSBkIC8gMjsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaG9sbG93X3JvdW5kJykgew0KICAgICAgICAgICAgY29uc3QgRCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnb3V0ZXJEaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGNvbnN0IGQgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2lubmVyRGlhbWV0ZXInKSk7DQogICAgICAgICAgICBhcmVhID0gTWF0aC5QSSAqIChEICogRCAtIGQgKiBkKSAvIDQ7DQogICAgICAgICAgICBzZWN0aW9uTW9kID0gTWF0aC5QSSAqIChNYXRoLnBvdyhELCA0KSAtIE1hdGgucG93KGQsIDQpKSAvICgzMiAqIEQpOw0KICAgICAgICAgICAgSSA9IE1hdGguUEkgKiAoTWF0aC5wb3coRCwgNCkgLSBNYXRoLnBvdyhkLCA0KSkgLyA2NDsNCiAgICAgICAgICAgIGMgPSBEIC8gMjsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgY29uc3QgYiA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnd2lkdGgnKSk7DQogICAgICAgICAgICBjb25zdCBoID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCd0aGlja25lc3MnKSk7DQogICAgICAgICAgICBhcmVhID0gYiAqIGg7DQogICAgICAgICAgICBzZWN0aW9uTW9kID0gYiAqIGggKiBoIC8gNjsNCiAgICAgICAgICAgIEkgPSBiICogTWF0aC5wb3coaCwgMykgLyAxMjsNCiAgICAgICAgICAgIGMgPSBoIC8gMjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGFyZWEgPSB1LmFyZWFGcm9tSW5wdXQobnVtKCdjdXN0b21BcmVhJykpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgbWFudWFsWiA9IG51bSgnc2VjdGlvbk1vZHVsdXMnKTsNCiAgICAgICAgaWYgKG1hbnVhbFogPiAwKSB7DQogICAgICAgICAgICBzZWN0aW9uTW9kID0gZWxzLnVuaXRTeXN0ZW0udmFsdWUgPT09ICdpbXBlcmlhbCcNCiAgICAgICAgICAgICAgICA\/IG1hbnVhbFogKiBNYXRoLnBvdygyNS40LCAzKQ0KICAgICAgICAgICAgICAgIDogbWFudWFsWjsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHJlZHVjdGlvbiA9IG51\"+\"bSgnbmV0QXJlYVJlZHVjdGlvbicpIC8gMTAwOw0KICAgICAgICBjb25zdCBuZXRBcmVhID0gYXJlYSAqICgxIC0gcmVkdWN0aW9uKTsNCg0KICAgICAgICByZXR1cm4geyBncm9zc0FyZWE6IGFyZWEsIGFyZWE6IG5ldEFyZWEsIHNlY3Rpb25Nb2Q6IHNlY3Rpb25Nb2QsIEk6IEksIGM6IGMsIHR5cGU6IHR5cGUgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBlc3RpbWF0ZVNoZWFyU3RyZW5ndGgobWF0KSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCBzaGVhcklucHV0ID0gbnVtKCdzaGVhclN0cmVuZ3RoJyk7DQogICAgICAgIGlmIChzaGVhcklucHV0ID4gMCkgcmV0dXJuIHUuc3RyZXNzRnJvbUlucHV0KHNoZWFySW5wdXQpOw0KDQogICAgICAgIGNvbnN0IHlpZWxkVmFsID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd5aWVsZFN0cmVuZ3RoJykpOw0KDQogICAgICAgIGlmIChtYXQgJiYgbWF0LnNoZWFyID4gMCAmJiBlbHMubWF0ZXJpYWwudmFsdWUgIT09ICdjdXN0b20nKSB7DQogICAgICAgICAgICByZXR1cm4gdS5zdHJlc3NGcm9tSW5wdXQobWF0LnNoZWFyKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4geWllbGRWYWwgKiAobWF0ID8gbWF0LnNoZWFyUmF0aW8gOiAwLjU4KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRSZWZlcmVuY2VTdHJlbmd0aChzdHJlc3NUeXBlKSB7DQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCByZWZUeXBlID0gZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgbWF0ID0gTUFURVJJQUxTW2Vscy5tYXRlcmlhbC52YWx1ZV07DQoNCiAgICAgICAgbGV0IHNSZWYgPSAwOw0KICAgICAgICBpZiAocmVmVHlwZSA9PT0gJ3lpZWxkJykgc1JlZiA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgneWllbGRTdHJlbmd0aCcpKTsNCiAgICAgICAgZWxzZSBpZiAocmVmVHlwZSA9PT0gJ3VsdGltYXRlJykgc1JlZiA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgndWx0aW1hdGVTdHJlbmd0aCcpKTsNCiAgICAgICAgZWxzZSBpZiAocmVmVHlwZSA9PT0gJ2NvbXByZXNzaXZlJykgew0KICAgICAgICAgICAgY29uc3QgY29tcCA9IG51bSgnY29tcHJlc3NpdmVTdHJlbmd0aCcpOw0KICAgICAgICAgICAgc1JlZiA9IGNvbXAgPiAwID8gdS5zdHJlc3NGcm9tSW5wdXQoY29tcCkgOiB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ3lpZWxkU3RyZW5ndGgnKSk7DQogICAgICAgIH0gZWxzZSBpZiAocmVmVHlwZSA9PT0gJ3NoZWFyJykgew0KICAgICAgICAgICAgc1JlZiA9IGVzdGltYXRlU2hlYXJTdHJlbmd0aChtYXQpOw0KICAgICAgICB9IGVsc2UgaWYgKHJlZlR5cGUgPT09ICdjdXN0b20nKSBzUmVmID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCdjdXN0b21TdHJlbmd0aCcpKTsNCg0KICAgICAgICByZXR1cm4gc1JlZjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRQZXJtaXNzaWJsZVNoZWFyKHNmKSB7DQogICAgICAgIGNv\"+\"bnN0IHNTaGVhciA9IGVzdGltYXRlU2hlYXJTdHJlbmd0aChNQVRFUklBTFNbZWxzLm1hdGVyaWFsLnZhbHVlXSk7DQogICAgICAgIHJldHVybiBzU2hlYXIgLyBzZjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKSB7DQogICAgICAgIGNvbnN0IHN0cmVzc1R5cGUgPSBlbHMuc3RyZXNzVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IHNlY3Rpb25UeXBlID0gZWxzLnNlY3Rpb25UeXBlLnZhbHVlOw0KDQogICAgICAgIHFzYSgnLnBzYy1sb2FkLWZpZWxkJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZWwuZGF0YXNldC50eXBlcy5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgY29uc3Qgc2hvdyA9IHR5cGVzLmluZGV4T2Yoc3RyZXNzVHlwZSkgPj0gMCB8fCB0eXBlcy5pbmRleE9mKGNhbGNNb2RlKSA+PSAwOw0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgncHNjLWhpZGRlbicsICFzaG93KTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgcXNhKCcucHNjLWdlb20tZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBlbC5kYXRhc2V0LnNlY3Rpb25zLnNwbGl0KCcsJyk7DQogICAgICAgICAgICBsZXQgc2hvdyA9IHNlY3Rpb25zLmluZGV4T2Yoc2VjdGlvblR5cGUpID49IDA7DQogICAgICAgICAgICBpZiAoZWwuZGF0YXNldC5zZWN0aW9ucy5pbmRleE9mKCdiZW5kaW5nJykgPj0gMCAmJiBzdHJlc3NUeXBlID09PSAnYmVuZGluZycpIHNob3cgPSB0cnVlOw0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgncHNjLWhpZGRlbicsICFzaG93KTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZWxzLmN1c3RvbVN0cmVuZ3RoR3JvdXAuY2xhc3NMaXN0LnRvZ2dsZSgncHNjLWhpZGRlbicsIGVscy5yZWZTdHJlbmd0aFR5cGUudmFsdWUgIT09ICdjdXN0b20nKTsNCg0KICAgICAgICBpZiAoY2FsY01vZGUgPT09ICdyZXF1aXJlZERpYW1ldGVyJykgew0KICAgICAgICAgICAgZWxzLnNlY3Rpb25UeXBlLnZhbHVlID0gJ3NvbGlkX3JvdW5kJzsNCiAgICAgICAgICAgIHFzYSgnLnBzYy1nZW9tLWZpZWxkJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdwc2MtaGlkZGVuJywgZWwuZGF0YXNldC5zZWN0aW9ucy5pbmRleE9mKCdzb2xpZF9yb3VuZCcpIDwgMCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjYWxjTW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgZWxzLnN0cmVzc1R5cGUudmFsdWUgPSAnY29tYmluZWQnOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYXBwbHlNYXRlcmlhbFByZXNldCgpIHsNCiAgICAgICAgY29uc3Qga2V5ID0gZWxzLm1hdGVyaWFsLnZhbHVl\"+\"Ow0KICAgICAgICBpZiAoa2V5ID09PSAnY3VzdG9tJykgcmV0dXJuOw0KICAgICAgICBjb25zdCBtYXQgPSBNQVRFUklBTFNba2V5XTsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIGVscy55aWVsZFN0cmVuZ3RoLnZhbHVlID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KG1hdC55bGQpLCAxKTsNCiAgICAgICAgZWxzLnVsdGltYXRlU3RyZW5ndGgudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkobWF0LnVsdGltYXRlKSwgMSk7DQogICAgICAgIGlmIChtYXQuY29tcHJlc3NpdmUpIGVscy5jb21wcmVzc2l2ZVN0cmVuZ3RoLnZhbHVlID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KG1hdC5jb21wcmVzc2l2ZSksIDEpOw0KICAgICAgICBpZiAobWF0LnNoZWFyKSBlbHMuc2hlYXJTdHJlbmd0aC52YWx1ZSA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShtYXQuc2hlYXIpLCAxKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2YWxpZGF0ZShnZW8pIHsNCiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBbXTsNCiAgICAgICAgY29uc3QgZXJyb3JzID0gW107DQogICAgICAgIGNvbnN0IHNmID0gbnVtKCdzYWZldHlGYWN0b3InKTsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQoNCiAgICAgICAgaWYgKHNmIDw9IDApIGVycm9ycy5wdXNoKCdGYWN0b3Igb2Ygc2FmZXR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChudW0oJ3lpZWxkU3RyZW5ndGgnKSA8PSAwICYmIGVscy5yZWZTdHJlbmd0aFR5cGUudmFsdWUgPT09ICd5aWVsZCcpIGVycm9ycy5wdXNoKCdZaWVsZCBzdHJlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICBpZiAobnVtKCd1bHRpbWF0ZVN0cmVuZ3RoJykgPD0gMCAmJiBlbHMucmVmU3RyZW5ndGhUeXBlLnZhbHVlID09PSAndWx0aW1hdGUnKSBlcnJvcnMucHVzaCgnVWx0aW1hdGUgdGVuc2lsZSBzdHJlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICBpZiAobnVtKCdjdXN0b21TdHJlbmd0aCcpIDw9IDAgJiYgZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZSA9PT0gJ2N1c3RvbScpIGVycm9ycy5wdXNoKCdDdXN0b20gcmVmZXJlbmNlIHN0cmVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQoNCiAgICAgICAgY29uc3QgbmVlZHNBcmVhID0gWyd3b3JraW5nJywgJ2ZhY3Rvck9mU2FmZXR5JywgJ2NvbWJpbmVkJywgJ21heExvYWQnXS5pbmRleE9mKGVscy5jYWxjTW9kZS52YWx1ZSkgPj0gMDsNCiAgICAgICAgaWYgKG5lZWRzQXJlYSAmJiBnZW8uYXJlYSA8PSAwKSB7DQogICAgICAgICAgICBlcnJvcnMucHVzaCgnQ3Jvc3Mtc2VjdGlvbmFsIGFyZWEgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChlbHMuY2FsY01vZGUudmFsdWUgPT09ICdyZXF1aXJlZEFyZWEnICYmIG51bSgnYXhpYWxMb2FkJykgPD0gMCkgew0KICAgICAgICAgICAgZXJyb3Jz\"+\"LnB1c2goJ0FwcGxpZWQgYXhpYWwgbG9hZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGZvciByZXF1aXJlZCBhcmVhIGNhbGN1bGF0aW9uLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVscy5jYWxjTW9kZS52YWx1ZSA9PT0gJ3JlcXVpcmVkRGlhbWV0ZXInICYmIG51bSgnYXhpYWxMb2FkJykgPD0gMCkgew0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0FwcGxpZWQgYXhpYWwgbG9hZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGZvciByZXF1aXJlZCBkaWFtZXRlciBjYWxjdWxhdGlvbi4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChlbHMuc2VjdGlvblR5cGUudmFsdWUgPT09ICdob2xsb3dfcm91bmQnKSB7DQogICAgICAgICAgICBjb25zdCBvZCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnb3V0ZXJEaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGNvbnN0IGlkID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdpbm5lckRpYW1ldGVyJykpOw0KICAgICAgICAgICAgaWYgKGlkID49IG9kKSBlcnJvcnMucHVzaCgnSW5uZXIgZGlhbWV0ZXIgbXVzdCBiZSBsZXNzIHRoYW4gb3V0ZXIgZGlhbWV0ZXIuJyk7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBwbGFuZXMgPSBudW0oJ3NoZWFyUGxhbmVzJyk7DQogICAgICAgIGlmIChlbHMuc3RyZXNzVHlwZS52YWx1ZSA9PT0gJ3NoZWFyJyAmJiBwbGFuZXMgPCAxKSBlcnJvcnMucHVzaCgnTnVtYmVyIG9mIHNoZWFyIHBsYW5lcyBtdXN0IGJlIGF0IGxlYXN0IDEuJyk7DQoNCiAgICAgICAgaWYgKHNmIDwgMS41KSB3YXJuaW5ncy5wdXNoKHsgdHlwZTogJ3dhcm4nLCBtc2c6ICdGYWN0b3Igb2Ygc2FmZXR5IGJlbG93IDEuNSBtYXkgYmUgdG9vIGxvdyBmb3IgdW5jZXJ0YWluIG9yIGR5bmFtaWMgbG9hZGluZyBjb25kaXRpb25zLicgfSk7DQogICAgICAgIGlmIChzZiA8IDIuMCAmJiBzZiA+PSAxLjUpIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnaW5mbycsIG1zZzogJ0NvbnNpZGVyIGEgaGlnaGVyIGZhY3RvciBvZiBzYWZldHkgKD49Mi4wKSBmb3IgZ2VuZXJhbCBtZWNoYW5pY2FsIGRlc2lnbi4nIH0pOw0KDQogICAgICAgIGNvbnN0IG1hdCA9IE1BVEVSSUFMU1tlbHMubWF0ZXJpYWwudmFsdWVdOw0KICAgICAgICBjb25zdCB5aWVsZE1QYSA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgneWllbGRTdHJlbmd0aCcpKTsNCiAgICAgICAgY29uc3QgdWx0TVBhID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd1bHRpbWF0ZVN0cmVuZ3RoJykpOw0KDQogICAgICAgIGlmIChtYXQgJiYgbWF0LmR1Y3RpbGUgJiYgZWxzLnJlZlN0cmVuZ3RoVHlwZS52YWx1ZSA9PT0gJ3VsdGltYXRlJykgew0KICAgICAgICAgICAgY29uc3QgcGVybVVsdCA9IHVsdE1QYSAvIHNmOw0KICAgICAgICAgICAgaWYgKHBlcm1VbHQgPiB5aWVsZE1QYSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnd2FybicsIG1zZzogJ1VsdGltYXRlLXN0cmVuZ3RoLWJhc2VkIHBlcm1pc3Np\"+\"YmxlIHN0cmVzcyBleGNlZWRzIHlpZWxkIHN0cmVuZ3RoLiBGb3IgZHVjdGlsZSBtYXRlcmlhbHMsIHlpZWxkLWJhc2VkIGRlc2lnbiBpcyB0eXBpY2FsbHkgbW9yZSBjb25zZXJ2YXRpdmUuJyB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChudW0oJ3NoZWFyU3RyZW5ndGgnKSA8PSAwICYmIChlbHMuc3RyZXNzVHlwZS52YWx1ZSA9PT0gJ3NoZWFyJyB8fCBlbHMucmVmU3RyZW5ndGhUeXBlLnZhbHVlID09PSAnc2hlYXInKSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7IHR5cGU6ICdpbmZvJywgbXNnOiAnU2hlYXIgc3RyZW5ndGggZXN0aW1hdGVkIGZyb20gbWF0ZXJpYWwgdHlwZS4gRW50ZXIgZGlyZWN0IHNoZWFyIHN0cmVuZ3RoIGZvciBhY2N1cmF0ZSByZXN1bHRzLicgfSk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geyBlcnJvcnM6IGVycm9ycywgd2FybmluZ3M6IHdhcm5pbmdzIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgY29uc3QgZ2VvID0gY2FsY0dlb21ldHJ5KCk7DQogICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZShnZW8pOw0KDQogICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9ycy5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBzaG93UmVzdWx0c1BhbmVsKCk7DQogICAgICAgICAgICBzaG93V2FybmluZ3ModmFsaWRhdGlvbi5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiB7IHR5cGU6ICdlcnJvcicsIG1zZzogZSB9OyB9KSk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBzZiA9IG51bSgnc2FmZXR5RmFjdG9yJyk7DQogICAgICAgIGNvbnN0IHNmVWx0ID0gbnVtKCdzYWZldHlGYWN0b3JVbHQnKSB8fCBzZjsNCiAgICAgICAgY29uc3Qga3QgPSBNYXRoLm1heChudW0oJ3N0cmVzc0NvbmNlbnRyYXRpb24nKSwgMSk7DQogICAgICAgIGNvbnN0IHN0cmVzc1R5cGUgPSBlbHMuc3RyZXNzVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQoNCiAgICAgICAgY29uc3Qgc1JlZiA9IGdldFJlZmVyZW5jZVN0cmVuZ3RoKHN0cmVzc1R5cGUpOw0KICAgICAgICBsZXQgc2lnbWFQZXJtID0gc1JlZiAvIHNmOw0KDQogICAgICAgIGNvbnN0IHlpZWxkTVBhID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd5aWVsZFN0cmVuZ3RoJykpOw0KICAgICAgICBjb25zdCB1bHRNUGEgPSB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ3VsdGltYXRlU3RyZW5ndGgnKSk7DQogICAgICAgIGNvbnN0IHBlcm1ZaWVsZCA9IHlpZWxkTVBhIC8gc2Y7DQogICAgICAgIGNvbnN0IHBlcm1VbHQgPSB1bHRNUGEgLyBzZlVsdDsNCg0KICAgICAgICBsZXQgZ292ZXJuaW5nUGVybSA9IHNpZ21hUGVybTsNCiAgICAgICAgbGV0IGdvdmVybmluZ0xhYmVsID0gJ1NlbGVjdGVkIHJlZmVyZW5j\"+\"ZSc7DQogICAgICAgIGlmIChudW0oJ3NhZmV0eUZhY3RvclVsdCcpID4gMCB8fCBlbHMucmVmU3RyZW5ndGhUeXBlLnZhbHVlID09PSAndWx0aW1hdGUnKSB7DQogICAgICAgICAgICBnb3Zlcm5pbmdQZXJtID0gTWF0aC5taW4ocGVybVlpZWxkLCBwZXJtVWx0KTsNCiAgICAgICAgICAgIGdvdmVybmluZ0xhYmVsID0gcGVybVlpZWxkIDw9IHBlcm1VbHQgPyAnWWllbGQtYmFzZWQgKGdvdmVybmluZyknIDogJ1VsdGltYXRlLWJhc2VkIChnb3Zlcm5pbmcpJzsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHRhdVBlcm0gPSBnZXRQZXJtaXNzaWJsZVNoZWFyKHNmKTsNCg0KICAgICAgICBsZXQgc2lnbWFBY3R1YWwgPSAwLCB0YXVBY3R1YWwgPSAwLCBGID0gMCwgViA9IDAsIE0gPSAwOw0KDQogICAgICAgIEYgPSB1LmZvcmNlRnJvbUlucHV0KG51bSgnYXhpYWxMb2FkJykpOw0KICAgICAgICBWID0gdS5mb3JjZUZyb21JbnB1dChudW0oJ3NoZWFyTG9hZCcpKTsNCiAgICAgICAgTSA9IHUubW9tZW50RnJvbUlucHV0KG51bSgnYmVuZGluZ01vbWVudCcpKTsNCiAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KG51bSgnc2hlYXJQbGFuZXMnKSwgMSk7DQoNCiAgICAgICAgaWYgKHN0cmVzc1R5cGUgPT09ICd0ZW5zaW9uJyB8fCBzdHJlc3NUeXBlID09PSAnY29tcHJlc3Npb24nKSB7DQogICAgICAgICAgICBpZiAoZ2VvLmFyZWEgPiAwKSBzaWdtYUFjdHVhbCA9IEYgLyBnZW8uYXJlYTsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJlc3NUeXBlID09PSAnc2hlYXInKSB7DQogICAgICAgICAgICBpZiAoZ2VvLmFyZWEgPiAwKSB0YXVBY3R1YWwgPSBWIC8gKG4gKiBnZW8uYXJlYSk7DQogICAgICAgIH0gZWxzZSBpZiAoc3RyZXNzVHlwZSA9PT0gJ2JlbmRpbmcnKSB7DQogICAgICAgICAgICBpZiAoZ2VvLnNlY3Rpb25Nb2QgPiAwKSB7DQogICAgICAgICAgICAgICAgc2lnbWFBY3R1YWwgPSBNIC8gZ2VvLnNlY3Rpb25Nb2Q7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGdlby5jID4gMCAmJiBnZW8uSSA+IDApIHsNCiAgICAgICAgICAgICAgICBzaWdtYUFjdHVhbCA9IE0gKiBnZW8uYyAvIGdlby5JOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKHN0cmVzc1R5cGUgPT09ICdjb21iaW5lZCcgfHwgY2FsY01vZGUgPT09ICdjb21iaW5lZCcpIHsNCiAgICAgICAgICAgIGlmIChnZW8uYXJlYSA+IDApIHsNCiAgICAgICAgICAgICAgICBzaWdtYUFjdHVhbCA9IEYgLyBnZW8uYXJlYTsNCiAgICAgICAgICAgICAgICB0YXVBY3R1YWwgPSBWIC8gKG4gKiBnZW8uYXJlYSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBzaWdtYUxvY2FsID0gc2lnbWFBY3R1YWwgKiBrdDsNCiAgICAgICAgY29uc3QgdGF1TG9jYWwgPSB0YXVBY3R1YWwgKiBrdDsNCiAgICAgICAgY29uc3Qgc2lnbWFWTSA9IE1hdGguc3FydChzaWdtYUFjdHVhbCAqIHNpZ21hQWN0dWFsICsgMyAqIHRhdUFjdHVhbCAqIHRhdUFjdHVh\"+\"bCk7DQogICAgICAgIGNvbnN0IHNpZ21hVk1Mb2NhbCA9IE1hdGguc3FydChzaWdtYUxvY2FsICogc2lnbWFMb2NhbCArIDMgKiB0YXVMb2NhbCAqIHRhdUxvY2FsKTsNCg0KICAgICAgICBsZXQgZXZhbFN0cmVzcyA9IHNpZ21hQWN0dWFsOw0KICAgICAgICBsZXQgZXZhbFBlcm0gPSBzaWdtYVBlcm07DQogICAgICAgIGxldCBldmFsTG9jYWwgPSBzaWdtYUxvY2FsOw0KDQogICAgICAgIGlmIChzdHJlc3NUeXBlID09PSAnc2hlYXInKSB7DQogICAgICAgICAgICBldmFsU3RyZXNzID0gdGF1QWN0dWFsOw0KICAgICAgICAgICAgZXZhbFBlcm0gPSB0YXVQZXJtOw0KICAgICAgICAgICAgZXZhbExvY2FsID0gdGF1TG9jYWw7DQogICAgICAgIH0gZWxzZSBpZiAoc3RyZXNzVHlwZSA9PT0gJ2NvbWJpbmVkJyB8fCBjYWxjTW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgZXZhbFN0cmVzcyA9IHNpZ21hVk07DQogICAgICAgICAgICBldmFsUGVybSA9IHNpZ21hUGVybTsNCiAgICAgICAgICAgIGV2YWxMb2NhbCA9IHNpZ21hVk1Mb2NhbDsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHV0aWxpemF0aW9uID0gZXZhbFBlcm0gPiAwID8gKGV2YWxTdHJlc3MgLyBldmFsUGVybSkgKiAxMDAgOiAwOw0KICAgICAgICBjb25zdCBsb2NhbFV0aWxpemF0aW9uID0gZXZhbFBlcm0gPiAwID8gKGV2YWxMb2NhbCAvIGV2YWxQZXJtKSAqIDEwMCA6IDA7DQogICAgICAgIGNvbnN0IGFjdHVhbEZvUyA9IGV2YWxTdHJlc3MgPiAwID8gc1JlZiAvIGV2YWxTdHJlc3MgOiBJbmZpbml0eTsNCiAgICAgICAgY29uc3QgbWFyZ2luT2ZTYWZldHkgPSBldmFsU3RyZXNzID4gMCA\/IGV2YWxQZXJtIC8gZXZhbFN0cmVzcyAtIDEgOiBJbmZpbml0eTsNCiAgICAgICAgY29uc3Qgc2FmZXR5TWFyZ2luID0gZXZhbFBlcm0gLSBldmFsU3RyZXNzOw0KICAgICAgICBjb25zdCBzdHJlc3NSZXNlcnZlUmF0aW8gPSBldmFsU3RyZXNzID4gMCA\/IGV2YWxQZXJtIC8gZXZhbFN0cmVzcyA6IEluZmluaXR5Ow0KICAgICAgICBjb25zdCBtYXhMb2FkID0gc2lnbWFQZXJtICogZ2VvLmFyZWE7DQogICAgICAgIGNvbnN0IHJlcXVpcmVkQXJlYSA9IHNpZ21hUGVybSA+IDAgPyBGIC8gc2lnbWFQZXJtIDogMDsNCiAgICAgICAgY29uc3QgcmVxdWlyZWREaWEgPSBzaWdtYVBlcm0gPiAwICYmIEYgPiAwID8gTWF0aC5zcXJ0KDQgKiBGIC8gKE1hdGguUEkgKiBzaWdtYVBlcm0pKSA6IDA7DQogICAgICAgIGNvbnN0IGxvYWRSZXNlcnZlID0gbWF4TG9hZCAtIEY7DQoNCiAgICAgICAgbGV0IGRlc2lnblN0YXR1cyA9ICdTYWZlJzsNCiAgICAgICAgbGV0IHN0YXR1c0NsYXNzID0gJ3NhZmUnOw0KDQogICAgICAgIGNvbnN0IGNoZWNrU3RyZXNzID0ga3QgPiAxID8gZXZhbExvY2FsIDogZXZhbFN0cmVzczsNCiAgICAgICAgY29uc3QgY2hlY2tVdGlsID0ga3QgPiAxID8gbG9jYWxVdGlsaXphdGlvbiA6IHV0aWxpemF0aW9uOw0KDQogICAgICAgIGlmIChjaGVja1N0cmVz\"+\"cyA+IGV2YWxQZXJtIHx8IGNoZWNrVXRpbCA+IDEwMCkgew0KICAgICAgICAgICAgZGVzaWduU3RhdHVzID0gJ1Vuc2FmZSc7DQogICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICd1bnNhZmUnOw0KICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgbXNnOiAnV29ya2luZyBzdHJlc3MgZXhjZWVkcyBwZXJtaXNzaWJsZSBzdHJlc3MuIERlc2lnbiBkb2VzIG5vdCBtZWV0IHNhZmV0eSByZXF1aXJlbWVudHMuJyB9KTsNCiAgICAgICAgfSBlbHNlIGlmIChjaGVja1V0aWwgPj0gODApIHsNCiAgICAgICAgICAgIGRlc2lnblN0YXR1cyA9ICdDYXV0aW9uJzsNCiAgICAgICAgICAgIHN0YXR1c0NsYXNzID0gJ2NhdXRpb24nOw0KICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ3dhcm4nLCBtc2c6ICdIaWdoIHN0cmVzcyB1dGlsaXphdGlvbiAoJyArIGZtdChjaGVja1V0aWwsIDEpICsgJyUpLiBXb3JraW5nIHN0cmVzcyBpcyBjbG9zZSB0byBwZXJtaXNzaWJsZSBsaW1pdC4nIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGt0ID4gMSAmJiBldmFsTG9jYWwgPiBldmFsUGVybSkgew0KICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgbXNnOiAnTG9jYWwgc3RyZXNzIGV4Y2VlZHMgcGVybWlzc2libGUgc3RyZXNzIGR1ZSB0byBzdHJlc3MgY29uY2VudHJhdGlvbiBmYWN0b3IgKEt0ID0gJyArIGZtdChrdCwgMikgKyAnKS4nIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgc2hvd1Jlc3VsdHNQYW5lbCgpOw0KICAgICAgICBkaXNwbGF5UmVzdWx0cyh7DQogICAgICAgICAgICB1OiB1LCBzUmVmOiBzUmVmLCBzZjogc2YsIHNpZ21hUGVybTogc2lnbWFQZXJtLCB0YXVQZXJtOiB0YXVQZXJtLA0KICAgICAgICAgICAgcGVybVlpZWxkOiBwZXJtWWllbGQsIHBlcm1VbHQ6IHBlcm1VbHQsIGdvdmVybmluZ1Blcm06IGdvdmVybmluZ1Blcm0sIGdvdmVybmluZ0xhYmVsOiBnb3Zlcm5pbmdMYWJlbCwNCiAgICAgICAgICAgIHNpZ21hQWN0dWFsOiBzaWdtYUFjdHVhbCwgdGF1QWN0dWFsOiB0YXVBY3R1YWwsIHNpZ21hTG9jYWw6IHNpZ21hTG9jYWwsIHRhdUxvY2FsOiB0YXVMb2NhbCwNCiAgICAgICAgICAgIHNpZ21hVk06IHNpZ21hVk0sIHNpZ21hVk1Mb2NhbDogc2lnbWFWTUxvY2FsLCBtYXhMb2FkOiBtYXhMb2FkLCByZXF1aXJlZEFyZWE6IHJlcXVpcmVkQXJlYSwNCiAgICAgICAgICAgIHJlcXVpcmVkRGlhOiByZXF1aXJlZERpYSwgYWN0dWFsRm9TOiBhY3R1YWxGb1MsIHV0aWxpemF0aW9uOiB1dGlsaXphdGlvbiwgc2FmZXR5TWFyZ2luOiBzYWZldHlNYXJnaW4sDQogICAgICAgICAgICBsb2FkUmVzZXJ2ZTogbG9hZFJlc2VydmUsIG1hcmdpbk9mU2FmZXR5OiBtYXJnaW5PZlNhZmV0eSwgc3RyZXNzUmVzZXJ2ZVJhdGlvOiBzdHJlc3NSZXNlcnZlUmF0aW8sDQogICAgICAgICAgICBkZXNpZ25TdGF0dXM6IGRlc2ln\"+\"blN0YXR1cywgc3RhdHVzQ2xhc3M6IHN0YXR1c0NsYXNzLCBnZW86IGdlbywgRjogRiwNCiAgICAgICAgICAgIGV2YWxTdHJlc3M6IGV2YWxTdHJlc3MsIGV2YWxQZXJtOiBldmFsUGVybSwgZXZhbExvY2FsOiBldmFsTG9jYWwsIGNoZWNrVXRpbDogY2hlY2tVdGlsLCBrdDoga3QNCiAgICAgICAgfSk7DQoNCiAgICAgICAgc2hvd1dhcm5pbmdzKHZhbGlkYXRpb24ud2FybmluZ3MpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRpc3BsYXlSZXN1bHRzKHIpIHsNCiAgICAgICAgY29uc3QgdSA9IHIudTsNCiAgICAgICAgY29uc3Qgc3QgPSBlbHMuc3RyZXNzVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IGt0ID0gci5rdDsNCiAgICAgICAgY29uc3QgaGFzV29ya2luZ1N0cmVzcyA9IHIuZXZhbFN0cmVzcyA+IDA7DQogICAgICAgIGNvbnN0IGlzU2hlYXIgPSBzdCA9PT0gJ3NoZWFyJzsNCiAgICAgICAgY29uc3QgaXNDb21iaW5lZCA9IHN0ID09PSAnY29tYmluZWQnIHx8IGNhbGNNb2RlID09PSAnY29tYmluZWQnOw0KDQogICAgICAgIGVscy5yZXNSZWZTdHJlbmd0aC50ZXh0Q29udGVudCA9IGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNSZWYpKSArICcgJyArIHUuc3RyZXNzOw0KICAgICAgICBlbHMucmVzU0YudGV4dENvbnRlbnQgPSBmbXQoci5zZiwgMik7DQogICAgICAgIGVscy5yZXNQZXJtTm9ybWFsLnRleHRDb250ZW50ID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIuc2lnbWFQZXJtKSkgKyAnICcgKyB1LnN0cmVzczsNCg0KICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtUGVybVlpZWxkJywgZWxzLnJlc1Blcm1ZaWVsZCwgZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIucGVybVlpZWxkKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1QZXJtVWx0JywgZWxzLnJlc1Blcm1VbHQsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnBlcm1VbHQpKSArICcgJyArIHUuc3RyZXNzKTsNCiAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUdvdmVybmluZycsIGVscy5yZXNHb3Zlcm5pbmcsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLmdvdmVybmluZ1Blcm0pKSArICcgJyArIHUuc3RyZXNzICsgJyAoJyArIHIuZ292ZXJuaW5nTGFiZWwgKyAnKScpOw0KDQogICAgICAgIGlmIChpc1NoZWFyIHx8IGlzQ29tYmluZWQpIHsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1QZXJtU2hlYXInLCBlbHMucmVzUGVybVNoZWFyLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci50YXVQZXJtKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVBlcm1TaGVhcicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGhhc1dvcmtpbmdTdHJlc3MgfHwgY2FsY01vZGUgPT09ICd3b3JraW5nJyB8fCBjYWxjTW9kZSA9PT0gJ2ZhY3Rvck9m\"+\"U2FmZXR5JyB8fCBjYWxjTW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgaWYgKGlzU2hlYXIpIHsNCiAgICAgICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtQWN0dWFsJywgZWxzLnJlc0FjdHVhbFN0cmVzcywgZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIudGF1QWN0dWFsKSkgKyAnICcgKyB1LnN0cmVzcyArICcgKHRhdSknKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDb21iaW5lZCkgew0KICAgICAgICAgICAgICAgIGxldCBhY3R1YWxUZXh0ID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIuc2lnbWFBY3R1YWwpKSArICcgJyArIHUuc3RyZXNzICsgJyAoc2lnbWEpJzsNCiAgICAgICAgICAgICAgICBpZiAoci50YXVBY3R1YWwgPiAwKSBhY3R1YWxUZXh0ICs9ICcsIHRhdT0nICsgZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIudGF1QWN0dWFsKSkgKyAnLCBzaWdtYV92bT0nICsgZm10KHUuc3RyZXNzVG9EaXNwbGF5KHIuc2lnbWFWTSkpOw0KICAgICAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BY3R1YWwnLCBlbHMucmVzQWN0dWFsU3RyZXNzLCBhY3R1YWxUZXh0KTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUFjdHVhbCcsIGVscy5yZXNBY3R1YWxTdHJlc3MsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNpZ21hQWN0dWFsKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChrdCA+IDEpIHsNCiAgICAgICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtTG9jYWwnLCBlbHMucmVzTG9jYWxTdHJlc3MsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLmV2YWxMb2NhbCkpICsgJyAnICsgdS5zdHJlc3MpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbUxvY2FsJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChpc0NvbWJpbmVkKSB7DQogICAgICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVZNJywgZWxzLnJlc1ZNU3RyZXNzLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zaWdtYVZNKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtVk0nKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUFjdHVhbEZvUycsIGVscy5yZXNBY3R1YWxGb1MsIGZtdChyLmFjdHVhbEZvUywgMikpOw0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVV0aWxpemF0aW9uJywgZWxzLnJlc1V0aWxpemF0aW9uLCBmbXQoci51dGlsaXphdGlvbiwgMSkgKyAnICUnKTsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1TYWZldHlNYXJnaW4nLCBlbHMucmVzU2FmZXR5TWFyZ2luLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zYWZldHlNYXJn\"+\"aW4pKSArICcgJyArIHUuc3RyZXNzKTsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1NT1MnLCBlbHMucmVzTU9TLCBmbXQoci5tYXJnaW5PZlNhZmV0eSwgMykpOw0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVJlc2VydmVSYXRpbycsIGVscy5yZXNSZXNlcnZlUmF0aW8sIGZtdChyLnN0cmVzc1Jlc2VydmVSYXRpbywgMykpOw0KICAgICAgICAgICAgZWxzLnJlc1V0aWxpemF0aW9uLmNsYXNzTmFtZSA9ICdwc2MtcmVzdWx0LXZhbHVlICcgKyAoci51dGlsaXphdGlvbiA+PSAxMDAgPyAncHNjLXVuc2FmZScgOiByLnV0aWxpemF0aW9uID49IDgwID8gJ3BzYy1jYXV0aW9uJyA6ICdwc2Mtc2FmZScpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BY3R1YWwnKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtTG9jYWwnKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtVk0nKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtQWN0dWFsRm9TJyk7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVV0aWxpemF0aW9uJyk7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVNhZmV0eU1hcmdpbicpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1NT1MnKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtUmVzZXJ2ZVJhdGlvJyk7DQogICAgICAgIH0NCg0KICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtTWF4TG9hZCcsIGVscy5yZXNNYXhMb2FkLCBmbXQodS5mb3JjZVRvRGlzcGxheShyLm1heExvYWQpLCAyKSArICcgJyArIHUuZm9yY2UpOw0KDQogICAgICAgIGlmIChyLnJlcXVpcmVkQXJlYSA+IDAgJiYgKG51bSgnYXhpYWxMb2FkJykgPiAwIHx8IGNhbGNNb2RlID09PSAncmVxdWlyZWRBcmVhJykpIHsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1SZXF1aXJlZEFyZWEnLCBlbHMucmVzUmVxdWlyZWRBcmVhLCBmbXQodS5hcmVhVG9EaXNwbGF5KHIucmVxdWlyZWRBcmVhKSwgMikgKyAnICcgKyB1LmFyZWEpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1SZXF1aXJlZEFyZWEnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChyLnJlcXVpcmVkRGlhID4gMCAmJiAoY2FsY01vZGUgPT09ICdyZXF1aXJlZERpYW1ldGVyJyB8fCBudW0oJ2F4aWFsTG9hZCcpID4gMCkpIHsNCiAgICAgICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1SZXF1aXJlZERpYScsIGVscy5yZXNSZXF1aXJlZERpYSwgZm10KHUubGVuZ3RoVG9EaXNwbGF5KHIucmVxdWlyZWREaWEpLCAyKSArICcgJyArIHUubGVuZ3RoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtUmVxdWlyZWREaWEnKTsNCiAgICAgICAgfQ0KDQogICAg\"+\"ICAgIGlmIChudW0oJ2F4aWFsTG9hZCcpID4gMCAmJiBoYXNXb3JraW5nU3RyZXNzKSB7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtTG9hZFJlc2VydmUnLCBlbHMucmVzTG9hZFJlc2VydmUsIGZtdCh1LmZvcmNlVG9EaXNwbGF5KHIubG9hZFJlc2VydmUpLCAyKSArICcgJyArIHUuZm9yY2UpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1Mb2FkUmVzZXJ2ZScpOw0KICAgICAgICB9DQoNCiAgICAgICAgZWxzLnJlc0Rlc2lnblN0YXR1cy50ZXh0Q29udGVudCA9IHIuZGVzaWduU3RhdHVzOw0KICAgICAgICBlbHMucmVzRGVzaWduU3RhdHVzLmNsYXNzTmFtZSA9ICdwc2MtcmVzdWx0LXZhbHVlIHBzYy0nICsgci5zdGF0dXNDbGFzczsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZXRSZXN1bHRJdGVtKGl0ZW1JZCwgdmFsdWVFbCwgdGV4dCkgew0KICAgICAgICBjb25zdCBpdGVtID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjcHNjLScgKyBpdGVtSWQpOw0KICAgICAgICBpZiAoaXRlbSkgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdwc2MtaGlkZGVuJyk7DQogICAgICAgIHZhbHVlRWwudGV4dENvbnRlbnQgPSB0ZXh0Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGhpZGVSZXN1bHRJdGVtKGl0ZW1JZCkgew0KICAgICAgICBjb25zdCBpdGVtID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjcHNjLScgKyBpdGVtSWQpOw0KICAgICAgICBpZiAoaXRlbSkgaXRlbS5jbGFzc0xpc3QuYWRkKCdwc2MtaGlkZGVuJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2hvd1dhcm5pbmdzKGl0ZW1zKSB7DQogICAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7DQogICAgICAgICAgICBlbHMud2FybmluZ3MuaGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgIGVscy53YXJuaW5ncy5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBlbHMud2FybmluZ3MuaGlkZGVuID0gZmFsc2U7DQogICAgICAgIGVscy53YXJuaW5ncy5pbm5lckhUTUwgPSBpdGVtcy5tYXAoZnVuY3Rpb24gKHcpIHsNCiAgICAgICAgICAgIGNvbnN0IGNscyA9IHcudHlwZSA9PT0gJ2Vycm9yJyA\/ICdwc2Mtd2FybmluZy1lcnJvcicgOiB3LnR5cGUgPT09ICd3YXJuJyA\/ICdwc2Mtd2FybmluZy13YXJuJyA6ICdwc2Mtd2FybmluZy1pbmZvJzsNCiAgICAgICAgICAgIGNvbnN0IGljb24gPSB3LnR5cGUgPT09ICdlcnJvcicgPyAnIScgOiB3LnR5cGUgPT09ICd3YXJuJyA\/ICcqJyA6ICdpJzsNCiAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icHNjLXdhcm5pbmcgJyArIGNscyArICciPjxzcGFuPicgKyBpY29uICsgJzwvc3Bhbj48c3Bhbj4nICsgdy5tc2cgKyAnPC9zcGFuPjwvZGl2Pic7DQogICAgICAgIH0pLmpvaW4oJycpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNob3dSZXN1bHRzUGFuZWwoKSB7DQogICAgICAgIGlmIChlbHMucmVzdWx0\"+\"c1BhbmVsKSBlbHMucmVzdWx0c1BhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ3BzYy1oaWRkZW4nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb252ZXJ0VmFsdWVzT25Vbml0Q2hhbmdlKG5ld1N5c3RlbSkgew0KICAgICAgICBjb25zdCBvbGRTeXN0ZW0gPSBuZXdTeXN0ZW0gPT09ICdtZXRyaWMnID8gJ2ltcGVyaWFsJyA6ICdtZXRyaWMnOw0KICAgICAgICBjb25zdCBvbGRVID0gVU5JVFNbb2xkU3lzdGVtXTsNCiAgICAgICAgY29uc3QgbmV3VSA9IFVOSVRTW25ld1N5c3RlbV07DQoNCiAgICAgICAgWyd5aWVsZFN0cmVuZ3RoJywgJ3VsdGltYXRlU3RyZW5ndGgnLCAnY29tcHJlc3NpdmVTdHJlbmd0aCcsICdzaGVhclN0cmVuZ3RoJywgJ2N1c3RvbVN0cmVuZ3RoJ10uZm9yRWFjaChmdW5jdGlvbiAoaWQpIHsNCiAgICAgICAgICAgIGNvbnN0IHYgPSBudW0oaWQpOw0KICAgICAgICAgICAgaWYgKHYgPiAwKSBlbHNbaWRdLnZhbHVlID0gZm10KG5ld1Uuc3RyZXNzVG9EaXNwbGF5KG9sZFUuc3RyZXNzRnJvbUlucHV0KHYpKSwgMik7DQogICAgICAgIH0pOw0KDQogICAgICAgIFsnYXhpYWxMb2FkJywgJ3NoZWFyTG9hZCddLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7DQogICAgICAgICAgICBjb25zdCB2ID0gbnVtKGlkKTsNCiAgICAgICAgICAgIGlmICh2ICE9PSAwKSBlbHNbaWRdLnZhbHVlID0gZm10KG5ld1UuZm9yY2VUb0Rpc3BsYXkob2xkVS5mb3JjZUZyb21JbnB1dCh2KSksIDMpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBbJ2RpYW1ldGVyJywgJ291dGVyRGlhbWV0ZXInLCAnaW5uZXJEaWFtZXRlcicsICd3aWR0aCcsICd0aGlja25lc3MnXS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkgew0KICAgICAgICAgICAgY29uc3QgdiA9IG51bShpZCk7DQogICAgICAgICAgICBpZiAodiA+IDApIGVsc1tpZF0udmFsdWUgPSBmbXQobmV3VS5sZW5ndGhUb0Rpc3BsYXkob2xkVS5sZW5ndGhGcm9tSW5wdXQodikpLCAzKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgaWYgKG51bSgnY3VzdG9tQXJlYScpID4gMCkgew0KICAgICAgICAgICAgZWxzLmN1c3RvbUFyZWEudmFsdWUgPSBmbXQobmV3VS5hcmVhVG9EaXNwbGF5KG9sZFUuYXJlYUZyb21JbnB1dChudW0oJ2N1c3RvbUFyZWEnKSkpLCAyKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7DQogICAgICAgIGVscy5jYWxjdWxhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxjdWxhdGUpOw0KDQogICAgICAgIGVscy5tYXRlcmlhbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBhcHBseU1hdGVyaWFsUHJlc2V0KTsNCg0KICAgICAgICBlbHMudW5pdFN5c3RlbS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBjb252ZXJ0VmFsdWVzT25Vbml0Q2hhbmdlKGVscy51bml0U3lzdGVtLnZhbHVlKTsNCiAgICAgICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgfSk7DQoNCiAg\"+\"ICAgICAgWydjYWxjTW9kZScsICdzdHJlc3NUeXBlJywgJ3NlY3Rpb25UeXBlJywgJ3JlZlN0cmVuZ3RoVHlwZSddLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7DQogICAgICAgICAgICBlbHNbaWRdLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5jYWxjTW9kZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoZWxzLmNhbGNNb2RlLnZhbHVlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICAgICAgZWxzLnN0cmVzc1R5cGUudmFsdWUgPSAnY29tYmluZWQnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGluaXQoKSB7DQogICAgICAgIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHNjLWNhbGN1bGF0b3InKTsNCiAgICAgICAgaWYgKCFyb290IHx8IHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXBzYy1yZWFkeScpID09PSAnMScpIHJldHVybjsNCiAgICAgICAgaWYgKCFjYWNoZUVsZW1lbnRzKCkpIHJldHVybjsNCiAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHNjLXJlYWR5JywgJzEnKTsNCiAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICBiaW5kRXZlbnRzKCk7DQogICAgfQ0KDQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgew0KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdCk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgaW5pdCgpOw0KICAgIH0NCg0KICAgIHdpbmRvdy5QU0NJbml0ID0gaW5pdDsNCn0pKCk7DQo=\";\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 Permissible Stress Calculator is a practical engineering tool for determining the maximum safe working stress of a material based on its strength and selected&#8230;<\/p>","protected":false},"author":2,"featured_media":24795,"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,8666,8536,8663,8665],"class_list":["post-24793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-allowable-stress","tag-permissible-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\/Permissible-Stress-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24793"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24793\/revisions"}],"predecessor-version":[{"id":24794,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24793\/revisions\/24794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24795"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24793"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}