CINXE.COM
Download Visual Studio Tools - Install Free for Windows, Mac, Linux
<!DOCTYPE html> <html class="avada-html-layout-wide avada-html-header-position-top" lang="en-US" > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--- Fav icon for Edge ----> <script> var newrelic_browser_appID = '926586826'; var newrelic_browser_agent_id = '926586826'; </script> <title> Download Visual Studio Tools - Install Free for Windows, Mac, Linux</title> <meta name="description" content="Download Visual Studio IDE or VS Code for free. Try out Visual Studio Professional or Enterprise editions on Windows, Mac." /> <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"/> <link rel="canonical" href="https://visualstudio.microsoft.com/downloads/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Download Visual Studio Tools - Install Free for Windows, Mac, Linux" /> <meta property="og:description" content="Download Visual Studio IDE or VS Code for free. Try out Visual Studio Professional or Enterprise editions on Windows, Mac." /> <meta property="og:url" content="https://visualstudio.microsoft.com/downloads/" /> <meta property="og:site_name" content="Visual Studio" /> <meta property="og:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2018/06/vscom_downloadsd_twitter.png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="628" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:description" content="Download Visual Studio IDE or VS Code for free. Try out Visual Studio Professional or Enterprise editions on Windows, Mac." /> <meta name="twitter:title" content="Download Visual Studio Tools - Install Free for Windows, Mac, Linux" /> <meta name="twitter:image" content="https://visualstudio.microsoft.com/wp-content/uploads/2018/06/vscom_downloadsd_twitter.png" /> <script type="application/ld+json"> {"@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": "https://visualstudio.microsoft.com/#website", "url": "https://visualstudio.microsoft.com/", "name": "Visual Studio", "description": "Any Developer, Any App, Any Platform", "potentialAction": { "@type": "SearchAction", "target": "https://visualstudio.microsoft.com/?s={search_term_string}", "query-input": "required name=search_term_string" } }, { "@type": "ImageObject", "@id": "https://visualstudio.microsoft.com/downloads/#primaryimage", "url": "https://visualstudio.microsoft.com/wp-content/uploads/2018/06/vscom_downloadsd_twitter.png", "width": 1200, "height": 628 }, { "@type": "WebPage", "@id": "https://visualstudio.microsoft.com/downloads/#webpage", "url": "https://visualstudio.microsoft.com/downloads/", "inLanguage": "en_US", "name": "Download Visual Studio Tools - Install Free for Windows, Mac, Linux", "isPartOf": { "@id": "http://localhost/#website" }, "primaryImageOfPage": { "@id": "https://visualstudio.microsoft.com/downloads/ '#primaryimage" }, "datePublished": "2019-07-25T12:08:33+00:00", "dateModified": "2025-01-09T12:34:09+00:00", "description": "Download Visual Studio IDE or VS Code for free. Try out Visual Studio Professional or Enterprise editions on Windows, Mac." } ] } </script><meta name='robots' content='max-image-preview:large' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <link rel="alternate" type="application/rss+xml" title="Visual Studio » Feed" href="https://visualstudio.microsoft.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Visual Studio » Comments Feed" href="https://visualstudio.microsoft.com/comments/feed/" /> <link rel="shortcut icon" href="https://visualstudio.microsoft.com/wp-content/uploads/2017/02/Microsoft-favicon.png" type="image/x-icon" /> <!-- Apple Touch Icon --> <link rel="apple-touch-icon" sizes="180x180" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-180.png"> <!-- Android Icon --> <link rel="icon" sizes="192x192" href="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-120.png"> <!-- MS Edge Icon --> <meta name="msapplication-TileImage" content="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-152.png"> <link rel='stylesheet' id='vscom-swimlane-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-swimlane.css?ver=6.7.1' type='text/css' media='all' /> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <style id='pdfemb-pdf-embedder-viewer-style-inline-css' type='text/css'> .wp-block-pdfemb-pdf-embedder-viewer{max-width:none} </style> <link rel='stylesheet' id='microsoft-uhf-css' href='https://visualstudio.microsoft.com/wp-content/plugins/microsoft-uhf/assets/microsoft-uhf.css?ver=2.2' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-subsup-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/css/vscom-subsup.min.css?ver=1667498184' type='text/css' media='1' /> <link rel='stylesheet' id='vscom-video-player-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-player.min.css?ver=1667498194' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-feature-hero-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-feature-hero.min.css?ver=1681237298' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-builder-tabs-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-builder-tabs.min.css?ver=1735582150' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-single-box-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-single-box.min.css?ver=1681924015' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-icon-cloud-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-icon-cloud.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-collage-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-collage.min.css?ver=1670949096' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-extension-cards-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-extension-cards.min.css?ver=1739469417' type='text/css' media='all' /> <link rel='stylesheet' id='vscom_video_carousel-css-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/css/vscom-video-carousel.min.css?ver=1736452972' type='text/css' media='all' /> <link rel='stylesheet' id='fabric-icons-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fabric-icon-manager//assets/css/vscom-icons.css?ver=1660768558' type='text/css' media='all' /> <link rel='stylesheet' id='fusion-dynamic-css-css' href='https://visualstudio.microsoft.com/wp-content/uploads/fusion-styles/01f4b874d13e53a477abac6bfaecdb85.min.css?ver=3.11.11' type='text/css' media='all' /> <link rel='stylesheet' id='avada-fullwidth-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-md.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-fullwidth-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/fullwidth-sm.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-image-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-md.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-image-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/image-sm.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-section-separator-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-md.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-section-separator-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/section-separator-sm.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-min.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-lg-max-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-lg-max.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-tabs-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-md.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='avada-tabs-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/tabs-sm.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-title-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-md.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-title-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/title-sm.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-meta-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-md.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-meta-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/meta-sm.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='awb-layout-colums-md-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-md.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 1084px)' /> <link rel='stylesheet' id='awb-layout-colums-sm-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/layout-columns-sm.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-1c.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='avada-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-2c.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='avada-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-2c-max-3c.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='avada-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-3c-max-4c.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='avada-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-4c-max-5c.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='avada-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-5c-max-6c.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-min-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-min-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-shbp-header-legacy.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 301px)' /> <link rel='stylesheet' id='avada-max-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-header-legacy.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-max-sh-shbp-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-shbp-header-legacy.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 300px)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p.min.css?ver=7.11.11' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-p-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-p-header-legacy.min.css?ver=7.11.11' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l.min.css?ver=7.11.11' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-min-768-max-1024-l-header-legacy-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-768-max-1024-l-header-legacy.min.css?ver=7.11.11' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape)' /> <link rel='stylesheet' id='avada-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-sbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-sbp.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-640.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 640px)' /> <link rel='stylesheet' id='avada-max-shbp-18-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-18.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 282px)' /> <link rel='stylesheet' id='avada-max-shbp-32-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-shbp-32.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 268px)' /> <link rel='stylesheet' id='avada-min-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/min-sh-cbp.min.css?ver=7.11.11' type='text/css' media='only screen and (min-width: 800px)' /> <link rel='stylesheet' id='avada-max-640-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-640.min.css?ver=7.11.11' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='avada-max-main-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-main.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-max-cbp-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-cbp.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='avada-max-sh-cbp-social-sharing-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/css/media/max-sh-cbp-social-sharing.min.css?ver=7.11.11' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-max-sh-cbp-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-sh-cbp.min.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 800px)' /> <link rel='stylesheet' id='fb-min-768-max-1024-p-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-768-max-1024-p.min.css?ver=3.11.11' type='text/css' media='only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait)' /> <link rel='stylesheet' id='fb-max-640-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-640.min.css?ver=3.11.11' type='text/css' media='only screen and (max-device-width: 640px)' /> <link rel='stylesheet' id='fb-max-1c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-1c.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 644px)' /> <link rel='stylesheet' id='fb-max-2c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/max-2c.css?ver=3.11.11' type='text/css' media='only screen and (max-width: 735px)' /> <link rel='stylesheet' id='fb-min-2c-max-3c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-2c-max-3c.css?ver=3.11.11' type='text/css' media='only screen and (min-width: 735px) and (max-width: 826px)' /> <link rel='stylesheet' id='fb-min-3c-max-4c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-3c-max-4c.css?ver=3.11.11' type='text/css' media='only screen and (min-width: 826px) and (max-width: 917px)' /> <link rel='stylesheet' id='fb-min-4c-max-5c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-4c-max-5c.css?ver=3.11.11' type='text/css' media='only screen and (min-width: 917px) and (max-width: 1008px)' /> <link rel='stylesheet' id='fb-min-5c-max-6c-css' href='https://visualstudio.microsoft.com/wp-content/plugins/fusion-builder/assets/css/media/min-5c-max-6c.css?ver=3.11.11' type='text/css' media='only screen and (min-width: 1008px) and (max-width: 1099px)' /> <link rel='stylesheet' id='avada-child-stylesheet-css' href='https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/modern-styles.min.css?1737654770' type='text/css' media='all' /> <link rel='stylesheet' id='style-vscom-dist-min-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/vscom-dist.min.css?1724260366' type='text/css' media='all' /> <link rel='stylesheet' id='style-en-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-asset-minification/assets/css/en.min.css?1667498184' type='text/css' media='all' /> <meta name="ms.locale_id" content="12321" /> <meta name="ms.locale_slug" content="downloads" /> <script type="text/javascript"> // document.onReady document.addEventListener("DOMContentLoaded", function(event) { var locale_slug = "downloads"; var locale_id = "12321"; }); </script><script type="text/javascript" src="https://visualstudio.microsoft.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-utility-plugin/js/utility.min.js?ver=1675795484" id="vscom_common_js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-icon-cloud.min.js?ver=1670949097" id="vscom-icon-cloud-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/vscom-collage.min.js?ver=1670949097" id="vscom-collage-js-js"></script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://visualstudio.microsoft.com/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://visualstudio.microsoft.com/?p=12321' /> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1; t.src="https://www.clarity.ms/tag/"+i+"?ref=wordpress";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jmjgcz3l72"); </script> <link rel="stylesheet" href="https://www.microsoft.com/onerfstatics/marketingsites-neu-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/60-6a98d7/c9-be0100/a6-e969ef/43-9f2e7c/82-8b5456/a0-5d3913/84-6d4f33/ae-f1ac0c?ver=2.0&_cf=02242021_3231" type="text/css" media="all" /><meta name="ms.shortidmsdn" content="page-12321" /> <meta name="ms.lang" content="en" /> <meta name="ms.loc" content="US" /> <meta name="Ms.Locale" content="en_US" /> <link rel="alternate" hreflang="cs" href="https://visualstudio.microsoft.com/cs/downloads/" /><link rel="alternate" hreflang="de" href="https://visualstudio.microsoft.com/de/downloads/" /><link rel="alternate" hreflang="en" href="https://visualstudio.microsoft.com/downloads/" /><link rel="alternate" hreflang="es" href="https://visualstudio.microsoft.com/es/downloads/" /><link rel="alternate" hreflang="fr" href="https://visualstudio.microsoft.com/fr/downloads/" /><link rel="alternate" hreflang="it" href="https://visualstudio.microsoft.com/it/downloads/" /><link rel="alternate" hreflang="ja" href="https://visualstudio.microsoft.com/ja/downloads/" /><link rel="alternate" hreflang="ko" href="https://visualstudio.microsoft.com/ko/downloads/" /><link rel="alternate" hreflang="pl" href="https://visualstudio.microsoft.com/pl/downloads/" /><link rel="alternate" hreflang="pt-br" href="https://visualstudio.microsoft.com/pt-br/downloads/" /><link rel="alternate" hreflang="ru" href="https://visualstudio.microsoft.com/ru/downloads/" /><link rel="alternate" hreflang="tr" href="https://visualstudio.microsoft.com/tr/downloads/" /><link rel="alternate" hreflang="zh-hans" href="https://visualstudio.microsoft.com/zh-hans/downloads/" /><link rel="alternate" hreflang="zh-hant" href="https://visualstudio.microsoft.com/zh-hant/downloads/" /><script> var img_placeholder = 'https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/vscom-img-placeholder.png'; </script><style type="text/css" id="css-fb-visibility">@media screen and (max-width: 640px){.fusion-no-small-visibility{display:none !important;}body .sm-text-align-center{text-align:center !important;}body .sm-text-align-left{text-align:left !important;}body .sm-text-align-right{text-align:right !important;}body .sm-flex-align-center{justify-content:center !important;}body .sm-flex-align-flex-start{justify-content:flex-start !important;}body .sm-flex-align-flex-end{justify-content:flex-end !important;}body .sm-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .sm-ml-auto{margin-left:auto !important;}body .sm-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-small{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-small{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 641px) and (max-width: 1084px){.fusion-no-medium-visibility{display:none !important;}body .md-text-align-center{text-align:center !important;}body .md-text-align-left{text-align:left !important;}body .md-text-align-right{text-align:right !important;}body .md-flex-align-center{justify-content:center !important;}body .md-flex-align-flex-start{justify-content:flex-start !important;}body .md-flex-align-flex-end{justify-content:flex-end !important;}body .md-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .md-ml-auto{margin-left:auto !important;}body .md-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-medium{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-medium{ position: sticky; top: var(--awb-sticky-offset,0); }}@media screen and (min-width: 1085px){.fusion-no-large-visibility{display:none !important;}body .lg-text-align-center{text-align:center !important;}body .lg-text-align-left{text-align:left !important;}body .lg-text-align-right{text-align:right !important;}body .lg-flex-align-center{justify-content:center !important;}body .lg-flex-align-flex-start{justify-content:flex-start !important;}body .lg-flex-align-flex-end{justify-content:flex-end !important;}body .lg-mx-auto{margin-left:auto !important;margin-right:auto !important;}body .lg-ml-auto{margin-left:auto !important;}body .lg-mr-auto{margin-right:auto !important;}body .fusion-absolute-position-large{position:absolute;top:auto;width:100%;}.awb-sticky.awb-sticky-large{ position: sticky; top: var(--awb-sticky-offset,0); }}</style> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute( 'data-useragent', navigator.userAgent ); </script> <style type="text/css" id="fusion-builder-page-css">/* hot fix for banner */ .hero-banner .vscom-banner .vscom-banner-wrapper p { padding: 10px 0px; line-height: 1.5; } .hero-banner .vscom-banner .vscom-banner-wrapper a:hover span { color: var(--clr-white) !important; } .hero-banner .vscom-banner .vscom-banner-wrapper .vscom-banner-link-text { color: var(--clr-black); } .hero-banner .vscom-banner .vscom-banner-wrapper a { margin-left: 0; } .hero-banner .vscom-banner .header { font-size: 1.5rem; } /* 2 CTA */ .vs-mini-series .vscom-banner-wrapper { display: block; } .vs-mini-series .vscom-banner-wrapper .vscom-banner-text { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; } .vs-mini-series .vscom-link-wrapper.vscom-white-link { padding-top: 0; } .vs-mini-series .banner-link { display: flex; gap: 20px; align-items: center; flex-wrap: wrap; } .hero-banner .vscom-banner .first-column { max-width: calc(100% - 400px); } @media screen and (max-width: 1270px) { .vs-mini-series .vscom-banner-wrapper .vscom-banner-text { flex-direction: column; align-items: flex-start; } .hero-banner .vscom-banner .first-column { max-width: 100%; } .vs-mini-series .banner-link { margin-top: 20px; } .vscom-banner .vscom-banner-wrapper { padding: 1.25rem 0; } } @media screen and (max-width: 470px) { .vs-mini-series .banner-link { flex-direction: column; gap: 0; align-items: flex-start; } } /* End*/ .vscom-hero-downloads-page p.content-text { font-size: 1rem; } .vscom-hero-downloads--top .vs-preview-col .fusion-text.text-wrapper { margin-top: 0.75rem !important; } .vscom-hero-downloads--top .vs-preview-col { text-align: center; border: 1px #505050 solid; border-radius: 12px; flex-shrink: 1; margin: 28px 40px 28px 28px !important; } .vs-preview-col .vscom-link-wrapper { margin-top: 4px; } .vscom-hero-downloads-page .vs-preview-col .fusion-title h3 a:hover { color: var(--clr-darkbg-purple); } #wrapper #main .post-content .vscom-hero-downloads--top h3 { font-size: 29px !important; } .vscom-hero-downloads--top .fusion-content-boxes .link-type-text .heading a:focus { outline: 2px solid #000; transition: outline 0s; } #main .vscom-hero-downloads-page .fusion-builder-row.fusion-row, #main .download-hero-title.download-exp-hero .fusion-row { max-width: 65.5rem !important; padding: 0 !important; } .picker-item-container .vscom-btn-secondary { margin-top: 24px; } .vscom-hero-downloads-page .fusion-content-boxes .fusion-column { margin-bottom: 2.5rem !important; width: auto; } .vscom-hero-downloads-page .fusion-content-boxes .content-container { height: 100%; } .vscom-hero-downloads-page .fusion-content-boxes .content-box-wrapper { display: flex; flex-direction: column; justify-content: space-between; align-items: center; } .vscom-hero-downloads-page .reveal { transition: none; } .vscom-hero-downloads-page .hero-text h2.vs-hero-block+p { margin-top: 0.5rem !important; } .download-exp.reduce-lane.reduce-lane--bottom { padding-left: 0 !important; padding-right: 0 !important; padding-top: 13px; } .download-exp.reduce-lane.reduce-lane--bottom { background: linear-gradient(42.78deg, rgba(140, 105, 215, 0.32) -17.5%, rgba(180, 175, 255, 0.4) 36.44%, rgba(211, 208, 255, 0.4) 100.05%), #FFFFFF; box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.13), 0px 1px 1px rgba(0, 0, 0, 0.108); border-radius: 0px 0px 8px 8px; } .download-exp .vs-hero-block .hero-grid-logos1 { border-left: 1px solid var(--clr-white); margin-top: 4px; display: inline-flex; align-items: center; min-height: 23px; } #wrapper #main .post-content .download-exp .vs-hero-block .hero-grid-logos1 i { font-size: 1.5rem !important; height: 1.5rem; line-height: 1 !important; margin-left: 1.25rem; margin-top: 2px; } #wrapper #main .post-content .download-exp .vs-hero-block .hero-grid-logos1 i.vscom-icon--WindowsLogo { margin-left: 1.5rem; } .download-exp .vs-hero-block { display: flex; margin-bottom: 0; align-items: center; } .download-exp .vs-hero-block.h2 { margin-top: 0; } .vscom-hero-downloads-page.download-exp-hero.download-exp-hero h2 a { margin-right: 1.5rem; } .vscom-hero-downloads-page.download-exp-hero.vscom-hero-downloads--top.vscom-swimlane--dark .fusion-builder-row { border-top: 1.5px solid #7252AA; border-left: 1.5px solid #7252AA; border-right: 1.5px solid #7252AA; border-top-right-radius: 8px; border-top-left-radius: 8px; } .vscom-hero-downloads--top .download-exp .fusion-builder-row.fusion-builder-row-inner { display: block; } .download-exp.reduce-lane .fusion-one-full { width: 100% !important; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .fusion-column{ border-right: 1px solid rgba(0, 0, 0, 0.1); padding: 0; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-box-column-3.fusion-column{ border-right: none; } .vscom-hero-downloads-page .fusion-content-boxes .col-lg-3 { padding: 0; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-box-wrapper, .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-container { text-align: center; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-wrapper { width: 276px; } .vscom-hero-downloads-page .bottom-link .vscom-link-wrapper+.vscom-link-wrapper, .vscom-hero-downloads-page .bottom-lane .vscom-link-wrapper+.vscom-link-wrapper { padding-top: 0.5rem; } .download-exp.fusion-one-full .content-text { margin-left: 116px !important; max-width: 830px; min-height: 50px; margin-bottom: 30px; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .fusion-column { margin-top: 0 !important; padding-left: 34px; padding-right: 34px; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .fusion-column.content-box-column-1{ padding-left: 0; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .fusion-column.content-box-column-3{ padding-right: 0; } .vscom-hero-downloads-page .download-exp .hero-row .title-logo-img { min-width: 76px; width: 76px; margin-right: 12px; height: auto; } #wrapper #main .vscom-hero-downloads-page .download-exp .hero-grid-logos1 img { height: 1.5rem !important; margin-left: 1.25rem; } .vscom-hero-downloads-page .download-exp .icon-col { display: flex; align-items: center; padding: 0 0 1.5rem 0; font-weight: 600; white-space: nowrap; justify-content: center; } .vscom-hero-downloads-page .download-exp .icon-wrapper { background: #68A700; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-right: 4px; width: 1rem; height: 1rem; } .download-exp .icon-wrapper .vscom-icon { color: #fff; font-size: 0.75rem; font-weight: 700; } .download-exp.vscom-hidden { display: none; } .vscom-hero-downloads-page .inner-bottom.vscom-btn-box--center { padding-top: 4px; } .vscom-hero-downloads-page .download-exp .content-container { margin-top: 12px; } .vscom-link-wrapper.bottom-link a { display: block; } .vscom-hero-downloads-page .content-box-wrapper a.vscom-arrow-link { margin-top: 0; } /* Code*/ .vscom-hero-downloads-page.vscom-hero-downloads--bottom.download-exp-hero .right-top-col { border-left: 1.5px solid #007ACC; border-top: 1.5px solid #007ACC; border-right: 1.5px solid #007ACC; border-radius: 8px 8px 0 0; background: transparent; } .vscom-hero-downloads--bottom.download-exp-hero .header-img-col { width: 76px !important; } .vscom-hero-downloads--bottom.download-exp-hero .right-bottom-col { background: linear-gradient(34.4deg, rgba(35, 170, 242, 0.4) 15.75%, rgba(108, 240, 249, 0.4) 84.29%), #FFFFFF; border-radius: 0px 0px 8px 8px; } .vscom-hero-downloads-page.vscom-hero-downloads--bottom .vscom-dropdown-button.vscom-dropdown-button--code .toplink { min-width: 238px; justify-content: center; } .vscom-hero-downloads-page.download-exp-hero .vscom-btn-secondary { min-width: 238px; } .vscom-hero-downloads-page .vscode-links-wrapper { display: flex; align-items: center; margin-bottom: 1rem; flex-wrap: wrap; gap: 60px; } .download-exp-hero .hero-text a:focus::before { background-color: unset; border: 1px var(--clr-white) solid; } .vscom-hero-downloads--bottom .code-license-text .license-link { color: var(--clr-black); text-decoration: underline; } .vscom-hero-downloads--bottom .code-license-text a:hover { color: var(--clr-violet); } .vscom-link-horizontal { margin: 0 auto; padding-bottom: 1.5rem; } .downloads-latest .download-panel .panel-heading .fusion-toggle-heading { font-weight: 600; } #wrapper #main .post-content .download-title h4 { font-size: 16px !important; } .download-info-wrap .download-description p, .download-info-wrap .download-description a { font-size: 14px; } @media screen and (max-width: 1300px) { .post-content .vscom-hero-downloads-page .download-exp .content-container { max-width: 100%; margin: 12px 24px; } } @media screen and (max-width: 1200px) { .vscom-hero-downloads-page.download-exp-hero .vs-hero-block { flex-wrap: wrap; } .vscom-hero-downloads-page.download-exp-hero .vscom-btn-secondary, .vscom-hero-downloads-page.vscom-hero-downloads--bottom .vscom-dropdown-button.vscom-dropdown-button--code .toplink { min-width: 190px; } } @media screen and (max-width: 1083px) { .vscom-hero-downloads-page .fusion-layout-column:first-child { padding-top: 0; } } @media screen and (max-width: 1084px) { .vscom-hero-downloads--top .col-md-4 { width: 100%; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .fusion-column{ border-right: none; padding-left: 0; padding-right: 0; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-wrapper { width: 100%; } .vscom-hero-downloads--top .vs-preview-col { max-width: calc(100% - 3.5rem) !important; margin: 0 40px 28px 28px !important; } .vscom-hero-downloads-page .title-lane.download-exp { padding-right: 28px !important; } .vscom-hero-downloads-page .title-lane.download-exp .fusion-column-wrapper{ padding-bottom: 0 !important; } #main .fullwidth-box.fusion-fullwidth.vscom-hero-downloads--top .fusion-row { padding: 0 0 !important; flex-direction: column; } .vscom-hero-downloads-page.vscom-hero-downloads--bottom.download-exp-hero .left-top-col { margin-top: 24px !important; } #wrapper #main .vscom-hero-downloads-page.vscom-hero-downloads--top.download-exp-hero .fusion-column-wrapper .fusion-builder-row.fusion-builder-row-inner { width: 100% !important; max-width: 100% !important; } .vscom-hero-downloads-page .vscom-link-horizontal { display: flex; justify-content: center; } .vscom-hero-downloads-page .vscom-link-horizontal .vscom-link-wrapper { margin-right: 36px; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-box-wrapper { border-right: 0; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-container { align-items: center; } .download-exp .col-lg-3, .download-exp .col-lg-3.content-box-column-4 { padding-left: 0 !important; } #wrapper #main .post-content .vscom-hero-downloads-page.download-exp-hero h2 a { transition: none; } #wrapper #main .post-content .download-exp .vs-hero-block .hero-grid-logos1 i { font-size: 16px !important; height: 16px; line-height: 16px !important; } #wrapper #main .vscom-hero-downloads-page .download-exp .hero-grid-logos1 img { height: 16px !important; } .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-box-wrapper, .post-content .vscom-hero-downloads-page.vscom-hero-downloads--top .col-md-3 { width: 100%; } .post-content .vscom-hero-downloads-page .download-exp .content-container, .post-content .vscom-hero-downloads-page .download-exp .content-container p, .vscom-hero-downloads-page .download-exp .fusion-content-boxes .content-box-column-2 .content-container { max-width: 100%; } .vscom-hero-downloads-page.vscom-hero-downloads--top .vscom-link-wrapper+.vscom-link-wrapper { padding-top: 0; } .download-hero-title .fusion-layout-column:first-child, .download-hero-title .fusion-layout-column:last-child { padding-top: 0; padding-bottom: 0; } .vscom-hero-downloads-page.vscom-hero-downloads--bottom.download-exp-hero .fusion-one-half { width: 100% !important; } .vscom-hero-downloads-page.vscom-hero-downloads--bottom .download-exp, .vscom-hero-downloads-page.vscom-hero-downloads--bottom .bottom-lane { margin-left: 0 !important; margin-right: 0 !important; } .vscom-hero-downloads--top .vs-preview-col { max-width: calc(100% - 3.5rem) !important; } .vscom-hero-downloads-page .fusion-layout-column:last-child { padding-bottom: 0; } } @media (min-width: 860px) and (max-width: 1083px) { #main .vscom-hero-downloads-page>.fusion-builder-row.fusion-row, #main .download-hero-title.download-exp-hero .fusion-row { max-width: calc(100% - 4.25rem) !important; } .right-bottom-col.bottom-lane { padding-bottom: 0; } } @media screen and (max-width: 859px) { #main .vscom-hero-downloads-page>.fusion-builder-row.fusion-row, #main .download-hero-title.download-exp-hero .fusion-row { max-width: calc(100% - 5rem) !important; } .vscom-hero-downloads-page .vscom-link-horizontal { flex-direction: column; align-items: center; } .vscom-link-horizontal { margin-left: 0; margin-right: 0; } .vscom-hero-downloads-page .vscom-link-horizontal .vscom-link-wrapper { margin-right: 0; } .download-exp .hero-links.right-link { float: none; } .download-exp .hero-links { flex-direction: column; } .vscom-hero-downloads-page.vscom-hero-downloads--bottom.download-exp-hero>.fusion-builder-row:before { display: none; } .fusion-one-full.download-exp.title-lane-top { --awb-padding-bottom: 0 !important; } .right-bottom-col.bottom-lane { padding-bottom: 0; } } @media (max-width: 800px) { #main .vscom-picker-tool-wrapper-v2 .fusion-column-wrapper { padding: 0 !important; } } @media screen and (max-width: 600px) { .vscom-hero-downloads-page .vscode-links-wrapper { display: block; } .vscom-hero-downloads-page .vscode-links-wrapper .vscom-link-wrapper { margin-top: 20px; } .download-exp .hero-row { display: block; } } /* Download posts original */ .search-result-container .fusion-text p { margin-bottom: 0; } .download-wrap { position: relative; } .downloads-link { position: absolute !important; top: 10px; right: 10px; text-decoration: none !important; color: #005a9e; } .downloads-latest input[type="radio"] { -webkit-appearance: none; -moz-appearance: none; appearance: none; display: inline-block; width: 20px; height: 20px; padding: 3px; background-clip: content-box; border: 1px solid #323130; border-radius: 50%; } .downloads-latest input[type="radio"]:checked { border: 1px solid #0078D4; background-color: #0078D4; } /*Download post new */ .downloads-latest .download-action select { border-color: #605E5C; color: #605E5C; } .downloads-latest label.download-format { font-size: 0.875rem; } .downloads-latest .download-panel .panel-heading .fusion-toggle-heading { font-size: 1.125rem !important; } .downloads-latest .panel-heading .vscom-icon.vscom-icon--ChevronRight, .downloads-latest .panel-heading .vscom-icon.vscom-icon--ChevronDown { font-size: 13px !important; color: #000; } .downloads-latest .download-panel { border-top: 1px solid #D2D2D2; } .vsmdd-download-link.download-button.button-small { padding: 8px 10px !important; } .vsmdd-download-link.download-button.fusion-button.button-small i { font-size: 1rem; } .downloads-latest .panel-content.show .download-wrap:first-of-type { border-top: none; } .downloads-latest .download-wrap { background-color: #fff; border-top: 1px #E6E6E6 solid; } /*download post original */ .download-info-wrap .download-title { font-weight: 600 !important; font-size: 1rem !important; } .download-panel .fusion-toggle-heading { font-size: 1.5rem !important; /* too big at default h2 size */ } .vscom-downloads-expand .expand-buttons { text-align: right; } .downloads-search-form { display: flex; flex-direction: row; } .downloads-search-form .downloads-search-input { flex: 1 1 auto; -webkit-border-radius: 5px 0 0 5px !important; border-radius: 5px 0 0 5px !important; font-size: 1.125rem; } .downloads-search-button { flex: 0 0 2.5rem; -webkit-border-radius: 0 5px 5px 0; border-radius: 0 5px 5px 0; border: 1px solid #ccc; background-color: #f0f0f0; } .downloads-search-button:hover { cursor: pointer; background-color: #e0e0e0; } .downloads-search-form .downloads-search-input::-webkit-input-placeholder { color: #888 !important; font-size: 1rem; } .downloads-search-form .downloads-search-input::-moz-placeholder { color: #888 !important; opacity: 1; font-size: 1rem; } .downloads-search-form .downloads-search-input:-ms-input-placeholder { color: #888 !important; font-size: 1rem; } .downloads-search-form .downloads-search-input:-moz-placeholder { color: #888 !important; font-size: 1rem; } .downloads-search-form .downloads-search-input:focus, .downloads-search-form .downloads-search-button:focus { -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; box-shadow: none; border-color: #000; } .post-content button.expand-collapse { position: relative; } .post-content button.expand-collapse:focus, .post-content button.vscom-download-panel-link:focus { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #EDEBE9; outline: 1px solid #605E5C; box-shadow: none; position: relative; } .vscom-hero-downloads-search .vscom-icon { color: #888; transform: scaleX(-1); -moz-transform: scaleX(-1); -webkit-transform: scaleX(-1); -ms-transform: scaleX(-1); } @media all and (max-width: 800px) { .vscom-hero-downloads-search input { width: 100%; } .vscom-downloads-expand .expand-buttons { text-align: left; } .vscom-hero-downloads-search input { width: 100%; } } /* eol css */ .vscom-eoltext { padding: 16px 0px 0px 0px; max-width: 260px; margin: auto; } /* eol css */ .vscom-swimlane--dark .vs-hero-block * { color: #FFF; } .picker-items-v2 .picker-item-v2 .inner-link:hover { text-decoration: none; } .vs-preview-col .vscom-dropdown-button.vscom-btn-fill-grow button.toplink { margin: 20px auto 0 auto; width: 100%; }</style><!--- [Begin] WCP Cookie Consent API Implementation for Vscom !--> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <div id="cookie-banner" data-bi-id="Cookie Banner"></div> <script> window.WcpConsent && WcpConsent.init( 'en-us', "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent } }, onConsentChanged ); function onConsentChanged(categoryPreferences) { if ( siteConsent.isConsentRequired === true && siteConsent.getConsent().Analytics === true){ loadAdobeTarget(); // Consent for Clarity window.clarity('consent'); } else if (siteConsent.isConsentRequired === false) { // Consent is not required window.clarity('consent'); } } function loadAdobeTarget(){ var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_config_js; //Executing synchronously. script.async = false; head.appendChild(script); var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); //Assigning the value generated from PHP script.src = adobe_at_js; //Executing synchronously. script.async = false; head.appendChild(script); } </script> <!--- [End] WCP Cookie Consent API Implementation for Vscom !--> <!-- [Begin] JSLL SHIM script includes --> <link rel="preconnect" href="//js.monitor.azure.com" crossorigin> <link rel="preconnect" href="//browser.events.data.microsoft.com" crossorigin> <script> var adobePageMarket = 'en' var firstPagePath = window.location.pathname.split('/')[1] if (['zh-hans', 'zh-hant', 'fr', 'de', 'it', 'ja', 'ru', 'es', 'cs', 'ko', 'pl', 'pt-br', 'tr'].indexOf(firstPagePath) >= 0) { adobePageMarket = firstPagePath } </script> <script type="text/javascript" src="https://js.monitor.azure.com/scripts/c/ms.jsll-3.min.js"> </script> <script type="text/javascript"> let userConsentDetailsCallback = function() { return siteConsent ? siteConsent.getConsent() : null }; var config = { useDefaultContentName: true, useShortNameForContentBlob: false, autoCapture: { pageView: true, onLoad: true, onUnload: true, lineage: true, click: true, scroll: true, resize: false, lineage: true, jsError: true, addin: true, perf: true }, urlCollectHash: true, urlCollectQuery: true, instrumentationKey: "f194a55d6cb942d9b0e5b604e01b609b-8c663a24-3636-4cc5-a2bf-267a92b4ee4f-7662", coreData: { appId: "VSCOM", market: adobePageMarket }, // Initially set the GPC_DataSharingOptIn flag property in 1DS (One Data Source) to false advancedConfig: { propertyConfiguration: { gpcDataSharingOptIn: false, callback: { userConsentDetails: userConsentDetailsCallback }, }, // This one is not working , so we are setting the value using awa.sku.addTelemetryInitializer((item) down below (line 53) userConsent: false, cookieCfg: { ignoreCookies: ["MSCC"] // new. check the FAQ to confirm which cookie you want to ignore! }, }, callback: { pageName: function() { return document.title } } }; awa.init(config); //awa.config.extensionConfig.SystemPropertiesCollector //config.extensionConfig.SystemPropertiesCollector.userConsented = userConsentDetailsCallback() awa.sku.config.extensionConfig.SystemPropertiesCollector.callback.userConsentDetails = userConsentDetailsCallback awa.sku.config.extensionConfig.SystemPropertiesCollector.userConsented = false; /*awa.sku.addTelemetryInitializer((item) => { item = item || {}; item.ext = item.ext || {}; item.ext.web = item.ext.web || {}; item.ext.web.userConsent = false; item.ext.web. })*/ //tracking the search button expand click // 1DS not tracking the click on html button element even after tagging data-bi attribute document.addEventListener("DOMContentLoaded", function(event) { const element = document.getElementById('search') if (element) { element.addEventListener("click", () => { var overrideValues = { behavior: awa.behavior.SEARCHINITIATE, actionType: "CL", contentTags: { areaName: 'Search_nav', id: 'Nav Search Bar Open ' } }; if (typeof awa === "object" && typeof awa.ct === "object") { awa.ct.captureContentPageAction(overrideValues); } }); } }); </script> <!-- [End] JSLL Shim script includes --> <script> //load newrelic if user has consent if (typeof siteConsent === "object") { if (siteConsent.isConsentRequired === false || siteConsent.getConsent().Analytics === true) { ; window.NREUM || (NREUM = {}); NREUM.init = { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true }, ajax: { deny_list: ["bam.nr-data.net"] } };; NREUM.loader_config = { accountID: "3631496", trustKey: "1551542", agentID: newrelic_browser_agent_id, licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID };; NREUM.info = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net", licenseKey: "NRJS-b705b49e5f52f7729c9", applicationID: newrelic_browser_appID, sa: 1 };; (() => { var __webpack_modules__ = { 507: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; function detectPolyfillFeatures() { const featureStatus = {}; return checkAndAddFeature("Promise", "PROMISE"), checkAndAddFeature("Array.prototype.includes", "ARRAY_INCLUDES"), checkAndAddFeature("Object.assign", "OBJECT_ASSIGN"), checkAndAddFeature("Object.entries", "OBJECT_ENTRIES"), featureStatus; function checkAndAddFeature(funcString, featName) { try { let func = eval("self." + funcString); - 1 !== func.toString().indexOf("[native code]") ? featureStatus[featName] = Status.NATIVE : featureStatus[featName] = Status.CHANGED } catch { featureStatus[featName] = Status.UNAVAIL } } } __webpack_require__.d(__webpack_exports__, { n: () => detectPolyfillFeatures }); const Status = { UNAVAIL: "NotSupported", NATIVE: "Detected", CHANGED: "Modified" } }, 2687: (e, t, r) => { "use strict"; r.d(t, { Z: () => n }); const n = (0, r(2141).ky)(16) }, 1719: (e, t, r) => { "use strict"; r.d(t, { I: () => n }); var n = 0, i = navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/); i && (n = +i[1]) }, 3524: (e, t, r) => { "use strict"; let n; if (r.d(t, { H: () => i }), r(8438).il) { const e = document.createElement("div"); e.innerHTML = "\x3c!--[if lte IE 6]><div></div><![endif]--\x3e\x3c!--[if lte IE 7]><div></div><![endif]--\x3e\x3c!--[if lte IE 8]><div></div><![endif]--\x3e\x3c!--[if lte IE 9]><div></div><![endif]--\x3e", n = e.getElementsByTagName("div").length } var i; i = 4 === n ? 6 : 3 === n ? 7 : 2 === n ? 8 : 1 === n ? 9 : 0 }, 5970: (e, t, r) => { "use strict"; r.d(t, { P_: () => l, Mt: () => h, C5: () => c, DL: () => b, OP: () => R, Yu: () => m, Dg: () => p, CX: () => u, GE: () => g, sU: () => N }); var n = {}; r.r(n), r.d(n, { agent: () => x, match: () => E, version: () => P }); var i = r(4580); class o { constructor(e, t) { return e && "object" == typeof e ? t && "object" == typeof t ? (Object.assign(this, t), void Object.entries(e).forEach((e => { let [t, r] = e; this[t] = r }))) : console.error("setting a Configurable requires a model to set its initial properties") : console.error("setting a Configurable requires an object as input") } } const a = { beacon: i.ce.beacon, errorBeacon: i.ce.errorBeacon, licenseKey: void 0, applicationID: void 0, sa: void 0, queueTime: void 0, applicationTime: void 0, ttGuid: void 0, user: void 0, account: void 0, product: void 0, extra: void 0, jsAttributes: {}, userAttributes: void 0, atts: void 0, transactionName: void 0, tNamePlain: void 0 }, s = {}; function c(e) { if (!e) throw new Error("All info objects require an agent identifier!"); if (!s[e]) throw new Error(`Info for ${e} was never set`); return s[e] } function u(e, t) { if (!e) throw new Error("All info objects require an agent identifier!"); s[e] = new o(t, a), (0, i.Qy)(e, s[e], "info") } const d = { allow_bfcache: !1, privacy: { cookies_enabled: !0 }, ajax: { deny_list: void 0, enabled: !0 }, distributed_tracing: { enabled: void 0, exclude_newrelic_header: void 0, cors_use_newrelic_header: void 0, cors_use_tracecontext_headers: void 0, allowed_origins: void 0 }, ssl: void 0, obfuscate: void 0, jserrors: { enabled: !0 }, metrics: { enabled: !0 }, page_action: { enabled: !0 }, page_view_event: { enabled: !0 }, page_view_timing: { enabled: !0 }, session_trace: { enabled: !0 }, spa: { enabled: !0 } }, f = {}; function l(e) { if (!e) throw new Error("All configuration objects require an agent identifier!"); if (!f[e]) throw new Error(`Configuration for ${e} was never set`); return f[e] } function p(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); f[e] = new o(t, d), (0, i.Qy)(e, f[e], "config") } function h(e, t) { if (!e) throw new Error("All configuration objects require an agent identifier!"); var r = l(e); if (r) { for (var n = t.split("."), i = 0; i < n.length - 1; i++) if ("object" != typeof(r = r[n[i]])) return; r = r[n[n.length - 1]] } return r } const v = { accountID: void 0, trustKey: void 0, agentID: void 0, licenseKey: void 0, applicationID: void 0, xpid: void 0 }, _ = {}; function b(e) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); if (!_[e]) throw new Error(`LoaderConfig for ${e} was never set`); return _[e] } function g(e, t) { if (!e) throw new Error("All loader-config objects require an agent identifier!"); _[e] = new o(t, v), (0, i.Qy)(e, _[e], "loader_config") } const m = (0, i.mF)().o; var w = r(3524), y = r(9206), x = null, P = null; if (navigator.userAgent) { var O = navigator.userAgent, k = O.match(/Version\/(\S+)\s+Safari/); k && -1 === O.indexOf("Chrome") && -1 === O.indexOf("Chromium") && (x = "Safari", P = k[1]) } function E(e, t) { if (!x) return !1; if (e !== x) return !1; if (!t) return !0; if (!P) return !1; for (var r = P.split("."), n = t.split("."), i = 0; i < n.length; i++) if (n[i] !== r[i]) return !1; return !0 } var S = r(2141), C = r(8438); const T = "NRBA_SESSION_ID"; function A() { if (!C.il) return null; try { let e; return null === (e = window.sessionStorage.getItem(T)) && (e = (0, S.ky)(16), window.sessionStorage.setItem(T, e)), e } catch (e) { return null } } var q = C.ZP?.XMLHttpRequest, I = q && q.prototype; const j = {}; function R(e) { if (!e) throw new Error("All runtime objects require an agent identifier!"); if (!j[e]) throw new Error(`Runtime for ${e} was never set`); return j[e] } function N(e, t) { if (!e) throw new Error("All runtime objects require an agent identifier!"); var r; j[e] = new o(t, (r = e, { customTransaction: void 0, disabled: !1, features: {}, loaderType: void 0, maxBytes: 6 === w.H ? 2e3 : 3e4, offset: (0, y.yf)(), onerror: void 0, origin: "" + C.ZP?.location, ptid: void 0, releaseIds: {}, sessionId: 1 == h(r, "privacy.cookies_enabled") ? A() : null, xhrWrappable: q && I && I.addEventListener && !/CriOS/.test(navigator.userAgent), userAgent: n })), (0, i.Qy)(e, j[e], "runtime") } }, 8873: (e, t, r) => { "use strict"; r.d(t, { q: () => n }); const n = ["1222", "PROD"].filter((e => e)).join(".") }, 1925: (e, t, r) => { "use strict"; r.d(t, { w: () => i }); const n = { agentIdentifier: "" }; class i { constructor(e) { if ("object" != typeof e) return console.error("shared context requires an object as input"); this.sharedContext = {}, Object.assign(this.sharedContext, n), Object.entries(e).forEach((e => { let [t, r] = e; Object.keys(n).includes(t) && (this.sharedContext[t] = r) })) } } }, 2071: (e, t, r) => { "use strict"; r.d(t, { c: () => d, ee: () => c }); var n = r(4580), i = r(9010), o = r(9599), a = "nr@context"; let s = (0, n.fP)(); var c; function u() {} function d(e) { return (0, i.X)(e, a, f) } function f() { return new u } function l() { (c.backlog.api || c.backlog.feature) && (c.aborted = !0, c.backlog = {}) } s.ee ? c = s.ee : (c = function e(t, r) { var n = {}, s = {}, d = {}, p = { on: _, addEventListener: _, removeEventListener: b, emit: v, get: m, listeners: g, context: h, buffer: w, abort: l, aborted: !1, isBuffering: y, debugId: r, backlog: t && t.backlog ? t.backlog : {} }; return p; function h(e) { return e && e instanceof u ? e : e ? (0, i.X)(e, a, f) : f() } function v(e, r, n, i, o) { if (!1 !== o && (o = !0), !c.aborted || i) { t && o && t.emit(e, r, n); for (var a = h(n), u = g(e), d = u.length, f = 0; f < d; f++) u[f].apply(a, r); var l = x()[s[e]]; return l && l.push([p, e, r, a]), a } } function _(e, t) { n[e] = g(e).concat(t) } function b(e, t) { var r = n[e]; if (r) for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1) } function g(e) { return n[e] || [] } function m(t) { return d[t] = d[t] || e(p, t) } function w(e, t) { var r = x(); p.aborted || (0, o.D)(e, (function(e, n) { t = t || "feature", s[n] = t, t in r || (r[t] = []) })) } function y(e) { return !!x()[s[e]] } function x() { return p.backlog } }(void 0, "globalEE"), s.ee = c) }, 3195: (e, t, r) => { "use strict"; r.d(t, { E: () => n, p: () => i }); var n = r(2071).ee.get("handle"); function i(e, t, r, i, o) { o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r)) } }, 4539: (e, t, r) => { "use strict"; r.d(t, { X: () => o }); var n = r(3195); o.on = a; var i = o.handlers = {}; function o(e, t, r, o) { a(o || n.E, i, e, t, r) } function a(e, t, r, i, o) { o || (o = "feature"), e || (e = n.E); var a = t[o] = t[o] || {}; (a[r] = a[r] || []).push([e, i]) } }, 3585: (e, t, r) => { "use strict"; r.d(t, { bP: () => s, iz: () => c, m$: () => a }); var n = r(8438), i = !1; try { var o = Object.defineProperty({}, "passive", { get: function() { i = !0 } }); n.ZP?.addEventListener("testPassive", null, o), n.ZP?.removeEventListener("testPassive", null, o) } catch (e) {} function a(e) { return i ? { passive: !0, capture: !!e } : !!e } function s(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; window.addEventListener(e, t, a(r)) } function c(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; document.addEventListener(e, t, a(r)) } }, 2141: (e, t, r) => { "use strict"; r.d(t, { Ht: () => a, M: () => o, Rl: () => i, ky: () => s }); var n = r(8438); function i() { var e = null, t = 0, r = n.ZP?.crypto || n.ZP?.msCrypto; function i() { return e ? 15 & e[t++] : 16 * Math.random() | 0 } r && r.getRandomValues && (e = r.getRandomValues(new Uint8Array(31))); for (var o, a = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", s = "", c = 0; c < a.length; c++) s += "x" === (o = a[c]) ? i().toString(16) : "y" === o ? (o = 3 & i() | 8).toString(16) : o; return s } function o() { return s(16) } function a() { return s(32) } function s(e) { var t = null, r = 0, n = self.crypto || self.msCrypto; n && n.getRandomValues && Uint8Array && (t = n.getRandomValues(new Uint8Array(31))); for (var i = [], o = 0; o < e; o++) i.push(a().toString(16)); return i.join(""); function a() { return t ? 15 & t[r++] : 16 * Math.random() | 0 } } }, 9206: (e, t, r) => { "use strict"; r.d(t, { nb: () => c, os: () => u, yf: () => s, zO: () => a }); var n = r(1209), i = (new Date).getTime(), o = i; function a() { return n.G && performance.now ? Math.round(performance.now()) : (i = Math.max((new Date).getTime(), i)) - o } function s() { return i } function c(e) { o = e } function u() { return o } }, 1209: (e, t, r) => { "use strict"; r.d(t, { G: () => n }); const n = void 0 !== r(8438).ZP?.performance?.timing?.navigationStart }, 745: (e, t, r) => { "use strict"; r.d(t, { s: () => c, v: () => u }); var n = r(7036), i = r(1719), o = r(9206), a = r(1209), s = r(8438); let c = !0; function u(e) { var t = function() { if (i.I && i.I < 9) return; if (a.G) return c = !1, s.ZP?.performance?.timing?.navigationStart }(); t && ((0, n.B)(e, "starttime", t), (0, o.nb)(t)) } }, 7036: (e, t, r) => { "use strict"; r.d(t, { B: () => o, L: () => a }); var n = r(9206), i = {}; function o(e, t, r) { void 0 === r && (r = (0, n.zO)() + (0, n.os)()), i[e] = i[e] || {}, i[e][t] = r } function a(e, t, r, n) { const o = e.sharedContext.agentIdentifier; var a = i[o]?.[r], s = i[o]?.[n]; void 0 !== a && void 0 !== s && e.store("measures", t, { value: s - a }) } }, 7233: (e, t, r) => { "use strict"; r.d(t, { e: () => o }); var n = r(8438), i = {}; function o(e) { if (e in i) return i[e]; if (0 === (e || "").indexOf("data:")) return { protocol: "data" }; let t; var r = n.ZP?.location, o = {}; if (n.il) t = document.createElement("a"), t.href = e; else try { t = new URL(e, r.href) } catch { return o } o.port = t.port; var a = t.href.split("://"); !o.port && a[1] && (o.port = a[1].split("/")[0].split("@").pop().split(":")[1]), o.port && "0" !== o.port || (o.port = "https" === a[0] ? "443" : "80"), o.hostname = t.hostname || r.hostname, o.pathname = t.pathname, o.protocol = a[0], "/" !== o.pathname.charAt(0) && (o.pathname = "/" + o.pathname); var s = !t.protocol || ":" === t.protocol || t.protocol === r.protocol, c = t.hostname === r.hostname && t.port === r.port; return o.sameOrigin = s && (!t.hostname || c), "/" === o.pathname && (i[e] = o), o } }, 8547: (e, t, r) => { "use strict"; r.d(t, { T: () => i }); var n = r(8438); const i = { isFileProtocol: function() { let e = Boolean("file:" === (0, n.lW)()?.location?.protocol); e && (i.supportabilityMetricSent = !0); return e }, supportabilityMetricSent: !1 } }, 9011: (e, t, r) => { "use strict"; r.d(t, { K: () => o }); var n = r(5970); const i = ["ajax", "jserrors", "metrics", "page_action", "page_view_event", "page_view_timing", "session_trace", "spa"]; function o(e) { const t = {}; return i.forEach((r => { t[r] = function(e, t) { return !0 !== (0, n.OP)(t).disabled && !1 !== (0, n.Mt)(t, `${e}.enabled`) }(r, e) })), t } }, 8025: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(2071); class i { constructor(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; this.agentIdentifier = e, this.aggregator = t, this.ee = n.ee.get(e), this.externalFeatures = r, this.blocked = !1 } } }, 9010: (e, t, r) => { "use strict"; r.d(t, { X: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t, r) { if (n.call(e, t)) return e[t]; var i = r(); if (Object.defineProperty && Object.keys) try { return Object.defineProperty(e, t, { value: i, writable: !0, enumerable: !1 }), i } catch (e) {} return e[t] = i, i } }, 8438: (e, t, r) => { "use strict"; r.d(t, { ZP: () => a, il: () => n, lW: () => s, v6: () => i }); const n = Boolean("undefined" != typeof window && window.document), i = Boolean("undefined" != typeof WorkerGlobalScope && self.navigator instanceof WorkerNavigator); let o = (() => { if (n) return window; if (i) { if ("undefined" != typeof globalThis && globalThis instanceof WorkerGlobalScope) return globalThis; if (self instanceof WorkerGlobalScope) return self } throw new Error("New Relic browser agent shutting down due to error: Unable to locate global scope. This is possibly due to code redefining browser global variables like `self` and `window`.") })(); const a = o; function s() { return o } }, 9599: (e, t, r) => { "use strict"; r.d(t, { D: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t) { var r = [], i = "", o = 0; for (i in e) n.call(e, i) && (r[o] = t(i, e[i]), o += 1); return r } }, 248: (e, t, r) => { "use strict"; r.d(t, { $c: () => c, Ng: () => u, RR: () => s }); var n = r(5970), i = r(1925), o = r(8547), a = { regex: /^file:\/\/(.*)/, replacement: "file://OBFUSCATED" }; class s extends i.w { constructor(e) { super(e) } shouldObfuscate() { return c(this.sharedContext.agentIdentifier).length > 0 } obfuscateString(e) { if (!e || "string" != typeof e) return e; for (var t = c(this.sharedContext.agentIdentifier), r = e, n = 0; n < t.length; n++) { var i = t[n].regex, o = t[n].replacement || "*"; r = r.replace(i, o) } return r } } function c(e) { var t = [], r = (0, n.Mt)(e, "obfuscate") || []; return t = t.concat(r), o.T.isFileProtocol() && t.push(a), t } function u(e) { for (var t = !1, r = !1, n = 0; n < e.length; n++) { "regex" in e[n] ? "string" != typeof e[n].regex && e[n].regex.constructor !== RegExp && (console && console.warn && console.warn('An obfuscation replacement rule contains a "regex" value with an invalid type (must be a string or RegExp)'), r = !0) : (console && console.warn && console.warn('An obfuscation replacement rule was detected missing a "regex" value.'), r = !0); var i = e[n].replacement; i && "string" != typeof i && (console && console.warn && console.warn('An obfuscation replacement rule contains a "replacement" value with an invalid type (must be a string)'), t = !0) } return !t && !r } }, 4580: (e, t, r) => { "use strict"; r.d(t, { EZ: () => u, Qy: () => c, ce: () => o, fP: () => a, gG: () => d, mF: () => s }); var n = r(9206), i = r(8438); const o = { beacon: "bam.nr-data.net", errorBeacon: "bam.nr-data.net" }; function a() { return i.ZP?.NREUM || (i.ZP.NREUM = {}), void 0 === i.ZP?.newrelic && (i.ZP.newrelic = i.ZP.NREUM), i.ZP.NREUM } function s() { let e = a(); if (!e.o) { var t = self, r = t.XMLHttpRequest; e.o = { ST: setTimeout, SI: t.setImmediate, CT: clearTimeout, XHR: r, REQ: t.Request, EV: t.Event, PR: t.Promise, MO: t.MutationObserver, FETCH: t.fetch } } return e } function c(e, t, r) { let i = a(); const o = i.initializedAgents || {}, s = o[e] || {}; return Object.keys(s).length || (s.initializedAt = { ms: (0, n.zO)(), date: new Date }), i.initializedAgents = { ...o, [e]: { ...s, [r]: t } }, i } function u(e, t) { a()[e] = t } function d() { return function() { let e = a(); const t = e.info || {}; e.info = { beacon: o.beacon, errorBeacon: o.errorBeacon, ...t } }(), function() { let e = a(); const t = e.init || {}; e.init = { ...t } }(), s(), function() { let e = a(); const t = e.loader_config || {}; e.loader_config = { ...t } }(), a() } }, 584: (e, t, r) => { "use strict"; r.d(t, { N: () => i, e: () => o }); var n = r(3585); function i(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return void(0, n.iz)("visibilitychange", r); function r() { if (t) { if ("hidden" != document.visibilityState) return; e() } e(document.visibilityState) } } function o() { return "hidden" === document.visibilityState ? -1 : 1 / 0 } }, 6023: (e, t, r) => { "use strict"; r.d(t, { W: () => i }); var n = r(8438); function i() { return "function" == typeof n.ZP?.PerformanceObserver } }, 8539: e => { e.exports = function(e, t, r) { t || (t = 0), void 0 === r && (r = e ? e.length : 0); for (var n = -1, i = r - t || 0, o = Array(i < 0 ? 0 : i); ++n < i;) o[n] = e[t + n]; return o } } }, __webpack_module_cache__ = {}, inProgress, dataWebpackPrefix; function __webpack_require__(e) { var t = __webpack_module_cache__[e]; if (void 0 !== t) return t.exports; var r = __webpack_module_cache__[e] = { exports: {} }; return __webpack_modules__[e](r, r.exports, __webpack_require__), r.exports } __webpack_require__.m = __webpack_modules__, __webpack_require__.n = e => { var t = e && e.__esModule ? () => e.default : () => e; return __webpack_require__.d(t, { a: t }), t }, __webpack_require__.d = (e, t) => { for (var r in t) __webpack_require__.o(t, r) && !__webpack_require__.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }) }, __webpack_require__.f = {}, __webpack_require__.e = e => Promise.all(Object.keys(__webpack_require__.f).reduce(((t, r) => (__webpack_require__.f[r](e, t), t)), [])), __webpack_require__.u = e => e + "." + __webpack_require__.h().slice(0, 8) + "-1222.js", __webpack_require__.h = () => "95d4308d836c4fa71ea6", __webpack_require__.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), inProgress = {}, dataWebpackPrefix = "NRBA:", __webpack_require__.l = (e, t, r, n) => { if (inProgress[e]) inProgress[e].push(t); else { var i, o; if (void 0 !== r) for (var a = document.getElementsByTagName("script"), s = 0; s < a.length; s++) { var c = a[s]; if (c.getAttribute("src") == e || c.getAttribute("data-webpack") == dataWebpackPrefix + r) { i = c; break } } i || (o = !0, (i = document.createElement("script")).charset = "utf-8", i.timeout = 120, __webpack_require__.nc && i.setAttribute("nonce", __webpack_require__.nc), i.setAttribute("data-webpack", dataWebpackPrefix + r), i.src = e), inProgress[e] = [t]; var u = (t, r) => { i.onerror = i.onload = null, clearTimeout(d); var n = inProgress[e]; if (delete inProgress[e], i.parentNode && i.parentNode.removeChild(i), n && n.forEach((e => e(r))), t) return t(r) }, d = setTimeout(u.bind(null, void 0, { type: "timeout", target: i }), 12e4); i.onerror = u.bind(null, i.onerror), i.onload = u.bind(null, i.onload), o && document.head.appendChild(i) } }, __webpack_require__.r = e => { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, __webpack_require__.p = "https://js-agent.newrelic.com/", (() => { var e = { 450: 0, 566: 0 }; __webpack_require__.f.j = (t, r) => { var n = __webpack_require__.o(e, t) ? e[t] : void 0; if (0 !== n) if (n) r.push(n[2]); else { var i = new Promise(((r, i) => n = e[t] = [r, i])); r.push(n[2] = i); var o = __webpack_require__.p + __webpack_require__.u(t), a = new Error; __webpack_require__.l(o, (r => { if (__webpack_require__.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) { var i = r && ("load" === r.type ? "missing" : r.type), o = r && r.target && r.target.src; a.message = "Loading chunk " + t + " failed.\n(" + i + ": " + o + ")", a.name = "ChunkLoadError", a.type = i, a.request = o, n[1](a) } }), "chunk-" + t, t) } }; var t = (t, r) => { var n, i, [o, a, s] = r, c = 0; if (o.some((t => 0 !== e[t]))) { for (n in a) __webpack_require__.o(a, n) && (__webpack_require__.m[n] = a[n]); if (s) s(__webpack_require__) } for (t && t(r); c < o.length; c++) i = o[c], __webpack_require__.o(e, i) && e[i] && e[i][0](), e[i] = 0 }, r = window.webpackChunkNRBA = window.webpackChunkNRBA || []; r.forEach(t.bind(null, 0)), r.push = t.bind(null, r.push.bind(r)) })(); var __webpack_exports__ = {}; (() => { "use strict"; __webpack_require__.r(__webpack_exports__); var e = __webpack_require__(507), t = __webpack_require__(3585); function r(e) { if (!document || "complete" === document.readyState) return e() || !0 } function n(e) { r(e) || (0, t.bP)("load", e) } function i(e) { r(e) || (0, t.iz)("DOMContentLoaded", e) } var o = __webpack_require__(8438), a = __webpack_require__(2071); let s = 0; function c(e) { (async () => { if (!s++) try { const { aggregator: t } = await __webpack_require__.e(859).then(__webpack_require__.bind(__webpack_require__, 7859)); await t(e) } catch (e) { console.error("Failed to successfully load all aggregators. Aborting...\n", e), a.ee.abort() } })() } var u = __webpack_require__(2687), d = __webpack_require__(3195), f = __webpack_require__(9206), l = __webpack_require__(7036), p = __webpack_require__(745), h = __webpack_require__(8025); class v extends h.W { constructor(e) { super(e), o.il && ((0, p.v)(e), (0, l.B)(e, "firstbyte", (0, f.yf)()), n((() => this.measureWindowLoaded())), i((() => this.measureDomContentLoaded()))) } measureWindowLoaded() { var e = (0, f.zO)(); (0, l.B)(this.agentIdentifier, "onload", e + (0, f.os)()), (0, d.p)("timing", ["load", e], void 0, void 0, this.ee) } measureDomContentLoaded() { (0, l.B)(this.agentIdentifier, "domContent", (0, f.zO)() + (0, f.os)()) } } var _ = __webpack_require__(584), b = __webpack_require__(5970); class g extends h.W { constructor(e) { var r; if (super(e), r = this, this.isEnabled() && o.il) { if (this.pageHiddenTime = (0, _.e)(), this.performanceObserver, this.lcpPerformanceObserver, this.clsPerformanceObserver, this.fiRecorded = !1, "PerformanceObserver" in window && "function" == typeof window.PerformanceObserver) { this.performanceObserver = new PerformanceObserver((function() { return r.perfObserver(...arguments) })); try { this.performanceObserver.observe({ entryTypes: ["paint"] }) } catch (e) {} this.lcpPerformanceObserver = new PerformanceObserver((function() { return r.lcpObserver(...arguments) })); try { this.lcpPerformanceObserver.observe({ entryTypes: ["largest-contentful-paint"] }) } catch (e) {} this.clsPerformanceObserver = new PerformanceObserver((function() { return r.clsObserver(...arguments) })); try { this.clsPerformanceObserver.observe({ type: "layout-shift", buffered: !0 }) } catch (e) {} } this.fiRecorded = !1; ["click", "keydown", "mousedown", "pointerdown", "touchstart"].forEach((e => { (0, t.iz)(e, (function() { return r.captureInteraction(...arguments) })) })), (0, _.N)((() => { this.pageHiddenTime = (0, f.zO)(), (0, d.p)("docHidden", [this.pageHiddenTime], void 0, void 0, this.ee) }), !0), (0, t.bP)("pagehide", (() => (0, d.p)("winPagehide", [(0, f.zO)()], void 0, void 0, this.ee))) } } isEnabled() { return !1 !== (0, b.Mt)(this.agentIdentifier, "page_view_timing.enabled") } perfObserver(e, t) { e.getEntries().forEach((e => { "first-paint" === e.name ? (0, d.p)("timing", ["fp", Math.floor(e.startTime)], void 0, void 0, this.ee) : "first-contentful-paint" === e.name && (0, d.p)("timing", ["fcp", Math.floor(e.startTime)], void 0, void 0, this.ee) })) } lcpObserver(e, t) { var r = e.getEntries(); if (r.length > 0) { var n = r[r.length - 1]; if (this.pageHiddenTime < n.startTime) return; var i = [n], o = this.addConnectionAttributes({}); o && i.push(o), (0, d.p)("lcp", i, void 0, void 0, this.ee) } } clsObserver(e) { e.getEntries().forEach((e => { e.hadRecentInput || (0, d.p)("cls", [e], void 0, void 0, this.ee) })) } addConnectionAttributes(e) { var t = navigator.connection || navigator.mozConnection || navigator.webkitConnection; if (t) return t.type && (e["net-type"] = t.type), t.effectiveType && (e["net-etype"] = t.effectiveType), t.rtt && (e["net-rtt"] = t.rtt), t.downlink && (e["net-dlink"] = t.downlink), e } captureInteraction(e) { if (e instanceof b.Yu.EV && !this.fiRecorded) { var t = Math.round(e.timeStamp), r = { type: e.type }; this.addConnectionAttributes(r), t <= (0, f.zO)() ? r.fid = (0, f.zO)() - t : t > (0, f.os)() && t <= Date.now() ? (t -= (0, f.os)(), r.fid = (0, f.zO)() - t) : t = (0, f.zO)(), this.fiRecorded = !0, (0, d.p)("timing", ["fi", t, r], void 0, void 0, this.ee) } } } var m = __webpack_require__(4539), w = "React", y = "Angular", x = "AngularJS", P = "Backbone", O = "Ember", k = "Vue", E = "Meteor", S = "Zepto", C = "Jquery"; function T() { if (!o.il) return []; var e = []; try { (function() { try { if (window.React || window.ReactDOM || window.ReactRedux) return !0; if (document.querySelector("[data-reactroot], [data-reactid]")) return !0; for (var e = document.querySelectorAll("body > div"), t = 0; t < e.length; t++) if (Object.keys(e[t]).indexOf("_reactRootContainer") >= 0) return !0; return !1 } catch (e) { return !1 } })() && e.push(w), function() { try { return !!window.angular || (!!document.querySelector(".ng-binding, [ng-app], [data-ng-app], [ng-controller], [data-ng-controller], [ng-repeat], [data-ng-repeat]") || !!document.querySelector('script[src*="angular.js"], script[src*="angular.min.js"]')) } catch (e) { return !1 } }() && e.push(x), function() { try { return !!(window.hasOwnProperty("ng") && window.ng.hasOwnProperty("coreTokens") && window.ng.coreTokens.hasOwnProperty("NgZone")) || !!document.querySelectorAll("[ng-version]").length } catch (e) { return !1 } }() && e.push(y), window.Backbone && e.push(P), window.Ember && e.push(O), window.Vue && e.push(k), window.Meteor && e.push(E), window.Zepto && e.push(S), window.jQuery && e.push(C) } catch (e) {} return e } var A = __webpack_require__(8547), q = __webpack_require__(248), I = __webpack_require__(8873); const j = Boolean(o.ZP?.Worker), R = Boolean(o.ZP?.SharedWorker), N = Boolean(o.ZP?.navigator?.serviceWorker); let L, Z, H; class z extends h.W { constructor(e) { var t; let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; super(e), t = this, this.PfFeatStatusEnum = r, this.singleChecks(), this.eachSessionChecks(), (0, m.X)("record-supportability", (function() { return t.recordSupportability(...arguments) }), void 0, this.ee), (0, m.X)("record-custom", (function() { return t.recordCustom(...arguments) }), void 0, this.ee) } recordSupportability(e, t) { var r = ["sm", e, { name: e }, t]; return (0, d.p)("storeMetric", r, null, void 0, this.ee), r } recordCustom(e, t) { var r = ["cm", e, { name: e }, t]; return (0, d.p)("storeEventMetrics", r, null, void 0, this.ee), r } singleChecks() { this.recordSupportability(`Generic/Version/${I.q}/Detected`); const { loaderType: e } = (0, b.OP)(this.agentIdentifier); e && this.recordSupportability(`Generic/LoaderType/${e}/Detected`), o.il && i((() => { T().forEach((e => { this.recordSupportability("Framework/" + e + "/Detected") })) })), A.T.isFileProtocol() && (this.recordSupportability("Generic/FileProtocol/Detected"), A.T.supportabilityMetricSent = !0); const t = (0, q.$c)(this.agentIdentifier); t.length > 0 && this.recordSupportability("Generic/Obfuscate/Detected"), t.length > 0 && !(0, q.Ng)(t) && this.recordSupportability("Generic/Obfuscate/Invalid"), o.il && this.reportPolyfillsNeeded(), function(e) { if (!L) { if (j) { L = Worker; try { o.ZP.Worker = r(L, "Dedicated") } catch (e) { a(e, "Dedicated") } if (R) { Z = SharedWorker; try { o.ZP.SharedWorker = r(Z, "Shared") } catch (e) { a(e, "Shared") } } else n("Shared"); if (N) { H = navigator.serviceWorker.register; try { o.ZP.navigator.serviceWorker.register = (t = H, function() { for (var e = arguments.length, r = new Array(e), n = 0; n < e; n++) r[n] = arguments[n]; return i("Service", r[1]?.type), t.apply(navigator.serviceWorker, r) }) } catch (e) { a(e, "Service") } } else n("Service"); var t; return } n("All") } function r(e, t) { return new Proxy(e, { construct: (e, r) => (i(t, r[1]?.type), new e(...r)) }) } function n(t) { o.v6 || e(`Workers/${t}/Unavailable`) } function i(t, r) { e("module" === r ? `Workers/${t}/Module` : `Workers/${t}/Classic`) } function a(t, r) { e(`Workers/${r}/SM/Unsupported`), console.warn(`NR Agent: Unable to capture ${r} workers.`, t) } }(this.recordSupportability.bind(this)) } reportPolyfillsNeeded() { this.recordSupportability(`Generic/Polyfill/Promise/${this.PfFeatStatusEnum.PROMISE}`), this.recordSupportability(`Generic/Polyfill/ArrayIncludes/${this.PfFeatStatusEnum.ARRAY_INCLUDES}`), this.recordSupportability(`Generic/Polyfill/ObjectAssign/${this.PfFeatStatusEnum.OBJECT_ASSIGN}`), this.recordSupportability(`Generic/Polyfill/ObjectEntries/${this.PfFeatStatusEnum.OBJECT_ENTRIES}`) } eachSessionChecks() { o.il && (0, t.bP)("pageshow", (e => { e.persisted && this.recordCustom("Custom/BFCache/PageRestored") })) } } var M = __webpack_require__(9010), D = __webpack_require__(8539), W = __webpack_require__.n(D), B = __webpack_require__(9599), $ = o.ZP, G = "fetch-", F = G + "body-", U = ["arrayBuffer", "blob", "json", "text", "formData"], X = $.Request, V = $.Response, Y = "prototype", J = "nr@context"; const Q = {}; function K(e) { const t = function(e) { return (e || a.ee).get("fetch") }(e); if (!(X && V && $.fetch)) return t; if (Q[t.debugId]) return t; function r(e, r, n) { var i = e[r]; "function" == typeof i && (e[r] = function() { var e, r = W()(arguments), o = {}; t.emit(n + "before-start", [r], o), o[J] && o[J].dt && (e = o[J].dt); var a = i.apply(this, r); return t.emit(n + "start", [r, e], a), a.then((function(e) { return t.emit(n + "end", [null, e], a), e }), (function(e) { throw t.emit(n + "end", [e], a), e })) }) } return Q[t.debugId] = !0, (0, B.D)(U, (function(e, t) { r(X[Y], t, F), r(V[Y], t, F) })), r($, "fetch", G), t.on(G + "end", (function(e, r) { var n = this; if (r) { var i = r.headers.get("content-length"); null !== i && (n.rxSize = i), t.emit(G + "done", [null, r], n) } else t.emit(G + "done", [e], n) })), t } var ee = "nr@original", te = Object.prototype.hasOwnProperty, re = !1; function ne(e, t) { return e || (e = a.ee), r.inPlace = function(e, t, n, i, o) { n || (n = ""); var a, s, c, u = "-" === n.charAt(0); for (c = 0; c < t.length; c++) ae(a = e[s = t[c]]) || (e[s] = r(a, u ? s + n : n, i, s, o)) }, r.flag = ee, r; function r(t, r, i, o, a) { return ae(t) ? t : (r || (r = ""), nrWrapper[ee] = t, oe(t, nrWrapper, e), nrWrapper); function nrWrapper() { var s, c, u, d; try { c = this, s = W()(arguments), u = "function" == typeof i ? i(s, c) : i || {} } catch (t) { ie([t, "", [s, c, o], u], e) } n(r + "start", [s, c, o], u, a); try { return d = t.apply(c, s) } catch (e) { throw n(r + "err", [s, c, e], u, a), e } finally { n(r + "end", [s, c, d], u, a) } } } function n(r, n, i, o) { if (!re || t) { var a = re; re = !0; try { e.emit(r, n, i, t, o) } catch (t) { ie([t, r, n, i], e) } re = a } } } function ie(e, t) { t || (t = a.ee); try { t.emit("internal-error", e) } catch (e) {} } function oe(e, t, r) { if (Object.defineProperty && Object.keys) try { return Object.keys(e).forEach((function(r) { Object.defineProperty(t, r, { get: function() { return e[r] }, set: function(t) { return e[r] = t, t } }) })), t } catch (e) { ie([e], r) } for (var n in e) te.call(e, n) && (t[n] = e[n]); return t } function ae(e) { return !(e && e instanceof Function && e.apply && !e[ee]) } function se(e, t, r) { var n = e[t]; e[t] = function(e, t) { var r = t(e); return r[ee] = e, oe(e, r, a.ee), r }(n, r) } function ce() { for (var e = arguments.length, t = new Array(e), r = 0; r < e; ++r) t[r] = arguments[r]; return t } const ue = {}; function de(e) { const t = function(e) { return (e || a.ee).get("timer") }(e); if (ue[t.debugId]) return t; ue[t.debugId] = !0; var r = ne(t), n = "setTimeout", i = "setInterval", s = "clearTimeout", c = "-start"; return r.inPlace(o.ZP, [n, "setImmediate"], n + "-"), r.inPlace(o.ZP, [i], i + "-"), r.inPlace(o.ZP, [s, "clearImmediate"], s + "-"), t.on(i + c, (function(e, t, n) { e[0] = r(e[0], "fn-", null, n) })), t.on(n + c, (function(e, t, n) { this.method = n, this.timerDuration = isNaN(e[1]) ? 0 : +e[1], e[0] = r(e[0], "fn-", this, n) })), t } const fe = {}; function le(e) { const t = function(e) { return (e || a.ee).get("raf") }(e); if (fe[t.debugId] || !o.il) return t; fe[t.debugId] = !0; var r = ne(t), n = "equestAnimationFrame"; return r.inPlace(window, ["r" + n, "mozR" + n, "webkitR" + n, "msR" + n], "raf-"), t.on("raf-start", (function(e) { e[0] = r(e[0], "fn-") })), t } const pe = {}; function he(e) { const t = function(e) { return (e || a.ee).get("history") }(e); if (pe[t.debugId] || !o.il) return t; pe[t.debugId] = !0; var r = ne(t), n = window.history && window.history.constructor && window.history.constructor.prototype, i = window.history; return n && n.pushState && n.replaceState && (i = n), r.inPlace(i, ["pushState", "replaceState"], "-"), t } const ve = {}; function _e(e) { const r = function(e) { return (e || a.ee).get("jsonp") }(e); if (ve[r.debugId] || !o.il) return r; ve[r.debugId] = !0; var n = ne(r), i = /[?&](?:callback|cb)=([^&#]+)/, s = /(.*)\.([^.]+)/, c = /^(\w+)(\.|$)(.*)$/, u = ["appendChild", "insertBefore", "replaceChild"]; function d(e, t) { var r = e.match(c), n = r[1], i = r[3]; return i ? d(i, t[n]) : t[n] } return "addEventListener" in window && (Node && Node.prototype && Node.prototype.appendChild ? n.inPlace(Node.prototype, u, "dom-") : (n.inPlace(HTMLElement.prototype, u, "dom-"), n.inPlace(HTMLHeadElement.prototype, u, "dom-"), n.inPlace(HTMLBodyElement.prototype, u, "dom-"))), r.on("dom-start", (function(e) { ! function(e) { if (!e || "string" != typeof e.nodeName || "script" !== e.nodeName.toLowerCase()) return; if ("function" != typeof e.addEventListener) return; var o = (a = e.src, c = a.match(i), c ? c[1] : null); var a, c; if (!o) return; var u = function(e) { var t = e.match(s); if (t && t.length >= 3) return { key: t[2], parent: d(t[1], window) }; return { key: e, parent: window } }(o); if ("function" != typeof u.parent[u.key]) return; var f = {}; function l() { r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } function p() { r.emit("jsonp-error", [], f), r.emit("jsonp-end", [], f), e.removeEventListener("load", l, (0, t.m$)(!1)), e.removeEventListener("error", p, (0, t.m$)(!1)) } n.inPlace(u.parent, [u.key], "cb-", f), e.addEventListener("load", l, (0, t.m$)(!1)), e.addEventListener("error", p, (0, t.m$)(!1)), r.emit("new-jsonp", [e.src], f) }(e[0]) })), r } const be = {}; function ge(e) { const t = function(e) { return (e || a.ee).get("mutation") }(e); if (be[t.debugId] || !o.il) return t; be[t.debugId] = !0; var r = ne(t), n = b.Yu.MO; return n && (window.MutationObserver = function(e) { return this instanceof n ? new n(r(e, "fn-")) : n.apply(this, arguments) }, MutationObserver.prototype = n.prototype), t } const me = {}; function we(e) { const t = function(e) { return (e || a.ee).get("promise") }(e); if (me[t.debugId]) return t; me[t.debugId] = !0; var r = a.c, n = ne(t), i = b.Yu.PR; return i && function() { function e(e) { var r = t.context(), o = n(e, "executor-", r, null, !1), a = new i(o); return t.context(a).getCtx = function() { return r }, a } o.ZP.Promise = e, Object.defineProperty(o.ZP.Promise, "name", { value: "Promise" }), ["all", "race"].forEach((function(e) { var r = i[e]; i[e] = function(n) { var o = !1; (0, B.D)(n, (function(t, r) { Promise.resolve(r).then(s("all" === e), s(!1)) })); var a = r.apply(i, arguments); return i.resolve(a); function s(e) { return function() { t.emit("propagate", [null, !o], a, !1, !1), o = o || !e } } } })), ["resolve", "reject"].forEach((function(e) { var r = i[e]; i[e] = function(e) { var n = r.apply(i, arguments); return e !== n && t.emit("propagate", [e, !0], n, !1, !1), n } })), i.prototype.catch = function(e) { return this.then(null, e) }, Object.assign(i.prototype, { constructor: { value: e } }), (0, B.D)(Object.getOwnPropertyNames(i), (function(t, r) { try { e[r] = i[r] } catch (e) {} })), se(i.prototype, "then", (function(e) { return function() { var i = this, o = ce.apply(this, arguments), a = r(i); a.promise = i, o[0] = n(o[0], "cb-", a, null, !1), o[1] = n(o[1], "cb-", a, null, !1); var s = e.apply(this, o); return a.nextPromise = s, t.emit("propagate", [i, !0], s, !1, !1), s } })), t.on("executor-start", (function(e) { e[0] = n(e[0], "resolve-", this, null, !1), e[1] = n(e[1], "resolve-", this, null, !1) })), t.on("executor-err", (function(e, t, r) { e[1](r) })), t.on("cb-end", (function(e, r, n) { t.emit("propagate", [n, !0], this.nextPromise, !1, !1) })), t.on("propagate", (function(e, r, n) { this.getCtx && !r || (this.getCtx = function() { if (e instanceof Promise) var r = t.context(e); return r && r.getCtx ? r.getCtx() : this }) })), e.toString = function() { return "" + i } }(), t } const ye = {}; function xe(e) { var t = function(e) { return (e || a.ee).get("events") }(e); if (ye[t.debugId]) return t; ye[t.debugId] = !0; var r = ne(t, !0), n = XMLHttpRequest, i = "addEventListener", s = "removeEventListener"; function c(e) { for (var t = e; t && !t.hasOwnProperty(i);) t = Object.getPrototypeOf(t); t && u(t) } function u(e) { r.inPlace(e, [i, s], "-", d) } function d(e, t) { return e[1] } return "getPrototypeOf" in Object ? (o.il && c(document), c(o.ZP), c(n.prototype)) : n.prototype.hasOwnProperty(i) && (u(o.ZP), u(n.prototype)), t.on(i + "-start", (function(e, t) { var n = e[1]; if (null !== n && ("function" == typeof n || "object" == typeof n)) { var i = (0, M.X)(n, "nr@wrapped", (function() { var e = { object: function() { if ("function" != typeof n.handleEvent) return; return n.handleEvent.apply(n, arguments) }, function: n } [typeof n]; return e ? r(e, "fn-", null, e.name || "anonymous") : n })); this.wrapped = e[1] = i } })), t.on(s + "-start", (function(e) { e[1] = this.wrapped || e[1] })), t } const Pe = {}; function Oe(e) { var r = e || a.ee; const n = function(e) { return (e || a.ee).get("xhr") }(r); if (Pe[n.debugId]) return n; Pe[n.debugId] = !0, xe(r); var i = ne(n), s = b.Yu.XHR, c = b.Yu.MO, u = b.Yu.PR, d = b.Yu.SI, f = "readystatechange", l = ["onload", "onerror", "onabort", "onloadstart", "onloadend", "onprogress", "ontimeout"], p = [], h = o.ZP.XMLHttpRequest.listeners, v = o.ZP.XMLHttpRequest = function(e) { var r = new s(e); function i() { try { n.emit("new-xhr", [r], r), r.addEventListener(f, g, (0, t.m$)(!1)) } catch (e) { console.error(e); try { n.emit("internal-error", [e]) } catch (e) {} } } return this.listeners = h ? [...h, i] : [i], this.listeners.forEach((e => e())), r }; function _(e, t) { i.inPlace(t, ["onreadystatechange"], "fn-", P) } function g() { var e = this, t = n.context(e); e.readyState > 3 && !t.resolved && (t.resolved = !0, n.emit("xhr-resolved", [], e)), i.inPlace(e, l, "fn-", P) } if (function(e, t) { for (var r in e) t[r] = e[r] }(s, v), v.prototype = s.prototype, i.inPlace(v.prototype, ["open", "send"], "-xhr-", P), n.on("send-xhr-start", (function(e, t) { _(e, t), function(e) { p.push(e), c && (m ? m.then(x) : d ? d(x) : (w = -w, y.data = w)) }(t) })), n.on("open-xhr-start", _), c) { var m = u && u.resolve(); if (!d && !u) { var w = 1, y = document.createTextNode(w); new c(x).observe(y, { characterData: !0 }) } } else r.on("fn-end", (function(e) { e[0] && e[0].type === f || x() })); function x() { for (var e = 0; e < p.length; e++) _(0, p[e]); p.length && (p = []) } function P(e, t) { return t } return n } function ke(e) { return xe(e) } function Ee(e) { return K(e) } function Se(e) { return he(e) } function Ce(e) { return le(e) } function Te(e) { return de(e) } function Ae(e) { return Oe(e) } var qe, Ie = {}; try { qe = localStorage.getItem("__nr_flags").split(","), console && "function" == typeof console.log && (Ie.console = !0, -1 !== qe.indexOf("dev") && (Ie.dev = !0), -1 !== qe.indexOf("nr_dev") && (Ie.nrDev = !0)) } catch (e) {} function je(e) { try { Ie.console && je(e) } catch (e) {} } Ie.nrDev && a.ee.on("internal-error", (function(e) { je(e.stack) })), Ie.dev && a.ee.on("fn-err", (function(e, t, r) { je(r.stack) })), Ie.dev && (je("NR AGENT IN DEVELOPMENT MODE"), je("flags: " + (0, B.D)(Ie, (function(e, t) { return e })).join(", "))); var Re = "nr@seenError"; class Ne extends h.W { constructor(e) { var t; super(e), t = this, this.skipNext = 0, this.handleErrors = !1, this.origOnerror = o.ZP?.onerror; const r = this, n = (0, b.OP)(this.agentIdentifier); n.features.err = !0, r.ee.on("fn-start", (function(e, t, n) { r.handleErrors && (r.skipNext += 1) })), r.ee.on("fn-err", (function(e, t, n) { r.handleErrors && !n[Re] && ((0, M.X)(n, Re, (function() { return !0 })), this.thrown = !0, Ze(n, void 0, r.ee)) })), r.ee.on("fn-end", (function() { r.handleErrors && !this.thrown && r.skipNext > 0 && (r.skipNext -= 1) })), r.ee.on("internal-error", (e => { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, r.ee) })); const i = o.ZP?.onerror; o.ZP.onerror = function() { return i && i(...arguments), t.onerrorHandler(...arguments), !1 }; try { o.ZP?.addEventListener("unhandledrejection", (e => { const t = new Error(`${e.reason}`); (0, d.p)("err", [t, (0, f.zO)(), !1, { unhandledPromiseRejection: 1 }], void 0, void 0, this.ee) })) } catch (e) {} try { throw new Error } catch (e) { "stack" in e && (Te(this.ee), Ce(this.ee), "addEventListener" in o.ZP && ke(this.ee), n.xhrWrappable && Ae(this.ee), r.handleErrors = !0) } } onerrorHandler(e, t, r, n, i) { try { this.skipNext ? this.skipNext -= 1 : Ze(i || new Le(e, t, r), !0, this.ee) } catch (e) { try { (0, d.p)("ierr", [e, (0, f.zO)(), !0], void 0, void 0, this.ee) } catch (e) {} } return "function" == typeof this.origOnerror && this.origOnerror.apply(this, W()(arguments)) } } function Le(e, t, r) { this.message = e || "Uncaught error with no additional information", this.sourceURL = t, this.line = r } function Ze(e, t, r) { var n = t ? null : (0, f.zO)(); (0, d.p)("err", [e, n], void 0, void 0, r) } var He = 1; function ze(e) { var t = typeof e; return !e || "object" !== t && "function" !== t ? -1 : e === o.ZP ? 0 : (0, M.X)(e, "nr@id", (function() { return He++ })) } var Me = __webpack_require__(1719); function De(e) { if ("string" == typeof e && e.length) return e.length; if ("object" == typeof e) { if ("undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength; if ("undefined" != typeof Blob && e instanceof Blob && e.size) return e.size; if (!("undefined" != typeof FormData && e instanceof FormData)) try { return JSON.stringify(e).length } catch (e) { return } } } var We = __webpack_require__(7233), Be = __webpack_require__(2141); class $e { constructor(e) { this.agentIdentifier = e, this.generateTracePayload = this.generateTracePayload.bind(this), this.shouldGenerateTrace = this.shouldGenerateTrace.bind(this) } generateTracePayload(e) { if (!this.shouldGenerateTrace(e)) return null; var t = (0, b.DL)(this.agentIdentifier); if (!t) return null; var r = (t.accountID || "").toString() || null, n = (t.agentID || "").toString() || null, i = (t.trustKey || "").toString() || null; if (!r || !n) return null; var o = (0, Be.M)(), a = (0, Be.Ht)(), s = Date.now(), c = { spanId: o, traceId: a, timestamp: s }; return (e.sameOrigin || this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors()) && (c.traceContextParentHeader = this.generateTraceContextParentHeader(o, a), c.traceContextStateHeader = this.generateTraceContextStateHeader(o, s, r, n, i)), (e.sameOrigin && !this.excludeNewrelicHeader() || !e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors()) && (c.newrelicHeader = this.generateTraceHeader(o, a, s, r, n, i)), c } generateTraceContextParentHeader(e, t) { return "00-" + t + "-" + e + "-01" } generateTraceContextStateHeader(e, t, r, n, i) { return i + "@nr=0-1-" + r + "-" + n + "-" + e + "----" + t } generateTraceHeader(e, t, r, n, i, a) { if (!("function" == typeof o.ZP?.btoa)) return null; var s = { v: [0, 1], d: { ty: "Browser", ac: n, ap: i, id: e, tr: t, ti: r } }; return a && n !== a && (s.d.tk = a), btoa(JSON.stringify(s)) } shouldGenerateTrace(e) { return this.isDtEnabled() && this.isAllowedOrigin(e) } isAllowedOrigin(e) { var t = !1, r = {}; if ((0, b.Mt)(this.agentIdentifier, "distributed_tracing") && (r = (0, b.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) t = !0; else if (r.allowed_origins instanceof Array) for (var n = 0; n < r.allowed_origins.length; n++) { var i = (0, We.e)(r.allowed_origins[n]); if (e.hostname === i.hostname && e.protocol === i.protocol && e.port === i.port) { t = !0; break } } return t } isDtEnabled() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.enabled } excludeNewrelicHeader() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.exclude_newrelic_header } useNewrelicHeaderForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !1 !== e.cors_use_newrelic_header } useTraceContextHeadersForCors() { var e = (0, b.Mt)(this.agentIdentifier, "distributed_tracing"); return !!e && !!e.cors_use_tracecontext_headers } } var Ge = ["load", "error", "abort", "timeout"], Fe = Ge.length, Ue = b.Yu.REQ, Xe = o.ZP?.XMLHttpRequest; class Ve extends h.W { constructor(e) { super(e); const r = (0, b.OP)(this.agentIdentifier); r.xhrWrappable && !r.disabled && (r.features.xhr = !0, this.dt = new $e(this.agentIdentifier), this.handler = (e, t, r, n) => (0, d.p)(e, t, r, n, this.ee), this.wrappedFetch = Ee(this.ee), Ae(this.ee), function(e, r, n, i) { function a(e) { var r = this; r.totalCbs = 0, r.called = 0, r.cbTime = 0, r.end = P, r.ended = !1, r.xhrGuids = {}, r.lastSize = null, r.loadCaptureCalled = !1, r.params = this.params || {}, r.metrics = this.metrics || {}, e.addEventListener("load", (function(t) { k(r, e) }), (0, t.m$)(!1)), Me.I && (Me.I > 34 || Me.I < 10) || e.addEventListener("progress", (function(e) { r.lastSize = e.loaded }), (0, t.m$)(!1)) } function s(e) { this.params = { method: e[0] }, O(this, e[1]), this.metrics = {} } function c(t, r) { var n = (0, b.DL)(e); "xpid" in n && this.sameOrigin && r.setRequestHeader("X-NewRelic-ID", n.xpid); var o = i.generateTracePayload(this.parsedOrigin); if (o) { var a = !1; o.newrelicHeader && (r.setRequestHeader("newrelic", o.newrelicHeader), a = !0), o.traceContextParentHeader && (r.setRequestHeader("traceparent", o.traceContextParentHeader), o.traceContextStateHeader && r.setRequestHeader("tracestate", o.traceContextStateHeader), a = !0), a && (this.dt = o) } } function u(e, n) { var i = this.metrics, o = e[0], a = this; if (i && o) { var s = De(o); s && (i.txSize = s) } this.startTime = (0, f.zO)(), this.listener = function(e) { try { "abort" !== e.type || a.loadCaptureCalled || (a.params.aborted = !0), ("load" !== e.type || a.called === a.totalCbs && (a.onloadCalled || "function" != typeof n.onload)) && a.end(n) } catch (e) { try { r.emit("internal-error", [e]) } catch (e) {} } }; for (var c = 0; c < Fe; c++) n.addEventListener(Ge[c], this.listener, (0, t.m$)(!1)) } function d(e, t, r) { this.cbTime += e, t ? this.onloadCalled = !0 : this.called += 1, this.called !== this.totalCbs || !this.onloadCalled && "function" == typeof r.onload || this.end(r) } function l(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && !this.xhrGuids[r] && (this.xhrGuids[r] = !0, this.totalCbs += 1) } function p(e, t) { var r = "" + ze(e) + !!t; this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], this.totalCbs -= 1) } function h() { this.endTime = (0, f.zO)() } function v(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-added", [e[1], e[2]], t) } function _(e, t) { t instanceof Xe && "load" === e[0] && r.emit("xhr-load-removed", [e[1], e[2]], t) } function g(e, t, r) { t instanceof Xe && ("onload" === r && (this.onload = !0), ("load" === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, f.zO)())) } function m(e, t) { this.xhrCbStart && r.emit("xhr-cb-time", [(0, f.zO)() - this.xhrCbStart, this.onload, t], t) } function w(e) { var t, r = e[1] || {}; "string" == typeof e[0] ? t = e[0] : e[0] && e[0].url ? t = e[0].url : o.ZP?.URL && e[0] && e[0] instanceof URL && (t = e[0].href), t && (this.parsedOrigin = (0, We.e)(t), this.sameOrigin = this.parsedOrigin.sameOrigin); var n = i.generateTracePayload(this.parsedOrigin); if (n && (n.newrelicHeader || n.traceContextParentHeader)) if ("string" == typeof e[0] || o.ZP?.URL && e[0] && e[0] instanceof URL) { var a = {}; for (var s in r) a[s] = r[s]; a.headers = new Headers(r.headers || {}), c(a.headers, n) && (this.dt = n), e.length > 1 ? e[1] = a : e.push(a) } else e[0] && e[0].headers && c(e[0].headers, n) && (this.dt = n); function c(e, t) { var r = !1; return t.newrelicHeader && (e.set("newrelic", t.newrelicHeader), r = !0), t.traceContextParentHeader && (e.set("traceparent", t.traceContextParentHeader), t.traceContextStateHeader && e.set("tracestate", t.traceContextStateHeader), r = !0), r } } function y(e, t) { this.params = {}, this.metrics = {}, this.startTime = (0, f.zO)(), this.dt = t, e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]); var r, n = this.opts || {}, i = this.target; "string" == typeof i ? r = i : "object" == typeof i && i instanceof Ue ? r = i.url : o.ZP?.URL && "object" == typeof i && i instanceof URL && (r = i.href), O(this, r); var a = ("" + (i && i instanceof Ue && i.method || n.method || "GET")).toUpperCase(); this.params.method = a, this.txSize = De(n.body) || 0 } function x(e, t) { var r; this.endTime = (0, f.zO)(), this.params || (this.params = {}), this.params.status = t ? t.status : 0, "string" == typeof this.rxSize && this.rxSize.length > 0 && (r = +this.rxSize); var i = { txSize: this.txSize, rxSize: r, duration: (0, f.zO)() - this.startTime }; n("xhr", [this.params, i, this.startTime, this.endTime, "fetch"], this) } function P(e) { var t = this.params, r = this.metrics; if (!this.ended) { this.ended = !0; for (var i = 0; i < Fe; i++) e.removeEventListener(Ge[i], this.listener, !1); t.aborted || (r.duration = (0, f.zO)() - this.startTime, this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : k(this, e), r.cbTime = this.cbTime, n("xhr", [t, r, this.startTime, this.endTime, "xhr"], this)) } } function O(e, t) { var r = (0, We.e)(t), n = e.params; n.hostname = r.hostname, n.port = r.port, n.protocol = r.protocol, n.host = r.hostname + ":" + r.port, n.pathname = r.pathname, e.parsedOrigin = r, e.sameOrigin = r.sameOrigin } function k(e, t) { e.params.status = t.status; var r = function(e, t) { var r = e.responseType; return "json" === r && null !== t ? t : "arraybuffer" === r || "blob" === r || "json" === r ? De(e.response) : "text" === r || "" === r || void 0 === r ? De(e.responseText) : void 0 }(t, e.lastSize); if (r && (e.metrics.rxSize = r), e.sameOrigin) { var n = t.getResponseHeader("X-NewRelic-App-Data"); n && (e.params.cat = n.split(", ").pop()) } e.loadCaptureCalled = !0 } r.on("new-xhr", a), r.on("open-xhr-start", s), r.on("open-xhr-end", c), r.on("send-xhr-start", u), r.on("xhr-cb-time", d), r.on("xhr-load-added", l), r.on("xhr-load-removed", p), r.on("xhr-resolved", h), r.on("addEventListener-end", v), r.on("removeEventListener-end", _), r.on("fn-end", m), r.on("fetch-before-start", w), r.on("fetch-start", y), r.on("fn-start", g), r.on("fetch-done", x) }(this.agentIdentifier, this.ee, this.handler, this.dt)) } } var Ye = __webpack_require__(6023), Je = "learResourceTimings", Qe = "addEventListener", Ke = "removeEventListener", et = "resourcetimingbufferfull", tt = "bstResource", rt = "-start", nt = "-end", it = "fn" + rt, ot = "fn" + nt, at = "bstTimer", st = "pushState", ct = b.Yu.EV; class ut extends h.W { constructor(e) { if (super(e), !o.il) return; if (!(window.performance && window.performance.timing && window.performance.getEntriesByType)) return; (0, b.OP)(this.agentIdentifier).features.stn = !0; const r = this.ee; function n(e) { if ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), window.performance["c" + Je]) try { window.performance[Ke](et, n, !1) } catch (e) {} else try { window.performance[Ke]("webkit" + et, n, !1) } catch (e) {} } this.timerEE = Te(this.ee), this.rafEE = Ce(this.ee), Se(this.ee), ke(this.ee), this.ee.on(it, (function(e, t) { e[0] instanceof ct && (this.bstStart = (0, f.zO)()) })), this.ee.on(ot, (function(e, t) { var n = e[0]; n instanceof ct && (0, d.p)("bst", [n, t, this.bstStart, (0, f.zO)()], void 0, void 0, r) })), this.timerEE.on(it, (function(e, t, r) { this.bstStart = (0, f.zO)(), this.bstType = r })), this.timerEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), this.bstType], void 0, void 0, r) })), this.rafEE.on(it, (function() { this.bstStart = (0, f.zO)() })), this.rafEE.on(ot, (function(e, t) { (0, d.p)(at, [t, this.bstStart, (0, f.zO)(), "requestAnimationFrame"], void 0, void 0, r) })), this.ee.on(st + rt, (function(e) { this.time = (0, f.zO)(), this.startPath = location.pathname + location.hash })), this.ee.on(st + nt, (function(e) { (0, d.p)("bstHist", [location.pathname + location.hash, this.startPath, this.time], void 0, void 0, r) })), (0, Ye.W)() ? ((0, d.p)(tt, [window.performance.getEntriesByType("resource")], void 0, void 0, r), function() { var e = new PerformanceObserver(((e, t) => { var n = e.getEntries(); (0, d.p)(tt, [n], void 0, void 0, r) })); try { e.observe({ entryTypes: ["resource"] }) } catch (e) {} }()) : Qe in window.performance && (window.performance["c" + Je] ? window.performance[Qe](et, n, (0, t.m$)(!1)) : window.performance[Qe]("webkit" + et, n, (0, t.m$)(!1))), document[Qe]("scroll", this.noOp, (0, t.m$)(!1)), document[Qe]("keypress", this.noOp, (0, t.m$)(!1)), document[Qe]("click", this.noOp, (0, t.m$)(!1)) } noOp(e) {} } class dt extends h.W { constructor(e) { super(e); (0, b.OP)(this.agentIdentifier).features.ins = !0 } } var ft = "-start", lt = "-end", pt = "-body", ht = "fn" + ft, vt = "fn" + lt, _t = "cb" + ft, bt = "cb" + lt, gt = "jsTime", mt = "fetch", wt = "addEventListener", yt = o.ZP, xt = yt.location; class Pt extends h.W { constructor(e) { if (super(e), !o.il) return; const r = (0, b.OP)(this.agentIdentifier); if (!yt[wt] || !r.xhrWrappable || r.disabled) return; r.features.spa = !0; let n, i = 0; const a = this.ee.get("tracer"), s = _e(this.ee); const c = function(e) { return we(e) }(this.ee), u = ke(this.ee), d = Te(this.ee), l = Ae(this.ee), p = Ee(this.ee), h = Se(this.ee), v = function(e) { return ge(e) }(this.ee); function _(e, t) { h.emit("newURL", ["" + xt, t]) } function g() { i++, n = xt.hash, this[ht] = (0, f.zO)() } function m() { i--, xt.hash !== n && _(0, !0); var e = (0, f.zO)(); this[gt] = ~~this[gt] + e - this[ht], this[vt] = e } function w(e, t) { e.on(t, (function() { this[t] = (0, f.zO)() })) } this.ee.on(ht, g), c.on(_t, g), s.on(_t, g), this.ee.on(vt, m), c.on(bt, m), s.on(bt, m), this.ee.buffer([ht, vt, "xhr-resolved"]), u.buffer([ht]), d.buffer(["setTimeout" + lt, "clearTimeout" + ft, ht]), l.buffer([ht, "new-xhr", "send-xhr" + ft]), p.buffer([mt + ft, mt + "-done", mt + pt + ft, mt + pt + lt]), h.buffer(["newURL"]), v.buffer([ht]), c.buffer(["propagate", _t, bt, "executor-err", "resolve" + ft]), a.buffer([ht, "no-" + ht]), s.buffer(["new-jsonp", "cb-start", "jsonp-error", "jsonp-end"]), w(p, mt + ft), w(p, mt + "-done"), w(s, "new-jsonp"), w(s, "jsonp-end"), w(s, "cb-start"), h.on("pushState-end", _), h.on("replaceState-end", _), yt[wt]("hashchange", _, (0, t.m$)(!0)), yt[wt]("load", _, (0, t.m$)(!0)), yt[wt]("popstate", (function() { _(0, i > 1) }), (0, t.m$)(!0)) } } var Ot = __webpack_require__(9011), kt = __webpack_require__(4580); let Et = !1; const St = (0, e.n)(); try { ! function(e) { if (Et) return; const t = (0, kt.gG)(); o.v6 && (t.info.jsAttributes = { ...t.info.jsAttributes, isWorker: !0 }); try { (0, b.CX)(u.Z, t.info), (0, b.Dg)(u.Z, t.init), (0, b.GE)(u.Z, t.loader_config), (0, b.sU)(u.Z, { loaderType: e }), function(e) { var t = (0, kt.fP)(), r = a.ee.get(e), n = r.get("tracer"), i = "api-", o = i + "ixn-"; function s() {}(0, B.D)(["setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"], (function(e, r) { t[r] = u(i, r, !0, "api") })), t.addPageAction = u(i, "addPageAction", !0), t.setCurrentRouteName = u(i, "routeName", !0), t.setPageViewName = function(t, r) { if ("string" == typeof t) return "/" !== t.charAt(0) && (t = "/" + t), (0, b.OP)(e).customTransaction = (r || "http://custom.transaction") + t, u(i, "setPageViewName", !0, "api")() }, t.setCustomAttribute = function(t, r) { const n = (0, b.C5)(e); return (0, b.CX)(e, { ...n, jsAttributes: { ...n.jsAttributes, [t]: r } }), u(i, "setCustomAttribute", !0, "api")() }, t.interaction = function() { return (new s).get() }; var c = s.prototype = { createTracer: function(e, t) { var i = {}, a = this, s = "function" == typeof t; return (0, d.p)(o + "tracer", [(0, f.zO)(), e, i], a, void 0, r), function() { if (n.emit((s ? "" : "no-") + "fn-start", [(0, f.zO)(), a, s], i), s) try { return t.apply(this, arguments) } catch (e) { throw n.emit("fn-err", [arguments, this, "string" == typeof e ? new Error(e) : e], i), e } finally { n.emit("fn-end", [(0, f.zO)()], i) } } } }; function u(e, t, n, i) { return function() { return (0, d.p)("record-supportability", ["API/" + t + "/called"], void 0, void 0, r), (0, d.p)(e + t, [(0, f.zO)()].concat(W()(arguments)), n ? null : this, i, r), n ? void 0 : this } }(0, B.D)("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","), (function(e, t) { c[t] = u(o, t) })), t.noticeError = function(e, t) { "string" == typeof e && (e = new Error(e)), (0, d.p)("record-supportability", ["API/noticeError/called"], void 0, void 0, r), (0, d.p)("err", [e, (0, f.zO)(), !1, t], void 0, void 0, r) } }(u.Z), Et = !0 } catch (e) {} }("spa"); const e = (0, Ot.K)(u.Z); e.page_view_event && new v(u.Z), e.page_view_timing && new g(u.Z), e.metrics && new z(u.Z, St), e.jserrors && new Ne(u.Z), e.ajax && new Ve(u.Z), e.session_trace && new ut(u.Z), e.page_action && new dt(u.Z), e.spa && new Pt(u.Z), function(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1e3; t ? setTimeout((() => c(e)), r) : o.il ? n((() => c(e))) : c(e) }("spa") } catch (e) { o.ZP?.newrelic?.ee?.abort && o.ZP.newrelic.ee.abort() } })(), window.NRBA = __webpack_exports__ })(); } } </script> <script type="text/javascript"> var vscom_browser_redirect_params = {"pageLanguage":"en","languageUrls":{"en_US":"https:\/\/visualstudio.microsoft.com\/downloads\/","en":"https:\/\/visualstudio.microsoft.com\/downloads\/","US":"https:\/\/visualstudio.microsoft.com\/downloads\/","zh_CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/downloads\/","zh-hans":"https:\/\/visualstudio.microsoft.com\/zh-hans\/downloads\/","CN":"https:\/\/visualstudio.microsoft.com\/zh-hans\/downloads\/","zh_TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/downloads\/","zh-hant":"https:\/\/visualstudio.microsoft.com\/zh-hant\/downloads\/","TW":"https:\/\/visualstudio.microsoft.com\/zh-hant\/downloads\/","fr_FR":"https:\/\/visualstudio.microsoft.com\/fr\/downloads\/","fr":"https:\/\/visualstudio.microsoft.com\/fr\/downloads\/","FR":"https:\/\/visualstudio.microsoft.com\/fr\/downloads\/","de_DE":"https:\/\/visualstudio.microsoft.com\/de\/downloads\/","de":"https:\/\/visualstudio.microsoft.com\/de\/downloads\/","DE":"https:\/\/visualstudio.microsoft.com\/de\/downloads\/","it_IT":"https:\/\/visualstudio.microsoft.com\/it\/downloads\/","it":"https:\/\/visualstudio.microsoft.com\/it\/downloads\/","IT":"https:\/\/visualstudio.microsoft.com\/it\/downloads\/","ja_JP":"https:\/\/visualstudio.microsoft.com\/ja\/downloads\/","ja":"https:\/\/visualstudio.microsoft.com\/ja\/downloads\/","JP":"https:\/\/visualstudio.microsoft.com\/ja\/downloads\/","ru_RU":"https:\/\/visualstudio.microsoft.com\/ru\/downloads\/","ru":"https:\/\/visualstudio.microsoft.com\/ru\/downloads\/","RU":"https:\/\/visualstudio.microsoft.com\/ru\/downloads\/","es_ES":"https:\/\/visualstudio.microsoft.com\/es\/downloads\/","es":"https:\/\/visualstudio.microsoft.com\/es\/downloads\/","ES":"https:\/\/visualstudio.microsoft.com\/es\/downloads\/","cs_CZ":"https:\/\/visualstudio.microsoft.com\/cs\/downloads\/","cs":"https:\/\/visualstudio.microsoft.com\/cs\/downloads\/","CZ":"https:\/\/visualstudio.microsoft.com\/cs\/downloads\/","ko_KR":"https:\/\/visualstudio.microsoft.com\/ko\/downloads\/","ko":"https:\/\/visualstudio.microsoft.com\/ko\/downloads\/","KR":"https:\/\/visualstudio.microsoft.com\/ko\/downloads\/","pl_PL":"https:\/\/visualstudio.microsoft.com\/pl\/downloads\/","pl":"https:\/\/visualstudio.microsoft.com\/pl\/downloads\/","PL":"https:\/\/visualstudio.microsoft.com\/pl\/downloads\/","pt_BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/downloads\/","pt-br":"https:\/\/visualstudio.microsoft.com\/pt-br\/downloads\/","BR":"https:\/\/visualstudio.microsoft.com\/pt-br\/downloads\/","tr_TR":"https:\/\/visualstudio.microsoft.com\/tr\/downloads\/","tr":"https:\/\/visualstudio.microsoft.com\/tr\/downloads\/","TR":"https:\/\/visualstudio.microsoft.com\/tr\/downloads\/"},"cookie":{"name":"_icl_visitor_lang_js","domain":"visualstudio.microsoft.com","path":"\/","expiration":720},"is404":false,"urlLocale":""}; var VScomMLBrowserRedirect=function(vscom_browser_redirect_params){"use strict";var self=this,vscom_browser_redirect_params=vscom_browser_redirect_params||window.vscom_browser_redirect_params;self.vscom_browser_redirect_params=vscom_browser_redirect_params,self.init=function(){var redirectUrl,browserLanguages;if(self.is404())self.status="404";else if(!vscom_browser_redirect_params.urlLocale){var cookieLanguage=self.readCookie(vscom_browser_redirect_params.cookie.name);if(cookieLanguage)return redirectUrl=self.redirectIfNeeded(cookieLanguage),void(self.status="cookie");browserLanguages=self.getBrowserLanguage(),redirectUrl=self.lookUpRedirectParams(browserLanguages),self.status="new";var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase();void 0===redirectUrl||!1===redirectUrl.url||!1!==navigator.cookieEnabled||redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]?void 0!==redirectUrl&&!1!==redirectUrl.url&&redirectUrl.url!==vscom_browser_redirect_params.languageUrls[pageLanguage]&&(self.status="redirect",self.redirectWithQueryString(redirectUrl.url)):self.status="no cookies"}},self.lookUpRedirectParams=function(browserLanguages){for(var redirectUrl,browserLanguagesLength=browserLanguages.length,pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),i=0;i<browserLanguagesLength;i++){var browserLanguage=browserLanguages[i];if(pageLanguage===browserLanguage)break;if(!1!==(redirectUrl=self.mapBrowserToVSCOMLang(browserLanguage)).url)break}return redirectUrl},self.getRedirectUrl=function(browserLanguage){if(!1===browserLanguage)return{url:!1,language:!1};var redirectUrl=!1,redirectLanguage=!1,languageUrls=vscom_browser_redirect_params.languageUrls,languageFirstPart=browserLanguage.substr(0,2),languageLastPart=browserLanguage.substr(3,2);return void 0===languageUrls[browserLanguage]?void 0!==languageUrls[languageFirstPart]?(redirectUrl=languageUrls[languageFirstPart],redirectLanguage=languageFirstPart):void 0!==languageUrls[languageLastPart]&&(redirectUrl=languageUrls[languageLastPart],redirectLanguage=languageLastPart):(redirectUrl=languageUrls[browserLanguage],redirectLanguage=browserLanguage),{url:redirectUrl,language:redirectLanguage}},self.is404=function(){return vscom_browser_redirect_params.is404},self.mapBrowserToVSCOMLang=function(browserLanguage){var redirectUrl;return browserLanguage=self.maybeCovertChinese(browserLanguage),redirectUrl=self.getRedirectUrl(browserLanguage)},self.redirectIfNeeded=function(language){var pageLanguage=vscom_browser_redirect_params.pageLanguage.toLowerCase(),languageUrls=vscom_browser_redirect_params.languageUrls,redirectUrl;return pageLanguage!==(language=self.maybeCovertChinese(language))&&language.substr(0,2)!==pageLanguage&&languageUrls[language]!==languageUrls[pageLanguage]&&!1!==(redirectUrl=self.getRedirectUrl(language)).url&&self.redirectWithQueryString(redirectUrl.url),redirectUrl},self.maybeCovertChinese=function(language){var simpleChinese=["hans","cn","CN"];return"zh"===language.substr(0,2)&&-1===simpleChinese.indexOf(language.substr(3,4))&&language.length>3||"TW"==language?language="zh-hant":("zh"==language||"zh"===language.substr(0,2)&&simpleChinese.indexOf(language.substr(3,4))>=0||"CN"==language)&&(language="zh-hans"),language},self.redirectWithQueryString=function(redirectTo){""===window.location.search||redirectTo.includes("?")||(redirectTo+=window.location.search),window.location=redirectTo},self.getExpirationDate=function(){var date=new Date,currentTime=date.getTime();return date.setTime(currentTime+60*vscom_browser_redirect_params.cookie.expiration*60*1e3),date},self.readCookie=function(a){var b=document.cookie.match("(^|;)\\s*"+a+"\\s*=\\s*([^;]+)");return b?b.pop():""},self.setCookie=function(browserLanguage){var cookieParams=vscom_browser_redirect_params.cookie,cookieName=cookieParams.name,path="/";cookieParams.path&&(path=cookieParams.path),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"language-picker",label:browserLanguage}),document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain= ; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT;",document.cookie=cookieName+"= ; domain=."+cookieParams.domain+"; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;",document.cookie=cookieName+"="+browserLanguage+"; expires="+self.getExpirationDate().toGMTString()+"; path="+path},self.getBrowserLanguage=function(){var browserLanguages=[];return navigator.languages&&(browserLanguages=navigator.languages),0===browserLanguages.length&&(navigator.language||navigator.userLanguage)&&browserLanguages.push(navigator.language||navigator.userLanguage),0===browserLanguages.length&&(navigator.browserLanguage||navigator.systemLanguage)&&browserLanguages.push(navigator.browserLanguage||navigator.systemLanguage),0!==browserLanguages.length&&(browserLanguages=browserLanguages.join("|").toLowerCase().split("|")),browserLanguages}};"undefined"!=typeof module&&module.exports&&(module.exports={VScomMLBrowserRedirect:VScomMLBrowserRedirect}); VScomMLBrowserRedirect = new VScomMLBrowserRedirect(); VScomMLBrowserRedirect.init(); </script> <script> /*! lazysizes - v4.1.3 | For lazy loading images */ ! function(a, b) { var c = b(a, a.document); a.lazySizes = c, "object" == typeof module && module.exports && (module.exports = c) }(window, function(a, b) { "use strict"; if (b.getElementsByClassName) { var c, d, e = b.documentElement, f = a.Date, g = a.HTMLPictureElement, h = "addEventListener", i = "getAttribute", j = a[h], k = a.setTimeout, l = a.requestAnimationFrame || k, m = a.requestIdleCallback, n = /^picture$/i, o = ["load", "error", "lazyincluded", "_lazyloaded"], p = {}, q = Array.prototype.forEach, r = function(a, b) { return p[b] || (p[b] = new RegExp("(\\s|^)" + b + "(\\s|$)")), p[b].test(a[i]("class") || "") && p[b] }, s = function(a, b) { r(a, b) || a.setAttribute("class", (a[i]("class") || "").trim() + " " + b) }, t = function(a, b) { var c; (c = r(a, b)) && a.setAttribute("class", (a[i]("class") || "").replace(c, " ")) }, u = function(a, b, c) { var d = c ? h : "removeEventListener"; c && u(a, b), o.forEach(function(c) { a[d](c, b) }) }, v = function(a, d, e, f, g) { var h = b.createEvent("Event"); return e || (e = {}), e.instance = c, h.initEvent(d, !f, !g), h.detail = e, a.dispatchEvent(h), h }, w = function(b, c) { var e; !g && (e = a.picturefill || d.pf) ? (c && c.src && !b[i]("srcset") && b.setAttribute("srcset", c.src), e({ reevaluate: !0, elements: [b] })) : c && c.src && (b.src = c.src) }, x = function(a, b) { return (getComputedStyle(a, null) || {})[b] }, y = function(a, b, c) { for (c = c || a.offsetWidth; c < d.minSize && b && !a._lazysizesWidth;) c = b.offsetWidth, b = b.parentNode; return c }, z = function() { var a, c, d = [], e = [], f = d, g = function() { var b = f; for (f = d.length ? e : d, a = !0, c = !1; b.length;) b.shift()(); a = !1 }, h = function(d, e) { a && !e ? d.apply(this, arguments) : (f.push(d), c || (c = !0, (b.hidden ? k : l)(g))) }; return h._lsFlush = g, h }(), A = function(a, b) { return b ? function() { z(a) } : function() { var b = this, c = arguments; z(function() { a.apply(b, c) }) } }, B = function(a) { var b, c = 0, e = d.throttleDelay, g = d.ricTimeout, h = function() { b = !1, c = f.now(), a() }, i = m && g > 49 ? function() { m(h, { timeout: g }), g !== d.ricTimeout && (g = d.ricTimeout) } : A(function() { k(h) }, !0); return function(a) { var d; (a = a === !0) && (g = 33), b || (b = !0, d = e - (f.now() - c), 0 > d && (d = 0), a || 9 > d ? i() : k(i, d)) } }, C = function(a) { var b, c, d = 99, e = function() { b = null, a() }, g = function() { var a = f.now() - c; d > a ? k(g, d - a) : (m || e)(e) }; return function() { c = f.now(), b || (b = k(g, d)) } }; ! function() { var b, c = { lazyClass: "lazyload", loadedClass: "lazyloaded", loadingClass: "lazyloading", preloadClass: "lazypreload", errorClass: "lazyerror", autosizesClass: "lazyautosizes", srcAttr: "data-src", srcsetAttr: "data-srcset", sizesAttr: "data-sizes", minSize: 40, customMedia: {}, init: !0, expFactor: 1.5, hFac: .8, loadMode: 2, loadHidden: !0, ricTimeout: 0, throttleDelay: 125 }; d = a.lazySizesConfig || a.lazysizesConfig || {}; for (b in c) b in d || (d[b] = c[b]); a.lazySizesConfig = d, k(function() { d.init && F() }) }(); var D = function() { var g, l, m, o, p, y, D, F, G, H, I, J, K, L, M = /^img$/i, N = /^iframe$/i, O = "onscroll" in a && !/(gle|ing)bot/.test(navigator.userAgent), P = 0, Q = 0, R = 0, S = -1, T = function(a) { R--, a && a.target && u(a.target, T), (!a || 0 > R || !a.target) && (R = 0) }, U = function(a, c) { var d, f = a, g = "hidden" == x(b.body, "visibility") || "hidden" != x(a.parentNode, "visibility") && "hidden" != x(a, "visibility"); for (F -= c, I += c, G -= c, H += c; g && (f = f.offsetParent) && f != b.body && f != e;) g = (x(f, "opacity") || 1) > 0, g && "visible" != x(f, "overflow") && (d = f.getBoundingClientRect(), g = H > d.left && G < d.right && I > d.top - 1 && F < d.bottom + 1); return g }, V = function() { var a, f, h, j, k, m, n, p, q, r = c.elements; if ((o = d.loadMode) && 8 > R && (a = r.length)) { f = 0, S++, null == K && ("expand" in d || (d.expand = e.clientHeight > 500 && e.clientWidth > 500 ? 500 : 370), J = d.expand, K = J * d.expFactor), K > Q && 1 > R && S > 2 && o > 2 && !b.hidden ? (Q = K, S = 0) : Q = o > 1 && S > 1 && 6 > R ? J : P; for (; a > f; f++) if (r[f] && !r[f]._lazyRace) if (O) if ((p = r[f][i]("data-expand")) && (m = 1 * p) || (m = Q), q !== m && (y = innerWidth + m * L, D = innerHeight + m, n = -1 * m, q = m), h = r[f].getBoundingClientRect(), (I = h.bottom) >= n && (F = h.top) <= D && (H = h.right) >= n * L && (G = h.left) <= y && (I || H || G || F) && (d.loadHidden || "hidden" != x(r[f], "visibility")) && (l && 3 > R && !p && (3 > o || 4 > S) || U(r[f], m))) { if (ba(r[f]), k = !0, R > 9) break } else !k && l && !j && 4 > R && 4 > S && o > 2 && (g[0] || d.preloadAfterLoad) && (g[0] || !p && (I || H || G || F || "auto" != r[f][i](d.sizesAttr))) && (j = g[0] || r[f]); else ba(r[f]); j && !k && ba(j) } }, W = B(V), X = function(a) { s(a.target, d.loadedClass), t(a.target, d.loadingClass), u(a.target, Z), v(a.target, "lazyloaded") }, Y = A(X), Z = function(a) { Y({ target: a.target }) }, $ = function(a, b) { try { a.contentWindow.location.replace(b) } catch (c) { a.src = b } }, _ = function(a) { var b, c = a[i](d.srcsetAttr); (b = d.customMedia[a[i]("data-media") || a[i]("media")]) && a.setAttribute("media", b), c && a.setAttribute("srcset", c) }, aa = A(function(a, b, c, e, f) { var g, h, j, l, o, p; (o = v(a, "lazybeforeunveil", b)).defaultPrevented || (e && (c ? s(a, d.autosizesClass) : a.setAttribute("sizes", e)), h = a[i](d.srcsetAttr), g = a[i](d.srcAttr), f && (j = a.parentNode, l = j && n.test(j.nodeName || "")), p = b.firesLoad || "src" in a && (h || g || l), o = { target: a }, p && (u(a, T, !0), clearTimeout(m), m = k(T, 2500), s(a, d.loadingClass), u(a, Z, !0)), l && q.call(j.getElementsByTagName("source"), _), h ? a.setAttribute("srcset", h) : g && !l && (N.test(a.nodeName) ? $(a, g) : a.src = g), f && (h || l) && w(a, { src: g })), a._lazyRace && delete a._lazyRace, t(a, d.lazyClass), z(function() { (!p || a.complete && a.naturalWidth > 1) && (p ? T(o) : R--, X(o)) }, !0) }), ba = function(a) { var b, c = M.test(a.nodeName), e = c && (a[i](d.sizesAttr) || a[i]("sizes")), f = "auto" == e; (!f && l || !c || !a[i]("src") && !a.srcset || a.complete || r(a, d.errorClass) || !r(a, d.lazyClass)) && (b = v(a, "lazyunveilread").detail, f && E.updateElem(a, !0, a.offsetWidth), a._lazyRace = !0, R++, aa(a, b, f, e, c)) }, ca = function() { if (!l) { if (f.now() - p < 999) return void k(ca, 999); var a = C(function() { d.loadMode = 3, W() }); l = !0, d.loadMode = 3, W(), j("scroll", function() { 3 == d.loadMode && (d.loadMode = 2), a() }, !0) } }; return { _: function() { p = f.now(), c.elements = b.getElementsByClassName(d.lazyClass), g = b.getElementsByClassName(d.lazyClass + " " + d.preloadClass), L = d.hFac, j("scroll", W, !0), j("resize", W, !0), a.MutationObserver ? new MutationObserver(W).observe(e, { childList: !0, subtree: !0, attributes: !0 }) : (e[h]("DOMNodeInserted", W, !0), e[h]("DOMAttrModified", W, !0), setInterval(W, 999)), j("hashchange", W, !0), ["focus", "mouseover", "click", "load", "transitionend", "animationend", "webkitAnimationEnd"].forEach(function(a) { b[h](a, W, !0) }), /d$|^c/.test(b.readyState) ? ca() : (j("load", ca), b[h]("DOMContentLoaded", W), k(ca, 2e4)), c.elements.length ? (V(), z._lsFlush()) : W() }, checkElems: W, unveil: ba } }(), E = function() { var a, c = A(function(a, b, c, d) { var e, f, g; if (a._lazysizesWidth = d, d += "px", a.setAttribute("sizes", d), n.test(b.nodeName || "")) for (e = b.getElementsByTagName("source"), f = 0, g = e.length; g > f; f++) e[f].setAttribute("sizes", d); c.detail.dataAttr || w(a, c.detail) }), e = function(a, b, d) { var e, f = a.parentNode; f && (d = y(a, f, d), e = v(a, "lazybeforesizes", { width: d, dataAttr: !!b }), e.defaultPrevented || (d = e.detail.width, d && d !== a._lazysizesWidth && c(a, f, e, d))) }, f = function() { var b, c = a.length; if (c) for (b = 0; c > b; b++) e(a[b]) }, g = C(f); return { _: function() { a = b.getElementsByClassName(d.autosizesClass), j("resize", g) }, checkElems: g, updateElem: e } }(), F = function() { F.i || (F.i = !0, E._(), D._()) }; return c = { cfg: d, autoSizer: E, loader: D, init: F, uP: w, aC: s, rC: t, hC: r, fire: v, gW: y, rAF: z } } }); </script> <meta name="format-detection" content="telephone=no" /> <meta name="baidu-site-verification" content="codeva-dhhqsW34IG" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script type="text/javascript"> var doc = document.documentElement; doc.setAttribute('data-useragent', navigator.userAgent); </script> <script> function searchbuttonclick() { if (!isSearchFieldVisible()) { displaySearchField(); focusSearchField(); } else if (document.getElementById('searchinput').value) { document.getElementById('searchform').submit(); } else { closeSearchBox(); } } function focusSearchField() { var textBox = jQuery("#searchfield"); textBox = textBox.length > 0 ? textBox[0] : null; jQuery("#searchfield").focus(); if (!!textBox && textBox != document.activeElement) { textBox.focus(); } } function clearSearchText() { document.getElementById('searchinput').value=''; } function isSearchFieldVisible() { return document.getElementById('searchfield').style.display !== 'none'; } function displaySearchField() { document.getElementById('searchfield').style.display = 'inline-block'; } function closeSearchBox(){ clearSearchText(); document.getElementById('searchfield').style.display = 'none'; } </script> <script> window.performance && performance.mark && performance.mark("HeadAreaEnd") </script> </head> <body class="page-template page-template-100-modern page-template-100-modern-php page page-id-12321 microsoft-uhf awb-no-sidebars fusion-image-hovers fusion-pagination-sizing fusion-button_type-flat fusion-button_span-no fusion-button_gradient-linear avada-image-rollover-circle-yes avada-image-rollover-yes avada-image-rollover-direction-left fusion-body ltr no-tablet-sticky-header no-mobile-sticky-header no-mobile-slidingbar no-desktop-totop no-mobile-totop fusion-sub-menu-fade mobile-logo-pos-left layout-wide-mode avada-has-boxed-modal-shadow-none layout-scroll-offset-full avada-has-zero-margin-offset-top avada-has-header-hidden mobile-menu-design-modern fusion-show-pagination-text fusion-header-layout-v1 avada-responsive avada-footer-fx-none avada-menu-highlight-style-bar fusion-search-form-classic fusion-main-menu-search-dropdown fusion-avatar-square avada-dropdown-styles avada-blog-layout-medium alternate avada-blog-archive-layout-large avada-header-shadow-no avada-menu-icon-position-left avada-has-100-footer avada-has-breadcrumb-mobile-hidden avada-has-titlebar-bar_and_content avada-has-pagination-padding avada-flyout-menu-direction-fade avada-ec-views-v1"> <!-- Loading Accessibility Automation Tool in all non prod env --> <!-- Loading Accessibility Automation Tool in all non prod env --> <div id="headerArea" class="uhf" data-m='{"cN":"headerArea","cT":"Area_coreuiArea","id":"a1Body","sN":1,"aN":"Body"}'> <div id="headerRegion" data-region-key="headerregion" data-m='{"cN":"headerRegion","cT":"Region_coreui-region","id":"r1a1","sN":1,"aN":"a1"}' > <div id="headerUniversalHeader" data-m='{"cN":"headerUniversalHeader","cT":"Module_coreui-universalheader","id":"m1r1a1","sN":1,"aN":"r1a1"}' data-module-id="Category|headerRegion|coreui-region|headerUniversalHeader|coreui-universalheader"> <div data-m='{"cN":"cookiebanner_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}'> <div id="uhfCookieAlert" data-locale="en-us"> <div id="msccBannerV2"></div> </div> </div> <a id="uhfSkipToMain" class="m-skip-to-main" href="javascript:void(0)" data-href="#main" tabindex="0" data-m='{"cN":"Skip to content_nonnav","id":"nn2m1r1a1","sN":2,"aN":"m1r1a1"}'>Skip to main content</a> <header class="c-uhfh context-uhf no-js c-sgl-stck c-category-header " itemscope="itemscope" data-header-footprint="/VisualStudio/VisualStudioHeaderMsftPROD-Dark-1, fromService: True" data-magict="true" itemtype="http://schema.org/Organization"> <div class="theme-dark js-global-head f-closed global-head-cont" data-m='{"cN":"Universal Header_cont","cT":"Container","id":"c3m1r1a1","sN":3,"aN":"m1r1a1"}'> <div class="c-uhfh-gcontainer-st"> <button type="button" class="c-action-trigger c-glyph glyph-global-nav-button" aria-label="All Microsoft expand to see list of Microsoft products and services" initialState-label="All Microsoft expand to see list of Microsoft products and services" toggleState-label="Close All Microsoft list" aria-expanded="false" data-m='{"cN":"Mobile menu button_nonnav","id":"nn1c3m1r1a1","sN":1,"aN":"c3m1r1a1"}'></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy c-close-search" aria-label="Close search" aria-expanded="false" data-m='{"cN":"Close Search_nonnav","id":"nn2c3m1r1a1","sN":2,"aN":"c3m1r1a1"}'></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://www.microsoft.com" aria-label="Microsoft" data-m='{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c3m1r1a1","sN":3,"aN":"c3m1r1a1"}'> <img alt="" itemprop="logo" class="c-image" src="https://uhf.microsoft.com/images/microsoft/RE1MmB8.png" role="presentation" aria-hidden="true" /> <span itemprop="name" role="presentation" aria-hidden="true">Microsoft</span> </a> <div class="f-mobile-title"> <button type="button" class="c-action-trigger c-glyph glyph-chevron-left" aria-label="See more menu options" data-m='{"cN":"Mobile back button_nonnav","id":"nn4c3m1r1a1","sN":4,"aN":"c3m1r1a1"}'></button> <span data-global-title="Microsoft home" class="js-mobile-title">Visual Studio</span> <button type="button" class="c-action-trigger c-glyph glyph-chevron-right" aria-label="See more menu options" data-m='{"cN":"Mobile forward button_nonnav","id":"nn5c3m1r1a1","sN":5,"aN":"c3m1r1a1"}'></button> </div> <div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="https://visualstudio.microsoft.com/" aria-label="Visual Studio" itemprop="url" data-m='{"cN":"CatNav_Visual Studio_nav","id":"n6c3m1r1a1","sN":6,"aN":"c3m1r1a1"}'> <span>Visual Studio</span> </a> </div> <div class="cat-logo-button-cont x-hidden"> <button type="button" id="uhfCatLogoButton" class="c-cat-logo-button x-hidden" aria-expanded="false" aria-label="Visual Studio" data-m='{"cN":"Visual Studio_nonnav","id":"nn7c3m1r1a1","sN":7,"aN":"c3m1r1a1"}'> Visual Studio </button> </div> <nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m='{"cN":"Category nav_cont","cT":"Container","id":"c8c3m1r1a1","sN":8,"aN":"c3m1r1a1"}'> <ul class="js-paddle-items"> <li class="single-link js-nav-menu x-hidden-none-mobile-vp uhf-menu-item"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"CatNav_Home_nav","id":"n1c8c3m1r1a1","sN":1,"aN":"c8c3m1r1a1"}' > Home </a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="devblogs-menu-item" aria-expanded="false" data-m='{"cN":"CatNav_Developer Tools_nonnav","id":"nn2c8c3m1r1a1","sN":2,"aN":"c8c3m1r1a1"}'>Developer Tools</button> <ul class="f-multi-column f-multi-column-2" data-class-idn="f-multi-column f-multi-column-2" aria-hidden="true" data-m='{"cN":"Developer Tools_cont","cT":"Container","id":"c3c8c3m1r1a1","sN":3,"aN":"c8c3m1r1a1"}'> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio 2022_cont","cT":"Container","id":"c1c3c8c3m1r1a1","sN":1,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_41-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn1c1c3c8c3m1r1a1","sN":1,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</span> <button id="uhf-navbtn-shellmenu_41-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio 2022_nonnav","id":"nn2c1c3c8c3m1r1a1","sN":2,"aN":"c1c3c8c3m1r1a1"}'>Visual Studio 2022</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_41-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c1c3c8c3m1r1a1","sN":3,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_42" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c1c3c8c3m1r1a1","sN":1,"aN":"c3c1c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Features_cont","cT":"Container","id":"c4c1c3c8c3m1r1a1","sN":4,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_43" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/features/" data-m='{"cN":"CatNav_Features_nav","id":"n1c4c1c3c8c3m1r1a1","sN":1,"aN":"c4c1c3c8c3m1r1a1"}'>Features</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Editions_cont","cT":"Container","id":"c5c1c3c8c3m1r1a1","sN":5,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_44" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/compare/" data-m='{"cN":"CatNav_Editions_nav","id":"n1c5c1c3c8c3m1r1a1","sN":1,"aN":"c5c1c3c8c3m1r1a1"}'>Editions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c6c1c3c8c3m1r1a1","sN":6,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_45" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vs" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c6c1c3c8c3m1r1a1","sN":1,"aN":"c6c1c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Get Started_cont","cT":"Container","id":"c7c1c3c8c3m1r1a1","sN":7,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_46" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/getting-started/" data-m='{"cN":"CatNav_Get Started_nav","id":"n1c7c1c3c8c3m1r1a1","sN":1,"aN":"c7c1c3c8c3m1r1a1"}'>Get Started</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Service Status_cont","cT":"Container","id":"c8c1c3c8c3m1r1a1","sN":8,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_47" class="js-subm-uhf-nav-link" href="https://aka.ms/vsstatus" data-m='{"cN":"CatNav_Service Status_nav","id":"n1c8c1c3c8c3m1r1a1","sN":1,"aN":"c8c1c3c8c3m1r1a1"}'>Service Status</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"FAQ Support_cont","cT":"Container","id":"c9c1c3c8c3m1r1a1","sN":9,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_48" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/support/" data-m='{"cN":"CatNav_FAQ Support_nav","id":"n1c9c1c3c8c3m1r1a1","sN":1,"aN":"c9c1c3c8c3m1r1a1"}'>FAQ Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c10c1c3c8c3m1r1a1","sN":10,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_49" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c10c1c3c8c3m1r1a1","sN":1,"aN":"c10c1c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c11c1c3c8c3m1r1a1","sN":11,"aN":"c1c3c8c3m1r1a1"}'> <a id="shellmenu_50" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Blog_nav","id":"n1c11c1c3c8c3m1r1a1","sN":1,"aN":"c11c1c3c8c3m1r1a1"}'>Blog</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cN":"Visual Studio Code_cont","cT":"Container","id":"c2c3c8c3m1r1a1","sN":2,"aN":"c3c8c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_51-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn1c2c3c8c3m1r1a1","sN":1,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</span> <button id="uhf-navbtn-shellmenu_51-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"cN":"CatNav_Visual Studio Code_nonnav","id":"nn2c2c3c8c3m1r1a1","sN":2,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio Code</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_51-span"> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c3c2c3c8c3m1r1a1","sN":3,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_52" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" data-m='{"cN":"CatNav_Overview_nav","id":"n1c3c2c3c8c3m1r1a1","sN":1,"aN":"c3c2c3c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Extensions_cont","cT":"Container","id":"c4c2c3c8c3m1r1a1","sN":4,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_53" class="js-subm-uhf-nav-link" href="https://marketplace.visualstudio.com/vscode" data-m='{"cN":"CatNav_Extensions_nav","id":"n1c4c2c3c8c3m1r1a1","sN":1,"aN":"c4c2c3c8c3m1r1a1"}'>Extensions</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support_cont","cT":"Container","id":"c5c2c3c8c3m1r1a1","sN":5,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_54" class="js-subm-uhf-nav-link" href="https://support.serviceshub.microsoft.com/supportforbusiness/create?sapId=d66407ed-3967-b000-4cfb-2c318cad363d" data-m='{"cN":"CatNav_Support_nav","id":"n1c5c2c3c8c3m1r1a1","sN":1,"aN":"c5c2c3c8c3m1r1a1"}'>Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Documentation_cont","cT":"Container","id":"c6c2c3c8c3m1r1a1","sN":6,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_55" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/docs" data-m='{"cN":"CatNav_Documentation_nav","id":"n1c6c2c3c8c3m1r1a1","sN":1,"aN":"c6c2c3c8c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blog_cont","cT":"Container","id":"c7c2c3c8c3m1r1a1","sN":7,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_56" class="js-subm-uhf-nav-link" href="https://code.visualstudio.com/blogs" data-m='{"cN":"CatNav_Blog_nav","id":"n1c7c2c3c8c3m1r1a1","sN":1,"aN":"c7c2c3c8c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"VS Code for Education_cont","cT":"Container","id":"c8c2c3c8c3m1r1a1","sN":8,"aN":"c2c3c8c3m1r1a1"}'> <a id="shellmenu_57" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/vscode-edu/" data-m='{"cN":"CatNav_VS Code for Education_nav","id":"n1c8c2c3c8c3m1r1a1","sN":1,"aN":"c8c2c3c8c3m1r1a1"}'>VS Code for Education</a> </li> </ul> </li> </ul> </div> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_58" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/downloads/" data-m='{"cN":"CatNav_Downloads_nav","id":"n4c8c3m1r1a1","sN":4,"aN":"c8c3m1r1a1"}'>Downloads</a> </li> <li class="single-link js-nav-menu uhf-menu-item"> <a id="c-shellmenu_59" class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/vs/pricing/?tab=paid-subscriptions" data-m='{"cN":"CatNav_Buy_nav","id":"n5c8c3m1r1a1","sN":5,"aN":"c8c3m1r1a1"}'>Buy</a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="c-shellmenu_60" aria-expanded="false" data-m='{"cN":"CatNav_Subscriptions_nonnav","id":"nn6c8c3m1r1a1","sN":6,"aN":"c8c3m1r1a1"}'>Subscriptions</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Subscriptions_cont","cT":"Container","id":"c7c8c3m1r1a1","sN":7,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Overview_cont","cT":"Container","id":"c1c7c8c3m1r1a1","sN":1,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_61" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/" data-m='{"cN":"CatNav_Overview_nav","id":"n1c1c7c8c3m1r1a1","sN":1,"aN":"c1c7c8c3m1r1a1"}'>Overview</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Support_cont","cT":"Container","id":"c2c7c8c3m1r1a1","sN":2,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_62" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/subscriptions/support/" data-m='{"cN":"CatNav_Support_nav","id":"n1c2c7c8c3m1r1a1","sN":1,"aN":"c2c7c8c3m1r1a1"}'>Support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Administrator Portal_cont","cT":"Container","id":"c3c7c8c3m1r1a1","sN":3,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_63" class="js-subm-uhf-nav-link" href="https://manage.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Administrator Portal_nav","id":"n1c3c7c8c3m1r1a1","sN":1,"aN":"c3c7c8c3m1r1a1"}'>Administrator Portal</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Subscriber Portal_cont","cT":"Container","id":"c4c7c8c3m1r1a1","sN":4,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_64" class="js-subm-uhf-nav-link" href="https://my.visualstudio.com/GetHelp" data-m='{"cN":"CatNav_Subscriber Portal_nav","id":"n1c4c7c8c3m1r1a1","sN":1,"aN":"c4c7c8c3m1r1a1"}'>Subscriber Portal</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dev Essentials_cont","cT":"Container","id":"c5c7c8c3m1r1a1","sN":5,"aN":"c7c8c3m1r1a1"}'> <a id="c-shellmenu_65" class="js-subm-uhf-nav-link" href="https://visualstudio.microsoft.com/dev-essentials/" data-m='{"cN":"CatNav_Dev Essentials_nav","id":"n1c5c7c8c3m1r1a1","sN":1,"aN":"c5c7c8c3m1r1a1"}'>Dev Essentials</a> </li> </ul> </div> </li> <li id="overflow-menu" class="overflow-menu x-hidden uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button data-m='{"pid":"More","id":"nn8c8c3m1r1a1","sN":8,"aN":"c8c3m1r1a1"}' type="button" aria-label="More" aria-expanded="false">More</button> <ul id="overflow-menu-list" aria-hidden="true" class="overflow-menu-list"> </ul> </div> </li> <li class="single-link js-nav-menu" id="c-uhf-nav-cta"> <a class="c-uhf-nav-link" href="https://visualstudio.microsoft.com/free-developer-offers/" data-m='{"cN":"CatNav_cta_Free Visual Studio_nav","id":"n9c8c3m1r1a1","sN":9,"aN":"c8c3m1r1a1"}'>Free Visual Studio</a> </li> </ul> </nav> <div class="c-uhfh-actions" data-m='{"cN":"Header actions_cont","cT":"Container","id":"c9c3m1r1a1","sN":9,"aN":"c3m1r1a1"}'> <div class="wf-menu"> <nav id="uhf-c-nav" aria-label="All Microsoft menu" data-m='{"cN":"GlobalNav_cont","cT":"Container","id":"c1c9c3m1r1a1","sN":1,"aN":"c9c3m1r1a1"}'> <ul class="js-paddle-items"> <li> <div class="c-uhf-menu js-nav-menu"> <button type="button" class="c-button-logo all-ms-nav" aria-expanded="false" data-m='{"cN":"GlobalNav_More_nonnav","id":"nn1c1c9c3m1r1a1","sN":1,"aN":"c1c9c3m1r1a1"}'> <span>All Microsoft</span></button> <ul class="f-multi-column f-multi-column-4" aria-hidden="true" data-m='{"cN":"More_cont","cT":"Container","id":"c2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}'> <li class="c-w0-contr"> <h2 class="c-uhf-sronly">Global</h2> <ul class="c-w0"> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Security_cont","cT":"Container","id":"c1c2c1c9c3m1r1a1","sN":1,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_0" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"W0Nav_Microsoft Security_nav","id":"n1c1c2c1c9c3m1r1a1","sN":1,"aN":"c1c2c1c9c3m1r1a1"}'>Microsoft Security</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure_cont","cT":"Container","id":"c2c2c1c9c3m1r1a1","sN":2,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_1" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Azure_nav","id":"n1c2c2c1c9c3m1r1a1","sN":1,"aN":"c2c2c1c9c3m1r1a1"}'>Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Dynamics 365_cont","cT":"Container","id":"c3c2c1c9c3m1r1a1","sN":3,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_2" class="js-subm-uhf-nav-link" href="https://dynamics.microsoft.com/en-us/" data-m='{"cN":"W0Nav_Dynamics 365_nav","id":"n1c3c2c1c9c3m1r1a1","sN":1,"aN":"c3c2c1c9c3m1r1a1"}'>Dynamics 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft 365_cont","cT":"Container","id":"c4c2c1c9c3m1r1a1","sN":4,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_3" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-365/business/" data-m='{"cN":"W0Nav_Microsoft 365_nav","id":"n1c4c2c1c9c3m1r1a1","sN":1,"aN":"c4c2c1c9c3m1r1a1"}'>Microsoft 365</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Teams_cont","cT":"Container","id":"c5c2c1c9c3m1r1a1","sN":5,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_4" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"W0Nav_Microsoft Teams_nav","id":"n1c5c2c1c9c3m1r1a1","sN":1,"aN":"c5c2c1c9c3m1r1a1"}'>Microsoft Teams</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows 365_cont","cT":"Container","id":"c6c2c1c9c3m1r1a1","sN":6,"aN":"c2c1c9c3m1r1a1"}'> <a id="shellmenu_5" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/windows-365" data-m='{"cN":"W0Nav_Windows 365_nav","id":"n1c6c2c1c9c3m1r1a1","sN":1,"aN":"c6c2c1c9c3m1r1a1"}'>Windows 365</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c7c2c1c9c3m1r1a1","sN":7,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_7-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c2c1c9c3m1r1a1"}'>Tech & innovation</span> <button id="uhf-navbtn-shellmenu_7-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c7c2c1c9c3m1r1a1","sN":2,"aN":"c7c2c1c9c3m1r1a1"}'>Tech & innovation</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_7-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftCloud_cont","cT":"Container","id":"c3c7c2c1c9c3m1r1a1","sN":3,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_8" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftCloud_nav","id":"n1c3c7c2c1c9c3m1r1a1","sN":1,"aN":"c3c7c2c1c9c3m1r1a1"}'>Microsoft Cloud</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation__AI_cont","cT":"Container","id":"c4c7c2c1c9c3m1r1a1","sN":4,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_9" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/ai" data-m='{"cN":"GlobalNav_More_TechInnovation__AI_nav","id":"n1c4c7c2c1c9c3m1r1a1","sN":1,"aN":"c4c7c2c1c9c3m1r1a1"}'>AI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_AzureSpace_cont","cT":"Container","id":"c5c7c2c1c9c3m1r1a1","sN":5,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_10" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/space/" data-m='{"cN":"GlobalNav_More_TechInnovation_AzureSpace_nav","id":"n1c5c7c2c1c9c3m1r1a1","sN":1,"aN":"c5c7c2c1c9c3m1r1a1"}'>Azure Space</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MixedReality_cont","cT":"Container","id":"c6c7c2c1c9c3m1r1a1","sN":6,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_11" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/mixed-reality/windows-mixed-reality" data-m='{"cN":"GlobalNav_More_TechInnovation_MixedReality_nav","id":"n1c6c7c2c1c9c3m1r1a1","sN":1,"aN":"c6c7c2c1c9c3m1r1a1"}'>Mixed reality</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_MicrosoftHololens_cont","cT":"Container","id":"c7c7c2c1c9c3m1r1a1","sN":7,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_12" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/hololens" data-m='{"cN":"GlobalNav_More_TechInnovation_MicrosoftHololens_nav","id":"n1c7c7c2c1c9c3m1r1a1","sN":1,"aN":"c7c7c2c1c9c3m1r1a1"}'>Microsoft HoloLens</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Microsoft Viva_cont","cT":"Container","id":"c8c7c2c1c9c3m1r1a1","sN":8,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_13" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/microsoft-viva" data-m='{"cN":"GlobalNav_More_TechInnovation_Microsoft Viva_nav","id":"n1c8c7c2c1c9c3m1r1a1","sN":1,"aN":"c8c7c2c1c9c3m1r1a1"}'>Microsoft Viva</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_QuantumComputing_cont","cT":"Container","id":"c9c7c2c1c9c3m1r1a1","sN":9,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_14" class="js-subm-uhf-nav-link" href="https://azure.microsoft.com/en-us/solutions/quantum-computing/" data-m='{"cN":"GlobalNav_More_TechInnovation_QuantumComputing_nav","id":"n1c9c7c2c1c9c3m1r1a1","sN":1,"aN":"c9c7c2c1c9c3m1r1a1"}'>Quantum computing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_TechInnovation_Sustainability_cont","cT":"Container","id":"c10c7c2c1c9c3m1r1a1","sN":10,"aN":"c7c2c1c9c3m1r1a1"}'> <a id="shellmenu_15" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"GlobalNav_More_TechInnovation_Sustainability_nav","id":"n1c10c7c2c1c9c3m1r1a1","sN":1,"aN":"c10c7c2c1c9c3m1r1a1"}'>Sustainability</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c8c2c1c9c3m1r1a1","sN":8,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_16-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</span> <button id="uhf-navbtn-shellmenu_16-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c8c2c1c9c3m1r1a1","sN":2,"aN":"c8c2c1c9c3m1r1a1"}'>Industries</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_16-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Education_cont","cT":"Container","id":"c3c8c2c1c9c3m1r1a1","sN":3,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_17" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"GlobalNav_More_Industries_Education_nav","id":"n1c3c8c2c1c9c3m1r1a1","sN":1,"aN":"c3c8c2c1c9c3m1r1a1"}'>Education</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Automotive_cont","cT":"Container","id":"c4c8c2c1c9c3m1r1a1","sN":4,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_18" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/automotive" data-m='{"cN":"GlobalNav_More_Industries_Automotive_nav","id":"n1c4c8c2c1c9c3m1r1a1","sN":1,"aN":"c4c8c2c1c9c3m1r1a1"}'>Automotive</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Financialservices_cont","cT":"Container","id":"c5c8c2c1c9c3m1r1a1","sN":5,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_19" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/financial-services/banking" data-m='{"cN":"GlobalNav_More_Industries_Financialservices_nav","id":"n1c5c8c2c1c9c3m1r1a1","sN":1,"aN":"c5c8c2c1c9c3m1r1a1"}'>Financial services</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Government_cont","cT":"Container","id":"c6c8c2c1c9c3m1r1a1","sN":6,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_20" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/government" data-m='{"cN":"GlobalNav_More_Industries_Government_nav","id":"n1c6c8c2c1c9c3m1r1a1","sN":1,"aN":"c6c8c2c1c9c3m1r1a1"}'>Government</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Health_cont","cT":"Container","id":"c7c8c2c1c9c3m1r1a1","sN":7,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_21" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/health/microsoft-cloud-for-healthcare" data-m='{"cN":"GlobalNav_More_Industries_Health_nav","id":"n1c7c8c2c1c9c3m1r1a1","sN":1,"aN":"c7c8c2c1c9c3m1r1a1"}'>Healthcare</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Manufacturing_cont","cT":"Container","id":"c8c8c2c1c9c3m1r1a1","sN":8,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_22" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/manufacturing/microsoft-cloud-for-manufacturing" data-m='{"cN":"GlobalNav_More_Industries_Manufacturing_nav","id":"n1c8c8c2c1c9c3m1r1a1","sN":1,"aN":"c8c8c2c1c9c3m1r1a1"}'>Manufacturing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Retail_cont","cT":"Container","id":"c9c8c2c1c9c3m1r1a1","sN":9,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_23" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry/consumer-goods" data-m='{"cN":"GlobalNav_More_Industries_Retail_nav","id":"n1c9c8c2c1c9c3m1r1a1","sN":1,"aN":"c9c8c2c1c9c3m1r1a1"}'>Retail</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Industries_Allindustries_cont","cT":"Container","id":"c10c8c2c1c9c3m1r1a1","sN":10,"aN":"c8c2c1c9c3m1r1a1"}'> <a id="shellmenu_24" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/industry" data-m='{"cN":"GlobalNav_More_Industries_Allindustries_nav","id":"n1c10c8c2c1c9c3m1r1a1","sN":1,"aN":"c10c8c2c1c9c3m1r1a1"}'>All industries</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c9c2c1c9c3m1r1a1","sN":9,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_25-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c9c2c1c9c3m1r1a1","sN":1,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</span> <button id="uhf-navbtn-shellmenu_25-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c9c2c1c9c3m1r1a1","sN":2,"aN":"c9c2c1c9c3m1r1a1"}'>Partners</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_25-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_FindPartner_cont","cT":"Container","id":"c3c9c2c1c9c3m1r1a1","sN":3,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_26" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/" data-m='{"cN":"GlobalNav_More_Partner_FindPartner_nav","id":"n1c3c9c2c1c9c3m1r1a1","sN":1,"aN":"c3c9c2c1c9c3m1r1a1"}'>Find a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_BecomePartner_cont","cT":"Container","id":"c4c9c2c1c9c3m1r1a1","sN":4,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_27" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-US/membership/cloud-solution-provider" data-m='{"cN":"GlobalNav_More_Partner_BecomePartner_nav","id":"n1c4c9c2c1c9c3m1r1a1","sN":1,"aN":"c4c9c2c1c9c3m1r1a1"}'>Become a partner</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_PartnerNetwork_cont","cT":"Container","id":"c5c9c2c1c9c3m1r1a1","sN":5,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_28" class="js-subm-uhf-nav-link" href="https://partner.microsoft.com/en-us/membership" data-m='{"cN":"GlobalNav_More_Partner_PartnerNetwork_nav","id":"n1c5c9c2c1c9c3m1r1a1","sN":1,"aN":"c5c9c2c1c9c3m1r1a1"}'>Partner Network</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AzureMarketplace_cont","cT":"Container","id":"c6c9c2c1c9c3m1r1a1","sN":6,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_29" class="js-subm-uhf-nav-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AzureMarketplace_nav","id":"n1c6c9c2c1c9c3m1r1a1","sN":1,"aN":"c6c9c2c1c9c3m1r1a1"}'>Azure Marketplace</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Partner_AppSource_cont","cT":"Container","id":"c7c9c2c1c9c3m1r1a1","sN":7,"aN":"c9c2c1c9c3m1r1a1"}'> <a id="shellmenu_30" class="js-subm-uhf-nav-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Partner_AppSource_nav","id":"n1c7c9c2c1c9c3m1r1a1","sN":1,"aN":"c7c9c2c1c9c3m1r1a1"}'>AppSource</a> </li> </ul> </li> <li class="f-sub-menu js-nav-menu nested-menu" data-m='{"cT":"Container","id":"c10c2c1c9c3m1r1a1","sN":10,"aN":"c2c1c9c3m1r1a1"}'> <span id="uhf-navspn-shellmenu_31-span" style="display:none" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn1c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</span> <button id="uhf-navbtn-shellmenu_31-button" type="button" f-multi-parent="true" aria-expanded="false" data-m='{"id":"nn2c10c2c1c9c3m1r1a1","sN":2,"aN":"c10c2c1c9c3m1r1a1"}'>Resources</button> <ul aria-hidden="true" aria-labelledby="uhf-navspn-shellmenu_31-span"> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Blog_cont","cT":"Container","id":"c3c10c2c1c9c3m1r1a1","sN":3,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_32" class="js-subm-uhf-nav-link" href="https://blogs.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_Blog_nav","id":"n1c3c10c2c1c9c3m1r1a1","sN":1,"aN":"c3c10c2c1c9c3m1r1a1"}'>Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftAdvertising_cont","cT":"Container","id":"c4c10c2c1c9c3m1r1a1","sN":4,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_33" class="js-subm-uhf-nav-link" href="https://about.ads.microsoft.com/en-us?s_cid=dig-src_uhfcomm" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftAdvertising_nav","id":"n1c4c10c2c1c9c3m1r1a1","sN":1,"aN":"c4c10c2c1c9c3m1r1a1"}'>Microsoft Advertising</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_DeveloperCenter_cont","cT":"Container","id":"c5c10c2c1c9c3m1r1a1","sN":5,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_34" class="js-subm-uhf-nav-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"GlobalNav_More_Resources_DeveloperCenter_nav","id":"n1c5c10c2c1c9c3m1r1a1","sN":1,"aN":"c5c10c2c1c9c3m1r1a1"}'>Developer Center</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Documentation_cont","cT":"Container","id":"c6c10c2c1c9c3m1r1a1","sN":6,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_35" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"GlobalNav_More_Resources_Documentation_nav","id":"n1c6c10c2c1c9c3m1r1a1","sN":1,"aN":"c6c10c2c1c9c3m1r1a1"}'>Documentation</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Events_cont","cT":"Container","id":"c7c10c2c1c9c3m1r1a1","sN":7,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_36" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/events" data-m='{"cN":"GlobalNav_More_Resources_Events_nav","id":"n1c7c10c2c1c9c3m1r1a1","sN":1,"aN":"c7c10c2c1c9c3m1r1a1"}'>Events</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_Licensing_cont","cT":"Container","id":"c8c10c2c1c9c3m1r1a1","sN":8,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_37" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/licensing/" data-m='{"cN":"GlobalNav_More_Resources_Licensing_nav","id":"n1c8c10c2c1c9c3m1r1a1","sN":1,"aN":"c8c10c2c1c9c3m1r1a1"}'>Licensing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftLearn_cont","cT":"Container","id":"c9c10c2c1c9c3m1r1a1","sN":9,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_38" class="js-subm-uhf-nav-link" href="https://learn.microsoft.com/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftLearn_nav","id":"n1c9c10c2c1c9c3m1r1a1","sN":1,"aN":"c9c10c2c1c9c3m1r1a1"}'>Microsoft Learn</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"More_Resources_MicrosoftResearch_cont","cT":"Container","id":"c10c10c2c1c9c3m1r1a1","sN":10,"aN":"c10c2c1c9c3m1r1a1"}'> <a id="shellmenu_39" class="js-subm-uhf-nav-link" href="https://www.microsoft.com/en-us/research/" data-m='{"cN":"GlobalNav_More_Resources_MicrosoftResearch_nav","id":"n1c10c10c2c1c9c3m1r1a1","sN":1,"aN":"c10c10c2c1c9c3m1r1a1"}'>Microsoft Research</a> </li> </ul> </li> <li class="f-multi-column-info"> <a data-m='{"id":"n11c2c1c9c3m1r1a1","sN":11,"aN":"c2c1c9c3m1r1a1"}' href="https://www.microsoft.com/en-us/sitemap" aria-label="" class="c-glyph">View Sitemap</a> </li> </ul> </div> </li> </ul> </nav> </div> <form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/en-us/search/" method="GET" data-seAutoSuggest='{"isAutosuggestDisabled":false,"queryParams":{"market":"en-us","clientId":"7F27B536-CF6B-4C65-8638-A0F8CBDFCA65","sources":"Microsoft-Terms,Iris-Products,DCatAll-Products","filter":"+ClientType:StoreWeb","counts":"5,1,5"},"familyNames":{"Apps":"App","Books":"Book","Bundles":"Bundle","Devices":"Device","Fees":"Fee","Games":"Game","MusicAlbums":"Album","MusicTracks":"Song","MusicVideos":"Video","MusicArtists":"Artist","OperatingSystem":"Operating System","Software":"Software","Movies":"Movie","TV":"TV","CSV":"Gift Card","VideoActor":"Actor"}}' data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest" data-m='{"cN":"GlobalNav_Search_cont","cT":"Container","id":"c3c1c9c3m1r1a1","sN":3,"aN":"c1c9c3m1r1a1"}' aria-expanded="false"> <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search" name="query" placeholder="Search" data-m='{"cN":"SearchBox_nav","id":"n1c3c1c9c3m1r1a1","sN":1,"aN":"c3c1c9c3m1r1a1"}' data-toggle="tooltip" data-placement="right" title="Search" /> <button id="search" aria-label="Search" class="c-glyph" data-m='{"cN":"Search_nav","id":"n2c3c1c9c3m1r1a1","sN":2,"aN":"c3c1c9c3m1r1a1"}' data-bi-mto="true" aria-expanded="false" disabled="disabled"> <span role="presentation">Search</span> <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span> </button> <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group"> <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll" data-m='{"cN":"search suggestions_cont","cT":"Container","id":"c3c3c1c9c3m1r1a1","sN":3,"aN":"c3c1c9c3m1r1a1"}'></ul> <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox"> <li class="c-menu-item"> <span tabindex="-1">No results</span></li> </ul> </div> </form> <button data-m='{"cN":"cancel-search","pid":"Cancel Search","id":"nn4c1c9c3m1r1a1","sN":4,"aN":"c1c9c3m1r1a1"}' id="cancel-search" class="cancel-search" aria-label="Cancel Search"> <span>Cancel</span> </button> <div id="meControl" class="c-me" data-signinsettings='{"containerId":"meControl","enabled":true,"headerHeight":48,"debug":false,"extensibleLinks":[],"userData":{"idp":"msa","firstName":"","lastName":"","memberName":"","cid":"","authenticatedState":"3"},"rpData":{"preferredIdp":"msa","msaInfo":{"signInUrl":"https://app.vsaex.visualstudio.com/go/profile?mkt=en-us\u0026wt.mc_id=o~msft~vscom~signin\u0026_ga=1.106715523.1812220160.1467138837","signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","meUrl":"https://login.live.com/me.srf?wa=wsignin1.0"},"aadInfo":{"signOutUrl":"https://app.vssps.visualstudio.com/_signout?mkt=en-us\u0026_ga=1.265116815.1812220160.1467138837\u0026redirectUrl=https%3A%2F%2Fvisualstudio.microsoft.com","appId":"","siteUrl":"","blockMsaFed":true}}}' data-m='{"cN":"GlobalNav_Account_cont","cT":"Container","id":"c5c1c9c3m1r1a1","sN":5,"aN":"c1c9c3m1r1a1"}'> <div class="msame_Header"> <div class="msame_Header_name st_msame_placeholder">Sign in</div> </div> </div> </div> </div> </div> </header> </div> </div> </div> <div id="wrapper" class="vscom-win-browser "> <div class="vscom-modal-window-wrapper vscom-modal-window-wrapper--hidden" id="vscom-mobile-download-dialog"> <style> #vscom-mobile-download-dialog .vscom-modal-window-content { display: none; } #vscom-mobile-download-dialog .vscom-modal-window-content.active { display: block; } </style> <div class="vscom-modal-window vscom-modal-window--mdd"> <button class="vscom-mobile-dialog-close white-focus-outline" aria-label="Close modal"> <i class="vscom-icon vscom-icon--Cancel" id="vscom-mobile-download-dialog-close"></i> </button> <div class="vscom-modal-window-content mobile-download-dialog-form"> <div data-form-block-id="0ddbaebe-5157-ea11-a811-000d3a3b1bf3"></div> <div id="doS-uJoaJ8L9cVnALebcBTdlxs9zZdFZ4Myv2ygU4Sbg"></div> </div> <div class="vscom-modal-window-content mobile-download-dialog-generic"> <div class="vscom-modal-window-content-inner x-hidden-focus"> <h2 class="vscom-mobile-dialog-header"> This device is not currently supported for these products. </h2> <div class="vscom-mobile-dialog-products"> <a class="black-focus-outline" href="/vs/" id="vscom-mobile-dialog-click-vs"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/02/BrandVisualStudioWin2019-2.svg"> Visual Studio IDE <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="/vs/mac" id="vscom-mobile-dialog-click-vs-mac"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/VSforMacIcon2019-2.svg"> Visual Studio for Mac <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> <a class="black-focus-outline" href="https://code.visualstudio.com/?wt.mc_id=DX_841432" id="vscom-mobile-dialog-click-vscode"> <img src="https://visualstudio.microsoft.com/wp-content/uploads/2019/09/vs-code-responsive-01-1.png"> Visual Studio Code <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </a> </div> </div> <div class="vscom-modal-window-footer"> <a class="vscom-mobile-dialog-download" href="#" id="vscom-mobile-dialog-continue-download-click-generic"> <span class="vscom-mobile-dialog-download-text x-hidden-focus"> To continue downloading, click here <i class="vscom-icon vscom-icon--ChevronRightSmall"></i> </span> </a> </div> </div> </div> </div> <div id="home" style="position:relative;top:-1px;"></div> <section class="avada-page-titlebar-wrapper" aria-label="Page Title Bar"> <div class="fusion-page-title-bar fusion-page-title-bar-breadcrumbs fusion-page-title-bar-center"> <div class="fusion-page-title-row"> <div class="fusion-page-title-wrapper"> <div class="fusion-page-title-captions"> </div> </div> </div> </div> </section> <script> window.performance && performance.mark && performance.mark("MainAreaBegin") </script> <main id="main" role="main" class="clearfix width-100" style="padding-left:0px;padding-right:0px;"> <div class="fusion-row" style="max-width:100%;"><div id="content" class="full-width"> <div id="post-12321" class="post-12321 page type-page status-publish has-post-thumbnail hentry category-real-page tag-realpage tag-realpage-tr-2"> <span class="entry-title rich-snippet-hidden">Download Visual Studio Tools – Install Free for Windows, Mac, Linux</span><span class="updated rich-snippet-hidden">2025-01-09T12:34:09-08:00</span> <div class="post-content post-downloads_downloads"> <div class="fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background download-hero-title download-exp-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#212121;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column download-exp title-lane-top" style="--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:36px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one" style="--awb-text-color:#ffffff;--awb-margin-top:0px;--awb-margin-bottom:0px;"><h1 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;--fontSize:;line-height:;">Downloads</h1></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background vscom-hero-downloads-page vscom-hero-downloads--top download-exp-hero vscom-swimlane--dark nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#212121;--awb-flex-wrap:nowrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_3_5 3_5 fusion-flex-column title-lane download-exp disp-7 " style="--awb-padding-top:28px;--awb-padding-right:0px;--awb-padding-bottom:28px;--awb-padding-left:28px;--awb-bg-size:cover;--awb-width-large:60%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-1 hero-row"><p><img decoding="async" src="https://visualstudio.microsoft.com/wp-content/uploads/2021/10/Product-Icon.svg" title="Product Icon" alt="Visual Studio 2022 icon" class="title-logo-img" /></p> </div><div class="fusion-text fusion-text-2 hero-text hero-row"><h2 class="vs-hero-block title-heading-left fusion-responsive-typography-calculated"><a href="/vs" data-bi-id="Hero">Visual Studio 2022</a><span class="hero-grid-logos1"><i class="vscom-icon vscom-icon--WindowsLogo"></i></span></h2> <p>The most comprehensive IDE for .NET and C++ developers on Windows for building web, cloud, desktop, mobile apps, services and games.</p> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_2_5 2_5 fusion-flex-column fusion-flex-align-self-center vs-preview-col clr-white" style="--awb-padding-top:16px;--awb-padding-right:28px;--awb-padding-bottom:40px;--awb-padding-left:28px;--awb-bg-size:cover;--awb-width-large:40%;--awb-margin-top-large:15px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column"><div class="fusion-title title fusion-title-2 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-three title-wrapper" style="--awb-text-color:#ffffff;--awb-margin-top:0px;--awb-font-size:29px;"><h3 class="fusion-title-heading title-heading-center fusion-responsive-typography-calculated" style="margin:0;font-size:1em;--fontSize:29;line-height:;"><a data-bi-id="Hero" class="heading-link" href="/vs/preview">Preview</a></h3></div><div class="fusion-text fusion-text-3 text-wrapper"><p class="content-text">Get early access to latest features not yet in the main release</p> </div><div class="fusion-text fusion-text-4" style="--awb-content-alignment:center;"><div class="clr-white vscom-link-wrapper"><a class="vscom-arrow-link" href="https://learn.microsoft.com/visualstudio/releases/2022/release-notes-preview" data-bi-id="Hero" target="_blank" rel="noopener"><span class="vscom-link-text">Learn more</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background vscom-hero-downloads-page vscom-hero-downloads--top download-exp-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-bottom:40px;--awb-background-color:#212121;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column download-exp reduce-lane reduce-lane--bottom" style="--awb-padding-right:28px;--awb-padding-left:28px;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" id="dotnet" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="width:calc( 100% + ) !important;max-width:calc( 100% + ) !important;margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_1 1_1 fusion-flex-column right-col" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-content-boxes content-boxes columns row fusion-columns-3 fusion-columns-total-3 fusion-content-boxes-1 content-boxes-icon-on-side content-left fusion-content-boxes--equal-heights inner-box short-col" data-animationOffset="top-into-view" style="margin-top:60px;margin-bottom:60px;" data-bi-id='Hero' data-bi-slot='' data-bi-id=''><style type="text/css">.fusion-content-boxes-1 .heading .content-box-heading {color:#191919;} .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .heading-link .content-box-heading, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover:after, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover:before, .fusion-content-boxes-1 .fusion-content-box-hover .fusion-read-more:hover, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::after, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover.link-area-box .fusion-read-more::before, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .icon .circle-no, .fusion-content-boxes-1 .heading .heading-link:hover .content-box-heading { color: #000000; } .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .icon .circle-no { color: #000000 !important; }.fusion-content-boxes-1 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button {background: #32145a;color: #ffffff;}.fusion-content-boxes-1 .fusion-content-box-hover .link-area-box.link-area-box-hover .fusion-content-box-button .fusion-button-text {color: #ffffff;} .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon > span { background-color: transparent !important; } .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .icon > span { border-color: #000000 !important; }</style><div class="fusion-column content-box-column reveal content-box-column content-box-column-1 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-first-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon link-type-text icon-hover-animation-none" style="background-color:transparent;" data-animationOffset="top-into-view"><div class="heading icon-left"><a data-bi-id="Hero"class="heading-link" href="/vs/community" target="_self"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Community</h3></a></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#191919;"> <p class="content-text">Powerful IDE, free for students, open-source contributors, and individuals</p> <div class="inner-bottom vscom-btn-box--center"><a data-bi-id="Hero" class="downloads-button vseng-track-downloads-dl-win-community optimizely--download-community--win Community vscom-btn-secondary vscom-btn-fill-grow fill-violet" target="_self" href="/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false" aria-label="Download Visual Studio Community 2022 for Free" data-bi-name="vs_win_download_community" data-bi-bhvr="40" data-bi-dlnm="Community 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" rel="noopener"><span class="fusion-button-text">Free download</span></a></div> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-2 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover "><div class="col content-box-wrapper content-wrapper link-area-link-icon link-type-text icon-hover-animation-none" style="background-color:transparent;" data-animationOffset="top-into-view"><div class="heading icon-left"><a data-bi-id="Hero"class="heading-link" href="/vs/professional" target="_self"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Professional</h3></a></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#191919;"> <p class="content-text">Professional IDE best suited to small teams</p> <div class="inner-bottom vscom-btn-box--center"><a data-bi-id="Hero" class="downloads-button optimizely--download-professional--win vseng-track-downloads-dl-win-professional vscom-btn-secondary vscom-btn-fill-grow fill-violet" target="_self" title="90 days trial" href="/thank-you-downloading-visual-studio/?sku=Professional&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false" aria-label="Download Visual Studio Professional 2022 90 Day Free Trial" data-bi-name="vs_win_download_professional" data-bi-bhvr="40" data-bi-dlnm="Professional 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" rel="noopener">Free trial</a></div> </div></div></div><div class="fusion-column content-box-column reveal content-box-column content-box-column-3 col-lg-4 col-md-4 col-sm-4 fusion-content-box-hover content-box-column-last content-box-column-last-in-row"><div class="col content-box-wrapper content-wrapper link-area-link-icon link-type-text icon-hover-animation-none" style="background-color:transparent;" data-animationOffset="top-into-view"><div class="heading icon-left"><a data-bi-id="Hero"class="heading-link" href="/vs/enterprise" target="_self"><h3 class="content-box-heading fusion-responsive-typography-calculated" style="font-size:32px;--fontSize:32;line-height:;">Enterprise</h3></a></div><div class="fusion-clearfix"></div><div class="content-container" style="color:#191919;"> <p class="content-text">Scalable, end-to-end solution for teams of any size</p> <div class="inner-bottom vscom-btn-box--center"><a data-bi-id="Hero" class="downloads-button vseng-track-downloads-dl-win-enterprise optimizely--download-enterprise--win vscom-btn-secondary vscom-btn-fill-grow fill-violet" target="_self" title="90 days trial" href="/thank-you-downloading-visual-studio/?sku=Enterprise&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false" aria-label="Download Visual Studio Enterprise 2022 90 Days Free Trial" data-bi-name="vs_win_download_enterprise" data-bi-bhvr="40" data-bi-dlnm="Enterprise 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" rel="noopener">Free trial</a></div> </div></div></div><style type="text/css"> .fusion-content-boxes-1 .fusion-content-box-hover .heading-link:hover .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box:hover .heading-link .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-link-icon-hover .heading .icon i.circle-yes, .fusion-content-boxes-1 .fusion-content-box-hover .link-area-box-hover .heading .icon i.circle-yes { background-color: transparent !important; border-color: #000000 !important; }</style><div class="fusion-clearfix"></div></div></div></div></div><div class="fusion-text fusion-text-5 hero-links right-link vscom-link-horizontal" style="--awb-text-color:#191919;"><div class="vscom-link-wrapper link-1"><a class="vscom-arrow-link clr-black" href="https://docs.microsoft.com/visualstudio/releases/2022/release-notes" data-bi-id="Hero" target="_blank" rel="noopener" aria-label="Release notes for Visual Studio"><span class="vscom-link-text">Release notes</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <div class="vscom-link-wrapper link-2"><a class="vscom-arrow-link clr-black" href="/vs/compare/" data-bi-id="Hero"><span class="vscom-link-text">Compare editions</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <div class="vscom-link-wrapper link-3"><a class="vscom-arrow-link clr-black" href="https://go.microsoft.com/fwlink/?linkid=834546" data-bi-id="Hero" target="_blank" rel="noopener"><span class="vscom-link-text">How to install offline</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <div class="vscom-link-wrapper link-4"><a class="vscom-arrow-link clr-black" href="https://visualstudio.microsoft.com/license-terms/" data-bi-id="Hero"><span class="vscom-link-text">License terms</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-4 has-pattern-background has-mask-background vscom-hero-downloads-page vscom-hero-downloads--bottom download-exp-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-bottom:80px;--awb-background-color:#212121;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last right-top-col download-exp disp-7 vscom-swimlane--dark" style="--awb-padding-top:24px;--awb-padding-right:28px;--awb-padding-bottom:24px;--awb-padding-left:28px;--awb-bg-size:cover;--awb-margin-top:0px;--awb-margin-bottom:0px;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-text fusion-text-6"><div class="hero-row"> <p><img decoding="async" src="/wp-content/uploads/2022/09/VisualStudioCode.svg" alt="Visual Studio Code logo" class="title-logo-img" /></p> <div class="hero-text"> <h2 class="vs-hero-block title-heading-left"><a href="https://code.visualstudio.com/?wt.mc_id=vscom_downloads" target="_blank" rel="noopener" data-bi-id="Hero">Visual Studio Code</a><span class="hero-grid-logos1"><i class="vscom-icon vscom-icon--WindowsLogo"></i><img decoding="async" src="/wp-content/uploads/2022/09/Apple_Opaque.svg" alt="Apple logo" /><i class="vscom-icon vscom-icon--LinuxLogo32"></i></span></h2> <p><span class="code-text">A standalone source code editor that runs on Windows, macOS, and Linux. The top pick for Java and web developers, with tons of extensions to support just about any programming language.</span></p> </div> </div> </div><div class="fusion-clearfix"></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last right-bottom-col bottom-lane" style="--awb-padding-top:32px;--awb-padding-right:28px;--awb-padding-bottom:12px;--awb-padding-left:28px;--awb-bg-size:cover;--awb-margin-top:0px;--awb-margin-bottom:0px;" data-scroll-devices="small-visibility,medium-visibility,large-visibility"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-column-wrapper-legacy"><div class="fusion-text fusion-text-7 vscode-links-wrapper"><div class="vscom-dropdown-button vscom-dropdown-button--code vscom-btn-secondary vscom-btn-fill-grow fill-blue vscom-dropdown-button--modern-light-code"> <div class="vscom-dropdown-menu-container"> <button data-bi-id="Free download" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Free download" aria-expanded="false" class="toplink" aria-label="Free download Visual Studio Code" tabindex="0"> <span class="vscom-dropdown-text">Free download</span><i class="vscom-icon vscom-icon--chevron-down button-icon-right"></i> </button> <ul class="vscom-subnav vsopt-download-visual-studio" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Windows x64 User Installer" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Windows x64 User Installer" data-bi-bhvr="40" data-bi-dlnm="Windows x64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=win" class="sublink vseng-track-vscode-win-x64" aria-label="Free download Visual Studio Code for Windows x64 User Installer" title="" target="_blank"> <span class="vscom-option-text">Windows x64</span><span class="vscom-version-insert">User Installer</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="macOS Universal Package" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_macOS Universal Package" data-bi-bhvr="40" data-bi-dlnm="macOS Universal Package" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=osx" class="sublink vseng-track-vscode-macOS Intel" aria-label="Free download Visual Studio Code for macOS Universal Package" title="" target="_blank"> <span class="vscom-option-text">macOS Universal</span><span class="vscom-version-insert">Package</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.deb" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Linux x64.deb" data-bi-bhvr="40" data-bi-dlnm="Linux x64.deb" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_deb" class="sublink vseng-track-vscode-linux-deb" aria-label="Free download Visual Studio Code for Linux (.deb)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.deb</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Linux x64.rpm" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Linux x64.rpm" data-bi-bhvr="40" data-bi-dlnm="Linux x64.rpm" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_rpm" class="sublink vseng-track-vscode-linux-rpm" aria-label="Free download Visual Studio Code for Linux (.rpm)" title="" target="_blank"> <span class="vscom-option-text">Linux x64</span><span class="vscom-version-insert">.rpm</span> </a> </div> </li> <li role="presentation"> <div class="subwrap"> <a data-bi-id="More" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_More" data-bi-bhvr="40" data-bi-dlnm="More" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/download" class="sublink vseng-track-vscode-more" aria-label="Free download more Visual Studio Code" title="" target="_blank"> <span class="vscom-option-text">More</span><span class="vscom-version-insert"></span> </a> </div> </li> </ul> </div> </div> <div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" href="https://code.visualstudio.com/updates" target="_blank" rel="noopener" data-bi-id="Release notes" data-bi-area="hero" data-bi-name="hero_Visual Studio Code_Release notes" aria-label="Release notes for Visual Studio Code"><span class="vscom-link-text">Release notes</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div><div class="fusion-text fusion-text-8 code-license-text"><p class="content-text">By using Visual Studio Code you agree to its <a data-bi-id="Hero" class="license-link" href="https://code.visualstudio.com/License/" target="_blank" rel="noopener">license</a> & <a data-bi-id="Hero" class="license-link" href="https://privacy.microsoft.com/en-us/privacystatement" target="_blank" rel="noopener">privacy statement</a>.</p> </div><div class="fusion-clearfix"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container has-pattern-background has-mask-background picker-tool-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:2rem;--awb-background-color:transparent;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-flex-column vscom-picker-tool-wrapper-v2" style="--awb-bg-color:#ffffff;--awb-bg-color-hover:#ffffff;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;" id="picker"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-two" style="--awb-font-size:24px;"><h2 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;font-size:1em;--fontSize:24;line-height:;">Wondering which tool is best for you? We can help</h2></div><div class="fusion-text fusion-text-9 pickertool-contianer"><div class="vscom-picker-tool vscom-picker-tool-v3"><div class="os-menu-v3"><fieldset aria-labelledby="os-legend" role="radiogroup"> <legend class="pickertool-menu-subtitle" id="os-legend">Developer machine OS</legend><div class="pickertool-menu-button radio-wrapper" data-menuos="windows" data-slug=windows> <label for="pickertool-windows"><input type="radio" data-bi-area="Picker" name="pickertool_radio" id="pickertool-windows" data-bi-id="Picker">Windows</label></div><div class="pickertool-menu-button radio-wrapper" data-menuos="macos" data-slug=macos> <label for="pickertool-macos"><input type="radio" data-bi-area="Picker" name="pickertool_radio" id="pickertool-macos" data-bi-id="Picker">macOS</label></div><div class="pickertool-menu-button radio-wrapper" data-menuos="linux" data-slug=linux> <label for="pickertool-linux"><input type="radio" data-bi-area="Picker" name="pickertool_radio" id="pickertool-linux" data-bi-id="Picker">Linux</label></div></fieldset></div><div class="platform-menu-v3"><fieldset aria-labelledby="platform_legend"><legend class="pickertool-menu-subtitle" id="platform_legend">Select all that apply to you<span style="color: red; vertical-align:1.5%; margin-left: 0.25rem;">*</span></legend><div class="pickertool-menu-button checkbox-wrapper" data-slug=dotnet data-win="vs-win" data-mac="vs-code-mac-net" data-order="402-501" data-param="dotnet"> <label for="pickertool-dotnet"> <input type="checkbox" data-bi-area="Picker" id="pickertool-dotnet" name="pickertool_checkbox" data-bi-id="Picker"> .NET</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=csharp data-win="vs-win" data-mac="vs-code-mac-net" data-order="402-501" data-param="dotnet"> <label for="pickertool-csharp"> <input type="checkbox" data-bi-area="Picker" id="pickertool-csharp" name="pickertool_checkbox" data-bi-id="Picker"> C#</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=cplusplus data-win="vs-win" data-mac="vs-code-mac" data-order="402-502" data-param="cplusplus"> <label for="pickertool-cplusplus"> <input type="checkbox" data-bi-area="Picker" id="pickertool-cplusplus" name="pickertool_checkbox" data-bi-id="Picker"> C++</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=web data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="webcloud"> <label for="pickertool-web"> <input type="checkbox" data-bi-area="Picker" id="pickertool-web" name="pickertool_checkbox" data-bi-id="Picker"> Web</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=cloud data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="webcloud"> <label for="pickertool-cloud"> <input type="checkbox" data-bi-area="Picker" id="pickertool-cloud" name="pickertool_checkbox" data-bi-id="Picker"> Cloud</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=desktop data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="desktop"> <label for="pickertool-desktop"> <input type="checkbox" data-bi-area="Picker" id="pickertool-desktop" name="pickertool_checkbox" data-bi-id="Picker"> Desktop</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=python data-win="vs-code-win" data-mac="vs-code-mac" data-order="403-502" data-param="python"> <label for="pickertool-python"> <input type="checkbox" data-bi-area="Picker" id="pickertool-python" name="pickertool_checkbox" data-bi-id="Picker"> Python</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=java data-win="vs-code-win" data-mac="vs-code-mac" data-order="401-502" > <label for="pickertool-java"> <input type="checkbox" data-bi-area="Picker" id="pickertool-java" name="pickertool_checkbox" data-bi-id="Picker"> Java</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=javascript data-win="vs-code-win" data-mac="vs-code-mac" data-order="403-502" > <label for="pickertool-javascript"> <input type="checkbox" data-bi-area="Picker" id="pickertool-javascript" name="pickertool_checkbox" data-bi-id="Picker"> JavaScript</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=typescript data-win="vs-code-win" data-mac="vs-code-mac" data-order="403-502" > <label for="pickertool-typescript"> <input type="checkbox" data-bi-area="Picker" id="pickertool-typescript" name="pickertool_checkbox" data-bi-id="Picker"> TypeScript</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=node data-win="vs-code-win" data-mac="vs-code-mac" data-order="403-502" > <label for="pickertool-node"> <input type="checkbox" data-bi-area="Picker" id="pickertool-node" name="pickertool_checkbox" data-bi-id="Picker"> Node.js</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=games data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="games"> <label for="pickertool-games"> <input type="checkbox" data-bi-area="Picker" id="pickertool-games" name="pickertool_checkbox" data-bi-id="Picker"> Games</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=mobile data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="mobile"> <label for="pickertool-mobile"> <input type="checkbox" data-bi-area="Picker" id="pickertool-mobile" name="pickertool_checkbox" data-bi-id="Picker"> Mobile (Android/iOS)</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=data-science data-win="vs-code-win" data-mac="vs-code-mac" data-order="404-502" data-param="python"> <label for="pickertool-data-science"> <input type="checkbox" data-bi-area="Picker" id="pickertool-data-science" name="pickertool_checkbox" data-bi-id="Picker"> Data Science</label> </div><div class="pickertool-menu-button checkbox-wrapper" data-slug=machine data-win="vs-win" data-mac="vs-code-mac" data-order="405-502" data-param="mlai"> <label for="pickertool-machine"> <input type="checkbox" data-bi-area="Picker" id="pickertool-machine" name="pickertool_checkbox" data-bi-id="Picker"> Machine Learning/AI</label> </div></div><p style="font-size: 0.75rem;"><span style="color: red; vertical-align:1.5%;margin-right: 0.25rem;">*</span>Indicates selection is required</p></div> <div class="picker-item-container"> <div class="fusion-text picker-items-v2"> <div class="picker-item-v2" data-oses="macos" data-feature="vs-code-mac-net" data-platform="dotnet csharp"> <div class="heading"> <h3 class="heading-text">Visual Studio Code for Mac</h3> </div> <div class="inner-wrapper"> <div class="item-col col-1"> <p><a href="https://code.visualstudio.com/docs/?dv=osx" target="_blank" class="vscom-btn-secondary vscom-btn-fill-grow fill-blue" rel="noopener" data-bi-id="Picker" data-bi-name="macOS UniversalPackage" data-bi-bhvr="40" data-bi-dlnm="macOS Universal Package" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer">Download Visual Studio Code</a></p> </div> <div class="item-col col-2"> <p class="content-heading">Highlights</p> <ul> <li>Free code editor</li> <li>Built on open source and runs everywhere </li> <li><p>Hundreds of programming languages supported</p> </li> <li><p>Add on the C# DevKit for Visual Studio Code</p> </li> </ul> </div> <div class="item-col col-3"> <div class="col-content"> <p class="content-heading">Learn more</p> <ul> <li><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/setup/mac" target="_blank" rel="noopener"><span class="vscom-link-text">Install guide for Mac</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/getstarted/userinterface" target="_blank" rel="noopener"><span class="vscom-link-text">Get Started with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/learn" target="_blank" rel="noopener"><span class="vscom-link-text">Learn coding with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit" target="_blank" rel="noopener"><span class="vscom-link-text">C# DevKit for Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> </ul> </div> </div> </div> </div> </div> <div class="fusion-text picker-items-v2"> <div class="picker-item-v2" data-oses="windows" data-feature="vs-code-win" data-platform="python java javascript typescript node data-science"> <div class="heading"> <h3 class="heading-text">Visual Studio Code for Windows</h3> </div> <div class="inner-wrapper"> <div class="item-col col-1"> <p>Lightweight yet powerful source code editor with tons of extensions for many languages and runtimes.<br /> <a href="https://code.visualstudio.com/docs/?dv=win" target="_blank" class="vscom-btn-secondary vscom-btn-fill-grow fill-blue" rel="noopener" data-bi-id="Picker" data-bi-bhvr="40" data-bi-dlnm="Windows x64 User Installer" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" data-bi-name="Windows x64 User Installer">Download Visual Studio Code</a></p> </div> <div class="item-col col-2"> <p class="content-heading">Highlights</p> <ul> <li>Free code editor</li> <li>Built on open source and runs everywhere </li> <li><p>Hundreds of programming languages supported</p> </li> </ul> </div> <div class="item-col col-3"> <div class="col-content"> <p class="content-heading">Learn more</p> <ul> <li><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/setup/windows" target="_blank" rel="noopener"><span class="vscom-link-text">Install guide for Windows</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/getstarted/userinterface" target="_blank" rel="noopener"><span class="vscom-link-text">Get Started with Visual Studio Code </span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/learn" target="_blank" rel="noopener"><span class="vscom-link-text">Learn coding with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> </ul> </div> </div> </div> </div> </div> <div class="fusion-text picker-items-v2"> <div class="picker-item-v2" data-oses="macos" data-feature="vs-code-mac" data-platform="cplusplus web cloud desktop python java javascript typescript node games mobile data-science machine"> <div class="heading"> <h3 class="heading-text">Visual Studio Code for Mac</h3> </div> <div class="inner-wrapper"> <div class="item-col col-1"> <p><a href="https://code.visualstudio.com/docs/?dv=osx" target="_blank" class="vscom-btn-secondary vscom-btn-fill-grow fill-blue" rel="noopener" data-bi-id="Picker" data-bi-name="macOS UniversalPackage" data-bi-bhvr="40" data-bi-dlnm="macOS Universal Package" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer">Download Visual Studio Code</a></p> </div> <div class="item-col col-2"> <p class="content-heading">Highlights</p> <ul> <li>Free code editor</li> <li>Built on open source and runs everywhere </li> <li><p>Hundreds of programming languages supported</p> </li> </ul> </div> <div class="item-col col-3"> <div class="col-content"> <p class="content-heading">Learn more</p> <ul> <li><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/setup/mac" target="_blank" rel="noopener"><span class="vscom-link-text">Install guide for Mac</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/getstarted/userinterface" target="_blank" rel="noopener"><span class="vscom-link-text">Get Started with Visual Studio Code </span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/learn" target="_blank" rel="noopener"><span class="vscom-link-text">Learn coding with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> </ul> </div> </div> </div> </div> </div> <div class="fusion-text picker-items-v2"> <div class="picker-item-v2" data-oses="linux" data-feature="linux" data-platform="dotnet csharp cplusplus web cloud desktop python java javascript typescript node games mobile data-science machine"> <div class="heading"> <h3 class="heading-text">Visual Studio Code for Linux</h3> </div> <div class="inner-wrapper"> <div class="item-col col-1"> <div class="vscom-dropdown-button vscom-btn-secondary vscom-btn-fill-grow fill-blue"> <div class="vscom-dropdown-menu-container"> <button aria-expanded="false" class="toplink" aria-label="Tab Down to Select an option" title=""> <span class="vscom-dropdown-text">Download Visual Studio Code</span> <i class="vscom-icon vscom-icon--ChevronDown"></i> </button> <ul class="vscom-subnav" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Picker" data-bi-name="Linux x64.deb" data-bi-bhvr="40" data-bi-dlnm="Linux x64.deb" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_deb" class="sublink vscode-linux-x64-deb" aria-label="download Linux x64.deb" title="Linux x64 .deb"> <span class="sublink-text vscom-option-text">Linux x64 .deb</span></i> </a> </div> </li><li role="presentation"> <div class="subwrap"> <a data-bi-id="Picker" data-bi-name="Linux x64.rpm" data-bi-bhvr="40" data-bi-dlnm="Linux x64.rpm" data-bi-dlid="download_visual_studio_code" data-bi-dltype="software installer" role="menuitem" href="https://code.visualstudio.com/docs/?dv=linux64_rpm" class="sublink vscode-linux-x64-rpm" aria-label="download Linux x64.rpm" title="Linux x64.rpm"> <span class="sublink-text vscom-option-text">Linux x64.rpm</span></i> </a> </div> </li> </ul> </div> </div> </div> <div class="item-col col-2"> <p class="content-heading">Highlights</p> <ul> <li>Free code editor</li> <li>Built on open source. Runs everywhere</li> <li><p>Hundreds of programming languages supported</p> </li> </ul> </div> <div class="item-col col-3"> <div class="col-content"> <p class="content-heading">Learn more</p> <ul> <li><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/setup/linux" target="_blank" rel="noopener"><span class="vscom-link-text">Install guide for Linux</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/docs/getstarted/userinterface" target="_blank" rel="noopener"><span class="vscom-link-text">Get Started with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://code.visualstudio.com/learn" target="_blank" rel="noopener"><span class="vscom-link-text">Learn coding with Visual Studio Code</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> </ul> </div> </div> </div> </div> </div> <div class="fusion-text picker-items-v2"> <div class="picker-item-v2" data-oses="windows" data-feature="vs-win" data-platform="dotnet csharp cplusplus web desktop games mobile machine"> <div class="heading"> <h3 class="heading-text">Visual Studio for Windows</h3> </div> <div class="inner-wrapper"> <div class="item-col col-1"> <p>A complete array of development tools and features in one place to elevate and enhance every stage of your software development.<br /> <a data-bi-id="Picker" class="inner-link" href="https://go.microsoft.com/fwlink/?linkid=834546" target="_blank" rel="noopener">How to install offline</a><a class="inner-link" data-bi-id="Picker" href="/vs/compare/">Compare editions</a></p> <div><div class="vscom-dropdown-button pickertool-download-button--dark-purple vscom-btn-secondary vscom-btn-fill-grow fill-violet"> <div class="vscom-dropdown-menu-container"> <button aria-expanded="false" class="toplink" aria-label="Tab Down to Select a Version of Visual Studio" title=""> <span class="vscom-dropdown-text">Download Visual Studio</span> <i class="vscom-icon vscom-icon--ChevronDown"></i> </button> <ul class="vscom-subnav" role="menu"> <li role="presentation"> <div class="subwrap"> <a data-bi-id="Picker" data-bi-name="vs_win_download_community" data-bi-bhvr="40" data-bi-dlnm="Community 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="/thank-you-downloading-visual-studio/?sku=Community&channel=Release&source=VSLandingPage&cid=2029" class="sublink vsopt-tailored-community" aria-label="Download Visual Studio Community" title=""> <span class="sublink-text vscom-option-text">Community 2022</span></i> </a> </div> </li><li role="presentation"> <div class="subwrap"> <a data-bi-id="Picker" data-bi-name="vs_win_download_professional" data-bi-bhvr="40" data-bi-dlnm="Professional 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="/thank-you-downloading-visual-studio/?sku=Professional&channel=Release&source=VSLandingPage&cid=2029" class="sublink vsopt-tailored-professional" aria-label="Download Visual Studio Professional" title=""> <span class="sublink-text vscom-option-text">Professional 2022</span></i> </a> </div> </li><li role="presentation"> <div class="subwrap"> <a data-bi-id="Picker" data-bi-name="vs_win_download_enterprise" data-bi-bhvr="40" data-bi-dlnm="Enterprise 2022" data-bi-dlid="download_visual_studio" data-bi-dltype="software installer" role="menuitem" href="/thank-you-downloading-visual-studio/?sku=Enterprise&channel=Release&source=VSLandingPage&cid=2029" class="sublink vsopt-tailored-enterprise" aria-label="Download Visual Studio Enterprise" title=""> <span class="sublink-text vscom-option-text">Enterprise 2022</span></i> </a> </div> </li> </ul> </div> </div> </div> </div> <div class="item-col col-2"> <p class="content-heading">Highlights</p> <ul> <li>Free for individual use</li> <li>Code faster, test, debug, deploy any app from one place</li> <li><p><a data-bi-id="Picker" href="/vs/features/" class="inner-link">Visual Studio built-in features</a> empower full development cycle.</p> </li> </ul> </div> <div class="item-col col-3"> <div class="col-content"> <p class="content-heading">Learn more</p> <ul> <li><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://learn.microsoft.com/visualstudio/install/modify-visual-studio#change-workloads-or-individual-components" target="_blank" rel="noopener"><span class="vscom-link-text">How to install just what you need</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://visualstudio.microsoft.com/vs/getting-started" target="_blank" rel="noopener"><span class="vscom-link-text">Get started with Visual Studio </span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> <li><a class="vscom-arrow-link clr-black" data-bi-id="Picker" href="https://visualstudio.microsoft.com/vs/getting-started/#tutorial" target="_blank" rel="noopener"><span class="vscom-link-text">Start coding using tutorials</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></li> </ul> </div> </div> </div> </div> </div> </div> </div><style> .picker-item-v2[data-feature=vs-code-mac-net]{ background: linear-gradient(42.79deg,rgba(123,188,248,.25) 25.63%,rgba(48,204,215,.25) 84.25%); } </style></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container has-pattern-background has-mask-background vscom-downloads-expand nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-bottom:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-two" style="--awb-font-size:27px;"><h2 class="fusion-title-heading title-heading-left fusion-responsive-typography-calculated" style="margin:0;font-size:1em;--fontSize:27;line-height:;">All Downloads</h2></div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_1_1 1_1 fusion-flex-column search-result-container" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-width-small:100%;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="search-wrap" data-bi-id="All Downloads"> <form id="download-search-form" class="search downloads-search-form" action="" aria-label="Search Downloads" role="search"> <input id="js-downloads-search" class="downloads-search-input" aria-label="Search all downloads" type="search" name="q" placeholder="Search all downloads" value=""/> <button type="submit" class="downloads-search-button"> <i class="vscom-icon vscom-icon--Search" aria-hidden="true"></i> <span class="screen-reader-text">Search all downloads</span> </button> </form> </div> <script type="text/javascript"> jQuery(function() { var form = document.getElementById('search-form'); // true if field exists in the url, false otherwise function paramCheck(field) { var url = window.location.href; return (url.indexOf('?' + field + '=') != -1) || (url.indexOf('q' + field + '=') != -1); } //Finds y value of given object function findPos(obj) { var curtop = 0; if (obj.offsetParent) { do { curtop += obj.offsetTop; } while (obj = obj.offsetParent); return [curtop]; } } // run on page ready if (paramCheck('q')) { window.scroll(0, findPos(form)); } }); </script><script> //This adds a tab index for keyboard navigation to the expand and collapse all buttons and executes the action on keydown when focused on. jQuery(document).ready(function(){ /*jQuery('.expand-collapse.expand-all, .expand-collapse.collapse-all, .download-panel, .download-title, .download-description').attr('tabindex', '0'); jQuery( '.ariaexpand-heading' ).click( function(e) { var thisObj = jQuery( this ); if ( thisObj.parent().attr( 'aria-expanded' )=='true' ) { thisObj.parent().attr("aria-expanded","false"); } else { thisObj.parent().attr("aria-expanded","true"); } });*/ jQuery('.download-panel input[type="radio"]').keydown(function(event) { if((event.keyCode == '13')) event.preventDefault(); }); }); </script><div class="fusion-text fusion-text-10 search-result-container"><p id="searchResultAnnounce" role="status" aria-live="polite"><span class="download-results-heading"></span> <i class="vscom-icon vscom-icon--ProgressRingDots vscom-spin downloads-spinner" style="visibility: hidden;"></i></p> </div></div></div><div class="fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-width-small:100%;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="download-posts-container" data-bi-id="All Downloads"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:1%;--awb-padding-bottom:1%;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-10 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-margin-bottom-large:0px;--awb-width-medium:100%;--awb-width-small:100%;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-menu-anchor" id="latestreleases"></div></div></div></div></div><div class="fusion-fullwidth fullwidth-box fusion-builder-row-8 fusion-flex-container has-pattern-background has-mask-background download-footer nonhundred-percent-fullwidth non-hundred-percent-height-scrolling" style="--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-bottom:60px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;" ><div class="fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap" style="max-width:calc( 1600px + );margin-left: calc(- / 2 );margin-right: calc(- / 2 );"><div class="fusion-layout-column fusion_builder_column fusion-builder-column-11 fusion_builder_column_1_1 1_1 fusion-flex-column" style="--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:15px;--awb-margin-bottom-large:15px;--awb-width-medium:100%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;"><div class="fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column"><div class="fusion-text fusion-text-11"><div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" href="/vs/older-downloads" data-bi-id="Footer Links"><span class="vscom-link-text">Older Downloads</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" href="/vs/express/" data-bi-id="Footer Links"><span class="vscom-link-text">Visual Studio Express</span> <i class="vscom-icon vscom-icon--arrow-right"></i></a></div> <div class="vscom-link-wrapper"><a class="vscom-arrow-link clr-black" href="/license-terms/" data-bi-id="Footer Links"><span class="vscom-link-text">Visual Studio Licenses Terms</span><i class="vscom-icon vscom-icon--arrow-right"></i></a></div> </div><script> function locationHashChanged() { let newHash = "#azure-devops-office-integration-2019"; let oldHash = "#team-foundation-server-office-integration-2017"; let currentPage = window.location.pathname; let currentHash = location.hash; if (currentHash === oldHash){ window.location.replace(currentPage+newHash); } } locationHashChanged(); </script> </div></div></div></div> </div> </div> </div> </div> <!-- fusion-row --> </main> <!-- #main --> <script>window.performance && performance.mark && performance.mark("MainAreaEnd")</script> </div> <!-- wrapper --> <div id="social-experiment-footer" class="vscom-social-media vscom-social-media--dividers"> <div class="vscom-social-media-inner"> <div class="vscom-social-media-column flex-start"> <span class="vscom-social-media-text">Follow us</span> <a data-bi-id="footer-follow-social-media" data-bi-name="twitter-x" href="https://twitter.com/visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/X-logo.svg" alt="Visual Studio on Twitter" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="facebook" href="https://www.facebook.com/visualstudio/" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Facebook.svg" alt="Visual Studio on Facebook" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="linkedin" href="https://www.linkedin.com/showcase/microsoft-visual-studio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Linkedin.svg" alt="Visual Studio on Linkedin" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="youtube" href="https://www.youtube.com/user/VisualStudio/featured" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/01/Youtube.svg" alt="Visual Studio on Youtube" /></a> <a data-bi-id="footer-follow-social-media" data-bi-name="tiktok" href="https://www.tiktok.com/@visualstudio" target="_blank" rel="nofollow noopener"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2024/10/Tiktok.svg" alt="Visual Studio on TikTok" /></a> </div> <div class="vscom-social-media-column flex-end vscom-social-media-column--col-sm"> <a data-bi-id="footer-follow-sites" href="https://visualstudio.microsoft.com/dev-essentials/">Dev Essentials</a> <span class="vscom-media-link-divider"></span> <a data-bi-id="footer-follow-sites" href="https://developercommunity.microsoft.com/VisualStudio" target="_blank" rel="nofollow noopener">Developer Community</a> <span class="vscom-media-link-divider"></span> </div> <div class="vscom-social-media-column flex-end"> <span class="vscom-social-media-text">Blogs:</span> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/visualstudio" target="_blank" rel="nofollow noopener">Visual Studio</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/dotnet" target="_blank" rel="nofollow noopener">.NET</a> <a data-bi-id="footer-follow-blogs" href="https://devblogs.microsoft.com/cppblog" target="_blank" rel="nofollow noopener">C++</a> </div> </div> </div> <a class="fusion-one-page-text-link fusion-page-load-link"></a> <!-- W3TC-include-js-head --> <!-- Fix for Multi Language picker options loading on 404 page --> <script>var domReadyScripts =[{"handle":"vscom","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/plugins\/vscom-core\/assets\/js\/vscom.min.js","ver":1694020635,"deps":["classlist-polyfill"]},{"handle":"classlist-polyfill","src":"https:\/\/visualstudio.microsoft.com\/wp-content\/themes\/Avada-Child-Theme\/assets\/js\/classList.min.js","ver":1667498206}];</script><script id="vscom-dom-ready-inline" type="text/javascript">var VSCOM_Language = {"dropdown":"<select id=\"js-lang-picker\" class=\"vs-language-picker\" aria-label=\"Select Language\"><option value=\"https:\/\/visualstudio.microsoft.com\/downloads\/\" selected=\"selected\">English<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hans\/downloads\/\" data-lang-code=\"zh-hans\">\u7b80\u4f53\u4e2d\u6587 (Chinese, Simplified)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/zh-hant\/downloads\/\" data-lang-code=\"zh-hant\">\u7e41\u9ad4\u4e2d\u6587 (Chinese, Traditional)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/fr\/downloads\/\" data-lang-code=\"fr\">Fran\u00e7ais<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/de\/downloads\/\" data-lang-code=\"de\">Deutsch<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/it\/downloads\/\" data-lang-code=\"it\">Italiano<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ja\/downloads\/\" data-lang-code=\"ja\">\u65e5\u672c\u8a9e (Japanese)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ru\/downloads\/\" data-lang-code=\"ru\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/es\/downloads\/\" data-lang-code=\"es\">Espa\u00f1ol<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/cs\/downloads\/\" data-lang-code=\"cs\">\u010ce\u0161tina<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/ko\/downloads\/\" data-lang-code=\"ko\">\ud55c\uad6d\uc5b4 (Korean)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pl\/downloads\/\" data-lang-code=\"pl\">polski<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/pt-br\/downloads\/\" data-lang-code=\"pt-br\">Portugu\u00eas (Brasil)<\/option><option value=\"https:\/\/visualstudio.microsoft.com\/tr\/downloads\/\" data-lang-code=\"tr\">T\u00fcrk\u00e7e<\/option><\/select>"};var microsoftUhfSettings = {"loginUrl":"https:\/\/app.vsaex.visualstudio.com\/go\/profile?wt.mc_id=o~msft~vscom~vssignin","logoutUrl":"https:\/\/app.vssps.visualstudio.com\/_signout?mkt=en-us&_ga=1.265116815.1812220160.1467138837","profileEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/profile\/profiles\/me","clientId":"d03813425c8362d0","label_profile":"Visual Studio profile","connectionDataEndpoint":"https:\/\/app.vssps.visualstudio.com\/_apis\/connectionData","ga":{"vsid_dimension":"dimension12"}};</script><link rel='stylesheet' id='vscom-pickertool-style-v3-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/css/vscom-pickertool-v3.min.css?ver=1735582150' type='text/css' media='all' /> <link rel='stylesheet' id='vscom-pickertool-style-css' href='https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/css/vscom-pickertool-v2.min.css?ver=1667498184' type='text/css' media='all' /> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-dom-ready-js/js/vscomDomReady.min.js?ver=1667498194" id="vscom-dom-ready-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/js/common.min.js?1690822824" id="vscom-common-script-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-fusion-extension/js/dropdown-menu.min.js?ver=6.7.1" id="vscom-dropdown-js-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/js/vscom-pickertool-v3.min.js?ver=1735582150" id="vscom-pickertool-v3-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/js/vscom-pickertool-v2.min.js?ver=1667498184" id="vscom-pickertool-v2-js"></script> <script type="text/javascript" id="vscom-downloads-js-extra"> /* <![CDATA[ */ var VSCOM_Downloads_Shortcode_Data = {"prompts":{"More":"More","Less":"Less"},"search":{"SearchInProgress":"Searching for downloads","ErrorHeading":"Error occurred","ErrorMessage":"There was an issue while trying to retrieve downloads. Refresh the page and try again."}}; /* ]]> */ </script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/plugins/vscom-core/assets/js/vscom-downloads.min.js?ver=1677694127" id="vscom-downloads-js"></script> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/uploads/fusion-scripts/c8f3dfa1952a6a1f544ce3141d537492.min.js?ver=3.11.11" id="fusion-scripts-js"></script> <script>var sliderBackgrounds = [];</script><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script><script src="https://www.microsoft.com/onerfstatics/marketingsites-neu-prod/shell/_scrf/js/themes=default/54-af9f9f/d4-fb1f57/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/e2-608e3c/db-bc0148/dc-7e9864/6d-c07ea1/6f-dafe8c/f6-aa5278/f1-99b817/6d-1e7ed0/b7-cadaa7/c4-898cf2/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/d0-e64f3e/92-10345d/79-499886/7e-cda2d3/58-ab4971/57-c14418/e0-3c9860/de-884374/1f-100dea/33-abe4df/2b-8e0ae6?ver=2.0&_cf=02242021_3231&iife=1"></script><script src="https://mem.gfx.ms/meversion?partner=VisualStudio&market=en-us&uhf=1" defer></script> <!--[if lte IE 8]> <script type="text/javascript" src="https://visualstudio.microsoft.com/wp-content/themes/Avada/assets/js/respond.js"></script> <![endif]--> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/VisualStudio/VisualStudioFooterMsft, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What's new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a> </li> <li> <a aria-label="Surface Laptop What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a> </li> <li> <a aria-label="Surface Laptop Studio 2 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Microsoft Copilot What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="AI in Windows What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>AI in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What's new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/copilot/copilot-for-work" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft 365 Copilot</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer & IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer & IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Microsoft Developer Developer & IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftDeveloper_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Microsoft Developer</a> </li> <li> <a aria-label="Documentation Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer & IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer & IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer & IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer & IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="#" data-m='{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>English (United States)</a> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <a data-m='{"id":"n10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}' href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer"> <span>Consumer Health Privacy</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c11c1c1m1r1a2","sN":11,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://visualstudio.microsoft.com/support/" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n1c11c1c1m1r1a2","sN":1,"aN":"c11c1c1m1r1a2"}'>Contact us</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n2c11c1c1m1r1a2","sN":2,"aN":"c11c1c1m1r1a2"}'>Privacy & cookies</a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n3c11c1c1m1r1a2","sN":3,"aN":"c11c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://azure.microsoft.com/en-us/support/legal/" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n4c11c1c1m1r1a2","sN":4,"aN":"c11c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://www.microsoft.com/trademarks" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n5c11c1c1m1r1a2","sN":5,"aN":"c11c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com/" data-mscc-ic="false" data-m='{"cN":"Footer_Aboutourads_nav","id":"n6c11c1c1m1r1a2","sN":6,"aN":"c11c1c1m1r1a2"}'>About our ads</a> </li> <li>© Microsoft 2025</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> const globalPrivacyControlEnabled = navigator.globalPrivacyControl; const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); if(window.onGPCLoaded) { window.onGPCLoaded(); } function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut'; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue) ? cookieValue[2] : ''; } </script> </div> </div> </div> <!--Below DIV tag is for Usabilla Button --> <div id="usabilla-button" class="vscom-usabilla-button"> <a tabindex="0" id="usbl-integrated-button" data-bi-id="Usabilla" href="javascript:" class="vscom-usabilla-link" role="button" onclick="custom_vs_usabilla_call()" onkeypress="if(event.keyCode==32||event.keyCode==13){event.preventDefault();var bt = document.getElementById('usbl-integrated-button');bt.click(event);};" > <p class="vscom-usabilla-text"> Feedback <img class="vscom-usabilla-icon" src="https://visualstudio.microsoft.com/wp-content/themes/Avada-Child-Theme/assets/img/edit-outline.svg" alt="" /> </p> </a> </div> <!-- Implementation of the 3PDS (Third-Party Data Sharing) process is followed by embedding the Usabilla Live code --> <script type="text/javascript"> // Check if GPC_DataSharingOptIn is a boolean before setting the property to 1DS if (typeof GPC_DataSharingOptIn === 'boolean') { awa.sku.getPropertyManager().getPropertiesContext().web.gpcDataSharingOptIn = GPC_DataSharingOptIn } function custom_vs_usabilla_call() { window.lightningjs||function(n){var e="lightningjs";function t(e,t){var r,i,a,o,d,c;return t&&(t+=(/\?/.test(t)?"&":"?")+"lv=1"),n[e]||(r=window,i=document,a=e,o=i.location.protocol,d="load",c=0,function(){n[a]=function(){var t=arguments,i=this,o=++c,d=i&&i!=r&&i.id||0;function s(){return s.id=o,n[a].apply(s,arguments)}return(e.s=e.s||[]).push([o,d,t]),s.then=function(n,t,r){var i=e.fh[o]=e.fh[o]||[],a=e.eh[o]=e.eh[o]||[],d=e.ph[o]=e.ph[o]||[];return n&&i.push(n),t&&a.push(t),r&&d.push(r),s},s};var e=n[a]._={};function s(){e.P(d),e.w=1,n[a]("_load")}e.fh={},e.eh={},e.ph={},e.l=t?t.replace(/^\/\//,("https:"==o?o:"http:")+"//"):t,e.p={0:+new Date},e.P=function(n){e.p[n]=new Date-e.p[0]},e.w&&s(),r.addEventListener?r.addEventListener(d,s,!1):r.attachEvent("onload",s);var l=function(){function n(){return["<!DOCTYPE ",o,"><",o,"><head></head><",t,"><",r,' src="',e.l,'"></',r,"></",t,"></",o,">"].join("")}var t="body",r="script",o="html",d=i[t];if(!d)return setTimeout(l,100);e.P(1);var c,s=i.createElement("div"),h=s.appendChild(i.createElement("div")),u=i.createElement("iframe");s.style.display="none",d.insertBefore(s,d.firstChild).id="lightningjs-"+a,u.frameBorder="0",u.id="lightningjs-frame-"+a,/MSIE[ ]+6/.test(navigator.userAgent)&&(u.src="javascript:false"),u.allowTransparency="true",h.appendChild(u);try{u.contentWindow.document.open()}catch(n){e.domain=i.domain,c="javascript:var d=document.open();d.domain='"+i.domain+"';",u.src=c+"void(0);"}try{var p=u.contentWindow.document;p.write(n()),p.close()}catch(e){u.src=c+'d.write("'+n().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}e.P(2)};e.l&&l()}()),n[e].lv="1",n[e]}var r=window.lightningjs=t(e);r.require=t,r.modules=n}({});window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/c1a9f67c29cb.js"); window.usabilla_live("hide"); window.usabilla_live("click"); //document.getElementById("usbl-integrated-button").addEventListener("click",function(){ //window.usabilla_live("click"); //}); } </script> <!-- end usabilla live embed code --> <script src="/wp-content/themes/Avada-Child-Theme/assets/js/vscom-usabilla-a11y.js"></script> <script>window.performance && performance.mark && performance.mark("BodyAreaEnd")</script> </body> </html>