{"id":24807,"date":"2026-09-02T07:36:44","date_gmt":"2026-09-02T07:36:44","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24807"},"modified":"2026-09-02T07:36:47","modified_gmt":"2026-09-02T07:36:47","slug":"material-stiffness-comparison-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/material-stiffness-comparison-calculator\/","title":{"rendered":"Material Stiffness Comparison Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Material Stiffness Comparison Calculator<\/strong> is a practical engineering tool designed to compare the stiffness performance of different materials using Young\u2019s modulus, shear modulus, density, geometry, and loading conditions. It helps engineers evaluate axial stiffness, bending stiffness, torsional stiffness, deformation, and stiffness-to-weight performance for metals, plastics, and composites. The Material Stiffness Comparison Calculator is useful for material selection, lightweight design, structural analysis, and mechanical engineering applications where stiffness and deformation are critical.<\/p>\n\n\n\n<!-- Material Stiffness Comparison Calculator - WordPress Embed -->\n<!-- Paste into Custom HTML block. All CSS\/JS scoped to #msc-calculator \u2014 will not affect other page content. -->\n<style>\n\/**\n * Material Stiffness Comparison Calculator \u2014 WordPress-safe scoped styles\n * Every rule is scoped under #msc-calculator.\n * Will NOT affect theme header, footer, sidebar, menus, or other page content.\n * No html, body, :root, or unscoped universal selectors.\n *\/\n\n.entry-content #msc-calculator.msc-root,\n.wp-block-html #msc-calculator.msc-root,\n.elementor-widget-container #msc-calculator.msc-root,\n#msc-calculator.msc-root,\n.entry-content #msc-calculator.msc-root *,\n.wp-block-html #msc-calculator.msc-root *,\n.elementor-widget-container #msc-calculator.msc-root *,\n#msc-calculator.msc-root *,\n.entry-content #msc-calculator.msc-root *::before,\n.wp-block-html #msc-calculator.msc-root *::before,\n.elementor-widget-container #msc-calculator.msc-root *::before,\n#msc-calculator.msc-root *::before,\n.entry-content #msc-calculator.msc-root *::after,\n.wp-block-html #msc-calculator.msc-root *::after,\n.elementor-widget-container #msc-calculator.msc-root *::after,\n#msc-calculator.msc-root *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #msc-calculator.msc-root,\n.wp-block-html #msc-calculator.msc-root,\n.elementor-widget-container #msc-calculator.msc-root,\n#msc-calculator.msc-root {\n    --msc-primary: #1a5276;\n    --msc-primary-light: #2471a3;\n    --msc-primary-dark: #0e3d5c;\n    --msc-accent: #2980b9;\n    --msc-safe: #27ae60;\n    --msc-caution: #f39c12;\n    --msc-bg: #ffffff;\n    --msc-card-bg: #ffffff;\n    --msc-text: #2c3e50;\n    --msc-text-muted: #7f8c8d;\n    --msc-border: #dce4ec;\n    --msc-shadow: 0 2px 8px rgba(26, 82, 118, 0.08);\n    --msc-radius: 8px;\n    --msc-radius-lg: 12px;\n    --msc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --msc-mono: Consolas, 'Courier New', monospace;\n\n    all: revert;\n    box-sizing: border-box !important;\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    font-family: var(--msc-font) !important;\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: var(--msc-text) !important;\n    background: transparent !important;\n    border: none !important;\n    border-radius: 0 !important;\n    padding: 0 !important;\n    margin: 0 auto !important;\n    text-align: left !important;\n    position: relative !important;\n    isolation: isolate !important;\n    contain: layout style paint !important;\n    float: none !important;\n    clear: both !important;\n    z-index: auto !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    box-shadow: none !important;\n}\n\n.entry-content #msc-calculator.msc-root .msc-wrap,\n.wp-block-html #msc-calculator.msc-root .msc-wrap,\n.elementor-widget-container #msc-calculator.msc-root .msc-wrap,\n#msc-calculator.msc-root .msc-wrap {\n    background: var(--msc-bg) !important;\n    border-radius: var(--msc-radius-lg) !important;\n    padding: 8px !important;\n}\n\n#msc-calculator.msc-root [hidden] {\n    display: none !important;\n}\n\n#msc-calculator.msc-root h1,\n#msc-calculator.msc-root h2,\n#msc-calculator.msc-root h3,\n#msc-calculator.msc-root h4,\n#msc-calculator.msc-root p,\n#msc-calculator.msc-root ul,\n#msc-calculator.msc-root ol,\n#msc-calculator.msc-root li,\n#msc-calculator.msc-root section,\n#msc-calculator.msc-root div,\n#msc-calculator.msc-root span,\n#msc-calculator.msc-root strong,\n#msc-calculator.msc-root em,\n#msc-calculator.msc-root table,\n#msc-calculator.msc-root thead,\n#msc-calculator.msc-root tbody,\n#msc-calculator.msc-root tr,\n#msc-calculator.msc-root th,\n#msc-calculator.msc-root td {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    box-shadow: none !important;\n    font-family: inherit !important;\n    font-style: inherit !important;\n    line-height: inherit !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n    float: none !important;\n    background: none !important;\n}\n\n#msc-calculator.msc-root button,\n#msc-calculator.msc-root input,\n#msc-calculator.msc-root select,\n#msc-calculator.msc-root label,\n#msc-calculator.msc-root legend {\n    font-family: var(--msc-font) !important;\n    color: inherit !important;\n    margin: 0 !important;\n    max-width: none !important;\n    min-width: 0 !important;\n    float: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    box-shadow: none !important;\n}\n\n#msc-calculator.msc-root ul,\n#msc-calculator.msc-root ol {\n    list-style: none !important;\n}\n\n#msc-calculator.msc-root button {\n    cursor: pointer !important;\n    background: none !important;\n    border: none !important;\n    padding: 0 !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n}\n\n#msc-calculator.msc-root svg {\n    display: block !important;\n    max-width: 100% !important;\n    height: auto !important;\n    float: none !important;\n}\n\n#msc-calculator.msc-root *,\n#msc-calculator.msc-root *::before,\n#msc-calculator.msc-root *::after {\n    box-sizing: border-box !important;\n}\n\n#msc-calculator.msc-root .msc-wrap {\n    max-width: 1200px !important;\n    margin: 0 auto !important;\n    padding: 12px 8px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 24px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-input,\n#msc-calculator.msc-root .msc-output {\n    width: 100% !important;\n    display: block !important;\n    float: none !important;\n}\n\n#msc-calculator.msc-root .msc-card {\n    display: block !important;\n    background: var(--msc-card-bg) !important;\n    border-radius: var(--msc-radius-lg) !important;\n    padding: 20px 24px !important;\n    box-shadow: var(--msc-shadow) !important;\n    border: 1px solid var(--msc-border) !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#msc-calculator.msc-root .msc-section + .msc-section {\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--msc-border) !important;\n}\n\n#msc-calculator.msc-root .msc-section-head {\n    display: flex !important;\n    justify-content: space-between !important;\n    align-items: center !important;\n    flex-wrap: wrap !important;\n    gap: 10px !important;\n    margin-bottom: 14px !important;\n}\n\n#msc-calculator.msc-root .msc-section-title {\n    font-size: 1.05rem !important;\n    color: var(--msc-primary) !important;\n    font-weight: 600 !important;\n    padding-bottom: 6px !important;\n    border-bottom: 2px solid var(--msc-border) !important;\n}\n\n#msc-calculator.msc-root .msc-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 14px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-field {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 4px !important;\n    min-width: 0 !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-field.msc-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n#msc-calculator.msc-root .msc-field > label {\n    font-size: 0.82rem !important;\n    font-weight: 600 !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 4px !important;\n    margin: 0 0 4px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-field label input[type=\"checkbox\"],\n#msc-calculator.msc-root .msc-field label input[type=\"radio\"] {\n    width: auto !important;\n    min-height: 0 !important;\n    margin: 0 6px 0 0 !important;\n    accent-color: var(--msc-primary);\n}\n\n#msc-calculator.msc-root .msc-field input,\n#msc-calculator.msc-root .msc-field select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 9px 12px !important;\n    border: 1px solid var(--msc-border) !important;\n    border-radius: var(--msc-radius) !important;\n    font-size: 0.95rem !important;\n    font-family: var(--msc-font) !important;\n    background: #fafbfc !important;\n    color: var(--msc-text) !important;\n    line-height: 1.4 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    outline: none !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n}\n\n#msc-calculator.msc-root .msc-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#msc-calculator.msc-root .msc-field input:focus,\n#msc-calculator.msc-root .msc-field select:focus {\n    border-color: var(--msc-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#msc-calculator.msc-root .msc-field input::placeholder {\n    color: #b0bec5 !important;\n    opacity: 1 !important;\n}\n\n#msc-calculator.msc-root .msc-hidden {\n    display: none !important;\n}\n\n#msc-calculator.msc-root .msc-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(--msc-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#msc-calculator.msc-root .msc-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(--msc-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: 260px;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity 0.2s;\n    z-index: 100;\n    line-height: 1.4;\n}\n\n#msc-calculator.msc-root .msc-tip:hover::after {\n    opacity: 1;\n}\n\n#msc-calculator.msc-root .msc-materials {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 14px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-material-card {\n    border: 1px solid var(--msc-border) !important;\n    border-radius: var(--msc-radius) !important;\n    padding: 14px 16px !important;\n    background: #fafcfe !important;\n    position: relative !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-material-card.msc-ref {\n    border-color: var(--msc-accent) !important;\n    box-shadow: 0 0 0 2px rgba(41, 128, 185, 0.15) !important;\n}\n\n#msc-calculator.msc-root .msc-material-header {\n    display: flex !important;\n    justify-content: space-between !important;\n    align-items: center !important;\n    flex-wrap: wrap !important;\n    gap: 8px !important;\n    margin-bottom: 12px !important;\n}\n\n#msc-calculator.msc-root .msc-material-header h4 {\n    font-size: 0.95rem !important;\n    color: var(--msc-primary) !important;\n    font-weight: 600 !important;\n}\n\n#msc-calculator.msc-root .msc-material-controls {\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    flex-wrap: wrap !important;\n}\n\n#msc-calculator.msc-root .msc-ref-label {\n    font-size: 0.78rem !important;\n    color: var(--msc-text-muted) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 4px !important;\n}\n\n#msc-calculator.msc-root .msc-btn-icon {\n    padding: 4px 8px !important;\n    font-size: 0.78rem !important;\n    color: var(--msc-text-muted) !important;\n    border: 1px solid var(--msc-border) !important;\n    border-radius: 4px !important;\n    background: #fff !important;\n}\n\n#msc-calculator.msc-root .msc-btn-icon:hover {\n    color: #c0392b !important;\n    border-color: #c0392b !important;\n}\n\n#msc-calculator.msc-root .msc-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(--msc-border) !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-btn {\n    display: inline-block !important;\n    width: auto !important;\n    max-width: none !important;\n    padding: 10px 28px !important;\n    min-width: 140px !important;\n    border: none !important;\n    border-radius: var(--msc-radius) !important;\n    font-size: 1rem !important;\n    font-weight: 600 !important;\n    text-align: center !important;\n    text-decoration: none !important;\n    cursor: pointer !important;\n    font-family: var(--msc-font) !important;\n    line-height: 1.4 !important;\n}\n\n#msc-calculator.msc-root .msc-btn-sm {\n    min-width: auto !important;\n    padding: 6px 14px !important;\n    font-size: 0.85rem !important;\n}\n\n#msc-calculator.msc-root .msc-btn-primary {\n    background: linear-gradient(135deg, var(--msc-primary) 0%, var(--msc-primary-light) 100%) !important;\n    color: #fff !important;\n    box-shadow: 0 3px 12px rgba(26, 82, 118, 0.3) !important;\n}\n\n#msc-calculator.msc-root .msc-btn-primary:hover {\n    background: linear-gradient(135deg, var(--msc-primary-light) 0%, var(--msc-primary) 100%) !important;\n    color: #fff !important;\n    transform: translateY(-1px);\n}\n\n#msc-calculator.msc-root .msc-warnings {\n    background: #fef9e7 !important;\n    border: 1px solid #f9e79f !important;\n    border-radius: var(--msc-radius) !important;\n    padding: 12px 16px !important;\n    margin-bottom: 16px !important;\n    font-size: 0.88rem !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-warnings ul {\n    list-style: disc !important;\n    padding-left: 20px !important;\n}\n\n#msc-calculator.msc-root .msc-warnings li {\n    margin-bottom: 4px !important;\n    list-style: disc !important;\n    color: var(--msc-text) !important;\n}\n\n#msc-calculator.msc-root .msc-classifications {\n    display: grid !important;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) !important;\n    gap: 12px !important;\n    margin-bottom: 20px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-class-card {\n    padding: 12px 14px !important;\n    border-radius: var(--msc-radius) !important;\n    border: 1px solid var(--msc-border) !important;\n    background: #f8fbfd !important;\n}\n\n#msc-calculator.msc-root .msc-class-card .msc-class-label {\n    font-size: 0.75rem !important;\n    color: var(--msc-text-muted) !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n    margin-bottom: 4px !important;\n    display: block !important;\n}\n\n#msc-calculator.msc-root .msc-class-card .msc-class-value {\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    color: var(--msc-primary) !important;\n}\n\n#msc-calculator.msc-root .msc-results > h2 {\n    font-size: 1.1rem !important;\n    color: var(--msc-primary) !important;\n    margin: 0 0 14px !important;\n    padding: 0 0 8px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--msc-border) !important;\n    background: none !important;\n}\n\n#msc-calculator.msc-root .msc-table-wrap {\n    overflow-x: auto !important;\n    margin-bottom: 24px !important;\n    border: 1px solid var(--msc-border) !important;\n    border-radius: var(--msc-radius) !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-table {\n    width: 100% !important;\n    border-collapse: collapse !important;\n    font-size: 0.85rem !important;\n    min-width: 600px !important;\n    border-spacing: 0 !important;\n}\n\n#msc-calculator.msc-root .msc-table th,\n#msc-calculator.msc-root .msc-table td {\n    padding: 10px 12px !important;\n    border-bottom: 1px solid var(--msc-border) !important;\n    text-align: left !important;\n    vertical-align: top !important;\n}\n\n#msc-calculator.msc-root .msc-table th {\n    background: #eef4f8 !important;\n    color: var(--msc-primary) !important;\n    font-weight: 600 !important;\n    white-space: nowrap !important;\n}\n\n#msc-calculator.msc-root .msc-table td:first-child {\n    font-weight: 600 !important;\n    color: var(--msc-text-muted) !important;\n    background: #fafbfc !important;\n    white-space: nowrap !important;\n}\n\n#msc-calculator.msc-root .msc-table tr.msc-highlight td {\n    background: #f0f8ff !important;\n}\n\n#msc-calculator.msc-root .msc-table .msc-best {\n    color: var(--msc-safe) !important;\n    font-weight: 700 !important;\n}\n\n#msc-calculator.msc-root .msc-charts {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 16px !important;\n    margin-bottom: 24px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-chart-card {\n    border: 1px solid var(--msc-border) !important;\n    border-radius: var(--msc-radius) !important;\n    padding: 14px !important;\n    background: #fafcfe !important;\n}\n\n#msc-calculator.msc-root .msc-chart-card.msc-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n#msc-calculator.msc-root .msc-chart-card h4 {\n    font-size: 0.88rem !important;\n    color: var(--msc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#msc-calculator.msc-root .msc-chart {\n    min-height: 180px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-bar-row {\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    margin-bottom: 8px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-bar-label {\n    width: 90px !important;\n    font-size: 0.75rem !important;\n    text-overflow: ellipsis !important;\n    overflow: hidden !important;\n    white-space: nowrap !important;\n    flex-shrink: 0 !important;\n}\n\n#msc-calculator.msc-root .msc-bar-track {\n    flex: 1 !important;\n    height: 22px !important;\n    background: #ecf0f1 !important;\n    border-radius: 4px !important;\n    overflow: hidden !important;\n    position: relative !important;\n}\n\n#msc-calculator.msc-root .msc-bar-fill {\n    height: 100% !important;\n    border-radius: 4px !important;\n    transition: width 0.4s ease !important;\n    min-width: 2px !important;\n}\n\n#msc-calculator.msc-root .msc-bar-value {\n    width: 70px !important;\n    font-size: 0.72rem !important;\n    font-family: var(--msc-mono) !important;\n    text-align: right !important;\n    flex-shrink: 0 !important;\n}\n\n#msc-calculator.msc-root .msc-viz-row {\n    display: grid !important;\n    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)) !important;\n    gap: 16px !important;\n    margin-bottom: 24px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-viz-card {\n    border: 1px solid var(--msc-border) !important;\n    border-radius: var(--msc-radius) !important;\n    padding: 14px !important;\n    background: #fafcfe !important;\n}\n\n#msc-calculator.msc-root .msc-viz-card h4 {\n    font-size: 0.88rem !important;\n    color: var(--msc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#msc-calculator.msc-root .msc-illustration {\n    display: flex !important;\n    flex-direction: column !important;\n    justify-content: center !important;\n    min-height: 120px !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-illustration svg {\n    max-width: 100% !important;\n    height: auto !important;\n}\n\n#msc-calculator.msc-root .msc-recommendations {\n    margin-bottom: 20px !important;\n    padding: 14px 16px !important;\n    background: #f4f8fb !important;\n    border-radius: var(--msc-radius) !important;\n    border: 1px solid var(--msc-border) !important;\n    width: 100% !important;\n}\n\n#msc-calculator.msc-root .msc-recommendations h4 {\n    font-size: 0.95rem !important;\n    color: var(--msc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#msc-calculator.msc-root .msc-recommendations ul {\n    list-style: disc !important;\n    padding-left: 20px !important;\n}\n\n#msc-calculator.msc-root .msc-recommendations li {\n    font-size: 0.88rem !important;\n    margin-bottom: 6px !important;\n    list-style: disc !important;\n    color: var(--msc-text) !important;\n    line-height: 1.5 !important;\n}\n\n@media (max-width: 768px) {\n    #msc-calculator.msc-root .msc-grid,\n    #msc-calculator.msc-root .msc-charts,\n    #msc-calculator.msc-root .msc-viz-row,\n    #msc-calculator.msc-root .msc-classifications {\n        grid-template-columns: 1fr !important;\n    }\n\n    #msc-calculator.msc-root .msc-card {\n        padding: 16px !important;\n    }\n\n    #msc-calculator.msc-root .msc-bar-label {\n        width: 70px !important;\n    }\n}\n\n@media (max-width: 480px) {\n    #msc-calculator.msc-root .msc-btn {\n        width: 100% !important;\n    }\n}\n\n<\/style>\n\n<div id=\"msc-calculator\" class=\"msc-root\">\n    <div class=\"msc-wrap\">\n        <div class=\"msc-layout\">\n            <div class=\"msc-input\">\n                <section class=\"msc-card msc-inputs\">\n                    <div class=\"msc-section\">\n                        <h3 class=\"msc-section-title\">General Settings<\/h3>\n                        <div class=\"msc-grid\">\n                            <div class=\"msc-field\">\n                                <label for=\"msc-unitSystem\">Unit System<\/label>\n                                <select id=\"msc-unitSystem\">\n                                    <option value=\"metric\" selected>Metric (GPa, kg\/m\u00b3, mm, kN)<\/option>\n                                    <option value=\"imperial\">Imperial (ksi, lb\/in\u00b3, in, lbf)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-calcMode\">Comparison Mode\n                                    <span class=\"msc-tip\" data-tip=\"Primary comparison focus. All metrics are still calculated.\">?<\/span>\n                                <\/label>\n                                <select id=\"msc-calcMode\">\n                                    <option value=\"youngs\" selected>Young&#8217;s Modulus Comparison<\/option>\n                                    <option value=\"axial\">Axial Stiffness Comparison<\/option>\n                                    <option value=\"bending\">Bending Stiffness Comparison<\/option>\n                                    <option value=\"shear\">Shear Stiffness Comparison<\/option>\n                                    <option value=\"torsion\">Torsional Stiffness Comparison<\/option>\n                                    <option value=\"deflection\">Deflection Comparison<\/option>\n                                    <option value=\"stiffnessWeight\">Stiffness-to-Weight Comparison<\/option>\n                                    <option value=\"ranking\">Multi-Material Ranking<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-rankCriterion\">Ranking Criterion\n                                    <span class=\"msc-tip\" data-tip=\"Used for overall material ranking and best-material identification\">?<\/span>\n                                <\/label>\n                                <select id=\"msc-rankCriterion\">\n                                    <option value=\"E\">Highest Young&#8217;s Modulus<\/option>\n                                    <option value=\"kAxial\">Highest Axial Stiffness<\/option>\n                                    <option value=\"EI\">Highest Bending Stiffness<\/option>\n                                    <option value=\"kTorsion\">Highest Torsional Stiffness<\/option>\n                                    <option value=\"axialDef\">Lowest Axial Deformation<\/option>\n                                    <option value=\"beamDef\">Lowest Beam Deflection<\/option>\n                                    <option value=\"twist\">Lowest Angle of Twist<\/option>\n                                    <option value=\"specificE\" selected>Highest Specific Modulus<\/option>\n                                    <option value=\"mass\">Lowest Weight<\/option>\n                                    <option value=\"stiffnessPerMass\">Best Stiffness-to-Weight Ratio<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-geometryMode\">Geometry Mode<\/label>\n                                <select id=\"msc-geometryMode\">\n                                    <option value=\"same\" selected>Same Geometry for All Materials<\/option>\n                                    <option value=\"custom\">Custom Geometry per Material<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"msc-section\" id=\"msc-sharedGeometry\">\n                        <h3 class=\"msc-section-title\">Shared Geometry<\/h3>\n                        <div class=\"msc-grid\">\n                            <div class=\"msc-field msc-span-full\">\n                                <label for=\"msc-sectionType\">Cross-Section Type<\/label>\n                                <select id=\"msc-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=\"square\">Square<\/option>\n                                    <option value=\"custom\">Custom (A, I, J)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field\" data-sections=\"solid_round,square\">\n                                <label for=\"msc-diameter\">Diameter d (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-diameter\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"msc-outerDiameter\">Outer Diameter D (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-outerDiameter\" value=\"30\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"msc-innerDiameter\">Inner Diameter d (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-innerDiameter\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"msc-width\">Width b (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-width\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"rectangle\">\n                                <label for=\"msc-height\">Height \/ Thickness h (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-height\" value=\"20\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"custom\">\n                                <label for=\"msc-customArea\">Custom Area A (<span class=\"msc-u-area\">mm\u00b2<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-customArea\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter A\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"custom\">\n                                <label for=\"msc-customI\">Custom Second Moment I (<span class=\"msc-u-inertia\">mm\u2074<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-customI\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter I\">\n                            <\/div>\n                            <div class=\"msc-field msc-geom-field msc-hidden\" data-sections=\"custom\">\n                                <label for=\"msc-customJ\">Custom Polar Moment J (<span class=\"msc-u-inertia\">mm\u2074<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-customJ\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter J\">\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-length\">Length L (<span class=\"msc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-length\" value=\"1000\" min=\"0\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"msc-section\" id=\"msc-loadingSection\">\n                        <h3 class=\"msc-section-title\">Loading Conditions<\/h3>\n                        <div class=\"msc-grid\">\n                            <div class=\"msc-field\">\n                                <label for=\"msc-axialLoad\">Applied Axial Load (<span class=\"msc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-axialLoad\" value=\"10\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-shearForce\">Applied Shear Force (<span class=\"msc-u-force\">kN<\/span>)\n                                    <span class=\"msc-tip\" data-tip=\"Optional. Used for shear stiffness comparison.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"msc-shearForce\" value=\"5\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field\">\n                                <label for=\"msc-torque\">Applied Torque (<span class=\"msc-u-torque\">N\u00b7m<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-torque\" value=\"100\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-span-full\">\n                                <label>\n                                    <input type=\"checkbox\" id=\"msc-enableBeamDeflection\" checked>\n                                    Enable Beam Deflection Comparison\n                                <\/label>\n                            <\/div>\n                            <div class=\"msc-field msc-beam-field\">\n                                <label for=\"msc-beamType\">Beam Type<\/label>\n                                <select id=\"msc-beamType\">\n                                    <option value=\"simply_supported_point\" selected>Simply Supported \u2014 Central Point Load<\/option>\n                                    <option value=\"simply_supported_udl\">Simply Supported \u2014 Uniform Load<\/option>\n                                    <option value=\"cantilever_point\">Cantilever \u2014 End Point Load<\/option>\n                                    <option value=\"cantilever_udl\">Cantilever \u2014 Uniform Load<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"msc-field msc-beam-field\" data-beam-loads=\"point\">\n                                <label for=\"msc-beamPointLoad\">Beam Point Load (<span class=\"msc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-beamPointLoad\" value=\"5\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"msc-field msc-beam-field msc-hidden\" data-beam-loads=\"udl\">\n                                <label for=\"msc-beamUdl\">Beam Uniform Load (<span class=\"msc-u-udl\">kN\/m<\/span>)<\/label>\n                                <input type=\"number\" id=\"msc-beamUdl\" value=\"2\" min=\"0\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"msc-section\">\n                        <div class=\"msc-section-head\">\n                            <h3 class=\"msc-section-title\">Materials (2\u20136)<\/h3>\n                            <div class=\"msc-material-actions\">\n                                <button type=\"button\" id=\"msc-addMaterial\" class=\"msc-btn msc-btn-sm\">+ Add Material<\/button>\n                            <\/div>\n                        <\/div>\n                        <div id=\"msc-materialsContainer\" class=\"msc-materials\"><\/div>\n                    <\/div>\n\n                    <div id=\"msc-warnings\" class=\"msc-warnings\" hidden><\/div>\n\n                    <div class=\"msc-actions\">\n                        <button type=\"button\" id=\"msc-compareBtn\" class=\"msc-btn msc-btn-primary\">Calculate<\/button>\n                    <\/div>\n                <\/section>\n            <\/div>\n\n            <div class=\"msc-output msc-hidden\" id=\"msc-resultsPanel\">\n                <section class=\"msc-card msc-results\">\n\n                    <div id=\"msc-classifications\" class=\"msc-classifications\"><\/div>\n\n                    <h2>Comparison Results<\/h2>\n                    <div class=\"msc-table-wrap\">\n                        <table class=\"msc-table\" id=\"msc-resultsTable\">\n                            <thead><\/thead>\n                            <tbody><\/tbody>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"msc-charts\">\n                        <div class=\"msc-chart-card\">\n                            <h4>Young&#8217;s Modulus Comparison<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartYoungs\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card\">\n                            <h4>Axial Stiffness Comparison<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartAxial\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card\">\n                            <h4>Bending Stiffness (EI) Comparison<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartBending\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card\">\n                            <h4>Deformation Comparison<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartDeflection\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card\">\n                            <h4>Specific Modulus Comparison<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartSpecific\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card\">\n                            <h4>Stiffness vs Density<\/h4>\n                            <div class=\"msc-chart msc-scatter\" id=\"msc-chartScatter\"><\/div>\n                        <\/div>\n                        <div class=\"msc-chart-card msc-span-full\">\n                            <h4>Material Ranking<\/h4>\n                            <div class=\"msc-chart\" id=\"msc-chartRanking\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"msc-viz-row\">\n                        <div class=\"msc-viz-card\">\n                            <h4>Axial Deformation Illustration<\/h4>\n                            <div class=\"msc-illustration\" id=\"msc-vizAxial\"><\/div>\n                        <\/div>\n                        <div class=\"msc-viz-card\">\n                            <h4>Beam Deflection Illustration<\/h4>\n                            <div class=\"msc-illustration\" id=\"msc-vizBeam\"><\/div>\n                        <\/div>\n                        <div class=\"msc-viz-card\">\n                            <h4>Torsional Twist Illustration<\/h4>\n                            <div class=\"msc-illustration\" id=\"msc-vizTorsion\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"msc-recommendations\" id=\"msc-recommendations\">\n                        <h4>Engineering Recommendations<\/h4>\n                        <ul id=\"msc-recommendationsList\"><\/ul>\n                    <\/div>\n                <\/section>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\n(function(){\n  var b=\"LyoqDQogKiBNYXRlcmlhbCBTdGlmZm5lc3MgQ29tcGFyaXNvbiBDYWxjdWxhdG9yDQogKiBDb21wYXJlIFlvdW5nJ3MgbW9kdWx1cywgc3RpZmZuZXNzIG1ldHJpY3MsIGRlZm9ybWF0aW9uLCBhbmQgc3RpZmZuZXNzLXRvLXdlaWdodA0KICovDQoNCihmdW5jdGlvbiAoKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgdmFyIENIQVJUX0NPTE9SUyA9IFsnIzFhNTI3NicsICcjMjk4MGI5JywgJyMyN2FlNjAnLCAnI2U2N2UyMicsICcjOGU0NGFkJywgJyNjMDM5MmInXTsNCg0KICAgIHZhciBQUkVTRVRTID0gew0KICAgICAgICBzdHJ1Y3R1cmFsX3N0ZWVsOiB7IG5hbWU6ICdTdHJ1Y3R1cmFsIFN0ZWVsJywgRTogMjAwLCBHOiA3NywgSzogMTYwLCBudTogMC4zMCwgcmhvOiA3ODUwLCBzeTogMzU1LCBhbmlzb3Ryb3BpYzogZmFsc2UgfSwNCiAgICAgICAgY2FyYm9uX3N0ZWVsOiAgICAgeyBuYW1lOiAnQ2FyYm9uIFN0ZWVsJywgICAgIEU6IDIwMCwgRzogNzcsIEs6IDE2MCwgbnU6IDAuMzAsIHJobzogNzg1MCwgc3k6IDI1MCwgYW5pc290cm9waWM6IGZhbHNlIH0sDQogICAgICAgIHN0YWlubGVzc19zdGVlbDogIHsgbmFtZTogJ1N0YWlubGVzcyBTdGVlbCcsICBFOiAxOTMsIEc6IDc3LCBLOiAxNTUsIG51OiAwLjMwLCByaG86IDgwMDAsIHN5OiAyMDUsIGFuaXNvdHJvcGljOiBmYWxzZSB9LA0KICAgICAgICBhbHVtaW51bTogICAgICAgICB7IG5hbWU6ICdBbHVtaW51bSBBbGxveScsICAgRTogNjksICBHOiAyNiwgSzogNzYsICBudTogMC4zMywgcmhvOiAyNzAwLCBzeTogMjc1LCBhbmlzb3Ryb3BpYzogZmFsc2UgfSwNCiAgICAgICAgdGl0YW5pdW06ICAgICAgICAgeyBuYW1lOiAnVGl0YW5pdW0gQWxsb3knLCAgIEU6IDExNCwgRzogNDQsIEs6IDExMCwgbnU6IDAuMzQsIHJobzogNDQzMCwgc3k6IDg4MCwgYW5pc290cm9waWM6IGZhbHNlIH0sDQogICAgICAgIGNvcHBlcjogICAgICAgICAgIHsgbmFtZTogJ0NvcHBlcicsICAgICAgICAgICBFOiAxMTcsIEc6IDQ0LCBLOiAxNDAsIG51OiAwLjM0LCByaG86IDg5NjAsIHN5OiA3MCwgIGFuaXNvdHJvcGljOiBmYWxzZSB9LA0KICAgICAgICBicmFzczogICAgICAgICAgICB7IG5hbWU6ICdCcmFzcycsICAgICAgICAgICAgRTogOTcsICBHOiAzNywgSzogMTQwLCBudTogMC4zNCwgcmhvOiA4NTMwLCBzeTogMTI0LCBhbmlzb3Ryb3BpYzogZmFsc2UgfSwNCiAgICAgICAgbWFnbmVzaXVtOiAgICAgICAgeyBuYW1lOiAnTWFnbmVzaXVtIEFsbG95JywgIEU6IDQ1LCAgRzogMTcsIEs6IDQ1LCAgbnU6IDAuMzUsIHJobzogMTc0MCwgc3k6IDIwMCwgYW5pc290cm9waWM6IGZhbHNlIH0sDQogICAgICAgIGNhc3RfaXJvbjogICAgICAgIHsgbmFtZTogJ0Nhc3QgSXJvbicsICAgICAgICBFOiAxMTAsIEc6IDQyLCBLOiA5MCwgIG51OiAwLjI2LCByaG86IDcyMDAsIHN5OiAxMzAsIGFuaXNvdHJvcGljOiBmYWxzZSB9LA0KICAgICAgICBnZnJwOiAgICAgICAgICAgICB7IG5hbWU6ICdH\"+\"bGFzcyBGaWJlciBDb21wb3NpdGUnLCBFOiA0MCwgRzogMTUsIEs6IDAsIG51OiAwLjI4LCByaG86IDE5MDAsIHN5OiA1MDAsIGFuaXNvdHJvcGljOiB0cnVlIH0sDQogICAgICAgIGNmcnA6ICAgICAgICAgICAgIHsgbmFtZTogJ0NhcmJvbiBGaWJlciBDb21wb3NpdGUnLCBFOiAxMzUsIEc6IDUsIEs6IDAsIG51OiAwLjMwLCByaG86IDE2MDAsIHN5OiAxNTAwLCBhbmlzb3Ryb3BpYzogdHJ1ZSB9LA0KICAgICAgICBwbGFzdGljOiAgICAgICAgICB7IG5hbWU6ICdFbmdpbmVlcmluZyBQbGFzdGljJywgRTogMywgRzogMS4xLCBLOiAwLCBudTogMC40MCwgcmhvOiAxMjAwLCBzeTogNTAsIGFuaXNvdHJvcGljOiBmYWxzZSB9LA0KICAgICAgICBjdXN0b206ICAgICAgICAgICB7IG5hbWU6ICdDdXN0b20gTWF0ZXJpYWwnLCAgRTogMCwgRzogMCwgSzogMCwgbnU6IDAsIHJobzogMCwgc3k6IDAsIGFuaXNvdHJvcGljOiBmYWxzZSB9DQogICAgfTsNCg0KICAgIHZhciBVTklUUyA9IHsNCiAgICAgICAgbWV0cmljOiB7DQogICAgICAgICAgICBtb2R1bHVzRTogJ0dQYScsIG1vZHVsdXNHOiAnR1BhJywgZGVuc2l0eTogJ2tnL23CsycsIGxlbmd0aDogJ21tJywgYXJlYTogJ21twrInLA0KICAgICAgICAgICAgaW5lcnRpYTogJ21t4oG0JywgZm9yY2U6ICdrTicsIHRvcnF1ZTogJ07Ct20nLCB1ZGw6ICdrTi9tJywNCiAgICAgICAgICAgIGF4aWFsU3RpZmY6ICdOL21tJywgZGVmbGVjdGlvbjogJ21tJywgbWFzczogJ2tnJywgYW5nbGU6ICfCsCcsDQogICAgICAgICAgICBFZnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDEwMDA7IH0sDQogICAgICAgICAgICBFdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDEwMDA7IH0sDQogICAgICAgICAgICBHZnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDEwMDA7IH0sDQogICAgICAgICAgICBHdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDEwMDA7IH0sDQogICAgICAgICAgICBLZnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDEwMDA7IH0sDQogICAgICAgICAgICBLdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDEwMDA7IH0sDQogICAgICAgICAgICByaG9mcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgcmhvdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBsZW5ndGhUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgYXJlYUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBhcmVhVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIGluZXJ0aWFGcm9tSW5wdXQ6IGZ1bmN0aW9u\"+\"ICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgaW5lcnRpYVRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAxMDAwOyB9LA0KICAgICAgICAgICAgZm9yY2VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMTAwMDsgfSwNCiAgICAgICAgICAgIHRvcnF1ZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAxMDAwOyB9LA0KICAgICAgICAgICAgdG9ycXVlVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDEwMDA7IH0sDQogICAgICAgICAgICB1ZGxGcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgdWRsVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIGF4aWFsU3RpZmZUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgZGVmbGVjdGlvblRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBtYXNzVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIEVJdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDFlNjsgfSwNCiAgICAgICAgICAgIEVJdW5pdDogJ07Ct21twrInLA0KICAgICAgICAgICAga1RvcnNpb25Ub0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMWU2OyB9LA0KICAgICAgICAgICAga1RvcnNpb25Vbml0OiAnTsK3bW0vcmFkJywNCiAgICAgICAgICAgIHNwZWNpZmljRXRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyAxMDAwOyB9LA0KICAgICAgICAgICAgc3BlY2lmaWNFdW5pdDogJ20vc8KyICjDlzEwwrMpJw0KICAgICAgICB9LA0KICAgICAgICBpbXBlcmlhbDogew0KICAgICAgICAgICAgbW9kdWx1c0U6ICdrc2knLCBtb2R1bHVzRzogJ2tzaScsIGRlbnNpdHk6ICdsYi9pbsKzJywgbGVuZ3RoOiAnaW4nLCBhcmVhOiAnaW7CsicsDQogICAgICAgICAgICBpbmVydGlhOiAnaW7igbQnLCBmb3JjZTogJ2xiZicsIHRvcnF1ZTogJ2xiZsK3aW4nLCB1ZGw6ICdsYmYvZnQnLA0KICAgICAgICAgICAgYXhpYWxTdGlmZjogJ2xiZi9pbicsIGRlZmxlY3Rpb246ICdpbicsIG1hc3M6ICdsYicsIGFuZ2xlOiAnwrAnLA0KICAgICAgICAgICAgRWZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgRXRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgR2Zyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgR3RvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgS2Zyb21JbnB1dDog\"+\"ZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgS3RvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgcmhvZnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDI3Njc5Ljk7IH0sDQogICAgICAgICAgICByaG90b0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMjc2NzkuOTsgfSwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAyNS40OyB9LA0KICAgICAgICAgICAgbGVuZ3RoVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDI1LjQ7IH0sDQogICAgICAgICAgICBhcmVhRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDY0NS4xNjsgfSwNCiAgICAgICAgICAgIGFyZWFUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNjQ1LjE2OyB9LA0KICAgICAgICAgICAgaW5lcnRpYUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiBNYXRoLnBvdygyNS40LCA0KTsgfSwNCiAgICAgICAgICAgIGluZXJ0aWFUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gTWF0aC5wb3coMjUuNCwgNCk7IH0sDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA0LjQ0ODIyOyB9LA0KICAgICAgICAgICAgZm9yY2VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNC40NDgyMjsgfSwNCiAgICAgICAgICAgIHRvcnF1ZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAwLjExMjk4NTsgfSwNCiAgICAgICAgICAgIHRvcnF1ZVRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyAwLjExMjk4NTsgfSwNCiAgICAgICAgICAgIHVkbEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA0LjQ0ODIyIC8gMzA0Ljg7IH0sDQogICAgICAgICAgICB1ZGxUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogMzA0LjggLyA0LjQ0ODIyOyB9LA0KICAgICAgICAgICAgYXhpYWxTdGlmZlRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAyNS40IC8gNC40NDgyMjsgfSwNCiAgICAgICAgICAgIGRlZmxlY3Rpb25Ub0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMjUuNDsgfSwNCiAgICAgICAgICAgIG1hc3NUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogMi4yMDQ2MjsgfSwNCiAgICAgICAgICAgIEVJdG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvICg0LjQ0ODIyICogTWF0aC5wb3coMjUuNCwgMykpOyB9LA0KICAgICAgICAgICAgRUl1bml0OiAnbGJmwrdpbsKyJywNCiAgICAgICAgICAgIGtUb3JzaW9uVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvICgwLjExMjk4NSAqIE1hdGgucG93KDI1LjQsIDQpKTsgfSwNCiAgICAg\"+\"ICAgICAgIGtUb3JzaW9uVW5pdDogJ2xiZsK3aW4vcmFkJywNCiAgICAgICAgICAgIHNwZWNpZmljRXRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAwLjAwMzI4MDg0OyB9LA0KICAgICAgICAgICAgc3BlY2lmaWNFdW5pdDogJ8OXMTDigbYgaW4nDQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgdmFyIE1PREVfUk9XUyA9IHsNCiAgICAgICAgeW91bmdzOiBbJ0UnLCAnRycsICdyZWxhdGl2ZUUnXSwNCiAgICAgICAgYXhpYWw6IFsna0F4aWFsJywgJ2F4aWFsRGVmJywgJ3JlbGF0aXZlQXhpYWwnXSwNCiAgICAgICAgYmVuZGluZzogWydFSScsICdiZWFtRGVmJywgJ3JlbGF0aXZlQmVuZGluZyddLA0KICAgICAgICBzaGVhcjogWydrU2hlYXInXSwNCiAgICAgICAgdG9yc2lvbjogWydrVG9yc2lvbicsICd0d2lzdCcsICdyZWxhdGl2ZVRvcnNpb24nXSwNCiAgICAgICAgZGVmbGVjdGlvbjogWydheGlhbERlZicsICdiZWFtRGVmJywgJ3R3aXN0J10sDQogICAgICAgIHN0aWZmbmVzc1dlaWdodDogWydzcGVjaWZpY0UnLCAnc3BlY2lmaWNHJywgJ21hc3MnLCAnc3RpZmZuZXNzUGVyTWFzcycsICdyZWxhdGl2ZU1hc3MnXSwNCiAgICAgICAgcmFua2luZzogWydyYW5rJ10NCiAgICB9Ow0KDQogICAgdmFyIFJBTktfQ1JJVEVSSUEgPSB7DQogICAgICAgIEU6IHsga2V5OiAnRScsIGhpZ2hlcjogdHJ1ZSwgbGFiZWw6ICJZb3VuZydzIE1vZHVsdXMiIH0sDQogICAgICAgIGtBeGlhbDogeyBrZXk6ICdrQXhpYWwnLCBoaWdoZXI6IHRydWUsIGxhYmVsOiAnQXhpYWwgU3RpZmZuZXNzJyB9LA0KICAgICAgICBFSTogeyBrZXk6ICdFSScsIGhpZ2hlcjogdHJ1ZSwgbGFiZWw6ICdCZW5kaW5nIFN0aWZmbmVzcycgfSwNCiAgICAgICAga1RvcnNpb246IHsga2V5OiAna1RvcnNpb24nLCBoaWdoZXI6IHRydWUsIGxhYmVsOiAnVG9yc2lvbmFsIFN0aWZmbmVzcycgfSwNCiAgICAgICAgYXhpYWxEZWY6IHsga2V5OiAnYXhpYWxEZWYnLCBoaWdoZXI6IGZhbHNlLCBsYWJlbDogJ0F4aWFsIERlZm9ybWF0aW9uJyB9LA0KICAgICAgICBiZWFtRGVmOiB7IGtleTogJ2JlYW1EZWYnLCBoaWdoZXI6IGZhbHNlLCBsYWJlbDogJ0JlYW0gRGVmbGVjdGlvbicgfSwNCiAgICAgICAgdHdpc3Q6IHsga2V5OiAndHdpc3QnLCBoaWdoZXI6IGZhbHNlLCBsYWJlbDogJ0FuZ2xlIG9mIFR3aXN0JyB9LA0KICAgICAgICBzcGVjaWZpY0U6IHsga2V5OiAnc3BlY2lmaWNFJywgaGlnaGVyOiB0cnVlLCBsYWJlbDogJ1NwZWNpZmljIE1vZHVsdXMnIH0sDQogICAgICAgIG1hc3M6IHsga2V5OiAnbWFzcycsIGhpZ2hlcjogZmFsc2UsIGxhYmVsOiAnQ29tcG9uZW50IE1hc3MnIH0sDQogICAgICAgIHN0aWZmbmVzc1Blck1hc3M6IHsga2V5OiAnc3RpZmZuZXNzUGVyTWFzcycsIGhpZ2hlcjogdHJ1ZSwgbGFiZWw6ICdTdGlmZm5lc3MgcGVyIE1hc3MnIH0NCiAgICB9Ow0KDQogICAgdmFyIHJvb3QgPSBudWxsOw0KICAgIHZhciBlbHMgPSB7fTsNCiAgICB2YXIg\"+\"bWF0ZXJpYWxzID0gW107DQogICAgdmFyIHJlZkluZGV4ID0gMDsNCiAgICB2YXIgbmV4dElkID0gMTsNCg0KICAgIGZ1bmN0aW9uICQoaWQpIHsNCiAgICAgICAgcmV0dXJuIHJvb3QgPyByb290LnF1ZXJ5U2VsZWN0b3IoJyNtc2MtJyArIGlkKSA6IG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcXNhKHNlbCkgew0KICAgICAgICByZXR1cm4gcm9vdCA\/IHJvb3QucXVlcnlTZWxlY3RvckFsbChzZWwpIDogW107DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FjaGVFbGVtZW50cygpIHsNCiAgICAgICAgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtc2MtY2FsY3VsYXRvcicpOw0KICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsNCiAgICAgICAgWyd1bml0U3lzdGVtJywgJ2NhbGNNb2RlJywgJ3JhbmtDcml0ZXJpb24nLCAnZ2VvbWV0cnlNb2RlJywgJ3NlY3Rpb25UeXBlJywNCiAgICAgICAgICAgICdkaWFtZXRlcicsICdvdXRlckRpYW1ldGVyJywgJ2lubmVyRGlhbWV0ZXInLCAnd2lkdGgnLCAnaGVpZ2h0JywNCiAgICAgICAgICAgICdjdXN0b21BcmVhJywgJ2N1c3RvbUknLCAnY3VzdG9tSicsICdsZW5ndGgnLCAnYXhpYWxMb2FkJywgJ3NoZWFyRm9yY2UnLA0KICAgICAgICAgICAgJ3RvcnF1ZScsICdlbmFibGVCZWFtRGVmbGVjdGlvbicsICdiZWFtVHlwZScsICdiZWFtUG9pbnRMb2FkJywgJ2JlYW1VZGwnLA0KICAgICAgICAgICAgJ21hdGVyaWFsc0NvbnRhaW5lcicsICdhZGRNYXRlcmlhbCcsICdjb21wYXJlQnRuJywNCiAgICAgICAgICAgICdyZXN1bHRzUGFuZWwnLCAnd2FybmluZ3MnLCAnY2xhc3NpZmljYXRpb25zJywgJ3Jlc3VsdHNUYWJsZScsDQogICAgICAgICAgICAnY2hhcnRZb3VuZ3MnLCAnY2hhcnRBeGlhbCcsICdjaGFydEJlbmRpbmcnLCAnY2hhcnREZWZsZWN0aW9uJywNCiAgICAgICAgICAgICdjaGFydFNwZWNpZmljJywgJ2NoYXJ0U2NhdHRlcicsICdjaGFydFJhbmtpbmcnLA0KICAgICAgICAgICAgJ3ZpekF4aWFsJywgJ3ZpekJlYW0nLCAndml6VG9yc2lvbicsICdyZWNvbW1lbmRhdGlvbnNMaXN0Jw0KICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7IGVsc1tpZF0gPSAkKGlkKTsgfSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZtdCh2YWwsIGRlYykgew0KICAgICAgICBkZWMgPSBkZWMgPT09IHVuZGVmaW5lZCA\/IDMgOiBkZWM7DQogICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgIWlzRmluaXRlKHZhbCkpIHJldHVybiAn4oCUJzsNCiAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPj0gMWU5IHx8IChNYXRoLmFicyh2YWwpIDwgMC4wMDAxICYmIHZhbCAhPT0gMCkpIHJldHVybiB2YWwudG9FeHBvbmVudGlhbCgzKTsNCiAgICAgICAgcmV0dXJuIHZhbC50b0ZpeGVkKGRlYyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZ2V0VW5pdHMoKSB7DQogICAgICAgIHJldHVybiBVTklUU1tlbHMu\"+\"dW5pdFN5c3RlbS52YWx1ZV0gfHwgVU5JVFMubWV0cmljOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgICAgIHZhciB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgcXNhKCcubXNjLXUtbGVuZ3RoJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1Lmxlbmd0aDsgfSk7DQogICAgICAgIHFzYSgnLm1zYy11LWFyZWEnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUuYXJlYTsgfSk7DQogICAgICAgIHFzYSgnLm1zYy11LWluZXJ0aWEnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUuaW5lcnRpYTsgfSk7DQogICAgICAgIHFzYSgnLm1zYy11LWZvcmNlJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1LmZvcmNlOyB9KTsNCiAgICAgICAgcXNhKCcubXNjLXUtdG9ycXVlJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1LnRvcnF1ZTsgfSk7DQogICAgICAgIHFzYSgnLm1zYy11LXVkbCcpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS51ZGw7IH0pOw0KICAgICAgICBxc2EoJy5tc2MtdS1tb2R1bHVzRScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS5tb2R1bHVzRTsgfSk7DQogICAgICAgIHFzYSgnLm1zYy11LW1vZHVsdXNHJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1Lm1vZHVsdXNHOyB9KTsNCiAgICAgICAgcXNhKCcubXNjLXUtZGVuc2l0eScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS5kZW5zaXR5OyB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjcmVhdGVNYXRlcmlhbChwcmVzZXRLZXksIGlzUmVmKSB7DQogICAgICAgIHZhciBwID0gUFJFU0VUU1twcmVzZXRLZXldIHx8IFBSRVNFVFMuY3VzdG9tOw0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgaWQ6IG5leHRJZCsrLA0KICAgICAgICAgICAgcHJlc2V0OiBwcmVzZXRLZXksDQogICAgICAgICAgICBuYW1lOiBwLm5hbWUsDQogICAgICAgICAgICBFOiBwLkUsDQogICAgICAgICAgICBHOiBwLkcsDQogICAgICAgICAgICBLOiBwLksgfHwgJycsDQogICAgICAgICAgICBudTogcC5udSB8fCAnJywNCiAgICAgICAgICAgIHJobzogcC5yaG8sDQogICAgICAgICAgICBzeTogcC5zeSB8fCAnJywNCiAgICAgICAgICAgIGlzUmVmOiAhIWlzUmVmLA0KICAgICAgICAgICAgZ2VvbTogew0KICAgICAgICAgICAgICAgIHNlY3Rpb25UeXBlOiAnc29saWRfcm91bmQnLA0KICAgICAgICAgICAgICAgIGRpYW1ldGVyOiAyMCwNCiAgICAgICAgICAgICAgICBvdXRlckRpYW1ldGVyOiAzMCwNCiAgICAgICAgICAgICAgICBpbm5lckRpYW1ldGVyOiAyMCwNCiAgICAgICAgICAgICAgICB3aWR0aDogMjAsDQogICAgICAgICAgICAgICAgaGVpZ2h0OiAyMCwNCiAg\"+\"ICAgICAgICAgICAgICBjdXN0b21BcmVhOiAnJywNCiAgICAgICAgICAgICAgICBjdXN0b21JOiAnJywNCiAgICAgICAgICAgICAgICBjdXN0b21KOiAnJywNCiAgICAgICAgICAgICAgICBsZW5ndGg6IDEwMDANCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbml0TWF0ZXJpYWxzKCkgew0KICAgICAgICBtYXRlcmlhbHMgPSBbDQogICAgICAgICAgICBjcmVhdGVNYXRlcmlhbCgnc3RydWN0dXJhbF9zdGVlbCcsIHRydWUpLA0KICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWwoJ2FsdW1pbnVtJywgZmFsc2UpDQogICAgICAgIF07DQogICAgICAgIHJlZkluZGV4ID0gMDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRQcmVzZXRPcHRpb25zKHNlbGVjdGVkKSB7DQogICAgICAgIHZhciBodG1sID0gJyc7DQogICAgICAgIE9iamVjdC5rZXlzKFBSRVNFVFMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgew0KICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIGtleSArICciJyArIChrZXkgPT09IHNlbGVjdGVkID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPicgKw0KICAgICAgICAgICAgICAgIFBSRVNFVFNba2V5XS5uYW1lICsgJzwvb3B0aW9uPic7DQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gaHRtbDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZWN0aW9uT3B0aW9ucyhzZWxlY3RlZCkgew0KICAgICAgICB2YXIgdHlwZXMgPSBbDQogICAgICAgICAgICBbJ3NvbGlkX3JvdW5kJywgJ1NvbGlkIFJvdW5kJ10sDQogICAgICAgICAgICBbJ2hvbGxvd19yb3VuZCcsICdIb2xsb3cgUm91bmQnXSwNCiAgICAgICAgICAgIFsncmVjdGFuZ2xlJywgJ1JlY3RhbmdsZSddLA0KICAgICAgICAgICAgWydzcXVhcmUnLCAnU3F1YXJlJ10sDQogICAgICAgICAgICBbJ2N1c3RvbScsICdDdXN0b20gKEEsIEksIEopJ10NCiAgICAgICAgXTsNCiAgICAgICAgcmV0dXJuIHR5cGVzLm1hcChmdW5jdGlvbiAodCkgew0KICAgICAgICAgICAgcmV0dXJuICc8b3B0aW9uIHZhbHVlPSInICsgdFswXSArICciJyArICh0WzBdID09PSBzZWxlY3RlZCA\/ICcgc2VsZWN0ZWQnIDogJycpICsgJz4nICsgdFsxXSArICc8L29wdGlvbj4nOw0KICAgICAgICB9KS5qb2luKCcnKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZW5kZXJNYXRlcmlhbENhcmQobWF0LCBpbmRleCkgew0KICAgICAgICB2YXIgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIHZhciBzaG93R2VvbSA9IGVscy5nZW9tZXRyeU1vZGUudmFsdWUgPT09ICdjdXN0b20nOw0KICAgICAgICB2YXIgY2FyZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBjYXJkLmNsYXNzTmFtZSA9ICdtc2MtbWF0ZXJpYWwtY2FyZCcgKyAobWF0LmlzUmVmID8gJyBtc2MtcmVmJyA6ICcnKTsNCiAgICAgICAgY2FyZC5kYXRhc2V0LmluZGV4ID0gaW5kZXg7DQoNCiAgICAgICAgdmFyIGdlb21IdG1sID0gJyc7DQogICAgICAgIGlmIChz\"+\"aG93R2VvbSkgew0KICAgICAgICAgICAgZ2VvbUh0bWwgPSAnPGRpdiBjbGFzcz0ibXNjLWdyaWQgbXNjLW1hdC1nZW9tIj4nICsNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIG1zYy1zcGFuLWZ1bGwiPjxsYWJlbD5Dcm9zcy1TZWN0aW9uPC9sYWJlbD4nICsNCiAgICAgICAgICAgICAgICAnPHNlbGVjdCBjbGFzcz0ibXNjLW1hdC1zZWN0aW9uIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArIHNlY3Rpb25PcHRpb25zKG1hdC5nZW9tLnNlY3Rpb25UeXBlKSArICc8L3NlbGVjdD48L2Rpdj4nICsNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIG1zYy1tZ2VvbS1maWVsZCIgZGF0YS1zZWN0aW9ucz0ic29saWRfcm91bmQsc3F1YXJlIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5EaWFtZXRlciBkICgnICsgdS5sZW5ndGggKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtZGlhbWV0ZXIiIHZhbHVlPSInICsgbWF0Lmdlb20uZGlhbWV0ZXIgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCBtc2MtbWdlb20tZmllbGQgbXNjLWhpZGRlbiIgZGF0YS1zZWN0aW9ucz0iaG9sbG93X3JvdW5kIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5PdXRlciBEICgnICsgdS5sZW5ndGggKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtb3V0ZXJEIiB2YWx1ZT0iJyArIG1hdC5nZW9tLm91dGVyRGlhbWV0ZXIgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCBtc2MtbWdlb20tZmllbGQgbXNjLWhpZGRlbiIgZGF0YS1zZWN0aW9ucz0iaG9sbG93X3JvdW5kIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5Jbm5lciBkICgnICsgdS5sZW5ndGggKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtaW5uZXJEIiB2YWx1ZT0iJyArIG1hdC5nZW9tLmlubmVyRGlhbWV0ZXIgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCBtc2MtbWdlb20tZmllbGQgbXNjLWhpZGRlbiIgZGF0YS1zZWN0aW9ucz0icmVjdGFuZ2xlIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5XaWR0aCBiICgnICsgdS5sZW5ndGggKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtd2lkdGgiIHZhbHVlPSInICsgbWF0Lmdlb20ud2lkdGggKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9\"+\"Im1zYy1maWVsZCBtc2MtbWdlb20tZmllbGQgbXNjLWhpZGRlbiIgZGF0YS1zZWN0aW9ucz0icmVjdGFuZ2xlIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5IZWlnaHQgaCAoJyArIHUubGVuZ3RoICsgJyk8L2xhYmVsPjxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJtc2MtbWF0LWhlaWdodCIgdmFsdWU9IicgKyBtYXQuZ2VvbS5oZWlnaHQgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCBtc2MtbWdlb20tZmllbGQgbXNjLWhpZGRlbiIgZGF0YS1zZWN0aW9ucz0iY3VzdG9tIiBkYXRhLWlkeD0iJyArIGluZGV4ICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzxsYWJlbD5BcmVhIEEgKCcgKyB1LmFyZWEgKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtYXJlYSIgdmFsdWU9IicgKyBtYXQuZ2VvbS5jdXN0b21BcmVhICsgJyIgbWluPSIwIiBzdGVwPSJhbnkiPjwvZGl2PicgKw0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtZmllbGQgbXNjLW1nZW9tLWZpZWxkIG1zYy1oaWRkZW4iIGRhdGEtc2VjdGlvbnM9ImN1c3RvbSIgZGF0YS1pZHg9IicgKyBpbmRleCArICciPicgKw0KICAgICAgICAgICAgICAgICc8bGFiZWw+TW9tZW50IEkgKCcgKyB1LmluZXJ0aWEgKyAnKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtSSIgdmFsdWU9IicgKyBtYXQuZ2VvbS5jdXN0b21JICsgJyIgbWluPSIwIiBzdGVwPSJhbnkiPjwvZGl2PicgKw0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtZmllbGQgbXNjLW1nZW9tLWZpZWxkIG1zYy1oaWRkZW4iIGRhdGEtc2VjdGlvbnM9ImN1c3RvbSIgZGF0YS1pZHg9IicgKyBpbmRleCArICciPicgKw0KICAgICAgICAgICAgICAgICc8bGFiZWw+UG9sYXIgSiAoJyArIHUuaW5lcnRpYSArICcpPC9sYWJlbD48aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ibXNjLW1hdC1KIiB2YWx1ZT0iJyArIG1hdC5nZW9tLmN1c3RvbUogKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCI+PGxhYmVsPkxlbmd0aCBMICgnICsgdS5sZW5ndGggKyAnKTwvbGFiZWw+JyArDQogICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJtc2MtbWF0LWxlbmd0aCIgdmFsdWU9IicgKyBtYXQuZ2VvbS5sZW5ndGggKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+PC9kaXY+JzsNCiAgICAgICAgfQ0KDQogICAgICAgIGNhcmQuaW5uZXJIVE1MID0NCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtbWF0ZXJpYWwtaGVhZGVyIj4nICsNCiAgICAgICAgICAgICc8aDQ+TWF0ZXJpYWwgJyArIChpbmRleCArIDEpICsgJzwvaDQ+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLW1hdGVy\"+\"aWFsLWNvbnRyb2xzIj4nICsNCiAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9Im1zYy1yZWYtbGFiZWwiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ibXNjLXJlZk1hdGVyaWFsIiBjbGFzcz0ibXNjLXJlZi1yYWRpbyIgdmFsdWU9IicgKyBpbmRleCArICciJyArDQogICAgICAgICAgICAobWF0LmlzUmVmID8gJyBjaGVja2VkJyA6ICcnKSArICc+IFJlZmVyZW5jZTwvbGFiZWw+JyArDQogICAgICAgICAgICAobWF0ZXJpYWxzLmxlbmd0aCA+IDIgPyAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtc2MtYnRuLWljb24gbXNjLXJlbW92ZS1tYXQiIGRhdGEtaWR4PSInICsgaW5kZXggKyAnIj5SZW1vdmU8L2J1dHRvbj4nIDogJycpICsNCiAgICAgICAgICAgICc8L2Rpdj48L2Rpdj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtZ3JpZCI+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+UHJlc2V0PC9sYWJlbD4nICsNCiAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPSJtc2MtbWF0LXByZXNldCIgZGF0YS1pZHg9IicgKyBpbmRleCArICciPicgKyBnZXRQcmVzZXRPcHRpb25zKG1hdC5wcmVzZXQpICsgJzwvc2VsZWN0PjwvZGl2PicgKw0KICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1maWVsZCI+PGxhYmVsPk1hdGVyaWFsIE5hbWU8L2xhYmVsPicgKw0KICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibXNjLW1hdC1uYW1lIiB2YWx1ZT0iJyArIG1hdC5uYW1lICsgJyI+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+WW91bmdcJ3MgTW9kdWx1cyBFICgnICsgdS5tb2R1bHVzRSArICcpJyArDQogICAgICAgICAgICAnPHNwYW4gY2xhc3M9Im1zYy10aXAiIGRhdGEtdGlwPSJFbGFzdGljIG1vZHVsdXMg4oCUIHJlc2lzdGFuY2UgdG8gYXhpYWwvYmVuZGluZyBkZWZvcm1hdGlvbiI+Pzwvc3Bhbj48L2xhYmVsPicgKw0KICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJtc2MtbWF0LUUiIHZhbHVlPSInICsgbWF0LkUgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+U2hlYXIgTW9kdWx1cyBHICgnICsgdS5tb2R1bHVzRyArICcpJyArDQogICAgICAgICAgICAnPHNwYW4gY2xhc3M9Im1zYy10aXAiIGRhdGEtdGlwPSJSZXNpc3RhbmNlIHRvIHNoZWFyL3RvcnNpb25hbCBkZWZvcm1hdGlvbiI+Pzwvc3Bhbj48L2xhYmVsPicgKw0KICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJtc2MtbWF0LUciIHZhbHVlPSInICsgbWF0LkcgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+QnVsayBNb2R1bHVzIEsgKCcgKyB1Lm1vZHVsdXNFICsgJyk8L2xhYmVsPicgKw0KICAgICAgICAgICAg\"+\"JzxpbnB1dCB0eXBlPSJudW1iZXIiIGNsYXNzPSJtc2MtbWF0LUsiIHZhbHVlPSInICsgbWF0LksgKyAnIiBtaW49IjAiIHN0ZXA9ImFueSIgcGxhY2Vob2xkZXI9Ik9wdGlvbmFsIj48L2Rpdj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtZmllbGQiPjxsYWJlbD5Qb2lzc29uXCdzIFJhdGlvIM69PC9sYWJlbD4nICsNCiAgICAgICAgICAgICc8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ibXNjLW1hdC1udSIgdmFsdWU9IicgKyBtYXQubnUgKyAnIiBtaW49IjAiIG1heD0iMC41IiBzdGVwPSJhbnkiIHBsYWNlaG9sZGVyPSJPcHRpb25hbCI+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+RGVuc2l0eSDPgSAoJyArIHUuZGVuc2l0eSArICcpJyArDQogICAgICAgICAgICAnPHNwYW4gY2xhc3M9Im1zYy10aXAiIGRhdGEtdGlwPSJNYXNzIHBlciB1bml0IHZvbHVtZSBmb3Igd2VpZ2h0IGNvbXBhcmlzb25zIj4\/PC9zcGFuPjwvbGFiZWw+JyArDQogICAgICAgICAgICAnPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtcmhvIiB2YWx1ZT0iJyArIG1hdC5yaG8gKyAnIiBtaW49IjAiIHN0ZXA9ImFueSI+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWZpZWxkIj48bGFiZWw+WWllbGQgU3RyZW5ndGggKG9wdGlvbmFsKTwvbGFiZWw+JyArDQogICAgICAgICAgICAnPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9Im1zYy1tYXQtc3kiIHZhbHVlPSInICsgbWF0LnN5ICsgJyIgbWluPSIwIiBzdGVwPSJhbnkiIHBsYWNlaG9sZGVyPSJPcHRpb25hbCI+PC9kaXY+JyArDQogICAgICAgICAgICAnPC9kaXY+JyArIGdlb21IdG1sOw0KDQogICAgICAgIHJldHVybiBjYXJkOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbmRlck1hdGVyaWFscygpIHsNCiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGVscy5tYXRlcmlhbHNDb250YWluZXI7DQogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgbWF0ZXJpYWxzLmZvckVhY2goZnVuY3Rpb24gKG1hdCwgaSkgew0KICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHJlbmRlck1hdGVyaWFsQ2FyZChtYXQsIGkpKTsNCiAgICAgICAgfSk7DQogICAgICAgIHVwZGF0ZU1hdEdlb21WaXNpYmlsaXR5KCk7DQogICAgICAgIGVscy5hZGRNYXRlcmlhbC5kaXNhYmxlZCA9IG1hdGVyaWFscy5sZW5ndGggPj0gNjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZWFkTWF0ZXJpYWxzRnJvbURPTSgpIHsNCiAgICAgICAgdmFyIGNhcmRzID0gZWxzLm1hdGVyaWFsc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcubXNjLW1hdGVyaWFsLWNhcmQnKTsNCiAgICAgICAgdmFyIHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXJkLCBpKSB7DQogICAgICAgICAgICBpZiAoIW1hdGVyaWFsc1tpXSkgcmV0dXJuOw0KICAgICAgICAgICAgdmFy\"+\"IG0gPSBtYXRlcmlhbHNbaV07DQogICAgICAgICAgICBtLm5hbWUgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5tc2MtbWF0LW5hbWUnKS52YWx1ZSB8fCBtLm5hbWU7DQogICAgICAgICAgICBtLnByZXNldCA9IGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1tYXQtcHJlc2V0JykudmFsdWU7DQogICAgICAgICAgICBtLkUgPSBwYXJzZUZsb2F0KGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1tYXQtRScpLnZhbHVlKSB8fCAwOw0KICAgICAgICAgICAgbS5HID0gcGFyc2VGbG9hdChjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5tc2MtbWF0LUcnKS52YWx1ZSkgfHwgMDsNCiAgICAgICAgICAgIHZhciBrRWwgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5tc2MtbWF0LUsnKTsNCiAgICAgICAgICAgIG0uSyA9IGtFbCAmJiBrRWwudmFsdWUgIT09ICcnID8gcGFyc2VGbG9hdChrRWwudmFsdWUpIDogJyc7DQogICAgICAgICAgICB2YXIgbnVFbCA9IGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1tYXQtbnUnKTsNCiAgICAgICAgICAgIG0ubnUgPSBudUVsICYmIG51RWwudmFsdWUgIT09ICcnID8gcGFyc2VGbG9hdChudUVsLnZhbHVlKSA6ICcnOw0KICAgICAgICAgICAgbS5yaG8gPSBwYXJzZUZsb2F0KGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1tYXQtcmhvJykudmFsdWUpIHx8IDA7DQogICAgICAgICAgICB2YXIgc3lFbCA9IGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1tYXQtc3knKTsNCiAgICAgICAgICAgIG0uc3kgPSBzeUVsICYmIHN5RWwudmFsdWUgIT09ICcnID8gcGFyc2VGbG9hdChzeUVsLnZhbHVlKSA6ICcnOw0KICAgICAgICAgICAgbS5pc1JlZiA9IGNhcmQucXVlcnlTZWxlY3RvcignLm1zYy1yZWYtcmFkaW8nKS5jaGVja2VkOw0KDQogICAgICAgICAgICBpZiAoZWxzLmdlb21ldHJ5TW9kZS52YWx1ZSA9PT0gJ2N1c3RvbScpIHsNCiAgICAgICAgICAgICAgICB2YXIgc3QgPSBjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5tc2MtbWF0LXNlY3Rpb24nKTsNCiAgICAgICAgICAgICAgICBpZiAoc3QpIG0uZ2VvbS5zZWN0aW9uVHlwZSA9IHN0LnZhbHVlOw0KICAgICAgICAgICAgICAgIHZhciBudW1WYWwgPSBmdW5jdGlvbiAoc2VsKSB7IHZhciBlbCA9IGNhcmQucXVlcnlTZWxlY3RvcihzZWwpOyByZXR1cm4gZWwgJiYgZWwudmFsdWUgIT09ICcnID8gcGFyc2VGbG9hdChlbC52YWx1ZSkgOiAnJzsgfTsNCiAgICAgICAgICAgICAgICBtLmdlb20uZGlhbWV0ZXIgPSBudW1WYWwoJy5tc2MtbWF0LWRpYW1ldGVyJykgfHwgbS5nZW9tLmRpYW1ldGVyOw0KICAgICAgICAgICAgICAgIG0uZ2VvbS5vdXRlckRpYW1ldGVyID0gbnVtVmFsKCcubXNjLW1hdC1vdXRlckQnKSB8fCBtLmdlb20ub3V0ZXJEaWFtZXRlcjsNCiAgICAgICAgICAgICAgICBtLmdlb20uaW5uZXJEaWFtZXRlciA9IG51bVZhbCgnLm1zYy1tYXQtaW5uZXJEJykgfHwgbS5nZW9tLmlubmVyRGlhbWV0ZXI7DQogICAgICAgICAgICAgICAgbS5nZW9tLndpZHRoID0gbnVtVmFsKCcubXNjLW1h\"+\"dC13aWR0aCcpIHx8IG0uZ2VvbS53aWR0aDsNCiAgICAgICAgICAgICAgICBtLmdlb20uaGVpZ2h0ID0gbnVtVmFsKCcubXNjLW1hdC1oZWlnaHQnKSB8fCBtLmdlb20uaGVpZ2h0Ow0KICAgICAgICAgICAgICAgIG0uZ2VvbS5jdXN0b21BcmVhID0gbnVtVmFsKCcubXNjLW1hdC1hcmVhJyk7DQogICAgICAgICAgICAgICAgbS5nZW9tLmN1c3RvbUkgPSBudW1WYWwoJy5tc2MtbWF0LUknKTsNCiAgICAgICAgICAgICAgICBtLmdlb20uY3VzdG9tSiA9IG51bVZhbCgnLm1zYy1tYXQtSicpOw0KICAgICAgICAgICAgICAgIG0uZ2VvbS5sZW5ndGggPSBudW1WYWwoJy5tc2MtbWF0LWxlbmd0aCcpIHx8IG0uZ2VvbS5sZW5ndGg7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaChmdW5jdGlvbiAobSwgaSkgeyBpZiAobS5pc1JlZikgcmVmSW5kZXggPSBpOyB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBhcHBseVByZXNldChpbmRleCwgcHJlc2V0S2V5KSB7DQogICAgICAgIHZhciBwID0gUFJFU0VUU1twcmVzZXRLZXldOw0KICAgICAgICBpZiAoIXAgfHwgcHJlc2V0S2V5ID09PSAnY3VzdG9tJykgcmV0dXJuOw0KICAgICAgICB2YXIgbSA9IG1hdGVyaWFsc1tpbmRleF07DQogICAgICAgIG0ucHJlc2V0ID0gcHJlc2V0S2V5Ow0KICAgICAgICBtLm5hbWUgPSBwLm5hbWU7DQogICAgICAgIG0uRSA9IHAuRTsNCiAgICAgICAgbS5HID0gcC5HOw0KICAgICAgICBtLksgPSBwLksgfHwgJyc7DQogICAgICAgIG0ubnUgPSBwLm51IHx8ICcnOw0KICAgICAgICBtLnJobyA9IHAucmhvOw0KICAgICAgICBtLnN5ID0gcC5zeSB8fCAnJzsNCiAgICAgICAgcmVuZGVyTWF0ZXJpYWxzKCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlVmlzaWJpbGl0eSgpIHsNCiAgICAgICAgdmFyIHNlY3Rpb24gPSBlbHMuc2VjdGlvblR5cGUudmFsdWU7DQogICAgICAgIHFzYSgnLm1zYy1nZW9tLWZpZWxkJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIHZhciBzZWN0aW9ucyA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zZWN0aW9ucycpLnNwbGl0KCcsJyk7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdtc2MtaGlkZGVuJywgc2VjdGlvbnMuaW5kZXhPZihzZWN0aW9uKSA9PT0gLTEpOw0KICAgICAgICB9KTsNCg0KICAgICAgICB2YXIgc2hhcmVkR2VvbSA9IGVscy5nZW9tZXRyeU1vZGUudmFsdWUgPT09ICdzYW1lJzsNCiAgICAgICAgdmFyIGdlb21TZWMgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNtc2Mtc2hhcmVkR2VvbWV0cnknKTsNCiAgICAgICAgaWYgKGdlb21TZWMpIGdlb21TZWMuY2xhc3NMaXN0LnRvZ2dsZSgnbXNjLWhpZGRlbicsICFzaGFyZWRHZW9tKTsNCg0KICAgICAgICB2YXIgYmVhbVR5cGUgPSBlbHMuYmVhbVR5cGUudmFsdWU7DQogICAgICAgIHZhciBpc1VkbCA9IGJlYW1UeXBlLmluZGV4T2YoJ3VkbCcpICE9PSAtMTsNCiAgICAgICAgcXNhKCcu\"+\"bXNjLWJlYW0tZmllbGRbZGF0YS1iZWFtLWxvYWRzPSJwb2ludCJdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ21zYy1oaWRkZW4nLCBpc1VkbCk7DQogICAgICAgIH0pOw0KICAgICAgICBxc2EoJy5tc2MtYmVhbS1maWVsZFtkYXRhLWJlYW0tbG9hZHM9InVkbCJdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ21zYy1oaWRkZW4nLCAhaXNVZGwpOw0KICAgICAgICB9KTsNCg0KICAgICAgICB2YXIgYmVhbUVuYWJsZWQgPSBlbHMuZW5hYmxlQmVhbURlZmxlY3Rpb24uY2hlY2tlZDsNCiAgICAgICAgcXNhKCcubXNjLWJlYW0tZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgaWYgKGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSkgcmV0dXJuOw0KICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IGJlYW1FbmFibGVkID8gJzEnIDogJzAuNSc7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZU1hdEdlb21WaXNpYmlsaXR5KCkgew0KICAgICAgICBxc2EoJy5tc2MtbWdlb20tZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgdmFyIGNhcmQgPSBlbC5jbG9zZXN0KCcubXNjLW1hdGVyaWFsLWNhcmQnKTsNCiAgICAgICAgICAgIGlmICghY2FyZCkgcmV0dXJuOw0KICAgICAgICAgICAgdmFyIGlkeCA9IHBhcnNlSW50KGNhcmQuZGF0YXNldC5pbmRleCwgMTApOw0KICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBtYXRlcmlhbHNbaWR4XSA\/IG1hdGVyaWFsc1tpZHhdLmdlb20uc2VjdGlvblR5cGUgOiAnc29saWRfcm91bmQnOw0KICAgICAgICAgICAgdmFyIHNlY3Rpb25zID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY3Rpb25zJykuc3BsaXQoJywnKTsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ21zYy1oaWRkZW4nLCBzZWN0aW9ucy5pbmRleE9mKHNlY3Rpb24pID09PSAtMSk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlYWRTaGFyZWRHZW9tZXRyeSgpIHsNCiAgICAgICAgdmFyIHUgPSBnZXRVbml0cygpOw0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgc2VjdGlvblR5cGU6IGVscy5zZWN0aW9uVHlwZS52YWx1ZSwNCiAgICAgICAgICAgIGRpYW1ldGVyOiBwYXJzZUZsb2F0KGVscy5kaWFtZXRlci52YWx1ZSkgfHwgMCwNCiAgICAgICAgICAgIG91dGVyRGlhbWV0ZXI6IHBhcnNlRmxvYXQoZWxzLm91dGVyRGlhbWV0ZXIudmFsdWUpIHx8IDAsDQogICAgICAgICAgICBpbm5lckRpYW1ldGVyOiBwYXJzZUZsb2F0KGVscy5pbm5lckRpYW1ldGVyLnZhbHVlKSB8fCAwLA0KICAgICAgICAgICAgd2lkdGg6IHBhcnNlRmxvYXQoZWxzLndpZHRoLnZhbHVlKSB8fCAwLA0KICAgICAgICAgICAgaGVpZ2h0OiBwYXJzZUZsb2F0KGVscy5oZWlnaHQudmFs\"+\"dWUpIHx8IDAsDQogICAgICAgICAgICBjdXN0b21BcmVhOiBlbHMuY3VzdG9tQXJlYS52YWx1ZSAhPT0gJycgPyBwYXJzZUZsb2F0KGVscy5jdXN0b21BcmVhLnZhbHVlKSA6IDAsDQogICAgICAgICAgICBjdXN0b21JOiBlbHMuY3VzdG9tSS52YWx1ZSAhPT0gJycgPyBwYXJzZUZsb2F0KGVscy5jdXN0b21JLnZhbHVlKSA6IDAsDQogICAgICAgICAgICBjdXN0b21KOiBlbHMuY3VzdG9tSi52YWx1ZSAhPT0gJycgPyBwYXJzZUZsb2F0KGVscy5jdXN0b21KLnZhbHVlKSA6IDAsDQogICAgICAgICAgICBsZW5ndGg6IHBhcnNlRmxvYXQoZWxzLmxlbmd0aC52YWx1ZSkgfHwgMCwNCiAgICAgICAgICAgIHU6IHUNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYWxjU2VjdGlvblByb3BzKGdlb20sIHUpIHsNCiAgICAgICAgdmFyIHR5cGUgPSBnZW9tLnNlY3Rpb25UeXBlOw0KICAgICAgICB2YXIgQSA9IDAsIEkgPSAwLCBKID0gMDsNCiAgICAgICAgdmFyIGQsIEQsIGIsIGg7DQoNCiAgICAgICAgaWYgKHR5cGUgPT09ICdzb2xpZF9yb3VuZCcgfHwgdHlwZSA9PT0gJ3NxdWFyZScpIHsNCiAgICAgICAgICAgIGQgPSB1Lmxlbmd0aEZyb21JbnB1dChnZW9tLmRpYW1ldGVyIHx8IGdlb20ud2lkdGgpOw0KICAgICAgICAgICAgQSA9IE1hdGguUEkgKiBkICogZCAvIDQ7DQogICAgICAgICAgICBJID0gTWF0aC5QSSAqIE1hdGgucG93KGQsIDQpIC8gNjQ7DQogICAgICAgICAgICBKID0gTWF0aC5QSSAqIE1hdGgucG93KGQsIDQpIC8gMzI7DQogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2hvbGxvd19yb3VuZCcpIHsNCiAgICAgICAgICAgIEQgPSB1Lmxlbmd0aEZyb21JbnB1dChnZW9tLm91dGVyRGlhbWV0ZXIpOw0KICAgICAgICAgICAgZCA9IHUubGVuZ3RoRnJvbUlucHV0KGdlb20uaW5uZXJEaWFtZXRlcik7DQogICAgICAgICAgICBBID0gTWF0aC5QSSAqIChEICogRCAtIGQgKiBkKSAvIDQ7DQogICAgICAgICAgICBJID0gTWF0aC5QSSAqIChNYXRoLnBvdyhELCA0KSAtIE1hdGgucG93KGQsIDQpKSAvIDY0Ow0KICAgICAgICAgICAgSiA9IE1hdGguUEkgKiAoTWF0aC5wb3coRCwgNCkgLSBNYXRoLnBvdyhkLCA0KSkgLyAzMjsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgYiA9IHUubGVuZ3RoRnJvbUlucHV0KGdlb20ud2lkdGgpOw0KICAgICAgICAgICAgaCA9IHUubGVuZ3RoRnJvbUlucHV0KGdlb20uaGVpZ2h0KTsNCiAgICAgICAgICAgIEEgPSBiICogaDsNCiAgICAgICAgICAgIEkgPSBiICogTWF0aC5wb3coaCwgMykgLyAxMjsNCiAgICAgICAgICAgIEogPSBiICogaCAqIChiICogYiArIGggKiBoKSAvIDEyOw0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjdXN0b20nKSB7DQogICAgICAgICAgICBBID0gZ2VvbS5jdXN0b21BcmVhID8gdS5hcmVhRnJvbUlucHV0KGdlb20uY3VzdG9tQXJlYSkgOiAwOw0KICAgICAgICAgICAgSSA9IGdlb20uY3Vz\"+\"dG9tSSA\/IHUuaW5lcnRpYUZyb21JbnB1dChnZW9tLmN1c3RvbUkpIDogMDsNCiAgICAgICAgICAgIEogPSBnZW9tLmN1c3RvbUogPyB1LmluZXJ0aWFGcm9tSW5wdXQoZ2VvbS5jdXN0b21KKSA6IDA7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geyBBOiBBLCBJOiBJLCBKOiBKIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVzb2x2ZUVsYXN0aWNDb25zdGFudHMoRSwgRywgSywgbnUsIHdhcm5pbmdzLCBtYXROYW1lKSB7DQogICAgICAgIEUgPSBFID4gMCA\/IEUgOiAwOw0KICAgICAgICBHID0gRyA+IDAgPyBHIDogMDsNCiAgICAgICAgSyA9IEsgPiAwID8gSyA6IDA7DQogICAgICAgIG51ID0gKG51ICE9PSAnJyAmJiBudSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihudSkpID8gbnUgOiBudWxsOw0KDQogICAgICAgIGlmIChFID4gMCAmJiBHIDw9IDAgJiYgbnUgIT09IG51bGwgJiYgbnUgPj0gMCAmJiBudSA8IDAuNSkgew0KICAgICAgICAgICAgRyA9IEUgLyAoMiAqICgxICsgbnUpKTsNCiAgICAgICAgfSBlbHNlIGlmIChFID4gMCAmJiBHID4gMCAmJiBudSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgbnUgPSBFIC8gKDIgKiBHKSAtIDE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoRSA+IDAgJiYgRyA+IDAgJiYgbnUgIT09IG51bGwpIHsNCiAgICAgICAgICAgIHZhciBHY2FsYyA9IEUgLyAoMiAqICgxICsgbnUpKTsNCiAgICAgICAgICAgIHZhciBudUNhbGMgPSBFIC8gKDIgKiBHKSAtIDE7DQogICAgICAgICAgICBpZiAoTWF0aC5hYnMoRyAtIEdjYWxjKSAvIEdjYWxjID4gMC4wNSkgew0KICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2gobWF0TmFtZSArICc6IEUsIEcsIGFuZCDOvSBtYXkgYmUgaW5jb25zaXN0ZW50IChHX2NhbGMgPSAnICsgZm10KEdjYWxjLCAxKSArICcgTVBhKS4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChudUNhbGMgPCAwIHx8IG51Q2FsYyA+PSAwLjUpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKG1hdE5hbWUgKyAnOiBDYWxjdWxhdGVkIFBvaXNzb25cJ3MgcmF0aW8gzr0gPSAnICsgZm10KG51Q2FsYywgMykgKyAnIGlzIG91dHNpZGUgdHlwaWNhbCBpc290cm9waWMgcmFuZ2UuJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoRSA+IDAgJiYgSyA8PSAwICYmIG51ICE9PSBudWxsICYmIG51ID49IDAgJiYgbnUgPCAwLjUpIHsNCiAgICAgICAgICAgIEsgPSBFIC8gKDMgKiAoMSAtIDIgKiBudSkpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsgRTogRSwgRzogRywgSzogSywgbnU6IG51IH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY0JlYW1EZWZsZWN0aW9uKEUsIEksIEwsIGJlYW1UeXBlLCB1KSB7DQogICAgICAgIGlmICghZWxzLmVuYWJsZUJlYW1EZWZsZWN0aW9uLmNoZWNrZWQgfHwgRSA8PSAwIHx8IEkgPD0gMCB8fCBMIDw9IDApIHJldHVybiBudWxsOw0KDQogICAgICAgIHZhciBidCA9IGVs\"+\"cy5iZWFtVHlwZS52YWx1ZTsNCiAgICAgICAgdmFyIGRlbHRhID0gMDsNCg0KICAgICAgICBpZiAoYnQgPT09ICdzaW1wbHlfc3VwcG9ydGVkX3BvaW50Jykgew0KICAgICAgICAgICAgdmFyIFAgPSB1LmZvcmNlRnJvbUlucHV0KHBhcnNlRmxvYXQoZWxzLmJlYW1Qb2ludExvYWQudmFsdWUpIHx8IDApOw0KICAgICAgICAgICAgZGVsdGEgPSBQICogTWF0aC5wb3coTCwgMykgLyAoNDggKiBFICogSSk7DQogICAgICAgIH0gZWxzZSBpZiAoYnQgPT09ICdzaW1wbHlfc3VwcG9ydGVkX3VkbCcpIHsNCiAgICAgICAgICAgIHZhciB3ID0gdS51ZGxGcm9tSW5wdXQocGFyc2VGbG9hdChlbHMuYmVhbVVkbC52YWx1ZSkgfHwgMCk7DQogICAgICAgICAgICBkZWx0YSA9IDUgKiB3ICogTWF0aC5wb3coTCwgNCkgLyAoMzg0ICogRSAqIEkpOw0KICAgICAgICB9IGVsc2UgaWYgKGJ0ID09PSAnY2FudGlsZXZlcl9wb2ludCcpIHsNCiAgICAgICAgICAgIFAgPSB1LmZvcmNlRnJvbUlucHV0KHBhcnNlRmxvYXQoZWxzLmJlYW1Qb2ludExvYWQudmFsdWUpIHx8IDApOw0KICAgICAgICAgICAgZGVsdGEgPSBQICogTWF0aC5wb3coTCwgMykgLyAoMyAqIEUgKiBJKTsNCiAgICAgICAgfSBlbHNlIGlmIChidCA9PT0gJ2NhbnRpbGV2ZXJfdWRsJykgew0KICAgICAgICAgICAgdyA9IHUudWRsRnJvbUlucHV0KHBhcnNlRmxvYXQoZWxzLmJlYW1VZGwudmFsdWUpIHx8IDApOw0KICAgICAgICAgICAgZGVsdGEgPSB3ICogTWF0aC5wb3coTCwgNCkgLyAoOCAqIEUgKiBJKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZGVsdGE7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdmFsaWRhdGUod2FybmluZ3MpIHsNCiAgICAgICAgcmVhZE1hdGVyaWFsc0Zyb21ET00oKTsNCiAgICAgICAgaWYgKG1hdGVyaWFscy5sZW5ndGggPCAyKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdBdCBsZWFzdCB0d28gbWF0ZXJpYWxzIGFyZSByZXF1aXJlZCBmb3IgY29tcGFyaXNvbi4nKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBvayA9IHRydWU7DQogICAgICAgIG1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7DQogICAgICAgICAgICBpZiAobS5FIDw9IDApIHsgd2FybmluZ3MucHVzaChtLm5hbWUgKyAnOiBZb3VuZ1wncyBtb2R1bHVzIG11c3QgYmUgcG9zaXRpdmUuJyk7IG9rID0gZmFsc2U7IH0NCiAgICAgICAgICAgIGlmIChlbHMuY2FsY01vZGUudmFsdWUgPT09ICdzdGlmZm5lc3NXZWlnaHQnIHx8IGVscy5jYWxjTW9kZS52YWx1ZSA9PT0gJ3JhbmtpbmcnKSB7DQogICAgICAgICAgICAgICAgaWYgKG0ucmhvIDw9IDApIHsgd2FybmluZ3MucHVzaChtLm5hbWUgKyAnOiBEZW5zaXR5IG11c3QgYmUgcG9zaXRpdmUgZm9yIHN0aWZmbmVzcy10by13ZWlnaHQgYW5hbHlzaXMuJyk7IG9rID0gZmFsc2U7IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgaWYgKGVscy5nZW9tZXRy\"+\"eU1vZGUudmFsdWUgPT09ICdzYW1lJykgew0KICAgICAgICAgICAgdmFyIGcgPSByZWFkU2hhcmVkR2VvbWV0cnkoKTsNCiAgICAgICAgICAgIGlmIChnLmxlbmd0aCA8PSAwKSB7IHdhcm5pbmdzLnB1c2goJ0NvbXBvbmVudCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZS4nKTsgb2sgPSBmYWxzZTsgfQ0KICAgICAgICAgICAgaWYgKGcuc2VjdGlvblR5cGUgPT09ICdob2xsb3dfcm91bmQnICYmIGcuaW5uZXJEaWFtZXRlciA+PSBnLm91dGVyRGlhbWV0ZXIpIHsNCiAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdJbm5lciBkaWFtZXRlciBtdXN0IGJlIGxlc3MgdGhhbiBvdXRlciBkaWFtZXRlci4nKTsgb2sgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBzZWMgPSBjYWxjU2VjdGlvblByb3BzKGcsIGcudSk7DQogICAgICAgICAgICBpZiAoc2VjLkEgPD0gMCkgeyB3YXJuaW5ncy5wdXNoKCdJbnZhbGlkIGNyb3NzLXNlY3Rpb24gZ2VvbWV0cnkg4oCUIGFyZWEgbXVzdCBiZSBwb3NpdGl2ZS4nKTsgb2sgPSBmYWxzZTsgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbWF0ZXJpYWxzLmZvckVhY2goZnVuY3Rpb24gKG0pIHsNCiAgICAgICAgICAgICAgICBpZiAobS5nZW9tLmxlbmd0aCA8PSAwKSB7IHdhcm5pbmdzLnB1c2gobS5uYW1lICsgJzogTGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUuJyk7IG9rID0gZmFsc2U7IH0NCiAgICAgICAgICAgICAgICBpZiAobS5nZW9tLnNlY3Rpb25UeXBlID09PSAnaG9sbG93X3JvdW5kJyAmJiBtLmdlb20uaW5uZXJEaWFtZXRlciA+PSBtLmdlb20ub3V0ZXJEaWFtZXRlcikgew0KICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKG0ubmFtZSArICc6IElubmVyIGRpYW1ldGVyIG11c3QgYmUgbGVzcyB0aGFuIG91dGVyIGRpYW1ldGVyLicpOyBvayA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG9rOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNvbXB1dGVSZXN1bHRzKCkgew0KICAgICAgICB2YXIgd2FybmluZ3MgPSBbXTsNCiAgICAgICAgaWYgKCF2YWxpZGF0ZSh3YXJuaW5ncykpIHJldHVybiB7IG9rOiBmYWxzZSwgd2FybmluZ3M6IHdhcm5pbmdzIH07DQoNCiAgICAgICAgdmFyIHUgPSBnZXRVbml0cygpOw0KICAgICAgICB2YXIgc2hhcmVkR2VvbSA9IGVscy5nZW9tZXRyeU1vZGUudmFsdWUgPT09ICdzYW1lJyA\/IHJlYWRTaGFyZWRHZW9tZXRyeSgpIDogbnVsbDsNCiAgICAgICAgdmFyIEZfYXhpYWwgPSB1LmZvcmNlRnJvbUlucHV0KHBhcnNlRmxvYXQoZWxzLmF4aWFsTG9hZC52YWx1ZSkgfHwgMCk7DQogICAgICAgIHZhciBGX3NoZWFyID0gdS5mb3JjZUZyb21JbnB1dChwYXJzZUZsb2F0KGVscy5zaGVhckZvcmNlLnZhbHVlKSB8fCAwKTsNCiAgICAgICAgdmFyIFQgPSB1LnRvcnF1ZUZyb21JbnB1dChwYXJzZUZsb2F0KGVscy50b3JxdWUudmFsdWUpIHx8\"+\"IDApOw0KDQogICAgICAgIHZhciByZXN1bHRzID0gW107DQogICAgICAgIG1hdGVyaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7DQogICAgICAgICAgICB2YXIgZ2VvbSA9IHNoYXJlZEdlb20gPyB7DQogICAgICAgICAgICAgICAgc2VjdGlvblR5cGU6IHNoYXJlZEdlb20uc2VjdGlvblR5cGUsDQogICAgICAgICAgICAgICAgZGlhbWV0ZXI6IHNoYXJlZEdlb20uZGlhbWV0ZXIsDQogICAgICAgICAgICAgICAgb3V0ZXJEaWFtZXRlcjogc2hhcmVkR2VvbS5vdXRlckRpYW1ldGVyLA0KICAgICAgICAgICAgICAgIGlubmVyRGlhbWV0ZXI6IHNoYXJlZEdlb20uaW5uZXJEaWFtZXRlciwNCiAgICAgICAgICAgICAgICB3aWR0aDogc2hhcmVkR2VvbS53aWR0aCwNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNoYXJlZEdlb20uaGVpZ2h0LA0KICAgICAgICAgICAgICAgIGN1c3RvbUFyZWE6IHNoYXJlZEdlb20uY3VzdG9tQXJlYSwNCiAgICAgICAgICAgICAgICBjdXN0b21JOiBzaGFyZWRHZW9tLmN1c3RvbUksDQogICAgICAgICAgICAgICAgY3VzdG9tSjogc2hhcmVkR2VvbS5jdXN0b21KLA0KICAgICAgICAgICAgICAgIGxlbmd0aDogc2hhcmVkR2VvbS5sZW5ndGgNCiAgICAgICAgICAgIH0gOiBtLmdlb207DQoNCiAgICAgICAgICAgIHZhciBMID0gdS5sZW5ndGhGcm9tSW5wdXQoZ2VvbS5sZW5ndGgpOw0KICAgICAgICAgICAgdmFyIHNlYyA9IGNhbGNTZWN0aW9uUHJvcHMoZ2VvbSwgdSk7DQogICAgICAgICAgICB2YXIgQSA9IHNlYy5BLCBJID0gc2VjLkksIEogPSBzZWMuSjsNCg0KICAgICAgICAgICAgdmFyIEUgPSB1LkVmcm9tSW5wdXQobS5FKTsNCiAgICAgICAgICAgIHZhciBHID0gdS5HZnJvbUlucHV0KG0uRyk7DQogICAgICAgICAgICB2YXIgSyA9IG0uSyAhPT0gJycgPyB1Lktmcm9tSW5wdXQobS5LKSA6IDA7DQogICAgICAgICAgICB2YXIgbnUgPSBtLm51Ow0KICAgICAgICAgICAgdmFyIHJobyA9IHUucmhvZnJvbUlucHV0KG0ucmhvKTsNCg0KICAgICAgICAgICAgdmFyIGVjID0gcmVzb2x2ZUVsYXN0aWNDb25zdGFudHMoRSwgRywgSywgbnUsIHdhcm5pbmdzLCBtLm5hbWUpOw0KICAgICAgICAgICAgRSA9IGVjLkU7IEcgPSBlYy5HOyBLID0gZWMuSzsNCg0KICAgICAgICAgICAgaWYgKFBSRVNFVFNbbS5wcmVzZXRdICYmIFBSRVNFVFNbbS5wcmVzZXRdLmFuaXNvdHJvcGljKSB7DQogICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChtLm5hbWUgKyAnOiBDb21wb3NpdGUvYW5pc290cm9waWMgbWF0ZXJpYWwg4oCUIGlzb3Ryb3BpYyBlbGFzdGljIHJlbGF0aW9uc2hpcHMgbWF5IG5vdCBhcHBseS4gVXNlIGRpcmVjdGlvbmFsIHByb3BlcnRpZXMuJyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBrQXhpYWwgPSBMID4gMCA\/IEEgKiBFIC8gTCA6IDA7DQogICAgICAgICAgICB2YXIga1NoZWFyID0gTCA+IDAgJiYgRyA+IDAgPyBHICogQSAvIEwgOiAwOw0KICAgICAgICAgICAgdmFyIEVJID0g\"+\"RSAqIEk7DQogICAgICAgICAgICB2YXIga1RvcnNpb24gPSBMID4gMCAmJiBHID4gMCAmJiBKID4gMCA\/IEcgKiBKIC8gTCA6IDA7DQogICAgICAgICAgICB2YXIgYXhpYWxEZWYgPSBrQXhpYWwgPiAwID8gRl9heGlhbCAvIGtBeGlhbCA6IG51bGw7DQogICAgICAgICAgICB2YXIgdHdpc3QgPSBrVG9yc2lvbiA+IDAgPyBUIC8ga1RvcnNpb24gOiBudWxsOw0KICAgICAgICAgICAgdmFyIGJlYW1EZWYgPSBjYWxjQmVhbURlZmxlY3Rpb24oRSwgSSwgTCwgZWxzLmJlYW1UeXBlLnZhbHVlLCB1KTsNCiAgICAgICAgICAgIHZhciB2b2x1bWUgPSBBICogTDsNCiAgICAgICAgICAgIHZhciBtYXNzID0gcmhvID4gMCA\/IHJobyAqIHZvbHVtZSAqIDFlLTkgOiAwOw0KICAgICAgICAgICAgdmFyIHNwZWNpZmljRSA9IHJobyA+IDAgPyBFIC8gcmhvIDogMDsNCiAgICAgICAgICAgIHZhciBzcGVjaWZpY0cgPSByaG8gPiAwICYmIEcgPiAwID8gRyAvIHJobyA6IDA7DQogICAgICAgICAgICB2YXIgc3RpZmZuZXNzUGVyTWFzcyA9IG1hc3MgPiAwID8ga0F4aWFsIC8gbWFzcyA6IDA7DQoNCiAgICAgICAgICAgIGlmIChtLnN5ICYmIGF4aWFsRGVmICE9PSBudWxsICYmIEwgPiAwKSB7DQogICAgICAgICAgICAgICAgdmFyIHN0cmFpbiA9IGF4aWFsRGVmIC8gTDsNCiAgICAgICAgICAgICAgICB2YXIgc3RyZXNzID0gRSAqIHN0cmFpbjsNCiAgICAgICAgICAgICAgICB2YXIgc3lNUGEgPSB1LkVmcm9tSW5wdXQobS5zeSk7DQogICAgICAgICAgICAgICAgaWYgKHN0cmVzcyA+IHN5TVBhICogMC44KSB7DQogICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2gobS5uYW1lICsgJzogQXhpYWwgc3RyZXNzICh+JyArIGZtdCh1LkV0b0Rpc3BsYXkoc3RyZXNzKSwgMSkgKyAnICcgKyB1Lm1vZHVsdXNFICsNCiAgICAgICAgICAgICAgICAgICAgICAgICcpIG1heSBleGNlZWQgZWxhc3RpYyByYW5nZSDigJQgdmVyaWZ5IGFnYWluc3QgeWllbGQgc3RyZW5ndGguJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXN1bHRzLnB1c2goew0KICAgICAgICAgICAgICAgIGluZGV4OiBpLA0KICAgICAgICAgICAgICAgIG5hbWU6IG0ubmFtZSwNCiAgICAgICAgICAgICAgICBpc1JlZjogbS5pc1JlZiwNCiAgICAgICAgICAgICAgICBFOiBFLCBHOiBHLCBLOiBLLCByaG86IHJobywNCiAgICAgICAgICAgICAgICBBOiBBLCBJOiBJLCBKOiBKLCBMOiBMLA0KICAgICAgICAgICAgICAgIGtBeGlhbDoga0F4aWFsLCBrU2hlYXI6IGtTaGVhciwgRUk6IEVJLCBrVG9yc2lvbjoga1RvcnNpb24sDQogICAgICAgICAgICAgICAgYXhpYWxEZWY6IGF4aWFsRGVmLCBiZWFtRGVmOiBiZWFtRGVmLCB0d2lzdDogdHdpc3QsDQogICAgICAgICAgICAgICAgbWFzczogbWFzcywgc3BlY2lmaWNFOiBzcGVjaWZpY0UsIHNwZWNpZmljRzogc3BlY2lmaWNHLA0KICAgICAgICAgICAgICAgIHN0aWZmbmVzc1Blck1hc3M6IHN0aWZmbmVz\"+\"c1Blck1hc3MNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCg0KICAgICAgICB2YXIgcmVmID0gcmVzdWx0c1tyZWZJbmRleF0gfHwgcmVzdWx0c1swXTsNCiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICByLnJlbGF0aXZlRSA9IHJlZi5FID4gMCA\/IHIuRSAvIHJlZi5FICogMTAwIDogbnVsbDsNCiAgICAgICAgICAgIHIucmVsYXRpdmVBeGlhbCA9IHJlZi5rQXhpYWwgPiAwID8gci5rQXhpYWwgLyByZWYua0F4aWFsICogMTAwIDogbnVsbDsNCiAgICAgICAgICAgIHIucmVsYXRpdmVCZW5kaW5nID0gcmVmLkVJID4gMCA\/IHIuRUkgLyByZWYuRUkgKiAxMDAgOiBudWxsOw0KICAgICAgICAgICAgci5yZWxhdGl2ZVRvcnNpb24gPSByZWYua1RvcnNpb24gPiAwID8gci5rVG9yc2lvbiAvIHJlZi5rVG9yc2lvbiAqIDEwMCA6IG51bGw7DQogICAgICAgICAgICByLnJlbGF0aXZlTWFzcyA9IHJlZi5tYXNzID4gMCA\/IHIubWFzcyAvIHJlZi5tYXNzICogMTAwIDogbnVsbDsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgdmFyIGNyaXRlcmlvbiA9IFJBTktfQ1JJVEVSSUFbZWxzLnJhbmtDcml0ZXJpb24udmFsdWVdIHx8IFJBTktfQ1JJVEVSSUEuc3BlY2lmaWNFOw0KICAgICAgICB2YXIgc29ydGVkID0gcmVzdWx0cy5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsNCiAgICAgICAgICAgIHZhciB2YSA9IGFbY3JpdGVyaW9uLmtleV0sIHZiID0gYltjcml0ZXJpb24ua2V5XTsNCiAgICAgICAgICAgIGlmICh2YSA9PT0gbnVsbCB8fCB2YSA9PT0gdW5kZWZpbmVkKSB2YSA9IGNyaXRlcmlvbi5oaWdoZXIgPyAtSW5maW5pdHkgOiBJbmZpbml0eTsNCiAgICAgICAgICAgIGlmICh2YiA9PT0gbnVsbCB8fCB2YiA9PT0gdW5kZWZpbmVkKSB2YiA9IGNyaXRlcmlvbi5oaWdoZXIgPyAtSW5maW5pdHkgOiBJbmZpbml0eTsNCiAgICAgICAgICAgIHJldHVybiBjcml0ZXJpb24uaGlnaGVyID8gdmIgLSB2YSA6IHZhIC0gdmI7DQogICAgICAgIH0pOw0KICAgICAgICBzb3J0ZWQuZm9yRWFjaChmdW5jdGlvbiAociwgcmFuaykgew0KICAgICAgICAgICAgcmVzdWx0c1tyLmluZGV4XS5yYW5rID0gcmFuayArIDE7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB3YXJuaW5nczogd2FybmluZ3MsIHJlc3VsdHM6IHJlc3VsdHMsIHJlZjogcmVmLCBjcml0ZXJpb246IGNyaXRlcmlvbiB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbmRlcldhcm5pbmdzKHdhcm5pbmdzKSB7DQogICAgICAgIHZhciBlbCA9IGVscy53YXJuaW5nczsNCiAgICAgICAgaWYgKCF3YXJuaW5ncy5sZW5ndGgpIHsgZWwuaGlkZGVuID0gdHJ1ZTsgZWwuaW5uZXJIVE1MID0gJyc7IHJldHVybjsgfQ0KICAgICAgICBlbC5oaWRkZW4gPSBmYWxzZTsNCiAgICAgICAgZWwuaW5uZXJIVE1MID0gJzxzdHJvbmc+V2FybmluZ3M6PC9zdHJvbmc+PHVsPicgKw0KICAgICAgICAgICAgd2FybmluZ3MubWFw\"+\"KGZ1bmN0aW9uICh3KSB7IHJldHVybiAnPGxpPicgKyB3ICsgJzwvbGk+JzsgfSkuam9pbignJykgKyAnPC91bD4nOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbmRlckNsYXNzaWZpY2F0aW9ucyhkYXRhKSB7DQogICAgICAgIHZhciByZXN1bHRzID0gZGF0YS5yZXN1bHRzOw0KICAgICAgICB2YXIgYyA9IGRhdGEuY3JpdGVyaW9uOw0KICAgICAgICB2YXIgYmVzdCA9IHJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7DQogICAgICAgICAgICB2YXIgdmEgPSBhW2Mua2V5XSwgdmIgPSBiW2Mua2V5XTsNCiAgICAgICAgICAgIGlmICh2YSA9PT0gbnVsbCkgcmV0dXJuIGI7DQogICAgICAgICAgICBpZiAodmIgPT09IG51bGwpIHJldHVybiBhOw0KICAgICAgICAgICAgcmV0dXJuIGMuaGlnaGVyID8gKHZhID49IHZiID8gYSA6IGIpIDogKHZhIDw9IHZiID8gYSA6IGIpOw0KICAgICAgICB9KTsNCiAgICAgICAgdmFyIGJlc3RTcGVjID0gcmVzdWx0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsNCiAgICAgICAgICAgIHJldHVybiAoYi5zcGVjaWZpY0UgfHwgMCkgPiAoYS5zcGVjaWZpY0UgfHwgMCkgPyBiIDogYTsNCiAgICAgICAgfSk7DQogICAgICAgIHZhciBsb3dlc3REZWYgPSByZXN1bHRzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgew0KICAgICAgICAgICAgdmFyIGRhID0gYS5heGlhbERlZiwgZGIgPSBiLmF4aWFsRGVmOw0KICAgICAgICAgICAgaWYgKGRhID09PSBudWxsKSByZXR1cm4gYjsNCiAgICAgICAgICAgIGlmIChkYiA9PT0gbnVsbCkgcmV0dXJuIGE7DQogICAgICAgICAgICByZXR1cm4gZGEgPD0gZGIgPyBhIDogYjsNCiAgICAgICAgfSk7DQogICAgICAgIHZhciBtb3N0Q29tcGxpYW50ID0gcmVzdWx0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsNCiAgICAgICAgICAgIHJldHVybiAoYVtjLmtleV0gfHwgMCkgPD0gKGJbYy5rZXldIHx8IDApID8gYSA6IGI7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5jbGFzc2lmaWNhdGlvbnMuaW5uZXJIVE1MID0NCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtY2xhc3MtY2FyZCI+PHNwYW4gY2xhc3M9Im1zYy1jbGFzcy1sYWJlbCI+SGlnaGVzdCBTdGlmZm5lc3MgKCcgKyBjLmxhYmVsICsgJyk8L3NwYW4+JyArDQogICAgICAgICAgICAnPHNwYW4gY2xhc3M9Im1zYy1jbGFzcy12YWx1ZSI+JyArIGJlc3QubmFtZSArICc8L3NwYW4+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWNsYXNzLWNhcmQiPjxzcGFuIGNsYXNzPSJtc2MtY2xhc3MtbGFiZWwiPkJlc3QgTGlnaHR3ZWlnaHQgU3RpZmZuZXNzPC9zcGFuPicgKw0KICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJtc2MtY2xhc3MtdmFsdWUiPicgKyBiZXN0U3BlYy5uYW1lICsgJzwvc3Bhbj48L2Rpdj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtc2MtY2xhc3MtY2FyZCI+PHNwYW4gY2xhc3M9Im1zYy1jbGFzcy1sYWJlbCI+TG93ZXN0IEF4aWFsIERlZm9ybWF0aW9u\"+\"PC9zcGFuPicgKw0KICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJtc2MtY2xhc3MtdmFsdWUiPicgKyBsb3dlc3REZWYubmFtZSArICc8L3NwYW4+PC9kaXY+JyArDQogICAgICAgICAgICAnPGRpdiBjbGFzcz0ibXNjLWNsYXNzLWNhcmQiPjxzcGFuIGNsYXNzPSJtc2MtY2xhc3MtbGFiZWwiPk1vc3QgQ29tcGxpYW50PC9zcGFuPicgKw0KICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJtc2MtY2xhc3MtdmFsdWUiPicgKyBtb3N0Q29tcGxpYW50Lm5hbWUgKyAnPC9zcGFuPjwvZGl2Pic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVuZGVyVGFibGUoZGF0YSkgew0KICAgICAgICB2YXIgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIHZhciByZXN1bHRzID0gZGF0YS5yZXN1bHRzOw0KICAgICAgICB2YXIgbW9kZSA9IGVscy5jYWxjTW9kZS52YWx1ZTsNCiAgICAgICAgdmFyIGhpZ2hsaWdodFJvd3MgPSBNT0RFX1JPV1NbbW9kZV0gfHwgW107DQoNCiAgICAgICAgdmFyIHJvd0RlZnMgPSBbDQogICAgICAgICAgICB7IGtleTogJ0UnLCBsYWJlbDogIllvdW5nJ3MgTW9kdWx1cyIsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIGZtdCh1LkV0b0Rpc3BsYXkoci5FKSwgMikgKyAnICcgKyB1Lm1vZHVsdXNFOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ0cnLCBsYWJlbDogJ1NoZWFyIE1vZHVsdXMnLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiByLkcgPiAwID8gZm10KHUuR3RvRGlzcGxheShyLkcpLCAyKSArICcgJyArIHUubW9kdWx1c0cgOiAn4oCUJzsgfSB9LA0KICAgICAgICAgICAgeyBrZXk6ICdyaG8nLCBsYWJlbDogJ0RlbnNpdHknLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnJobyA+IDAgPyBmbXQodS5yaG90b0Rpc3BsYXkoci5yaG8pLCAxKSArICcgJyArIHUuZGVuc2l0eSA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ0EnLCBsYWJlbDogJ0Nyb3NzLVNlY3Rpb24gQXJlYScsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIGZtdCh1LmFyZWFUb0Rpc3BsYXkoci5BKSwgMykgKyAnICcgKyB1LmFyZWE7IH0gfSwNCiAgICAgICAgICAgIHsga2V5OiAna0F4aWFsJywgbGFiZWw6ICdBeGlhbCBTdGlmZm5lc3MnLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiBmbXQodS5heGlhbFN0aWZmVG9EaXNwbGF5KHIua0F4aWFsKSwgMikgKyAnICcgKyB1LmF4aWFsU3RpZmY7IH0gfSwNCiAgICAgICAgICAgIHsga2V5OiAnYXhpYWxEZWYnLCBsYWJlbDogJ0F4aWFsIERlZm9ybWF0aW9uJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gci5heGlhbERlZiAhPT0gbnVsbCA\/IGZtdCh1LmRlZmxlY3Rpb25Ub0Rpc3BsYXkoci5heGlhbERlZiksIDQpICsgJyAnICsgdS5kZWZsZWN0aW9uIDogJ+KAlCc7IH0gfSwNCiAgICAgICAgICAgIHsga2V5OiAnRUknLCBsYWJlbDogJ0JlbmRpbmcgU3RpZmZuZXNzIEVJJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gZm10KHUuRUl0b0Rpc3BsYXkoci5FSSks\"+\"IDIpICsgJyAnICsgdS5FSXVuaXQ7IH0gfSwNCiAgICAgICAgICAgIHsga2V5OiAnYmVhbURlZicsIGxhYmVsOiAnQmVhbSBEZWZsZWN0aW9uJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gci5iZWFtRGVmICE9PSBudWxsID8gZm10KHUuZGVmbGVjdGlvblRvRGlzcGxheShyLmJlYW1EZWYpLCA0KSArICcgJyArIHUuZGVmbGVjdGlvbiA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ2tUb3JzaW9uJywgbGFiZWw6ICdUb3JzaW9uYWwgU3RpZmZuZXNzJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gci5rVG9yc2lvbiA+IDAgPyBmbXQodS5rVG9yc2lvblRvRGlzcGxheShyLmtUb3JzaW9uKSwgMikgKyAnICcgKyB1LmtUb3JzaW9uVW5pdCA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ3R3aXN0JywgbGFiZWw6ICdBbmdsZSBvZiBUd2lzdCcsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIudHdpc3QgIT09IG51bGwgPyBmbXQoci50d2lzdCAqIDE4MCAvIE1hdGguUEksIDQpICsgJyAnICsgdS5hbmdsZSA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ3NwZWNpZmljRScsIGxhYmVsOiAnU3BlY2lmaWMgTW9kdWx1cyBFL8+BJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gci5zcGVjaWZpY0UgPiAwID8gZm10KHUuc3BlY2lmaWNFdG9EaXNwbGF5KHIuc3BlY2lmaWNFKSwgMikgKyAnICcgKyB1LnNwZWNpZmljRXVuaXQgOiAn4oCUJzsgfSB9LA0KICAgICAgICAgICAgeyBrZXk6ICdtYXNzJywgbGFiZWw6ICdDb21wb25lbnQgTWFzcycsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIubWFzcyA+IDAgPyBmbXQodS5tYXNzVG9EaXNwbGF5KHIubWFzcyksIDQpICsgJyAnICsgdS5tYXNzIDogJ+KAlCc7IH0gfSwNCiAgICAgICAgICAgIHsga2V5OiAnc3RpZmZuZXNzUGVyTWFzcycsIGxhYmVsOiAnQXhpYWwgU3RpZmZuZXNzIC8gTWFzcycsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIuc3RpZmZuZXNzUGVyTWFzcyA+IDAgPyBmbXQoci5zdGlmZm5lc3NQZXJNYXNzLCAyKSA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ3JlbGF0aXZlRScsIGxhYmVsOiAnUmVsYXRpdmUgRSAoJSknLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnJlbGF0aXZlRSAhPT0gbnVsbCA\/IGZtdChyLnJlbGF0aXZlRSwgMSkgKyAnJScgOiAn4oCUJzsgfSB9LA0KICAgICAgICAgICAgeyBrZXk6ICdyZWxhdGl2ZUF4aWFsJywgbGFiZWw6ICdSZWxhdGl2ZSBBeGlhbCBTdGlmZm5lc3MgKCUpJywgZm10OiBmdW5jdGlvbiAocikgeyByZXR1cm4gci5yZWxhdGl2ZUF4aWFsICE9PSBudWxsID8gZm10KHIucmVsYXRpdmVBeGlhbCwgMSkgKyAnJScgOiAn4oCUJzsgfSB9LA0KICAgICAgICAgICAgeyBrZXk6ICdyZWxhdGl2ZUJlbmRpbmcnLCBsYWJlbDogJ1JlbGF0aXZlIEJlbmRpbmcgU3RpZmZuZXNzICglKScsIGZtdDogZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIucmVsYXRp\"+\"dmVCZW5kaW5nICE9PSBudWxsID8gZm10KHIucmVsYXRpdmVCZW5kaW5nLCAxKSArICclJyA6ICfigJQnOyB9IH0sDQogICAgICAgICAgICB7IGtleTogJ3JlbGF0aXZlTWFzcycsIGxhYmVsOiAnUmVsYXRpdmUgTWFzcyAoJSknLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnJlbGF0aXZlTWFzcyAhPT0gbnVsbCA\/IGZtdChyLnJlbGF0aXZlTWFzcywgMSkgKyAnJScgOiAn4oCUJzsgfSB9LA0KICAgICAgICAgICAgeyBrZXk6ICdyYW5rJywgbGFiZWw6ICdPdmVyYWxsIFJhbmtpbmcnLCBmbXQ6IGZ1bmN0aW9uIChyKSB7IHJldHVybiBvcmRpbmFsKHIucmFuayk7IH0gfQ0KICAgICAgICBdOw0KDQogICAgICAgIHZhciB0aGVhZCA9ICc8dHI+PHRoPk1ldHJpYzwvdGg+JyArIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICByZXR1cm4gJzx0aD4nICsgci5uYW1lICsgKHIuaXNSZWYgPyAnIOKYhScgOiAnJykgKyAnPC90aD4nOw0KICAgICAgICB9KS5qb2luKCcnKSArICc8L3RyPic7DQoNCiAgICAgICAgdmFyIHRib2R5ID0gcm93RGVmcy5tYXAoZnVuY3Rpb24gKHJvdykgew0KICAgICAgICAgICAgdmFyIGNscyA9IGhpZ2hsaWdodFJvd3MuaW5kZXhPZihyb3cua2V5KSAhPT0gLTEgPyAnIGNsYXNzPSJtc2MtaGlnaGxpZ2h0IicgOiAnJzsNCiAgICAgICAgICAgIHZhciBjZWxscyA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHJvdy5mbXQocik7DQogICAgICAgICAgICAgICAgdmFyIGJlc3QgPSBpc0Jlc3QocmVzdWx0cywgcm93LmtleSwgcik7DQogICAgICAgICAgICAgICAgcmV0dXJuICc8dGQnICsgKGJlc3QgPyAnIGNsYXNzPSJtc2MtYmVzdCInIDogJycpICsgJz4nICsgdmFsICsgJzwvdGQ+JzsNCiAgICAgICAgICAgIH0pLmpvaW4oJycpOw0KICAgICAgICAgICAgcmV0dXJuICc8dHInICsgY2xzICsgJz48dGQ+JyArIHJvdy5sYWJlbCArICc8L3RkPicgKyBjZWxscyArICc8L3RyPic7DQogICAgICAgIH0pLmpvaW4oJycpOw0KDQogICAgICAgIGVscy5yZXN1bHRzVGFibGUucXVlcnlTZWxlY3RvcigndGhlYWQnKS5pbm5lckhUTUwgPSB0aGVhZDsNCiAgICAgICAgZWxzLnJlc3VsdHNUYWJsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpLmlubmVySFRNTCA9IHRib2R5Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIG9yZGluYWwobikgew0KICAgICAgICB2YXIgcyA9IFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXTsNCiAgICAgICAgdmFyIHYgPSBuICUgMTAwOw0KICAgICAgICByZXR1cm4gbiArIChzWyh2IC0gMjApICUgMTBdIHx8IHNbdl0gfHwgc1swXSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNCZXN0KHJlc3VsdHMsIGtleSwgcikgew0KICAgICAgICB2YXIgaGlnaGVyS2V5cyA9IFsnRScsICdHJywgJ2tBeGlhbCcsICdFSScsICdrVG9yc2lvbicsICdzcGVjaWZpY0UnLCAnc3RpZmZuZXNzUGVyTWFzcyddOw0KICAgICAgICB2YXIgbG93ZXJL\"+\"ZXlzID0gWydheGlhbERlZicsICdiZWFtRGVmJywgJ3R3aXN0JywgJ21hc3MnXTsNCiAgICAgICAgdmFyIHZhbHMgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geFtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkICYmIGlzRmluaXRlKHYpOyB9KTsNCiAgICAgICAgaWYgKCF2YWxzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOw0KICAgICAgICB2YXIgdmFsID0gcltrZXldOw0KICAgICAgICBpZiAodmFsID09PSBudWxsIHx8ICFpc0Zpbml0ZSh2YWwpKSByZXR1cm4gZmFsc2U7DQogICAgICAgIGlmIChoaWdoZXJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHJldHVybiB2YWwgPj0gTWF0aC5tYXguYXBwbHkobnVsbCwgdmFscyk7DQogICAgICAgIGlmIChsb3dlcktleXMuaW5kZXhPZihrZXkpICE9PSAtMSkgcmV0dXJuIHZhbCA8PSBNYXRoLm1pbi5hcHBseShudWxsLCB2YWxzKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbmRlckJhckNoYXJ0KGNvbnRhaW5lciwgaXRlbXMsIHVuaXQpIHsNCiAgICAgICAgaWYgKCFjb250YWluZXIpIHJldHVybjsNCiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGl0ZW1zLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gaS52YWx1ZTsgfSkuY29uY2F0KFsxZS0xMl0pKTsNCiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSwgaSkgew0KICAgICAgICAgICAgdmFyIHBjdCA9IG1heCA+IDAgPyAoaXRlbS52YWx1ZSAvIG1heCAqIDEwMCkgOiAwOw0KICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtc2MtYmFyLXJvdyI+JyArDQogICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJtc2MtYmFyLWxhYmVsIiB0aXRsZT0iJyArIGl0ZW0ubGFiZWwgKyAnIj4nICsgaXRlbS5sYWJlbCArICc8L3NwYW4+JyArDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im1zYy1iYXItdHJhY2siPjxkaXYgY2xhc3M9Im1zYy1iYXItZmlsbCIgc3R5bGU9IndpZHRoOicgKyBwY3QgKyAnJTtiYWNrZ3JvdW5kOicgKyBDSEFSVF9DT0xPUlNbaSAlIENIQVJUX0NPTE9SUy5sZW5ndGhdICsgJyI+PC9kaXY+PC9kaXY+JyArDQogICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJtc2MtYmFyLXZhbHVlIj4nICsgZm10KGl0ZW0uZGlzcGxheSwgMikgKyAnPC9zcGFuPjwvZGl2Pic7DQogICAgICAgIH0pLmpvaW4oJycpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlbmRlckNoYXJ0cyhkYXRhKSB7DQogICAgICAgIHZhciB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgdmFyIHJlc3VsdHMgPSBkYXRhLnJlc3VsdHM7DQoNCiAgICAgICAgcmVuZGVyQmFyQ2hhcnQoZWxzLmNoYXJ0WW91bmdzLCByZXN1bHRzLm1hcChmdW5jdGlvbiAociwgaSkgew0KICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHIubmFtZSwgdmFsdWU6\"+\"IHIuRSwgZGlzcGxheTogdS5FdG9EaXNwbGF5KHIuRSkgfTsNCiAgICAgICAgfSksIHUubW9kdWx1c0UpOw0KDQogICAgICAgIHJlbmRlckJhckNoYXJ0KGVscy5jaGFydEF4aWFsLCByZXN1bHRzLm1hcChmdW5jdGlvbiAociwgaSkgew0KICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHIubmFtZSwgdmFsdWU6IHIua0F4aWFsLCBkaXNwbGF5OiB1LmF4aWFsU3RpZmZUb0Rpc3BsYXkoci5rQXhpYWwpIH07DQogICAgICAgIH0pLCB1LmF4aWFsU3RpZmYpOw0KDQogICAgICAgIHJlbmRlckJhckNoYXJ0KGVscy5jaGFydEJlbmRpbmcsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyLCBpKSB7DQogICAgICAgICAgICByZXR1cm4geyBsYWJlbDogci5uYW1lLCB2YWx1ZTogci5FSSwgZGlzcGxheTogdS5FSXRvRGlzcGxheShyLkVJKSB9Ow0KICAgICAgICB9KSwgdS5FSXVuaXQpOw0KDQogICAgICAgIHZhciBkZWZJdGVtcyA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICByZXR1cm4geyBsYWJlbDogci5uYW1lLCB2YWx1ZTogci5heGlhbERlZiB8fCAwLCBkaXNwbGF5OiByLmF4aWFsRGVmICE9PSBudWxsID8gdS5kZWZsZWN0aW9uVG9EaXNwbGF5KHIuYXhpYWxEZWYpIDogMCB9Ow0KICAgICAgICB9KTsNCiAgICAgICAgcmVuZGVyQmFyQ2hhcnQoZWxzLmNoYXJ0RGVmbGVjdGlvbiwgZGVmSXRlbXMsIHUuZGVmbGVjdGlvbik7DQoNCiAgICAgICAgcmVuZGVyQmFyQ2hhcnQoZWxzLmNoYXJ0U3BlY2lmaWMsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICByZXR1cm4geyBsYWJlbDogci5uYW1lLCB2YWx1ZTogci5zcGVjaWZpY0UsIGRpc3BsYXk6IHUuc3BlY2lmaWNFdG9EaXNwbGF5KHIuc3BlY2lmaWNFKSB9Ow0KICAgICAgICB9KSwgdS5zcGVjaWZpY0V1bml0KTsNCg0KICAgICAgICByZW5kZXJTY2F0dGVyKGVscy5jaGFydFNjYXR0ZXIsIHJlc3VsdHMsIHUpOw0KDQogICAgICAgIHZhciByYW5rZWQgPSByZXN1bHRzLnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5yYW5rIC0gYi5yYW5rOyB9KTsNCiAgICAgICAgcmVuZGVyQmFyQ2hhcnQoZWxzLmNoYXJ0UmFua2luZywgcmFua2VkLm1hcChmdW5jdGlvbiAocikgew0KICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IG9yZGluYWwoci5yYW5rKSArICcgJyArIHIubmFtZSwgdmFsdWU6IHJlc3VsdHMubGVuZ3RoIC0gci5yYW5rICsgMSwgZGlzcGxheTogci5yYW5rIH07DQogICAgICAgIH0pLCAnJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVuZGVyU2NhdHRlcihjb250YWluZXIsIHJlc3VsdHMsIHUpIHsNCiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIXJlc3VsdHMubGVuZ3RoKSByZXR1cm47DQogICAgICAgIHZhciB3ID0gMjgwLCBoID0gMTgwLCBwYWQgPSA0MDsNCiAgICAgICAgdmFyIG1heEUgPSBNYXRoLm1heC5hcHBseShudWxsLCByZXN1bHRzLm1hcChmdW5jdGlvbiAocikgeyByZXR1cm4gdS5FdG9E\"+\"aXNwbGF5KHIuRSk7IH0pKTsNCiAgICAgICAgdmFyIG1heFJobyA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiB1LnJob3RvRGlzcGxheShyLnJobyk7IH0pKTsNCiAgICAgICAgbWF4RSA9IG1heEUgfHwgMTsgbWF4UmhvID0gbWF4UmhvIHx8IDE7DQoNCiAgICAgICAgdmFyIGRvdHMgPSByZXN1bHRzLm1hcChmdW5jdGlvbiAociwgaSkgew0KICAgICAgICAgICAgdmFyIGN4ID0gcGFkICsgKHUuRXRvRGlzcGxheShyLkUpIC8gbWF4RSkgKiAodyAtIHBhZCAqIDIpOw0KICAgICAgICAgICAgdmFyIGN5ID0gaCAtIHBhZCAtICh1LnJob3RvRGlzcGxheShyLnJobykgLyBtYXhSaG8pICogKGggLSBwYWQgKiAyKTsNCiAgICAgICAgICAgIHJldHVybiAnPGNpcmNsZSBjeD0iJyArIGN4ICsgJyIgY3k9IicgKyBjeSArICciIHI9IjYiIGZpbGw9IicgKyBDSEFSVF9DT0xPUlNbaSAlIENIQVJUX0NPTE9SUy5sZW5ndGhdICsgJyI+JyArDQogICAgICAgICAgICAgICAgJzx0aXRsZT4nICsgci5uYW1lICsgJzogRT0nICsgZm10KHUuRXRvRGlzcGxheShyLkUpLCAxKSArICcsIM+BPScgKyBmbXQodS5yaG90b0Rpc3BsYXkoci5yaG8pLCAyKSArICc8L3RpdGxlPjwvY2lyY2xlPicgKw0KICAgICAgICAgICAgICAgICc8dGV4dCB4PSInICsgY3ggKyAnIiB5PSInICsgKGN5IC0gMTApICsgJyIgZm9udC1zaXplPSI5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMmMzZTUwIj4nICsgci5uYW1lLnN1YnN0cmluZygwLCA4KSArICc8L3RleHQ+JzsNCiAgICAgICAgfSkuam9pbignJyk7DQoNCiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnIHZpZXdCb3g9IjAgMCAnICsgdyArICcgJyArIGggKyAnIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSInICsgaCArICciPicgKw0KICAgICAgICAgICAgJzxsaW5lIHgxPSInICsgcGFkICsgJyIgeTE9IicgKyAoaCAtIHBhZCkgKyAnIiB4Mj0iJyArICh3IC0gcGFkKSArICciIHkyPSInICsgKGggLSBwYWQpICsgJyIgc3Ryb2tlPSIjY2NjIi8+JyArDQogICAgICAgICAgICAnPGxpbmUgeDE9IicgKyBwYWQgKyAnIiB5MT0iJyArIHBhZCArICciIHgyPSInICsgcGFkICsgJyIgeTI9IicgKyAoaCAtIHBhZCkgKyAnIiBzdHJva2U9IiNjY2MiLz4nICsNCiAgICAgICAgICAgICc8dGV4dCB4PSInICsgKHcgLyAyKSArICciIHk9IicgKyAoaCAtIDUpICsgJyIgZm9udC1zaXplPSIxMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzdmOGM4ZCI+RSAoJyArIHUubW9kdWx1c0UgKyAnKTwvdGV4dD4nICsNCiAgICAgICAgICAgICc8dGV4dCB4PSIxMiIgeT0iJyArIChoIC8gMikgKyAnIiBmb250LXNpemU9IjEwIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgMTIgJyArIChoIC8gMikgKyAnKSIgZmlsbD0iIzdmOGM4ZCI+z4EgKCcgKyB1LmRlbnNpdHkgKyAnKTwvdGV4dD4nICsNCiAgICAgICAgICAgIGRvdHMgKyAnPC9zdmc+JzsNCiAgICB9DQoNCiAg\"+\"ICBmdW5jdGlvbiByZW5kZXJWaXooZGF0YSkgew0KICAgICAgICB2YXIgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIHZhciByZXN1bHRzID0gZGF0YS5yZXN1bHRzOw0KICAgICAgICB2YXIgbWF4RGVmID0gTWF0aC5tYXguYXBwbHkobnVsbCwgcmVzdWx0cy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIuYXhpYWxEZWYgfHwgMDsgfSkuY29uY2F0KFsxZS0xMl0pKTsNCg0KICAgICAgICBlbHMudml6QXhpYWwuaW5uZXJIVE1MID0gcmVzdWx0cy5tYXAoZnVuY3Rpb24gKHIsIGkpIHsNCiAgICAgICAgICAgIHZhciBwY3QgPSBtYXhEZWYgPiAwICYmIHIuYXhpYWxEZWYgPyAoci5heGlhbERlZiAvIG1heERlZiAqIDgwKSA6IDU7DQogICAgICAgICAgICByZXR1cm4gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDttYXJnaW46NnB4IDAiPicgKw0KICAgICAgICAgICAgICAgICc8c3BhbiBzdHlsZT0id2lkdGg6ODBweDtmb250LXNpemU6MC43NXJlbSI+JyArIHIubmFtZSArICc8L3NwYW4+JyArDQogICAgICAgICAgICAgICAgJzxzdmcgd2lkdGg9IjE2MCIgaGVpZ2h0PSIyNCI+PHJlY3QgeD0iMCIgeT0iOCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSI4IiBmaWxsPSIjZWNmMGYxIi8+JyArDQogICAgICAgICAgICAgICAgJzxyZWN0IHg9IicgKyAoMTQwIC0gcGN0KSArICciIHk9IjgiIHdpZHRoPSInICsgcGN0ICsgJyIgaGVpZ2h0PSI4IiBmaWxsPSInICsgQ0hBUlRfQ09MT1JTW2kgJSBDSEFSVF9DT0xPUlMubGVuZ3RoXSArICciLz4nICsNCiAgICAgICAgICAgICAgICAnPHRleHQgeD0iMTQ1IiB5PSIxNiIgZm9udC1zaXplPSI5Ij4nICsgKHIuYXhpYWxEZWYgIT09IG51bGwgPyBmbXQodS5kZWZsZWN0aW9uVG9EaXNwbGF5KHIuYXhpYWxEZWYpLCAzKSA6ICfigJQnKSArICc8L3RleHQ+PC9zdmc+PC9kaXY+JzsNCiAgICAgICAgfSkuam9pbignJyk7DQoNCiAgICAgICAgdmFyIG1heEJlYW0gPSBNYXRoLm1heC5hcHBseShudWxsLCByZXN1bHRzLm1hcChmdW5jdGlvbiAocikgeyByZXR1cm4gci5iZWFtRGVmIHx8IDA7IH0pLmNvbmNhdChbMWUtMTJdKSk7DQogICAgICAgIGVscy52aXpCZWFtLmlubmVySFRNTCA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyLCBpKSB7DQogICAgICAgICAgICB2YXIgYW1wID0gbWF4QmVhbSA+IDAgJiYgci5iZWFtRGVmID8gKHIuYmVhbURlZiAvIG1heEJlYW0gKiAyMCkgOiAyOw0KICAgICAgICAgICAgdmFyIHBhdGggPSAnTTEwLDMwIFE4MCwnICsgKDMwICsgYW1wKSArICcgMTUwLDMwJzsNCiAgICAgICAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0ibWFyZ2luOjhweCAwIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjAuNzVyZW0iPicgKyByLm5hbWUgKyAnPC9zcGFuPicgKw0KICAgICAgICAgICAgICAgICc8c3ZnIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCAxNjAgNDAiPicgKw0KICAgICAgICAgICAgICAgICc8bGluZSB4MT0iMTAiIHkx\"+\"PSIzMCIgeDI9IjE1MCIgeTI9IjMwIiBzdHJva2U9IiNjY2MiIHN0cm9rZS13aWR0aD0iMiIvPicgKw0KICAgICAgICAgICAgICAgICc8cGF0aCBkPSInICsgcGF0aCArICciIGZpbGw9Im5vbmUiIHN0cm9rZT0iJyArIENIQVJUX0NPTE9SU1tpICUgQ0hBUlRfQ09MT1JTLmxlbmd0aF0gKyAnIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz48L2Rpdj4nOw0KICAgICAgICB9KS5qb2luKCcnKSB8fCAnPHAgc3R5bGU9ImZvbnQtc2l6ZTowLjhyZW07Y29sb3I6IzdmOGM4ZCI+RW5hYmxlIGJlYW0gZGVmbGVjdGlvbiB0byB2aWV3LjwvcD4nOw0KDQogICAgICAgIHZhciBtYXhUd2lzdCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLnR3aXN0IHx8IDA7IH0pLmNvbmNhdChbMWUtMTJdKSk7DQogICAgICAgIGVscy52aXpUb3JzaW9uLmlubmVySFRNTCA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyLCBpKSB7DQogICAgICAgICAgICB2YXIgYW5nID0gbWF4VHdpc3QgPiAwICYmIHIudHdpc3QgPyAoci50d2lzdCAvIG1heFR3aXN0ICogMjUpIDogMzsNCiAgICAgICAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbjo2cHggMCI+JyArDQogICAgICAgICAgICAgICAgJzxzcGFuIHN0eWxlPSJ3aWR0aDo4MHB4O2ZvbnQtc2l6ZTowLjc1cmVtIj4nICsgci5uYW1lICsgJzwvc3Bhbj4nICsNCiAgICAgICAgICAgICAgICAnPHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjxsaW5lIHgxPSIyNSIgeTE9IjUiIHgyPSIyNSIgeTI9IjQ1IiBzdHJva2U9IicgKyBDSEFSVF9DT0xPUlNbaSAlIENIQVJUX0NPTE9SUy5sZW5ndGhdICsgJyIgc3Ryb2tlLXdpZHRoPSIzIiB0cmFuc2Zvcm09InJvdGF0ZSgnICsgYW5nICsgJyAyNSAyNSkiLz48L3N2Zz4nICsNCiAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTowLjcycmVtIj4nICsgKHIudHdpc3QgIT09IG51bGwgPyBmbXQoci50d2lzdCAqIDE4MCAvIE1hdGguUEksIDMpICsgJ8KwJyA6ICfigJQnKSArICc8L3NwYW4+PC9kaXY+JzsNCiAgICAgICAgfSkuam9pbignJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVuZGVyUmVjb21tZW5kYXRpb25zKGRhdGEpIHsNCiAgICAgICAgdmFyIG1vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIHZhciByZWNzID0gWw0KICAgICAgICAgICAgJ1NlbGVjdCBhIGhpZ2hlciBZb3VuZ1wncyBtb2R1bHVzIG1hdGVyaWFsIHdoZW4gYXhpYWwgb3IgYmVuZGluZyBzdGlmZm5lc3MgaXMgdGhlIG1haW4gcHJpb3JpdHkuJywNCiAgICAgICAgICAgICdVc2Ugc3BlY2lmaWMgbW9kdWx1cyAoRS\/PgSkgd2hlbiB3ZWlnaHQgcmVkdWN0aW9uIGlzIGNyaXRpY2FsIOKAlCBrZXkgZm9yIGxpZ2h0d2VpZ2h0IGRlc2lnbi4nLA0KICAgICAgICAgICAgJ1VzZSBzaGVhciBtb2R1bHVzIHdoZW4gdG9yc2lvbmFsIG9yIHNo\"+\"ZWFyIGRlZm9ybWF0aW9uIGdvdmVybnMgdGhlIGRlc2lnbi4nLA0KICAgICAgICAgICAgJ0luY3JlYXNlIHNlY3Rpb24gbW9tZW50IG9mIGluZXJ0aWEgKEkpIGlmIGNoYW5naW5nIG1hdGVyaWFsIGFsb25lIGNhbm5vdCBhY2hpZXZlIHJlcXVpcmVkIGJlbmRpbmcgc3RpZmZuZXNzLicsDQogICAgICAgICAgICAnSW5jcmVhc2UgcG9sYXIgbW9tZW50IG9mIGluZXJ0aWEgKEopIHRvIGltcHJvdmUgdG9yc2lvbmFsIHN0aWZmbmVzcyB3aXRob3V0IGNoYW5naW5nIG1hdGVyaWFsLicsDQogICAgICAgICAgICAnUmVtZW1iZXI6IGhpZ2hlciB5aWVsZCBzdHJlbmd0aCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGhpZ2hlciBzdGlmZm5lc3MuJywNCiAgICAgICAgICAgICdDb25zaWRlciBjb3Jyb3Npb24gcmVzaXN0YW5jZSwgY29zdCwgZmF0aWd1ZSwgdGVtcGVyYXR1cmUsIGFuZCBtYW51ZmFjdHVyYWJpbGl0eSBpbiBmaW5hbCBzZWxlY3Rpb24uJywNCiAgICAgICAgICAgICdVc2UgZGlyZWN0aW9uYWwgbWF0ZXJpYWwgcHJvcGVydGllcyBmb3IgY29tcG9zaXRlcyBhbmQgYW5pc290cm9waWMgbWF0ZXJpYWxzLicNCiAgICAgICAgXTsNCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ3N0aWZmbmVzc1dlaWdodCcpIHsNCiAgICAgICAgICAgIHJlY3MudW5zaGlmdCgnRm9yIHN0aWZmbmVzcy10by13ZWlnaHQgb3B0aW1pemF0aW9uLCBwcmlvcml0aXplIG1hdGVyaWFscyB3aXRoIGhpZ2ggc3BlY2lmaWMgbW9kdWx1cy4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAobW9kZSA9PT0gJ3RvcnNpb24nKSB7DQogICAgICAgICAgICByZWNzLnVuc2hpZnQoJ1RvcnNpb25hbCBzdGlmZm5lc3MgZGVwZW5kcyBvbiBib3RoIEcgYW5kIHNlY3Rpb24gZ2VvbWV0cnkgKEopLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGJlc3QgPSBkYXRhLnJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7DQogICAgICAgICAgICByZXR1cm4gYS5yYW5rIDwgYi5yYW5rID8gYSA6IGI7DQogICAgICAgIH0pOw0KICAgICAgICByZWNzLnVuc2hpZnQoJ0Jhc2VkIG9uIHNlbGVjdGVkIGNyaXRlcmlvbiwgPHN0cm9uZz4nICsgYmVzdC5uYW1lICsgJzwvc3Ryb25nPiByYW5rcyBiZXN0IG92ZXJhbGwuJyk7DQoNCiAgICAgICAgZWxzLnJlY29tbWVuZGF0aW9uc0xpc3QuaW5uZXJIVE1MID0gcmVjcy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuICc8bGk+JyArIHIgKyAnPC9saT4nOyB9KS5qb2luKCcnKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb21wYXJlKCkgew0KICAgICAgICB2YXIgZGF0YSA9IGNvbXB1dGVSZXN1bHRzKCk7DQogICAgICAgIGlmICghZGF0YS5vaykgew0KICAgICAgICAgICAgcmVuZGVyV2FybmluZ3MoZGF0YS53YXJuaW5ncyk7DQogICAgICAgICAgICBlbHMucmVzdWx0c1BhbmVsLmNsYXNzTGlzdC5hZGQoJ21zYy1oaWRkZW4nKTsNCiAgICAgICAgICAgIGlmIChkYXRhLndhcm5pbmdzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAg\"+\"IGVscy53YXJuaW5ncy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJlbmRlckNsYXNzaWZpY2F0aW9ucyhkYXRhKTsNCiAgICAgICAgcmVuZGVyVGFibGUoZGF0YSk7DQogICAgICAgIHJlbmRlckNoYXJ0cyhkYXRhKTsNCiAgICAgICAgcmVuZGVyVml6KGRhdGEpOw0KICAgICAgICByZW5kZXJSZWNvbW1lbmRhdGlvbnMoZGF0YSk7DQogICAgICAgIGlmIChkYXRhLndhcm5pbmdzLmxlbmd0aCkgew0KICAgICAgICAgICAgcmVuZGVyV2FybmluZ3MoZGF0YS53YXJuaW5ncyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlbHMud2FybmluZ3MuaGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgIGVscy53YXJuaW5ncy5pbm5lckhUTUwgPSAnJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHMucmVzdWx0c1BhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ21zYy1oaWRkZW4nKTsNCiAgICAgICAgZWxzLnJlc3VsdHNQYW5lbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHsNCiAgICAgICAgZWxzLnVuaXRTeXN0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICAgICAgcmVuZGVyTWF0ZXJpYWxzKCk7DQogICAgICAgIH0pOw0KICAgICAgICBlbHMuY2FsY01vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlVmlzaWJpbGl0eSk7DQogICAgICAgIGVscy5nZW9tZXRyeU1vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmVuZGVyTWF0ZXJpYWxzKCk7DQogICAgICAgICAgICB1cGRhdGVWaXNpYmlsaXR5KCk7DQogICAgICAgIH0pOw0KICAgICAgICBlbHMuc2VjdGlvblR5cGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlVmlzaWJpbGl0eSk7DQogICAgICAgIGVscy5iZWFtVHlwZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVWaXNpYmlsaXR5KTsNCiAgICAgICAgZWxzLmVuYWJsZUJlYW1EZWZsZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZVZpc2liaWxpdHkpOw0KDQogICAgICAgIGVscy5hZGRNYXRlcmlhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChtYXRlcmlhbHMubGVuZ3RoID49IDYpIHJldHVybjsNCiAgICAgICAgICAgIG1hdGVyaWFscy5wdXNoKGNyZWF0ZU1hdGVyaWFsKCdjdXN0b20nLCBmYWxzZSkpOw0KICAgICAgICAgICAgcmVuZGVyTWF0ZXJpYWxzKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGVscy5tYXRlcmlhbHNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcign\"+\"Y2hhbmdlJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgIHZhciB0ID0gZS50YXJnZXQ7DQogICAgICAgICAgICBpZiAodC5jbGFzc0xpc3QuY29udGFpbnMoJ21zYy1tYXQtcHJlc2V0JykpIHsNCiAgICAgICAgICAgICAgICBhcHBseVByZXNldChwYXJzZUludCh0LmRhdGFzZXQuaWR4LCAxMCksIHQudmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtc2MtbWF0LXNlY3Rpb24nKSkgew0KICAgICAgICAgICAgICAgIHZhciBpZHggPSBwYXJzZUludCh0LmRhdGFzZXQuaWR4LCAxMCk7DQogICAgICAgICAgICAgICAgbWF0ZXJpYWxzW2lkeF0uZ2VvbS5zZWN0aW9uVHlwZSA9IHQudmFsdWU7DQogICAgICAgICAgICAgICAgdXBkYXRlTWF0R2VvbVZpc2liaWxpdHkoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0LmNsYXNzTGlzdC5jb250YWlucygnbXNjLXJlZi1yYWRpbycpKSB7DQogICAgICAgICAgICAgICAgbWF0ZXJpYWxzLmZvckVhY2goZnVuY3Rpb24gKG0sIGkpIHsgbS5pc1JlZiA9IChpID09PSBwYXJzZUludCh0LnZhbHVlLCAxMCkpOyB9KTsNCiAgICAgICAgICAgICAgICByZWZJbmRleCA9IHBhcnNlSW50KHQudmFsdWUsIDEwKTsNCiAgICAgICAgICAgICAgICBxc2EoJy5tc2MtbWF0ZXJpYWwtY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsNCiAgICAgICAgICAgICAgICAgICAgYy5jbGFzc0xpc3QudG9nZ2xlKCdtc2MtcmVmJywgaSA9PT0gcmVmSW5kZXgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBlbHMubWF0ZXJpYWxzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21zYy1yZW1vdmUtbWF0JykpIHsNCiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcGFyc2VJbnQoZS50YXJnZXQuZGF0YXNldC5pZHgsIDEwKTsNCiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxzLmxlbmd0aCA8PSAyKSByZXR1cm47DQogICAgICAgICAgICAgICAgcmVhZE1hdGVyaWFsc0Zyb21ET00oKTsNCiAgICAgICAgICAgICAgICBtYXRlcmlhbHMuc3BsaWNlKGlkeCwgMSk7DQogICAgICAgICAgICAgICAgaWYgKHJlZkluZGV4ID49IG1hdGVyaWFscy5sZW5ndGgpIHJlZkluZGV4ID0gMDsNCiAgICAgICAgICAgICAgICBtYXRlcmlhbHNbcmVmSW5kZXhdLmlzUmVmID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICByZW5kZXJNYXRlcmlhbHMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgZWxzLmNvbXBhcmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjb21wYXJlKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbml0KCkgew0KICAgICAgICBpZiAoIWNhY2hlRWxlbWVudHMoKSkgcmV0dXJuOw0KICAgICAgICBpbml0TWF0ZXJpYWxz\"+\"KCk7DQogICAgICAgIHJlbmRlck1hdGVyaWFscygpOw0KICAgICAgICB1cGRhdGVWaXNpYmlsaXR5KCk7DQogICAgICAgIHVwZGF0ZVVuaXRMYWJlbHMoKTsNCiAgICAgICAgYmluZEV2ZW50cygpOw0KICAgIH0NCg0KICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGluaXQoKTsNCiAgICB9DQp9KSgpOw0K\";\n  try{(new Function(atob(b)))();}catch(e){}\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Material Stiffness Comparison Calculator is a practical engineering tool designed to compare the stiffness performance of different materials using Young\u2019s modulus, shear modulus, density,&#8230;<\/p>","protected":false},"author":2,"featured_media":24808,"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":[3515,8675,8652,8676,8651],"class_list":["post-24807","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-engineering-calculator","tag-lightweight-design","tag-material-stiffness","tag-stiffness-comparison","tag-youngs-modulus","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/09\/Material-Stiffness-Comparison-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24807"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24807\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24808"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}