CINXE.COM
<!DOCTYPE html> <html lang="en" > <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="theme-color" content="#B9002D"/> <link rel="preconnect" href="https://cdn.oreillystatic.com" crossorigin /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/Gilroy/Family/gilroy-bold.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/Gilroy/Family/gilroy-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/Gilroy/Family/gilroy-medium.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/Gilroy/Family/gilroy-semibold.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/GuardianText/GuardianTextSans-Medium-Web.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="preload" href="https://cdn.oreillystatic.com/fonts/GuardianText/GuardianTextSans-Regular-Web.woff2" as="font" type="font/woff2" crossorigin="anonymous" /> <link rel="shortcut icon" href="//www.oreilly.com/favicon.ico" /> <title data-react-helmet="true">Search</title> <link rel="stylesheet" href="/search/dist/client-render.VO64SZLD.css" /> <script> (function(h,o,u,n,d) { h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}} d=o.createElement(u);d.async=1;d.src=n n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n) })(window,document,'script','https://www.datadoghq-browser-agent.com/us1/v5/datadog-rum.js','DD_RUM') window.DD_RUM.onReady(function() { window.DD_RUM.init({ clientToken: 'pubc7a62e679b92b903c56ee79f4ca4d203', applicationId: 'afaf55a7-3148-4d79-939a-996a5b895ded', site: 'datadoghq.com', service: 'miso_search_client-browser', env: 'production', sessionSampleRate: Number('10' || 10), sessionReplaySampleRate: Number('' || 10), trackUserInteractions: Boolean('' || false), trackResources: true, trackLongTasks: true, defaultPrivacyLevel: 'mask' }); }) </script> <script type="text/javascript"> // NB: some ORM content contains close script tags as strings and trips up the browser's HTML parser window.initialStoreData = {"environment":{"origin":"https://internal-ingress.platform.gcp.oreilly.com","env":"production","nodeEnv":"production","logLevel":"error","reactQueryDevToolsEnabled":false,"xstateDevToolsEnabled":false,"apiPath":"/api/web/search","ingressedPaths":["/search"],"basePath":"/search","publicPath":"/search/dist/","routerBasePath":"/search"},"ldFeatureFlags":{"_loadingState":"SUCCESS","_error":null,"academyTrackEnrollment":false,"addRoleAndSkillSelectionInSearch":false,"addContentLevelsToProducts":true,"aiAcademyProgress":true,"aiaComingSoonTracks":true,"aiaTracksVersionTwo":false,"allowedEncryptionContextSources":["signup","self-service","signup-3ds-local","signup-cybersource-2-local","signup-3ds","signup-cybersource-2"],"androidEnableAmplitude":true,"androidEnableFullstory":true,"anonymizationActive":true,"anonymizationThrottling":{"batch_size":1000,"batch_delay_seconds":20},"answersExcludeVideo":false,"answersInContent":false,"answersInContentAnnotations":false,"answersInSearchPosition":3,"answersOnSearchPage":false,"answersReporting":true,"askForReviewsIos":true,"assistantAnswerQuestionTool":false,"assistantShowDebuggingTools":false,"b2CBadgeQuiz":false,"badgeDisableForwarding":true,"badgeImageServiceImageResize":false,"boostForAuthorAndPublisherQueries":false,"cachedEmailableResponse":{"time_period_seconds":604800},"certificationsPartnerOutage":false,"chassisHelloToggle":false,"chatbotChapterSummarization":false,"contentPlaygroundPrototype":true,"contentSearchExperiment":false,"cowbirdDontPrefetchTopics":false,"credlyMaintenanceEndTimeString":"8pm PDT","deleteLocalRecordOnGrootDelete":true,"deliverToOracleSandbox":false,"devPerformDataMigrationIos":false,"disableIngestionPortal":{"disable_portal":false,"disable_ftp_processing":false},"disableLocalTrainingNotificationsIos":false,"distilledVideos":false,"emailDomainsBannedFromPaymentAttempts":["google.org","protzo.com"],"enableAdditionalGroupFieldApi":true,"enableAiCodeResponseFlow":true,"enableAmplitudeIos":true,"enableAssignmentsWith200Users":true,"enableBadgeRevoking":true,"enableBadgeServiceSerializerErrorLogs":false,"enableCoursesQuizFilter":true,"enableDiagnosticAssessmentQuizRetake":true,"enableDistilledVideos":false,"enableEmailDeliverabilityCheck":true,"enableEmailPlusTagRejection":true,"enableEmailverifyappApi":true,"enableFullstoryIos":true,"enableGroupsV1Dot1Reporting":true,"enableHighlightExportingIos":false,"enableLabFeedback":true,"enableLargeMessagesVmsIngestion":true,"enableLiveCoursesInCoursesUi":true,"enableMarketingTypeTracking":true,"enableMisoSitb":true,"enableNavSkillsABTest":"Explore Skills","enableOptimizeMultiselect":true,"enablePayPalChoiceButtonInNewPaymentsClient":true,"enablePdsV1AlphaContentIngestionMessages":true,"enablePdsV1AlphaProductIngestionMessages":true,"enableQuestion":false,"enableQuizIntroScreen":false,"enableReaderLogging":false,"enableRoiApiSkillEngagementReport":true,"enableRoleAndSkillSelectorInNav":false,"enableSalesforceServiceCloudAndroid":true,"enableSalesforceServiceCloudIos":true,"enableSandboxExportCommands":false,"enableSearchFilters":false,"enableShortcutsModule":false,"enableSnippetIndexing":false,"enableStructuredLearningReport":true,"enableSuperstreamsDetailPage":false,"enableTimeBasedUsageAndroid":false,"enableTimeBasedUsageAndroidV2":true,"enableTopicBrowseInSearch":true,"enableTopicGraphV1AlphaContentIngestionMessages":true,"enableUpdatedTimeBasedUsageIos":true,"enableUsageEventOnPageEnd":false,"enableUserMismatchMessage":true,"enableUserTitlesV2Endpoint":true,"enableHistoryRemoval":false,"enableModernTranscriptions":"enabledClosed","enabledThirdPartyAuthProviders":["corporate","google-oauth2","linkedin-oauth2","apple-id"],"enhancedLiveEventSeriesCards":false,"falconCisUrls":false,"feChassisHelloEnableConfirm":false,"happeningNowEndpoint":false,"hasBadgeFilter":false,"hideB2CCancelPageText":false,"hideChatGptSandbox":"disabled","improveSearchCardDescriptions":true,"improveSearchFilters":true,"ingestMultilangTranscripts":true,"insightsTopContentSkills":true,"interactiveContent":true,"ipsProcessProgress":false,"ipsSendXapiToOracle":false,"isCredlyDownForMaintenance":false,"labsMvpTemplate":false,"labsOrmStaff":false,"listenToDegreedProductMessages":true,"liveEventBadgeExperience":true,"liveEventGroupRegistration":false,"liveEventGroupSharing":false,"liveEventPermissions":false,"liveEventsExperimental":false,"logLowRecaptchaScores":0.5,"loonTrackEnrollment":false,"magicPlaylistBuilder":false,"magpieIngestsFromProductMessage":false,"manyToManySsoDevTools":false,"maxIndividualLoginAttemptsPerTimePeriod":{"time_period_seconds":1800,"max_attempts":5},"maxIndividualRegistrationAttemptsPerTimePeriod":{"max_attempts":5,"time_period_seconds":10800},"maxPasswordResetsPerTimePeriod":{"time_period_seconds":3600,"max_attempts":2},"maxPaymentAttemptsPerTimePeriod":{"time_period_seconds":86400,"max_attempts":30},"msTeamsAnswersInstall":true,"multiTopicsForSeries":true,"multilateralFederatedAuthIntegrationAnybird":true,"multilateralFederatedAuthIntegrationFe":false,"newSearchPlaceholder":true,"oidcIdtokenExpire":900,"on24Anonymization":false,"oreillyLabs":false,"paymentsPurchasingPowerParity":false,"pdPrototypeAiChat":false,"pearsonInteractiveInside":false,"performDataMigrationIos":false,"platformNativeLabUbuntuSandbox":true,"playlistAccountSharing":true,"playlistsSectionHeaderOurns":true,"preloadNextChapter":true,"purgeExistingSolrRecordsOnOurnMismatch":true,"replaceMyOreilly":false,"reportTitleSuggestions":false,"rssControlOrVariation":false,"rssVariationType":false,"sandboxesInUcv":["enabled","split"],"scheduledLearning":false,"searchRelevanceTuning":{"highlight":false,"pqf":{"content_unstemmed":2000,"title_unstemmed":900,"topic_keywords":600,"topic_names":1000,"chapter_title_unstemmed":2000},"qf":{"content":100,"title":50,"topic_keywords":50,"topic_names":50,"chapter_title":100,"chapter_title_unstemmed":100},"tie":0.6,"boost":"if(termfreq(content_type,'chapter'),1.5,1)","collapse":true},"searchWithStandardCards":false,"secondaryTagsForOndemandCourses":true,"sendBadgeTemplatesToCredly":true,"sendCanonProductMessage":true,"sendDegreedXapiStatements":false,"sendDeviceTokensToMarketingCloud":false,"sendPrivateLotVideo":false,"sendQuizScoreMessages":true,"sendTransactionalEmails":true,"sendUpdatedTrackCompletionMessage":false,"sfmcAccountContactEvent":true,"sharingPlaylistsWithGroups":false,"shouldCauseCrashIos":false,"showBadgeEmailModal":false,"showInsightsSelectGroupDropdown":true,"showInternalToolsIos":false,"showLinkAppleIcon":true,"showPaymentsNotificationAlert":false,"showSkillsSection":false,"signup3DsPaymentPage":true,"signupAllowJwt":false,"solrFieldAlias":false,"topicGraphClassifiedUseNew":true,"topicGraphCanonSyncTimeDelay":20,"trackCompletionCsvReport":false,"trackCompletionInsightsApi":false,"transcriptionServiceOpenaiTranscripts":true,"typewriterEffectTextSpeed":0,"unifiedSeamlessOn24Experiment":false,"updatedAiaLink":true,"useIntegrationsAuthService":false,"useMarsToPollAnswers":true,"useMisoStagingEnvironment":false,"useNewFrontendPathForVideoDashes":false,"useOreillyMeter":false,"usersAlwaysAllowedPaymentAttempts":false,"validateInteractivityProxyUrl":false,"videoIntestionServiceUseTranscriptionService":true,"viewAnswers20LandingPage":false,"viewAnswers20Nav":false,"viewAnswersSummarizationTool":false,"viewBoldAnswers20LandingPage":false,"viewBoldAnswersInContent":false,"viewDiagnosticBenchmarkAssessment":false,"viewDiscoveryAssistantClient":false,"viewInteractiveAiTutorial":false,"viewSlackAndTeamsLinksOnAnswers20LandingPage":false},"jwt":{"_loadingState":"FAILURE","_error":"No jwt on request."},"navigationAndAnnouncements":{"announcements":[],"links":{"header":[{"name":"Enterprise","link":"/enterprise/","icon":"","classname":"","description":"","isExternal":false,"groups":["header"],"syntheticsId":"","children":[]},{"name":"Pricing","link":"/pricing/","icon":"","classname":"","description":"","isExternal":false,"groups":["header"],"syntheticsId":"","children":[]}],"footer":[{"name":"About O’Reilly","link":"/about/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Teach/write/train","link":"/work-with-us.html","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Careers","link":"/careers/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Community partners","link":"/partner/signup.csp","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Affiliate program","link":"/affiliates/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Diversity","link":"/diversity/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Support","link":"https://www.oreilly.com/online-learning/support/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Contact us","link":"/about/contact.html","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]},{"name":"Newsletters","link":"https://www.oreilly.com/emails/newsletters/","icon":"","classname":"","description":"","isExternal":false,"groups":["footer"],"syntheticsId":"","children":[]}],"fineprint":[{"name":"Terms of Service","link":"https://www.oreilly.com/terms/","icon":"","classname":"","description":"","isExternal":false,"groups":["fineprint"],"syntheticsId":"","children":[]},{"name":"Privacy Policy","link":"/privacy","icon":"","classname":"","description":"","isExternal":false,"groups":["fineprint"],"syntheticsId":"","children":[]},{"name":"Editorial Independence","link":"/about/editorial_independence.html","icon":"","classname":"","description":"","isExternal":false,"groups":["fineprint"],"syntheticsId":"","children":[]},{"name":"Modern Slavery Act Statement","link":"https://www.oreilly.com/modern-slavery-act-transparency-statement.html","icon":"","classname":"","description":"","isExternal":false,"groups":["fineprint"],"syntheticsId":"","children":[]}],"social":[{"name":"Twitter","link":"https://twitter.com/oreillymedia","icon":"twitter","classname":"","description":"","isExternal":false,"groups":["social"],"syntheticsId":"","children":[]},{"name":"LinkedIn","link":"https://www.linkedin.com/company/oreilly-media","icon":"linkedin","classname":"","description":"","isExternal":false,"groups":["social"],"syntheticsId":"","children":[]},{"name":"YouTube","link":"https://www.youtube.com/user/OreillyMedia","icon":"youtube","classname":"","description":"","isExternal":false,"groups":["social"],"syntheticsId":"","children":[]}],"anon-header":[{"name":"Teams","link":"/online-learning/teams.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[{"name":"For business","link":"/online-learning/business.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"For government","link":"/online-learning/government.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"For higher ed","link":"/online-learning/academic.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]}]},{"name":"Individuals","link":"/online-learning/individuals.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Features","link":"/online-learning/features.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[{"name":"All features","link":"/online-learning/features.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Courses","link":"/online-learning/courses.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Certifications","link":"/online-learning/feature-certification.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Interactive learning","link":"/online-learning/intro-interactive-learning.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Live events","link":"/online-learning/live-events.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Answers","link":"/online-learning/feature-answers.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Insights reporting","link":"/online-learning/insights-dashboard.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]}]},{"name":"Blog","link":"/radar/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]},{"name":"Content sponsorship","link":"/content-marketing-solutions.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-header"],"syntheticsId":"","children":[]}],"anon-footer-left":[{"name":"About O'Reilly","link":"/about/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[{"name":"Teach/write/train","link":"/work-with-us.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Careers","link":"/careers/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Press releases","link":"/press/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Media coverage","link":"/press/media-coverage.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Community partners","link":"/partner/signup.csp","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Affiliate program","link":"/affiliates/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Submit an RFP","link":"/online-learning/rfp.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"Diversity","link":"/diversity/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]},{"name":"O’Reilly for marketers","link":"/content-marketing-solutions.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-left"],"syntheticsId":"","children":[]}]}],"anon-footer-center":[{"name":"Support","link":"https://www.oreilly.com/online-learning/support/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-center"],"syntheticsId":"","children":[{"name":"Contact us","link":"/contact.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-center"],"syntheticsId":"","children":[]},{"name":"Newsletters","link":"/emails/newsletters/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-center"],"syntheticsId":"","children":[]},{"name":"Privacy policy","link":"/privacy.html","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-center"],"syntheticsId":"","children":[]}]}],"anon-footer-right":[{"name":"International","link":"#","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[{"name":"Australia & New Zealand","link":"/anz/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[]},{"name":"Hong Kong & Taiwan","link":"https://oreilly.hk/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[]},{"name":"India","link":"https://oreillylearning.in/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[]},{"name":"Indonesia","link":"https://oreilly.id/","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[]},{"name":"Japan","link":"https://www.oreilly.co.jp/index.shtml","icon":"","classname":"","description":"","isExternal":false,"groups":["anon-footer-right"],"syntheticsId":"","children":[]}]}]}},"playlistsCoreState":{"mostRecentPlaylistIds":[],"playlistActions":{"updatingSharing":false,"sharingErrors":{}},"playlists":{"error":"","fetching":true,"loaded":false,"playlists":[],"sharingEnabled":false},"playlistSSR":{"error":"","fetching":false,"loaded":false,"playlist":{}},"sharedPlaylist":{"error":"","fetching":false,"loaded":false,"playlist":{}}},"user":{"error":"User is not authenticated"},"userInfo":{"meta":{"error":"User is not authenticated"},"profile":{"error":null},"usageStatus":{"error":null}},"userProfile":{"error":{"message":"No encoded jwt."},"_loadingState":"FAILURE"},"userTopicsAPI":{"queries":{},"mutations":{},"provided":{},"subscriptions":{},"config":{"online":true,"focused":true,"middlewareRegistered":true,"refetchOnFocus":false,"refetchOnReconnect":false,"refetchOnMountOrArgChange":false,"keepUnusedDataFor":60,"reducerPath":"userTopicsAPI"}},"reviewsState":{"batchReports":{},"titleReports":{},"userReports":{},"notification":{"active":false,"message":""},"loadingStates":{"batch":"INITIAL","title":"INITIAL","user":"INITIAL"},"error":""}}; window.__orm_public_path__ = window.initialStoreData?.environment?.publicPath; </script> <script type="text/javascript"> window.orm = window.orm || {}; window.orm.redirect = function redirect(url) { window.location.assign(url); }; window.orm.logger = console; </script> <script type="text/javascript" src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-logs.js"></script> <script type="text/javascript"> if (window.DD_LOGS) { window.DD_LOGS.init({ clientToken: 'pub8399c9005ebe7454be1698e2aee94fba', site: 'datadoghq.com', env: 'production', service: 'miso_search_client-browser', sessionSampleRate: Number('' || 50), }); window.DD_LOGS.logger.setLevel('error' || 'error'); window.orm.logger = DD_LOGS.logger; } </script> <!-- Disable loading Appcues until consent has been given via OneTrust --> <script src="//fast.appcues.com/48743.js" type="text/plain" class="optanon-category-C0003"></script> <script type="text/javascript"> window.orm = window.orm || {}; const meta = window.initialStoreData.userInfo.meta; const ldFeatureFlags = window.initialStoreData.ldFeatureFlags; const perms = window.initialStoreData.jwt.perms; window.orm.amplitude = { apiKey: '49f7a68a857a237d4009d4b4447145b3', logLevel: 'warn', identity: { academic: meta.academic_institution, amplitude_account_tier: meta.amplitude_account_tier, identifier: meta.user_identifier, organizationId: meta.primary_account, paidAccount: !!(meta.subscription && meta.subscription.active), userType: meta.user_type, isGroupAdmin: meta.is_group_admin, primaryAccountRoles: meta.primary_account_roles, hasAnswersPageAccess: !!(ldFeatureFlags?.viewAnswers20LandingPage && perms?.genai?.includes('v')), ...(meta.user_type === 'B2B' && {organizationName: meta.organization_name}) } }; </script> <script> // Disable analytics when hit from DD synthetics browser if (window._DATADOG_SYNTHETICS_BROWSER === undefined) { if (window.initialStoreData && window.initialStoreData.userInfo.meta && window.initialStoreData.userInfo.meta.user_identifier) { var user = window.initialStoreData.userInfo.meta; var dataLayer = window.dataLayer || []; // Set user/session info dataLayer.push({ userIdentifier: user.user_identifier }); dataLayer.push({ loggedIn: 'yes' }); // Set account/org info if (!user.individual) { dataLayer.push({ orgID: user.primary_account }); } // Set account type if (user.individual) { if (user.subscription && user.subscription.active) { dataLayer.push({learningAccountType: 'individual'}); } else if (user.is_trial) { dataLayer.push({learningAccountType: 'free trial'}); } } else { if (user.academic_institution) { dataLayer.push({learningAccountType: 'academic'}); } else { dataLayer.push({learningAccountType: 'enterprise'}); } } // Set paid account if (user.subscription && user.subscription.active) { dataLayer.push({ learningPaidAccount: 'yes' }); } } (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer', 'GTM-5P4V6Z'); } </script> <script type="module" src="/search/dist/client-render.T74YUXCA.js" defer></script> </head> <body > <noscript> <iframe src='https://www.googletagmanager.com/ns.html?id=GTM-5P4V6Z' height='0' width='0' style='display:none;visibility:hidden'></iframe> </noscript> <div id="root"><a href="#main" class="orm-ff-AnonymousShell-skipLink">Skip to content</a><style data-emotion="css o0aqtq">.css-o0aqtq{--anonymous-header-submenu-bg:rgba(247, 247, 247, 0.98);--anonymous-header-transition:150ms ease-in-out;--anonymous-nav-cta-color:#0071eb;--anonymous-nav-link-color:#222;--anonymous-nav-link-font-size:0.875rem;--block-padding:1rem;position:-webkit-sticky;position:sticky;top:0;z-index:9;padding-block:var(--block-padding);font-family:var(--anonymous-font);-webkit-backdrop-filter:saturate(200%) blur(16px);backdrop-filter:saturate(200%) blur(16px);background-color:rgba(255, 255, 255, 0.95);border-bottom:1px solid rgba(0, 0, 0, 0.1);box-sizing:border-box;}.css-o0aqtq,.css-o0aqtq *,.css-o0aqtq *::before,.css-o0aqtq *::after{box-sizing:border-box;}@media (min-width: 600px){.css-o0aqtq{--block-padding:1.25rem;}}@media (max-width: 1151px){.css-o0aqtq *[class='hide-on-mobile']{display:none;}}@media (min-width: 960px){.css-o0aqtq{--anonymous-nav-link-font-size:0.9375rem;--block-padding:1.5rem;}}</style><header class="css-o0aqtq"><style data-emotion="css 14kdnw5">.css-14kdnw5{--gap:1.5rem;max-width:var(--anonymous-max-width);padding-inline:var(--anonymous-inline-padding);width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:var(--gap);}@media (min-width: 1152px){.css-14kdnw5{--gap:3rem;}}</style><div component="div" class="css-14kdnw5"><style data-emotion="css 112jqer">.css-112jqer{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}</style><a href="//www.oreilly.com" title="Visit Homepage" class="css-112jqer"><style data-emotion="css nkdw1c">.css-nkdw1c{--max-height:1.5rem;display:block;margin:0;height:var(--max-height);}@media (min-width: 600px){.css-nkdw1c{--max-height:1.75rem;}}</style><svg viewBox="0 0 198 36" class="css-nkdw1c"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="oreilly_logo_mark_red_d30000" fill="#D30000" fill-rule="nonzero"><path d="M64.5161,20.2636 C68.4431,19.0876 71.3061,15.4576 71.3081,11.1476 C71.3061,5.8876 67.0461,1.6276 61.7861,1.6256 L45.3831,1.6256 L45.3831,34.2716 L50.8251,34.2716 L50.8251,20.6696 L58.4031,20.6696 L66.6121,34.2716 L72.9581,34.2716 L64.5161,20.2636 Z M50.8251,15.2266 L50.8251,7.0646 L61.7861,7.0646 C64.0381,7.0686 65.8631,8.8926 65.8661,11.1476 C65.8631,13.3976 64.0381,15.2226 61.7861,15.2266 L50.8251,15.2266 Z M41.5274,5.0991 C41.5274,7.3121 39.7344,9.1071 37.5224,9.1071 C35.3104,9.1071 33.5164,7.3121 33.5164,5.0991 C33.5164,2.8871 35.3104,1.0941 37.5224,1.0941 C39.7344,1.0941 41.5274,2.8871 41.5274,5.0991 M0.0004,18.0991 C0.0014,8.7071 7.6114,1.0961 17.0044,1.0941 C26.3964,1.0961 34.0054,8.7071 34.0074,18.0991 C34.0054,27.4891 26.3964,35.1001 17.0044,35.1021 C7.6114,35.1001 0.0014,27.4891 0.0004,18.0991 M8.8274,9.9201 C6.7314,12.0241 5.4424,14.8961 5.4414,18.0991 C5.4424,21.2991 6.7314,24.1731 8.8274,26.2731 C10.9284,28.3701 13.8024,29.6591 17.0044,29.6611 C20.2054,29.6591 23.0774,28.3701 25.1794,26.2731 C27.2764,24.1731 28.5654,21.2991 28.5654,18.0991 C28.5654,14.8961 27.2764,12.0241 25.1794,9.9201 C23.0774,7.8261 20.2054,6.5381 17.0044,6.5361 C13.8024,6.5381 10.9284,7.8261 8.8274,9.9201" id="Shape"></path><polygon id="Path" points="187.27 1.625 180.658 1.625 172.284 13.745 163.909 1.625 157.297 1.625 169.556 19.375 169.556 34.271 175 34.271 175 19.388"></polygon><path d="M193.7081,0.8974 C191.4841,0.8974 189.6801,2.7004 189.6801,4.9234 C189.6801,7.1464 191.4841,8.9494 193.7081,8.9494 C195.9291,8.9494 197.7341,7.1464 197.7341,4.9234 C197.7341,2.7004 195.9291,0.8974 193.7081,0.8974 M193.7081,8.3054 C191.8411,8.3054 190.3261,6.7904 190.3261,4.9234 C190.3261,3.0554 191.8411,1.5404 193.7081,1.5404 C195.5721,1.5404 197.0881,3.0554 197.0881,4.9234 C197.0881,6.7904 195.5721,8.3054 193.7081,8.3054" id="Shape"></path><path d="M195.5133,4.038 C195.5133,3.377 194.9803,2.842 194.3183,2.842 L192.0523,2.842 L192.0523,6.945 L192.7333,6.945 L192.7333,5.236 L193.8823,5.236 L194.7053,6.945 L195.4663,6.945 L194.6243,5.197 C195.1373,5.062 195.5133,4.595 195.5133,4.038 Z M192.7333,3.526 L194.3183,3.526 C194.6033,3.526 194.8293,3.755 194.8293,4.038 C194.8293,4.322 194.6033,4.552 194.3183,4.552 L192.7333,4.552 L192.7333,3.526 Z" id="Shape"></path><polygon id="Path" points="99.462 7.064 99.462 1.625 76.766 1.625 76.766 34.271 99.462 34.271 99.462 28.829 82.205 28.829 82.205 20.668 98.631 20.668 98.631 15.226 82.205 15.226 82.205 7.064"></polygon><polygon id="Path" points="116.303 34.271 116.303 1.625 121.744 1.625 121.744 28.829 137.44 28.829 137.44 34.271"></polygon><polygon id="Path" points="141.875 34.271 141.875 1.625 147.318 1.625 147.318 28.829 163.013 28.829 163.013 34.271"></polygon><polygon id="Path" points="105.172 34.271 110.612 34.271 110.612 1.625 105.172 1.625"></polygon></g></g></svg></a><style data-emotion="css 1qnqz0i">.css-1qnqz0i{--display:block;--size:2.5rem;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:var(--display);height:var(--size);-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:0;width:var(--size);-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-color:transparent;border:none;cursor:pointer;}@media (max-width: 599px){.css-1qnqz0i{margin-left:auto;}}@media (min-width: 600px){.css-1qnqz0i{-webkit-order:1;-ms-flex-order:1;order:1;}}@media (min-width: 1152px){.css-1qnqz0i{--display:none;}}</style><button title="Toggle Navigation open/closed" data-testid="NavToggle" class="css-1qnqz0i"><style data-emotion="css 3kn6vf">.css-3kn6vf{position:absolute;left:10px;top:50%;z-index:0;display:block;width:28px;height:4px;background-color:#222;-webkit-transition:-webkit-transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1),background-color 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);transition:transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1),background-color 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);}.css-3kn6vf::after{bottom:-9px;position:absolute;display:block;margin-top:-2px;width:28px;height:4px;background-color:#222;z-index:0;content:'';-webkit-transition:-webkit-transform 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);transition:transform 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);}.css-3kn6vf::before{position:absolute;top:-9px;z-index:0;display:block;width:28px;height:4px;background-color:#222;content:'';-webkit-transition:-webkit-transform 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);transition:transform 0s 0.1s cubic-bezier(0.645, 0.045, 0.355, 1);}</style><span class="css-3kn6vf"></span></button><style data-emotion="css 1n4vzuf">.css-1n4vzuf{--background-color:var(--anonymous-header-submenu-bg);--margin-left:0;--position:absolute;left:0;position:var(--position);right:0;top:100%;z-index:1;margin-left:var(--margin-left);background-color:var(--background-color);-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}@media (max-width: 599px){.css-1n4vzuf{opacity:0;pointer-events:none;height:calc(100dvh - 72px);width:100%;overflow-y:auto;}}@media (min-width: 600px){.css-1n4vzuf{--background-color:transparent;--margin-left:auto;--position:static;}}@media (min-width: 600px) and (max-width: 1151px){.css-1n4vzuf{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}@media (min-width: 1152px){.css-1n4vzuf{--margin-left:0;--position:static;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;}}</style><div data-testid="NavWrapper" class="css-1n4vzuf"><style data-emotion="css 1vfbv6f">.css-1vfbv6f{--border-bottom:1px solid #fff;--alignment:flex-start;--flex-direction:column;--gap:0;--padding:0.5rem 0;--user-links-font:'gilroy',Arial,sans-serif;margin:0;padding:var(--padding);margin-left:auto;-webkit-align-items:var(--alignment);-webkit-box-align:var(--alignment);-ms-flex-align:var(--alignment);align-items:var(--alignment);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:var(--flex-direction);-ms-flex-direction:var(--flex-direction);flex-direction:var(--flex-direction);gap:var(--gap);border-bottom:var(--border-bottom);list-style:none;}@media (max-width: 599px){.css-1vfbv6f li{width:100%;}}@media (min-width: 600px){.css-1vfbv6f{--alignment:center;--border-bottom:none;--flex-direction:row;--gap:1rem;--padding:0;-webkit-order:1;-ms-flex-order:1;order:1;}}</style><ul class="css-1vfbv6f"><li><style data-emotion="css 146l34e">.css-146l34e{--color:var(--anonymous-nav-link-color);--padding:1rem 1.25rem;display:block;padding:var(--padding);color:var(--color);font-size:var(--anonymous-nav-link-font-size);letter-spacing:0.02em;line-height:1;-webkit-text-decoration:none;text-decoration:none;}@media (hover: hover){.css-146l34e:hover{-webkit-text-decoration:underline;text-decoration:underline;}}@media (min-width: 600px){.css-146l34e{--color:var(--anonymous-nav-cta-color);--padding:0;font-weight:600;text-transform:uppercase;}}@media (min-width: 600px) and (hover: hover){.css-146l34e{border-bottom:2px solid transparent;}.css-146l34e:hover{color:var(--color);border-bottom:2px solid var(--anonymous-nav-cta-color);-webkit-text-decoration:none;text-decoration:none;}}</style><a href="https://www.oreilly.com/member/login/" class="css-146l34e">Sign In</a></li><li><style data-emotion="css 34wyzy">.css-34wyzy{--color:var(--anonymous-nav-link-color);--font-size:var(--anonymous-nav-link-font-size);--padding:0.5rem 1.25rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.5rem;padding:var(--padding);color:var(--color);font-size:var(--font-size);-webkit-text-decoration:none;text-decoration:none;}@media (hover: hover){.css-34wyzy:hover{-webkit-text-decoration:underline;text-decoration:underline;}}@media (max-width: 599px){.css-34wyzy svg{display:none;}}@media (min-width: 600px){.css-34wyzy{--color:#fff;--font-size:1rem;font-family:var(--user-links-font);font-weight:600;background-color:var(--anonymous-nav-cta-color);border-radius:2px;}}@media (min-width: 600px) and (hover: hover){.css-34wyzy:hover{color:var(--color);box-shadow:0 1px 4px rgb(0 0 0 / 30%);-webkit-text-decoration:none;text-decoration:none;}}</style><a href="https://www.oreilly.com/online-learning/try-now.html" class="css-34wyzy">Try Now <style data-emotion="css 57kesc">.css-57kesc{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;font-size:16px;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-57kesc" focusable="false" aria-hidden="true" viewBox="0 0 20 20" fill="none"><path d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill="currentColor"></path></svg></a></li></ul><style data-emotion="css 1ufj81f">.css-1ufj81f{--background-color:transparent;--alignment:flex-start;--flex-direction:column;--gap:0;--position:static;position:var(--position);-webkit-align-items:var(--alignment);-webkit-box-align:var(--alignment);-ms-flex-align:var(--alignment);align-items:var(--alignment);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:var(--flex-direction);-ms-flex-direction:var(--flex-direction);flex-direction:var(--flex-direction);gap:var(--gap);background-color:var(--background-color);}@media (min-width: 600px) and (max-width: 1151px){.css-1ufj81f{--background-color:var(--anonymous-header-submenu-bg);--position:absolute;right:0;top:100%;width:19rem;opacity:0;pointer-events:none;-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}}@media (min-width: 1152px){.css-1ufj81f{--alignment:center;--flex-direction:row;--gap:1rem;}}</style><nav title="website navigation" class="css-1ufj81f"><style data-emotion="css 1kuhmug">.css-1kuhmug{--background-color:transparent;--alignment:flex-start;--flex-direction:column;--gap:0;-webkit-align-items:var(--alignment);-webkit-box-align:var(--alignment);-ms-flex-align:var(--alignment);align-items:var(--alignment);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:var(--flex-direction);-ms-flex-direction:var(--flex-direction);flex-direction:var(--flex-direction);gap:var(--gap);margin:0;padding:0;list-style:none;}@media (min-width: 600px) and (max-width: 1151px){.css-1kuhmug{--background-color:var(--anonymous-header-submenu-bg);--position:absolute;right:0;top:100%;width:19rem;opacity:0;pointer-events:none;-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}}@media (min-width: 1152px){.css-1kuhmug{--alignment:center;--flex-direction:row;--gap:1rem;}}</style><ul class="css-1kuhmug"><style data-emotion="css 1vgd1uc">.css-1vgd1uc{position:relative;}.css-1vgd1uc:focus ul,.css-1vgd1uc:focus-within ul{opacity:1;pointer-events:all;}</style><li data-testid="Teams" class="css-1vgd1uc"><style data-emotion="css eo6hzm">.css-eo6hzm{--border-bottom:2px solid transparent;--color:var(--anonymous-nav-link-color);--font-size:0.875rem;--font-weight:normal;--padding:0.5rem 1.25rem;display:block;padding:var(--padding);color:var(--color);font-size:var(--font-size);letter-spacing:0.02em;line-height:1;-webkit-text-decoration:none;text-decoration:none;cursor:pointer;}@media (hover: hover){.css-eo6hzm:hover{color:var(--color);-webkit-text-decoration:underline;text-decoration:underline;}}@media (min-width: 1152px){.css-eo6hzm{--font-size:0.9375rem;--padding:0.5rem 0;font-weight:600;text-transform:uppercase;border-bottom:var(--border-bottom);-webkit-text-decoration:none;text-decoration:none;}.css-eo6hzm[aria-expanded='true']{border-bottom:2px solid var(--color);}.css-eo6hzm::after{content:'';margin:3px 0 0 6px;float:right;border:solid #ccc;border-width:0 2px 2px 0;display:block;padding:2px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transform:rotate(45deg);}}@media (min-width: 1152px) and (hover: hover){.css-eo6hzm:hover{color:var(--color);border-bottom:2px solid var(--color);-webkit-text-decoration:none;text-decoration:none;}}</style><a href="/online-learning/teams.html" aria-expanded="false" data-testid="/online-learning/teams.html" class="css-eo6hzm">Teams</a><style data-emotion="css c8yde7">.css-c8yde7{margin:0;padding:0.75rem 0;list-style:none;-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}@media (min-width: 1152px){.css-c8yde7{position:absolute;background-color:var(--anonymous-header-submenu-bg);opacity:0;pointer-events:none;}}</style><ul data-testid="Submenu" class="css-c8yde7"><li class="hide-on-mobile"><style data-emotion="css 12jb8wh">.css-12jb8wh{--color:var(--anonymous-nav-link-color);--padding-block:0.625rem;--padding-inline:1.25rem;display:block;padding-block:var(--padding-block);padding-inline:var(--padding-inline);color:var(--color);font-size:0.875rem;line-height:1em;-webkit-text-decoration:none;text-decoration:none;white-space:nowrap;}@media (hover: hover){.css-12jb8wh:hover{color:var(--color);-webkit-text-decoration:underline;text-decoration:underline;}}@media (max-width: 1151px){.css-12jb8wh{margin-left:1.25rem;padding-left:1rem;border-left:2px solid #d1d1d1;}}</style><a href="/online-learning/business.html" class="css-12jb8wh">For business</a></li><li class=""><a href="/online-learning/government.html" class="css-12jb8wh">For government</a></li><li class=""><a href="/online-learning/academic.html" class="css-12jb8wh">For higher ed</a></li></ul></li><li><style data-emotion="css frx1n">.css-frx1n{--border-bottom:2px solid transparent;--color:var(--anonymous-nav-link-color);--font-size:0.875rem;--font-weight:normal;--padding:0.5rem 1.25rem;display:block;padding:var(--padding);color:var(--color);font-size:var(--font-size);letter-spacing:0.02em;line-height:1;-webkit-text-decoration:none;text-decoration:none;cursor:pointer;}@media (hover: hover){.css-frx1n:hover{color:var(--color);-webkit-text-decoration:underline;text-decoration:underline;}}@media (min-width: 1152px){.css-frx1n{--font-size:0.9375rem;--padding:0.5rem 0;font-weight:600;text-transform:uppercase;border-bottom:var(--border-bottom);-webkit-text-decoration:none;text-decoration:none;}.css-frx1n[aria-expanded='true']{border-bottom:2px solid var(--color);}}@media (min-width: 1152px) and (hover: hover){.css-frx1n:hover{color:var(--color);border-bottom:2px solid var(--color);-webkit-text-decoration:none;text-decoration:none;}}</style><a href="/online-learning/individuals.html" class="css-frx1n">Individuals</a></li><li data-testid="Features" class="css-1vgd1uc"><a href="/online-learning/features.html" aria-expanded="false" data-testid="/online-learning/features.html" class="css-eo6hzm">Features</a><ul data-testid="Submenu" class="css-c8yde7"><li class="hide-on-mobile"><a href="/online-learning/features.html" class="css-12jb8wh">All features</a></li><li class=""><a href="/online-learning/courses.html" class="css-12jb8wh">Courses</a></li><li class=""><a href="/online-learning/feature-certification.html" class="css-12jb8wh">Certifications</a></li><li class=""><a href="/online-learning/intro-interactive-learning.html" class="css-12jb8wh">Interactive learning</a></li><li class=""><a href="/online-learning/live-events.html" class="css-12jb8wh">Live events</a></li><li class=""><a href="/online-learning/feature-answers.html" class="css-12jb8wh">Answers</a></li><li class=""><a href="/online-learning/insights-dashboard.html" class="css-12jb8wh">Insights reporting</a></li></ul></li><li><a href="/radar/" class="css-frx1n">Blog</a></li><li><a href="/content-marketing-solutions.html" class="css-frx1n">Content sponsorship</a></li></ul><style data-emotion="css bsqzw7">.css-bsqzw7{--display:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:var(--display);height:2rem;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:0;width:2rem;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border:none;cursor:pointer;}@media (min-width: 1152px){.css-bsqzw7{--display:flex;}}</style><button type="button" title="Open Search Form" data-testid="OpenSearch" class="css-bsqzw7"><svg width="20px" height="20px" viewBox="0 0 20 20" fill="#555555"><path d="M7.5455,2.25266666 C10.4271667,2.25933334 12.7605,4.54433334 12.7605,7.361 C12.7605,10.1776667 10.4271667,12.4626667 7.5455,12.4693625 C4.66383334,12.476 2.3205,10.201 2.30713677,7.38433334 C2.30383334,6.02433334 2.8555,4.71933334 3.83716666,3.756 C4.8205,2.79433334 6.1555,2.25266666 7.5455,2.25266666 L7.5455,2.25266666 Z M7.5455,14.7676666 C8.97883334,14.7743334 10.3855,14.3793334 11.5971667,13.6293334 L17.4171666,19.3176666 C17.7571666,19.6493334 18.3088334,19.6493334 18.6505,19.3176666 L19.7438334,18.2493334 C20.0838334,17.9143334 20.0838334,17.376 19.7438334,17.0426666 L13.9238334,11.3543333 C15.7788334,8.511 15.4271666,4.801 13.0705,2.33766666 C10.7121667,-0.124 6.94716666,-0.712333334 3.92216666,0.909333334 C0.897166666,2.531 -0.6195,5.951 0.237166666,9.21766666 C1.09383333,12.4843333 4.10716666,14.7693334 7.55716666,14.7676666 L7.5455,14.7676666 Z" id="Fill-1"></path></svg></button><style data-emotion="css pdr1v1">.css-pdr1v1{--padding:1rem 1.25rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:var(--padding);width:100%;-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}@media (min-width: 1152px){.css-pdr1v1{--padding:0;inset:0;position:absolute;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;background-color:rgba(220, 220, 220, 0.9);-webkit-backdrop-filter:saturate(200%) blur(16px);backdrop-filter:saturate(200%) blur(16px);opacity:0;pointer-events:none;}}</style><form action="https://www.oreilly.com/search/" data-testid="SearchForm" class="css-pdr1v1"><style data-emotion="css 1drjqjh">.css-1drjqjh{--border-radius:0;--max-width:32rem;position:relative;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.5rem;max-width:var(--max-width);width:100%;background-color:#fff;border:1px solid #ddd;border-radius:var(--border-radius);overflow:hidden;}@media (min-width: 1152px){.css-1drjqjh{--border-radius:0.5rem;}}</style><div class="css-1drjqjh"><style data-emotion="css 4ip44h">.css-4ip44h{position:absolute;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:2rem;}</style><span class="css-4ip44h"><svg width="20px" height="20px" viewBox="0 0 20 20" fill="#555555"><path d="M7.5455,2.25266666 C10.4271667,2.25933334 12.7605,4.54433334 12.7605,7.361 C12.7605,10.1776667 10.4271667,12.4626667 7.5455,12.4693625 C4.66383334,12.476 2.3205,10.201 2.30713677,7.38433334 C2.30383334,6.02433334 2.8555,4.71933334 3.83716666,3.756 C4.8205,2.79433334 6.1555,2.25266666 7.5455,2.25266666 L7.5455,2.25266666 Z M7.5455,14.7676666 C8.97883334,14.7743334 10.3855,14.3793334 11.5971667,13.6293334 L17.4171666,19.3176666 C17.7571666,19.6493334 18.3088334,19.6493334 18.6505,19.3176666 L19.7438334,18.2493334 C20.0838334,17.9143334 20.0838334,17.376 19.7438334,17.0426666 L13.9238334,11.3543333 C15.7788334,8.511 15.4271666,4.801 13.0705,2.33766666 C10.7121667,-0.124 6.94716666,-0.712333334 3.92216666,0.909333334 C0.897166666,2.531 -0.6195,5.951 0.237166666,9.21766666 C1.09383333,12.4843333 4.10716666,14.7693334 7.55716666,14.7676666 L7.5455,14.7676666 Z" id="Fill-1"></path></svg></span><style data-emotion="css 74ig1e">.css-74ig1e{display:block;min-height:1.75rem;padding:0.5rem;padding-left:2rem;width:100%;font-size:0.9375rem;line-height:1em;font-family:var(--anonymous-font);border:2px solid transparent;border-radius:0.5rem;}.css-74ig1e:focus{outline:none;border-color:var(--anonymous-nav-cta-color);}</style><input autoComplete="off" id="search" maxLength="500" name="q" placeholder="Explore our content" required="" type="search" class="css-74ig1e"/></div><style data-emotion="css 4lt94g">.css-4lt94g{--display:none;--size:3rem;bottom:0;position:absolute;right:0;top:0;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:var(--display);-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:var(--size);background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border:none;cursor:pointer;opacity:0.5;-webkit-transition:opacity var(--anonymous-header-transition);transition:opacity var(--anonymous-header-transition);}.css-4lt94g:focus{opacity:1;}@media (hover: hover){.css-4lt94g:hover{opacity:1;}}.css-4lt94g svg{--icon-size:1.25rem;display:block;height:var(--icon-size);margin:0;width:var(--icon-size);}@media (min-width: 1152px){.css-4lt94g{--display:flex;}}</style><button type="button" title="Close Search Form" data-testid="CloseSearch" class="css-4lt94g"><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-57kesc" focusable="false" aria-hidden="true" viewBox="0 0 8 8" fill="none"><g clip-path="url(#clip0_599_11575)"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.948112 0C0.408563 0 4.11814e-06 0.431923 4.11814e-06 0.95467C4.11814e-06 1.22411 0.111261 1.45183 0.267234 1.61743L2.58966 4.00047L0.27598 6.37752C0.108619 6.54684 0 6.77982 0 7.04533C0 7.56808 0.408558 8 0.948108 8C1.20588 8 1.43872 7.89659 1.60824 7.73661L1.61715 7.7282L3.99833 5.28676L6.37456 7.71975L6.37891 7.72411C6.5552 7.90088 6.79692 8 7.05189 8C7.59144 8 8 7.56808 8 7.04533C8 6.77589 7.88874 6.54817 7.73277 6.38257L5.41034 3.99953L7.72402 1.62247C7.89138 1.45316 8 1.22017 8 0.95467C8 0.431923 7.59144 0 7.05189 0C6.79412 0 6.56126 0.10342 6.39175 0.263408L6.38285 0.27181L4.00167 2.71324L1.62544 0.280255L1.62109 0.275892C1.4448 0.099117 1.20308 0 0.948112 0Z" fill="currentColor"></path></g><defs><clipPath id="clip0_599_11575"><rect width="8" height="8" fill="currentColor"></rect></clipPath></defs></svg></button></form></nav></div></div></header><main id="main" class="orm-ff-AnonymousShell-anonMain" data-testid="AnonymousShell"><style data-emotion="css t2rnx0">.css-t2rnx0{--header-offset:52px;display:grid;gap:0;grid-template-areas:'header' 'sidebar' 'content';}@media (min-width: 1200px){.css-t2rnx0{grid-template-areas:'sidebar header' 'sidebar content';grid-template-columns:22rem minmax(min-content, 100%);grid-template-rows:auto 1fr;height:calc(100dvh - var(--header-offset));overflow:hidden;}}@media (min-width: 1280px){.css-t2rnx0{--header-offset:72px;}}</style><div data-testid="streamlined-search" class="css-t2rnx0"><style data-emotion="css jzs69j">.css-jzs69j{grid-area:sidebar;}@media (min-width: 1200px){.css-jzs69j{position:-webkit-sticky;position:sticky;top:0;height:100%;padding:1rem 2rem;overflow-y:hidden;}}</style><aside data-identifier="area-sidebar" class="css-jzs69j"><style data-emotion="css 8y1bsd">@media (max-width: 1199.5px){.css-8y1bsd{padding:0.5rem;background:#f3f2f5;}}@media (min-width: 1200px){.css-8y1bsd{height:100%;padding:1rem 0.75rem;border:1px solid #f3f2f5;border-radius:1.25rem;overflow-y:auto;}}</style><div data-identifier="container-sidebar" class="css-8y1bsd"><style data-emotion="css u3tkuv">.css-u3tkuv{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;max-height:100%;overflow-y:auto;-ms-overflow-style:none;scrollbar-width:none;}@media (min-width: 1200px){.css-u3tkuv{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}}.css-u3tkuv::-webkit-scrollbar{display:none;}</style><div data-identifier="filters" class="css-u3tkuv"><style data-emotion="css b6xqfj">@media (min-width: 1200px){.css-b6xqfj{display:none;}}</style><style data-emotion="css 1hyeyha">.css-1hyeyha{margin:0;font-family:Gilroy;font-weight:500;font-size:0.8888rem;line-height:1.1252;letter-spacing:0;color:inherit;}@media (min-width: 1200px){.css-1hyeyha{display:none;}}</style><h2 class="MuiTypography-root MuiTypography-uiBodySmall css-1hyeyha">Loading...</h2><style data-emotion="css xf2uzt">.css-xf2uzt{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.25rem;color:#0071eb;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:transparent;border:none;cursor:pointer;}@media (min-width: 1200px){.css-xf2uzt{display:none;}}</style><button aria-controls="filters-dialog" class="css-xf2uzt">Filter <style data-emotion="css 16yepig">.css-16yepig{pointer-events:none;}</style><svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg" class="css-16yepig"><path d="M1.85773e-07 2.12807C1.85773e-07 2.372 0.190279 2.56975 0.425 2.56975H16.575C16.8097 2.56975 17 2.372 17 2.12807C17 1.88414 16.8097 1.6864 16.575 1.6864H0.425001C0.19028 1.6864 1.85773e-07 1.88414 1.85773e-07 2.12807Z" fill="currentColor"></path><path d="M15.6864 2.16822C15.6864 0.970747 14.7523 0 13.6 0C12.4477 0 11.5136 0.970747 11.5136 2.16822C11.5136 3.3657 12.4477 4.33645 13.6 4.33645C14.7523 4.33645 15.6864 3.3657 15.6864 2.16822Z" fill="white"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M13.6 0.963655C14.2401 0.963655 14.7591 1.50296 14.7591 2.16822C14.7591 2.83349 14.2401 3.37279 13.6 3.37279C12.9599 3.37279 12.4409 2.83349 12.4409 2.16822C12.4409 1.50296 12.9599 0.963655 13.6 0.963655ZM13.6 0C14.7523 0 15.6864 0.970747 15.6864 2.16822C15.6864 3.3657 14.7523 4.33645 13.6 4.33645C12.4477 4.33645 11.5136 3.3657 11.5136 2.16822C11.5136 0.970747 12.4477 0 13.6 0Z" fill="currentColor"></path><path d="M17 7.54015C17 7.29622 16.8097 7.09848 16.575 7.09848L0.425001 7.09847C0.19028 7.09847 2.052e-08 7.29622 0 7.54015C-2.052e-08 7.78408 0.190279 7.98183 0.425 7.98183L16.575 7.98183C16.8097 7.98183 17 7.78408 17 7.54015Z" fill="currentColor"></path><path d="M1.31364 7.5C1.31364 8.69748 2.24773 9.66822 3.4 9.66822C4.55227 9.66822 5.48636 8.69748 5.48636 7.5C5.48636 6.30252 4.55227 5.33177 3.4 5.33177C2.24773 5.33177 1.31364 6.30252 1.31364 7.5Z" fill="white"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M3.4 8.70457C2.75985 8.70457 2.24091 8.16526 2.24091 7.5C2.24091 6.83473 2.75985 6.29543 3.4 6.29543C4.04015 6.29543 4.55909 6.83473 4.55909 7.5C4.55909 8.16526 4.04015 8.70457 3.4 8.70457ZM3.4 9.66822C2.24773 9.66822 1.31364 8.69748 1.31364 7.5C1.31364 6.30252 2.24773 5.33177 3.4 5.33177C4.55227 5.33177 5.48636 6.30252 5.48636 7.5C5.48636 8.69748 4.55227 9.66822 3.4 9.66822Z" fill="currentColor"></path><path d="M17 12.8719C17 12.628 16.8097 12.4303 16.575 12.4303L0.425001 12.4303C0.19028 12.4303 2.052e-08 12.628 0 12.8719C-2.052e-08 13.1159 0.190279 13.3136 0.425 13.3136L16.575 13.3136C16.8097 13.3136 17 13.1159 17 12.8719Z" fill="currentColor"></path><path d="M7.29954 12.8318C7.29954 14.0293 8.23363 15 9.3859 15C10.5382 15 11.4723 14.0293 11.4723 12.8318C11.4723 11.6343 10.5382 10.6636 9.3859 10.6636C8.23363 10.6636 7.29954 11.6343 7.29954 12.8318Z" fill="white"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M9.3859 14.0363C8.74575 14.0363 8.22681 13.497 8.22681 12.8318C8.22681 12.1665 8.74575 11.6272 9.3859 11.6272C10.026 11.6272 10.545 12.1665 10.545 12.8318C10.545 13.497 10.026 14.0363 9.3859 14.0363ZM9.3859 15C8.23363 15 7.29954 14.0293 7.29954 12.8318C7.29954 11.6343 8.23363 10.6636 9.3859 10.6636C10.5382 10.6636 11.4723 11.6343 11.4723 12.8318C11.4723 14.0293 10.5382 15 9.3859 15Z" fill="currentColor"></path></svg></button><style data-emotion="css wry49w">.css-wry49w{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.25rem;margin:0;max-height:none;max-width:none;width:100%;border:none;}.css-wry49w::backdrop{background:radial-gradient( 101.93% 101.93% at 47.36% -1.93%, rgba(165, 163, 163, 0.9) 0%, rgba(46, 39, 39, 0.9) 100% );}@media (max-width: 1199.5px){.css-wry49w{height:100%;padding:0 1.5rem;opacity:0;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;}.css-wry49w[open]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;opacity:1;}}@media (max-width: 749.5px){.css-wry49w{inset:0;width:100%;}}@media (min-width: 750px) and (max-width: 1199.5px){.css-wry49w{max-width:25rem;}}@media (min-width: 1200px){.css-wry49w{position:static;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0;}.css-wry49w::backdrop{display:none;}}</style><style data-emotion="css 183rlqz">.css-183rlqz{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.25rem;margin:0;max-height:none;max-width:none;width:100%;border:none;}.css-183rlqz::backdrop{background:radial-gradient( 101.93% 101.93% at 47.36% -1.93%, rgba(165, 163, 163, 0.9) 0%, rgba(46, 39, 39, 0.9) 100% );}@media (max-width: 1199.5px){.css-183rlqz{height:100%;padding:0 1.5rem;opacity:0;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;}.css-183rlqz[open]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;opacity:1;}}@media (max-width: 749.5px){.css-183rlqz{inset:0;width:100%;}}@media (min-width: 750px) and (max-width: 1199.5px){.css-183rlqz{max-width:25rem;}}@media (min-width: 1200px){.css-183rlqz{position:static;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0;}.css-183rlqz::backdrop{display:none;}}</style><dialog id="filters-dialog" class="css-183rlqz"><style data-emotion="css 18bbo46">.css-18bbo46{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;padding:1.5rem 0 1rem;}@media (min-width: 1200px){.css-18bbo46{display:none;}}</style><header class="css-18bbo46"><style data-emotion="css 11dt3vo">@media (min-width: 750px) and (max-width: 1199.5px){.css-11dt3vo{color:#fff;position:fixed;right:1.5rem;top:2.5rem;}.css-11dt3vo svg{height:1.5rem;width:auto;}}</style><style data-emotion="css kuup85">.css-kuup85{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.25rem;color:#0071eb;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:transparent;border:none;cursor:pointer;}@media (min-width: 1200px){.css-kuup85{display:none;}}@media (min-width: 750px) and (max-width: 1199.5px){.css-kuup85{color:#fff;position:fixed;right:1.5rem;top:2.5rem;}.css-kuup85 svg{height:1.5rem;width:auto;}}</style><button aria-label="Close filters menu" title="Close filters menu" aria-controls="filters-dialog" class="css-kuup85"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" style="pointer-events:none"><path d="M0.706972 0.706984C1.0975 0.31646 1.73066 0.31646 2.12119 0.706985L13.4349 12.0207C13.8254 12.4112 13.8254 13.0444 13.4349 13.4349C13.0444 13.8254 12.4112 13.8254 12.0207 13.4349L0.706973 2.1212C0.316448 1.73067 0.316448 1.09751 0.706972 0.706984Z" fill="currentColor"></path><path d="M13.4349 0.706956C13.8254 1.09748 13.8254 1.73064 13.4349 2.12117L2.12117 13.4349C1.73065 13.8254 1.09748 13.8254 0.706956 13.4349C0.316431 13.0444 0.316431 12.4112 0.706956 12.0207L12.0207 0.706956C12.4112 0.316432 13.0444 0.316431 13.4349 0.706956Z" fill="currentColor"></path></svg></button></header><style data-emotion="css i1xym6">.css-i1xym6{color:#0071eb;font-family:Gilroy;font-weight:500;font-size:0.8888rem;line-height:1.1252;letter-spacing:0;font-weight:700;-webkit-align-self:end;-ms-flex-item-align:end;align-self:end;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:transparent;border:none;cursor:pointer;margin-bottom:0.5rem;-webkit-text-decoration:underline;text-decoration:underline;}.css-i1xym6:disabled{opacity:0.5;cursor:not-allowed;}</style><button class="css-i1xym6">Reset Filters</button><div data-testid="formats" class="css-0"><style data-emotion="css 942wt7">.css-942wt7{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:0.625rem 1rem;width:100%;color:#54595e;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:#f3f2f5;border:none;cursor:pointer;-webkit-transition:color 250ms,background 250ms,box-shadow 250ms;transition:color 250ms,background 250ms,box-shadow 250ms;}.css-942wt7:focus-visible{background-color:#cacbd680;}.css-942wt7:disabled{background-color:#f3f2f5;cursor:not-allowed;}.css-942wt7:disabled span,.css-942wt7:disabled div{color:#cacbd6;}@media (hover: hover){.css-942wt7:hover{background-color:#cacbd680;}.css-942wt7:hover:disabled{background-color:#f3f2f5;}}</style><button data-testid="formats-toggle" class="css-942wt7"><style data-emotion="css 6nwm6w">.css-6nwm6w{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;-webkit-flex:1;-ms-flex:1;flex:1;color:inherit;text-align:left;}</style><span class="css-6nwm6w">Formats</span><style data-emotion="css co1etj">.css-co1etj{--size:1rem;position:relative;height:var(--size);width:var(--size);pointer-events:none;}</style><div class="css-co1etj"><style data-emotion="css wj34j0">.css-wj34j0{left:50%;position:absolute;top:50%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;height:var(--size);width:var(--size);-webkit-transform:translate(-50%, -50%);-moz-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);}</style><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><style data-emotion="css rcxlup">.css-rcxlup{display:grid;grid-template-rows:0fr;padding-top:0;overflow:hidden;-webkit-transition:grid-template-rows 250ms;transition:grid-template-rows 250ms;}</style><div class="css-rcxlup"></div></div><div data-testid="topics-on-topics-page" class="css-0"><button data-testid="topics-on-topics-page-toggle" class="css-942wt7"><span class="css-6nwm6w">Skills</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="publication-date-filter" class="css-0"><button data-testid="publication-date-filter-toggle" class="css-942wt7"><span class="css-6nwm6w">Publication date</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="ratings" class="css-0"><button data-testid="ratings-toggle" class="css-942wt7"><span class="css-6nwm6w">Ratings</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="publishers" class="css-0"><button data-testid="publishers-toggle" class="css-942wt7"><span class="css-6nwm6w">Publishers</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="content-level" class="css-0"><button data-testid="content-level-toggle" class="css-942wt7"><span class="css-6nwm6w">Level</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="language-filter" class="css-0"><button data-testid="language-filter-toggle" class="css-942wt7"><span class="css-6nwm6w">Language</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div><div data-testid="duration-filter" class="css-0"><button data-testid="duration-filter-toggle" class="css-942wt7"><span class="css-6nwm6w">Duration</span><div class="css-co1etj"><div class="css-wj34j0" style="opacity:0"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M6 0.75C5.35567 0.75 4.83334 1.27233 4.83334 1.91667V4.83333H1.91667C1.27233 4.83333 0.75 5.35567 0.75 6C0.75 6.64433 1.27233 7.16667 1.91667 7.16667H4.83334V10.0833C4.83334 10.7277 5.35567 11.25 6 11.25C6.64433 11.25 7.16667 10.7277 7.16667 10.0833V7.16667H10.0833C10.7277 7.16667 11.25 6.64433 11.25 6C11.25 5.35567 10.7277 4.83333 10.0833 4.83333H7.16667V1.91667C7.16667 1.27233 6.64433 0.75 6 0.75Z"></path></svg></div></div></button><div class="css-rcxlup"></div></div></dialog></div></div></aside><style data-emotion="css sv0m87">.css-sv0m87{grid-area:content;max-width:92rem;}@media (min-width: 1200px){.css-sv0m87{position:-webkit-sticky;position:sticky;top:0;height:100%;padding:1rem 2rem 1rem 0;overflow-y:hidden;}}</style><section data-identifier="content-area" class="css-sv0m87"><style data-emotion="css tw0vwn">.css-tw0vwn{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:100vw;padding:0;width:100%;scrollbar-color:#f3f2f5 transparent;overflow-y:scroll;scrollbar-width:thin;overflow:hidden;}@media (min-width: 1200px){.css-tw0vwn{height:100%;padding:0;}}</style><div data-identifier="content-container" class="css-tw0vwn"><style data-emotion="css cfumbj">.css-cfumbj{--columns:1fr;}@media (min-width: 1200px){.css-cfumbj{overflow-y:auto;}}@media (min-width: 1500px){.css-cfumbj{display:grid;gap:0 2.5rem;grid-template-areas:'toggle toggle' 'definition rightSidebar' 'mostPopular rightSidebar' 'header rightSidebar' 'results rightSidebar' 'footer rightSidebar';grid-template-columns:var(--columns);}}</style><div data-identifier="content-grid" id="search-main-content" class="css-cfumbj"><style data-emotion="css n7j862">.css-n7j862{grid-area:header;width:100%;color:#fff;background-color:#0071eb;}@media (min-width: 1200px){.css-n7j862{padding:0 1.5rem;border-radius:1.25rem 1.25rem 0 0;}}</style><header data-identifier="area-header" class="css-n7j862"><style data-emotion="css 112jqer">.css-112jqer{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}</style><div class="css-112jqer"><style data-emotion="css h1r94w">.css-h1r94w{-webkit-flex:1;-ms-flex:1;flex:1;}@media (max-width: 1199.5px){.css-h1r94w{display:none;}}</style><style data-emotion="css 1f6l09m">.css-1f6l09m{margin:0;font-family:Gilroy;font-weight:500;font-size:1.00rem;line-height:1.25;letter-spacing:0.005em;color:inherit;-webkit-flex:1;-ms-flex:1;flex:1;}@media (max-width: 1199.5px){.css-1f6l09m{display:none;}}</style><h2 class="MuiTypography-root MuiTypography-uiBody css-1f6l09m">Loading...</h2><style data-emotion="css cssveg">.css-cssveg{position:relative;}</style><div data-testid="sort" class="css-cssveg"><style data-emotion="css 1wtn285">.css-1wtn285{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.5rem;padding:clamp(0.625rem, 1.5vw, 1rem) clamp(0.5rem, 1.5vw, 1.5rem);width:100%;color:#fff;font-size:clamp(0.75rem, 1.5vw, 1rem);-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:#0071eb;border:none;cursor:pointer;-webkit-transition:color 250ms,background 250ms;transition:color 250ms,background 250ms;}.css-1wtn285:focus{background:#004492;}@media (hover: hover){.css-1wtn285:hover{background:#004492;}}</style><button data-testid="sort-toggle" class="css-1wtn285"><style data-emotion="css jn7581">.css-jn7581{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-flex:1;-ms-flex:1;flex:1;color:#fff;text-align:left;}</style><span class="css-jn7581">Sort by: Relevance</span><svg width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.3002 1.6001L6.5002 6.4001L1.7002 1.6001" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div><div data-testid="per-page" class="css-cssveg"><button data-testid="per-page-toggle" class="css-1wtn285"><span class="css-jn7581">Results Per Page (100)</span><svg width="13" height="8" viewBox="0 0 13 8" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.3002 1.6001L6.5002 6.4001L1.7002 1.6001" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></button></div></div></header><style data-emotion="css 15opj3g">.css-15opj3g{grid-area:results;padding:2rem 1rem;border:1px solid #f3f2f5;}</style><div class="css-15opj3g"><style data-emotion="css g66qkj">.css-g66qkj{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}</style><article data-testid="SkeletonSearchResult" class="css-g66qkj"><style data-emotion="css rndbm8">.css-rndbm8{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}</style><header class="css-rndbm8"><style data-emotion="css 1bs6230 animation-c7515d">.css-1bs6230{display:block;background-color:rgba(48, 47, 42, 0.11);height:1.2em;border-radius:4px;-webkit-animation:animation-c7515d 2s ease-in-out 0.5s infinite;animation:animation-c7515d 2s ease-in-out 0.5s infinite;}@-webkit-keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}@keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}</style><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><style data-emotion="css 18hcajm">.css-18hcajm{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-bottom:2.25rem;margin-top:1rem;}</style><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><style data-emotion="css 1rrwnfc">.css-1rrwnfc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-left:0.875rem;}</style><div class="css-1rrwnfc"><style data-emotion="css u7rrdo animation-c7515d">.css-u7rrdo{display:block;background-color:rgba(48, 47, 42, 0.11);height:1.2em;border-radius:4px;-webkit-animation:animation-c7515d 2s ease-in-out 0.5s infinite;animation:animation-c7515d 2s ease-in-out 0.5s infinite;-webkit-align-self:start;-ms-flex-item-align:start;align-self:start;margin-bottom:1.25rem;}@-webkit-keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}@keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}</style><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><style data-emotion="css 197wjub animation-c7515d">.css-197wjub{display:block;background-color:rgba(48, 47, 42, 0.11);height:1.2em;border-radius:4px;-webkit-animation:animation-c7515d 2s ease-in-out 0.5s infinite;animation:animation-c7515d 2s ease-in-out 0.5s infinite;margin-bottom:0.5rem;}@-webkit-keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}@keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}</style><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><style data-emotion="css zoejlj animation-c7515d">.css-zoejlj{display:block;background-color:rgba(48, 47, 42, 0.11);height:1.2em;border-radius:4px;-webkit-animation:animation-c7515d 2s ease-in-out 0.5s infinite;animation:animation-c7515d 2s ease-in-out 0.5s infinite;margin-top:auto;}@-webkit-keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}@keyframes animation-c7515d{0%{opacity:1;}50%{opacity:0.4;}100%{opacity:1;}}</style><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><style data-emotion="css orgal9">.css-orgal9{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;border-top:2px solid;border-color:#f3f2f5;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding-top:0.25rem;}</style><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article><article data-testid="SkeletonSearchResult" class="css-g66qkj"><header class="css-rndbm8"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4rem;height:1.25rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.5rem;height:1.25rem"></span></header><section class="css-18hcajm"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:8.125rem;height:8.125rem"></span><div class="css-1rrwnfc"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-u7rrdo" style="width:50rem;height:1.125rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-197wjub" style="width:15.875rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:18.5rem;height:0.75rem"></span><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-zoejlj" style="width:11.875rem;height:0.75rem"></span></div></section><footer class="css-orgal9"><span class="MuiSkeleton-root MuiSkeleton-rounded MuiSkeleton-pulse css-1bs6230" style="width:4.5rem;height:0.75rem"></span></footer></article></div><style data-emotion="css 1pd01q6">.css-1pd01q6{grid-area:footer;padding:2rem 0;}</style><footer data-identifier="area-footer" class="css-1pd01q6"><style data-emotion="css 1nqes0h">.css-1nqes0h{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:clamp(1rem, 2vw, 2rem);color:#0071eb;}</style><div data-identifier="pagination-footer" class="css-1nqes0h"><style data-emotion="css tdmi93">.css-tdmi93{-webkit-flex:0 0 max-content;-ms-flex:0 0 max-content;flex:0 0 max-content;color:inherit;}</style><style data-emotion="css 1oh79xw">.css-1oh79xw{margin:0;font-family:Gilroy;font-weight:700;font-size:0.8888rem;line-height:1.4065;letter-spacing:0.005em;color:#302f2a;-webkit-flex:0 0 max-content;-ms-flex:0 0 max-content;flex:0 0 max-content;color:inherit;}</style><div class="MuiTypography-root MuiTypography-h6 css-1oh79xw" data-identifier="pagination-per-page">0<!-- --> - <!-- -->NaN<!-- --> of </div><style data-emotion="css 3r5gha">.css-3r5gha{--pagination-gap:0.3rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-3r5gha ul{width:100%;gap:var(--pagination-gap);}.css-3r5gha li{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-3r5gha ul{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (min-width:960px){.css-3r5gha{--pagination-gap:0.5rem;}}</style><style data-emotion="css ddf1h9">.css-ddf1h9{--pagination-gap:0.3rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-ddf1h9 ul{width:100%;gap:var(--pagination-gap);}.css-ddf1h9 li{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-ddf1h9 ul{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}@media (min-width:960px){.css-ddf1h9{--pagination-gap:0.5rem;}}</style><nav aria-label="pagination navigation" class="MuiPagination-root MuiPagination-text css-ddf1h9"><style data-emotion="css nhb8h9">.css-nhb8h9{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;margin:0;list-style:none;}</style><ul class="MuiPagination-ul css-nhb8h9"><li><style data-emotion="css iorzz9">.css-iorzz9{padding:0;color:#0071eb;}.css-iorzz9[disabled]{color:#0071eb;opacity:0.5;}</style><style data-emotion="css 1p71o7o">.css-1p71o7o{text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.7142857142857142rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:0;color:#0071eb;}.css-1p71o7o:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-1p71o7o:hover{background-color:transparent;}}@media (hover: none){.css-1p71o7o:hover{background-color:transparent;}}.css-1p71o7o.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.css-1p71o7o[disabled]{color:#0071eb;opacity:0.5;}</style><style data-emotion="css bbo0jn">.css-bbo0jn{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.7142857142857142rem;padding:8px;border-radius:50%;overflow:visible;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;padding:0;color:#0071eb;}.css-bbo0jn::-moz-focus-inner{border-style:none;}.css-bbo0jn.Mui-disabled{pointer-events:none;cursor:default;}@media print{.css-bbo0jn{-webkit-print-color-adjust:exact;color-adjust:exact;}}.css-bbo0jn:hover{background-color:rgba(0, 0, 0, 0.04);}@media (hover: none){.css-bbo0jn:hover{background-color:transparent;}}@media (hover: none){.css-bbo0jn:hover{background-color:transparent;}}.css-bbo0jn.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.css-bbo0jn[disabled]{color:#0071eb;opacity:0.5;}</style><button class="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-colorStandard MuiIconButton-sizeMedium css-bbo0jn" tabindex="-1" type="button" disabled="" data-testid="PreviousPage" style="margin-right:0.5rem" aria-label="Go to previous page" shape="circular" variant="text"><style data-emotion="css h8rt75">.css-h8rt75{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.7142857142857142rem;font-size:16px;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-h8rt75" focusable="false" aria-hidden="true" viewBox="0 0 12 16" fill="none"><path d="M0 8L12 0V16L0 8Z" fill="currentColor"></path></svg></button></li><li><style data-emotion="css 1impcnd">.css-1impcnd{--size:1.5rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:var(--size);-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:0;width:var(--size);color:#0071eb;border:1px solid #fff;border-radius:50%;-webkit-transition:background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border-color 200ms cubic-bezier(0.4, 0, 0.2, 1),color 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border-color 200ms cubic-bezier(0.4, 0, 0.2, 1),color 200ms cubic-bezier(0.4, 0, 0.2, 1);}.css-1impcnd[disabled]{opacity:0.5;pointer-events:none;}.css-1impcnd[aria-current],.css-1impcnd:is(:focus, :hover){color:#fff;background-color:#0071eb;border-color:#0071eb;-webkit-transition:background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),color 125ms cubic-bezier(0.08, 0.28, 0.12, 1);transition:background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),color 125ms cubic-bezier(0.08, 0.28, 0.12, 1);}</style><style data-emotion="css xv3bdi">.css-xv3bdi{-webkit-text-decoration:none;text-decoration:none;cursor:pointer;-webkit-transition:color 200ms cubic-bezier(0.4, 0, 0.2, 1),background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 200ms cubic-bezier(0.4, 0, 0.2, 1),background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border 200ms cubic-bezier(0.4, 0, 0.2, 1);--size:1.5rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:var(--size);-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;margin:0;padding:0;width:var(--size);color:#0071eb;border:1px solid #fff;border-radius:50%;-webkit-transition:background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border-color 200ms cubic-bezier(0.4, 0, 0.2, 1),color 200ms cubic-bezier(0.4, 0, 0.2, 1);transition:background-color 200ms cubic-bezier(0.4, 0, 0.2, 1),border-color 200ms cubic-bezier(0.4, 0, 0.2, 1),color 200ms cubic-bezier(0.4, 0, 0.2, 1);}.css-xv3bdi:is(:focus, :hover){-webkit-transition:color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border 125ms cubic-bezier(0.08, 0.28, 0.12, 1);transition:color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border 125ms cubic-bezier(0.08, 0.28, 0.12, 1);}.css-xv3bdi[disabled]{opacity:0.5;pointer-events:none;}.css-xv3bdi[aria-current],.css-xv3bdi:is(:focus, :hover){color:#fff;background-color:#0071eb;border-color:#0071eb;-webkit-transition:background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),color 125ms cubic-bezier(0.08, 0.28, 0.12, 1);transition:background-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),border-color 125ms cubic-bezier(0.08, 0.28, 0.12, 1),color 125ms cubic-bezier(0.08, 0.28, 0.12, 1);}</style><a href="page=1" data-testid="page-1" selected="" disabled="" aria-current="true" color="standard" aria-label="page 1" shape="circular" class="css-xv3bdi"><style data-emotion="css 2hhz9b">.css-2hhz9b{color:inherit;}</style><style data-emotion="css 1gays7a">.css-1gays7a{margin:0;font-family:Gilroy;font-weight:700;font-size:0.8888rem;line-height:1.1252;letter-spacing:0.005em;color:#302f2a;color:inherit;}</style><span class="MuiTypography-root MuiTypography-linkSmall css-1gays7a">1</span></a></li><li><button class="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-colorStandard MuiIconButton-sizeMedium css-bbo0jn" tabindex="-1" type="button" disabled="" data-testid="NextPage" style="margin-left:0.5rem" aria-label="Go to next page" shape="circular" variant="text"><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-h8rt75" focusable="false" aria-hidden="true" viewBox="0 0 12 16" fill="none"><path d="M12 8L0 0V16L12 8Z" fill="currentColor"></path></svg></button></li></ul></nav></div></footer></div></div></section><style data-emotion="css 1td2lfr">.css-1td2lfr{position:absolute;left:-10000px;top:auto;height:1px;width:1px;overflow:hidden;}</style><div role="region" aria-live="polite" class="css-1td2lfr">Displaying 0 to NaN of undefined results</div></div></main><style data-emotion="css 1ej67qd">.css-1ej67qd{--block-padding:2.5rem;--footer-font-size:0.875rem;--footer-text-color:#515151;position:relative;padding-block:var(--block-padding);color:var(--footer-text-color);font-family:var(--anonymous-font);background-color:#f1f1f1;box-sizing:border-box;overflow:hidden;}.css-1ej67qd *,.css-1ej67qd *::after,.css-1ej67qd *::before{box-sizing:border-box;}.css-1ej67qd::before{content:'';display:block;position:absolute;top:0;right:0;z-index:0;width:800px;max-width:100%;height:800px;background:transparent url(https://cdn.oreillystatic.com/oreilly/images/odot_white_578x212.svg) right top no-repeat;-webkit-background-size:contain;background-size:contain;-webkit-background-position:60px -30px;background-position:60px -30px;opacity:0.5;}.css-1ej67qd>*{position:relative;}.css-1ej67qd a{color:var(--footer-text-color);}@media (hover: hover){.css-1ej67qd a:hover{color:var(--footer-text-color);}}.css-1ej67qd h2{margin:0;font-size:var(--footer-font-size);text-transform:uppercase;}.css-1ej67qd a,.css-1ej67qd p{font-size:var(--footer-font-size);line-height:1.5;}</style><footer data-testid="Footer" class="css-1ej67qd"><style data-emotion="css 13lnwvr">.css-13lnwvr{--gap:1.5rem;max-width:var(--anonymous-max-width);padding-inline:var(--anonymous-inline-padding);width:100%;}@media (min-width: 1152px){.css-13lnwvr{--gap:3rem;}}</style><div class="css-13lnwvr"><style data-emotion="css t7ra8j">.css-t7ra8j{--grid:1fr;display:grid;gap:1.5rem;grid-template-columns:var(--grid);margin-bottom:2rem;}@media (min-width: 600px){.css-t7ra8j{--grid:repeat(2, 1fr);}}@media (min-width: 1152px){.css-t7ra8j{--grid:2fr 1fr;}}</style><section aria-label="Company information" class="css-t7ra8j"><style data-emotion="css w3qxlp">.css-w3qxlp{--grid:1fr;display:grid;gap:1rem;grid-template-columns:var(--grid);}@media (min-width: 1152px){.css-w3qxlp{--grid:repeat(3, 1fr);}}</style><nav class="css-w3qxlp"><style data-emotion="css 1h9sy3w">.css-1h9sy3w{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.5rem;}.css-1h9sy3w a{-webkit-text-decoration:none;text-decoration:none;}</style><section class="css-1h9sy3w"><h2><a href="/about/">About O'Reilly</a></h2><style data-emotion="css 11m3jp3">.css-11m3jp3{margin:0;padding:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.5rem;list-style:none;}</style><ul class="css-11m3jp3"><li><a href="/work-with-us.html">Teach/write/train</a></li><li><a href="/careers/">Careers</a></li><li><a href="/press/">Press releases</a></li><li><a href="/press/media-coverage.html">Media coverage</a></li><li><a href="/partner/signup.csp">Community partners</a></li><li><a href="/affiliates/">Affiliate program</a></li><li><a href="/online-learning/rfp.html">Submit an RFP</a></li><li><a href="/diversity/">Diversity</a></li><li><a href="/content-marketing-solutions.html">O’Reilly for marketers</a></li></ul></section><section class="css-1h9sy3w"><h2><a href="https://www.oreilly.com/online-learning/support/">Support</a></h2><ul class="css-11m3jp3"><li><a href="/contact.html">Contact us</a></li><li><a href="/emails/newsletters/">Newsletters</a></li><li><a href="/privacy.html">Privacy policy</a></li></ul><style data-emotion="css 1auufs1">.css-1auufs1{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:0.5rem;margin:0;padding:0;list-style:none;}</style><ul class="css-1auufs1"><li><style data-emotion="css k9l8yw">.css-k9l8yw{--size:2rem;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;height:var(--size);width:var(--size);background-color:#d30000;border-radius:50%;overflow:hidden;}.css-k9l8yw[title='YouTube']{background-color:white;}.css-k9l8yw svg{max-height:1.5rem;max-width:1rem;fill:white;}.css-k9l8yw[title='YouTube'] svg{height:2rem;max-height:none;max-width:none;width:2rem;fill:#d30000;}</style><a href="https://twitter.com/oreillymedia" title="Twitter" class="css-k9l8yw"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></a></li><li><a href="https://www.linkedin.com/company/oreilly-media" title="LinkedIn" class="css-k9l8yw"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></a></li><li><a href="https://www.youtube.com/user/OreillyMedia" title="YouTube" class="css-k9l8yw"><svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32.25 32.25"><path d="M18.35,18.68a.89.89,0,0,0-.86.63V16.94h-1v7.59h1v-.59a.92.92,0,0,0,.89.74c.52,0,.86-.36,1-1.07a8.56,8.56,0,0,0,.14-1.9,10.47,10.47,0,0,0-.12-1.93C19.21,19.05,18.87,18.68,18.35,18.68Zm.09,4.14c-.05.52-.2.77-.45.77s-.43-.21-.49-.63a7.22,7.22,0,0,1,0-1c0-.72,0-1.14,0-1.26.07-.58.23-.88.51-.88s.4.27.46.79c0,.09,0,.47,0,1.13S18.46,22.71,18.44,22.82ZM8.61,18.19H9.86v6.34H11V18.19H12.2V16.94H8.61Zm7.71-6.12c.27,0,.43-.22.49-.66,0-.09,0-.45,0-1.07V9.78c0-.58,0-.93,0-1-.07-.43-.23-.65-.48-.65s-.41.19-.48.57a8.79,8.79,0,0,0,0,1v.53c0,.71,0,1.09,0,1.16C15.88,11.82,16.05,12.07,16.32,12.07Zm-1.74,10.4a2.92,2.92,0,0,1-.06.71c-.07.25-.2.37-.4.37s-.32-.11-.38-.34a2.63,2.63,0,0,1-.05-.66V18.83h-1v4.48c0,.91.33,1.37,1,1.37A1,1,0,0,0,14.6,24v.57h1v-5.7h-1Zm7.1-3.79a1.35,1.35,0,0,0-1.22.59,2.48,2.48,0,0,0-.3,1.07c0,.23,0,.61,0,1.16s0,1.13,0,1.37a2.93,2.93,0,0,0,.35,1.27,1.25,1.25,0,0,0,1.14.54,1.36,1.36,0,0,0,1.13-.45,2.29,2.29,0,0,0,.37-1.43s0-.07,0-.11v-.12h-1c0,.75-.17,1.12-.51,1.12s-.38-.18-.45-.56a4.68,4.68,0,0,1-.06-.9c0-.18,0-.31,0-.37h2v-.43a4.86,4.86,0,0,0-.3-2.11A1.28,1.28,0,0,0,21.68,18.68ZM22.15,21h-1c0-.05,0-.11,0-.16v-.08a1.64,1.64,0,0,1,.11-.8.39.39,0,0,1,.38-.23.42.42,0,0,1,.43.33,2.32,2.32,0,0,1,.07.7Zm-6-21A16.13,16.13,0,1,0,32.25,16.12,16.12,16.12,0,0,0,16.12,0Zm2.51,7.2h1V11a2.52,2.52,0,0,0,.06.66c.06.23.18.34.38.34s.34-.12.41-.37a3.76,3.76,0,0,0,.05-.71V7.2h1v5.74h-1v-.57a1,1,0,0,1-.93.72c-.66,0-1-.46-1-1.38ZM15,8a1.29,1.29,0,0,1,1.33-.92A1.3,1.3,0,0,1,17.65,8a6.77,6.77,0,0,1,.23,2.1,6.77,6.77,0,0,1-.23,2.1,1.3,1.3,0,0,1-1.32.92A1.29,1.29,0,0,1,15,12.17a6.77,6.77,0,0,1-.23-2.1A6.86,6.86,0,0,1,15,8ZM11.45,5.3l.89,2.87.88-2.87H14.4L12.88,9.7v3.24h-1.1V9.7L10.24,5.3ZM24.93,23.91a3,3,0,0,1-3,3h-12a3,3,0,0,1-3-3V18.05a3,3,0,0,1,3-3h12a3,3,0,0,1,3,3Z"></path></svg></a></li></ul></section><section class="css-1h9sy3w"><h2><span>International</span></h2><ul class="css-11m3jp3"><li><a href="/anz/">Australia & New Zealand</a></li><li><a href="https://oreilly.hk/">Hong Kong & Taiwan</a></li><li><a href="https://oreillylearning.in/">India</a></li><li><a href="https://oreilly.id/">Indonesia</a></li><li><a href="https://www.oreilly.co.jp/index.shtml">Japan</a></li></ul></section></nav><style data-emotion="css azmimp">.css-azmimp{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:2rem;}</style><div class="css-azmimp"><style data-emotion="css 13y8hl">.css-13y8hl{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.5rem;}.css-13y8hl h2,.css-13y8hl p{margin:0;}.css-13y8hl div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:0.5rem;}.css-13y8hl img{display:block;max-height:2.5rem;max-width:100%;}</style><section class="css-13y8hl"><h2>Download the O'Reilly App</h2><p>Take O'Reilly with you and learn anywhere, anytime on your phone and tablet.</p><div><a href="https://itunes.apple.com/us/app/safari-to-go/id881697395" title="Download our iPhone App" data-testid="Apple app store"><img src="https://cdn.oreillystatic.com/oreilly/images/app-store-logo.png" alt="Apple app store"/></a><a href="https://play.google.com/store/apps/details?id=com.safariflow.queue" title="Download our Android App" data-testid="Google play store"><img src="https://cdn.oreillystatic.com/oreilly/images/google-play-logo.png" alt="Google play store"/></a></div></section><section class="css-13y8hl"><h2>Watch on your big screen</h2><p>View all O'Reilly videos, Superstream events, and Meet the Expert sessions on your home TV.</p><div><a href="https://channelstore.roku.com/details/c8a2d0096693eb9455f6ac165003ee06/oreilly" title="Download for Roku Players and TVs" data-testid="Roku Players and TVs"><img src="https://cdn.oreillystatic.com/oreilly/images/roku-tv-logo.png" alt="Roku Players and TVs"/></a><a href="https://www.amazon.com/OReilly-Media-Inc/dp/B087YYHL5C/ref=sr_1_2?dchild=1&amp;keywords=oreilly&amp;qid=1604964116&amp;s=mobile-apps&amp;sr=1-2" title="Download in the Amazon App Store" data-testid="Amazon appstore"><img src="https://cdn.oreillystatic.com/oreilly/images/amazon-appstore-logo.png" alt="Amazon appstore"/></a></div></section></div><style data-emotion="css 6eku2d">.css-6eku2d{padding-bottom:2rem;border-bottom:1px dashed var(--footer-text-color);}@media (min-width: 600px){.css-6eku2d{grid-column:span 2;}}@media (min-width: 1152px){.css-6eku2d{grid-column:span 3;}}</style><div class="css-6eku2d"><h2><a href="https://www.oreilly.com/privacy.html?donotsell=show">Do not sell my personal information</a></h2></div></section><style data-emotion="css 1vrebv9">.css-1vrebv9{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0;}.css-1vrebv9 svg{height:1.25rem;margin-bottom:1.25rem;}.css-1vrebv9 a,.css-1vrebv9 p{margin:0;font-size:0.75rem;line-height:1.5;}.css-1vrebv9 a{font-weight:bold;-webkit-text-decoration:none;text-decoration:none;}.css-1vrebv9 p+p{margin-top:0.25rem;}</style><div class="css-1vrebv9"><style data-emotion="css 112jqer">.css-112jqer{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}</style><a href="//www.oreilly.com" title="Visit Homepage" class="css-112jqer"><style data-emotion="css nkdw1c">.css-nkdw1c{--max-height:1.5rem;display:block;margin:0;height:var(--max-height);}@media (min-width: 600px){.css-nkdw1c{--max-height:1.75rem;}}</style><svg viewBox="0 0 198 36" class="css-nkdw1c"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="oreilly_logo_mark_red_d30000" fill="#D30000" fill-rule="nonzero"><path d="M64.5161,20.2636 C68.4431,19.0876 71.3061,15.4576 71.3081,11.1476 C71.3061,5.8876 67.0461,1.6276 61.7861,1.6256 L45.3831,1.6256 L45.3831,34.2716 L50.8251,34.2716 L50.8251,20.6696 L58.4031,20.6696 L66.6121,34.2716 L72.9581,34.2716 L64.5161,20.2636 Z M50.8251,15.2266 L50.8251,7.0646 L61.7861,7.0646 C64.0381,7.0686 65.8631,8.8926 65.8661,11.1476 C65.8631,13.3976 64.0381,15.2226 61.7861,15.2266 L50.8251,15.2266 Z M41.5274,5.0991 C41.5274,7.3121 39.7344,9.1071 37.5224,9.1071 C35.3104,9.1071 33.5164,7.3121 33.5164,5.0991 C33.5164,2.8871 35.3104,1.0941 37.5224,1.0941 C39.7344,1.0941 41.5274,2.8871 41.5274,5.0991 M0.0004,18.0991 C0.0014,8.7071 7.6114,1.0961 17.0044,1.0941 C26.3964,1.0961 34.0054,8.7071 34.0074,18.0991 C34.0054,27.4891 26.3964,35.1001 17.0044,35.1021 C7.6114,35.1001 0.0014,27.4891 0.0004,18.0991 M8.8274,9.9201 C6.7314,12.0241 5.4424,14.8961 5.4414,18.0991 C5.4424,21.2991 6.7314,24.1731 8.8274,26.2731 C10.9284,28.3701 13.8024,29.6591 17.0044,29.6611 C20.2054,29.6591 23.0774,28.3701 25.1794,26.2731 C27.2764,24.1731 28.5654,21.2991 28.5654,18.0991 C28.5654,14.8961 27.2764,12.0241 25.1794,9.9201 C23.0774,7.8261 20.2054,6.5381 17.0044,6.5361 C13.8024,6.5381 10.9284,7.8261 8.8274,9.9201" id="Shape"></path><polygon id="Path" points="187.27 1.625 180.658 1.625 172.284 13.745 163.909 1.625 157.297 1.625 169.556 19.375 169.556 34.271 175 34.271 175 19.388"></polygon><path d="M193.7081,0.8974 C191.4841,0.8974 189.6801,2.7004 189.6801,4.9234 C189.6801,7.1464 191.4841,8.9494 193.7081,8.9494 C195.9291,8.9494 197.7341,7.1464 197.7341,4.9234 C197.7341,2.7004 195.9291,0.8974 193.7081,0.8974 M193.7081,8.3054 C191.8411,8.3054 190.3261,6.7904 190.3261,4.9234 C190.3261,3.0554 191.8411,1.5404 193.7081,1.5404 C195.5721,1.5404 197.0881,3.0554 197.0881,4.9234 C197.0881,6.7904 195.5721,8.3054 193.7081,8.3054" id="Shape"></path><path d="M195.5133,4.038 C195.5133,3.377 194.9803,2.842 194.3183,2.842 L192.0523,2.842 L192.0523,6.945 L192.7333,6.945 L192.7333,5.236 L193.8823,5.236 L194.7053,6.945 L195.4663,6.945 L194.6243,5.197 C195.1373,5.062 195.5133,4.595 195.5133,4.038 Z M192.7333,3.526 L194.3183,3.526 C194.6033,3.526 194.8293,3.755 194.8293,4.038 C194.8293,4.322 194.6033,4.552 194.3183,4.552 L192.7333,4.552 L192.7333,3.526 Z" id="Shape"></path><polygon id="Path" points="99.462 7.064 99.462 1.625 76.766 1.625 76.766 34.271 99.462 34.271 99.462 28.829 82.205 28.829 82.205 20.668 98.631 20.668 98.631 15.226 82.205 15.226 82.205 7.064"></polygon><polygon id="Path" points="116.303 34.271 116.303 1.625 121.744 1.625 121.744 28.829 137.44 28.829 137.44 34.271"></polygon><polygon id="Path" points="141.875 34.271 141.875 1.625 147.318 1.625 147.318 28.829 163.013 28.829 163.013 34.271"></polygon><polygon id="Path" points="105.172 34.271 110.612 34.271 110.612 1.625 105.172 1.625"></polygon></g></g></svg></a><p>© <!-- -->2024<!-- -->, O'Reilly Media, Inc. All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p><style data-emotion="css 19v2igh">.css-19v2igh{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:0.25rem;}</style><div class="css-19v2igh"><a href="https://www.oreilly.com/terms/">Terms of Service</a>•<a href="/privacy">Privacy Policy</a>•<a href="/about/editorial_independence.html">Editorial Independence</a>•<a href="https://www.oreilly.com/modern-slavery-act-transparency-statement.html">Modern Slavery Act Statement</a></div></div></div></footer></div> <script type="text/javascript" src="/bdxdF5/wgY/XHI/Eb9JVw/aYLOwNS2r4zN/WRZ9AQ/HAN/pekpRbB4"></script><link rel="stylesheet" type="text/css" href="/bdxdF5/wgY/XHI/Eb9JVw/GG/clJdAQ/JHU/DIC4SMDVX"> <script src="/bdxdF5/wgY/XHI/Eb9JVw/GG/clJdAQ/WDg/cLU9Qdy4p" async defer></script> <div id="sec-overlay" style="display:none;"> <div id="sec-container"> </div> </div></body> </html>