CINXE.COM
Pearson+ eTextbooks starting from $8.49/month
<!DOCTYPE HTML> <html lang="en-US" class="no-js"> <head> <meta charset="UTF-8"/> <meta name="template" content="rootless-page"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Pearson+ eTextbooks starting from $8.49/month</title> <meta name="viewport" content="width=device-width, initial-scale=1"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="title" content="Pearson+ eTextbooks starting from $8.49/month"/> <meta name="description" content="Get instant access to 2,000+ digital eTextbooks with study tools, exam prep videos, job matching, and language learning."/> <meta property="og:title" content="Pearson+ eTextbooks starting from $8.49/month"/> <meta property="og:description" content="Get instant access to 2,000+ digital eTextbooks with study tools, exam prep videos, job matching, and language learning."/> <meta name="twitter:title" content="Pearson+ eTextbooks starting from $8.49/month"/> <meta property="og:url" content="https://www.pearson.com/en-us/pearsonplus.html"/> <meta name="twitter:description" content="Get instant access to 2,000+ digital eTextbooks with study tools, exam prep videos, job matching, and language learning."/> <meta name="article:modified_time" content="2024-12-06T06:40:04.643Z"/> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/page/page-properties-dialog.min.ACSHASH1de7355ba14c780dbdf61ff69fb685cf.css" type="text/css"> <link rel="shortcut icon" href="/apps/settings/wcm/designs/global-store/pearsonplus/favicon.ico"/> <script src="/etc/clientlibs/platform/aem-core/libraries/launch-darkly.min.ACSHASH851172d71af315ebdb9212a3e1554bbd.js"></script> <script src="/etc/clientlibs/platform/aem-core/feature-toggle.min.ACSHASH1640c8eb8b08b8e3b8fcab63c39e7b2a.js"></script> <script src="/etc/clientlibs/global-store/configs/pearsonplus/page-js-head.min.ACSHASH8f8e814ba2cf8a519231235169a2af74.js"></script> <link rel="stylesheet" href="/etc/clientlibs/platform/aem-core/components/content/video-common.min.ACSHASHb41659e9aebfc61648ef1e6283e6e6ef.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/global-store/configs/pearsonplus/page-css.min.ACSHASHd25d2079299b1938ac51e8acacb30a4f.css" type="text/css"> <link rel="stylesheet" href="/etc/clientlibs/one-dot-com/one-dot-com/pearsonplus-chatbot.min.ACSHASH4b27ba71c0faf1f00c84fdbbd338bf47.css" type="text/css"> <!-- NR Script Start for www.pearson.com --> <script> window.NREUM || (NREUM = {}); NREUM.init = { distributed_tracing: { enabled: true }, privacy: { cookies_enabled: true }, ajax: { deny_list: ['bam.nr-data.net'] }, }; NREUM.loader_config = { accountID: '1765996', trustKey: '691807', agentID: '1120248489', licenseKey: '068b3faa02', applicationID: '1120248489', }; NREUM.info = { beacon: 'bam.nr-data.net', errorBeacon: 'bam.nr-data.net', licenseKey: '068b3faa02', applicationID: '1120248489', sa: 1, }; /*! For license information please see nr-loader-spa-1.246.1.min.js.LICENSE.txt */ (() => { 'use strict'; var e, t, r = { 234: (e, t, r) => { r.d(t, { P_: () => g, Mt: () => v, C5: () => s, DL: () => A, OP: () => D, lF: () => N, Yu: () => x, Dg: () => m, CX: () => c, GE: () => w, sU: () => j, }); var n = r(8632), i = r(9567); const o = { beacon: n.ce.beacon, errorBeacon: n.ce.errorBeacon, licenseKey: void 0, applicationID: void 0, sa: void 0, queueTime: void 0, applicationTime: void 0, ttGuid: void 0, user: void 0, account: void 0, product: void 0, extra: void 0, jsAttributes: {}, userAttributes: void 0, atts: void 0, transactionName: void 0, tNamePlain: void 0, }, a = {}; function s(e) { if (!e) throw new Error('All info objects require an agent identifier!'); if (!a[e]) throw new Error('Info for '.concat(e, ' was never set')); return a[e]; } function c(e, t) { if (!e) throw new Error('All info objects require an agent identifier!'); (a[e] = (0, i.D)(t, o)), (0, n.Qy)(e, a[e], 'info'); } const u = e => { if (!e || 'string' != typeof e) return !1; try { document.createDocumentFragment().querySelector(e); } catch { return !1; } return !0; }; var d = r(7056), l = r(50); const f = () => { const e = { mask_selector: '*', block_selector: '[data-nr-block]', mask_input_options: { color: !1, date: !1, 'datetime-local': !1, email: !1, month: !1, number: !1, range: !1, search: !1, tel: !1, text: !1, time: !1, url: !1, week: !1, textarea: !1, select: !1, password: !0, }, }; return { feature_flags: [], proxy: { assets: void 0, beacon: void 0 }, privacy: { cookies_enabled: !0 }, ajax: { deny_list: void 0, block_internal: !0, enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, distributed_tracing: { enabled: void 0, exclude_newrelic_header: void 0, cors_use_newrelic_header: void 0, cors_use_tracecontext_headers: void 0, allowed_origins: void 0, }, session: { domain: void 0, expiresMs: d.oD, inactiveMs: d.Hb }, ssl: void 0, obfuscate: void 0, jserrors: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, metrics: { enabled: !0, autoStart: !0 }, page_action: { enabled: !0, harvestTimeSeconds: 30, autoStart: !0 }, page_view_event: { enabled: !0, autoStart: !0 }, page_view_timing: { enabled: !0, harvestTimeSeconds: 30, long_task: !1, autoStart: !0 }, session_trace: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, harvest: { tooManyRequestsDelay: 60 }, session_replay: { autoStart: !0, enabled: !1, harvestTimeSeconds: 60, sampling_rate: 50, error_sampling_rate: 50, collect_fonts: !1, inline_images: !1, inline_stylesheet: !0, mask_all_inputs: !0, get mask_text_selector() { return e.mask_selector; }, set mask_text_selector(t) { u(t) ? (e.mask_selector = t + ',[data-nr-mask]') : null === t ? (e.mask_selector = t) : (0, l.Z)('An invalid session_replay.mask_selector was provided and will not be used', t); }, get block_class() { return 'nr-block'; }, get ignore_class() { return 'nr-ignore'; }, get mask_text_class() { return 'nr-mask'; }, get block_selector() { return e.block_selector; }, set block_selector(t) { u(t) ? (e.block_selector += ','.concat(t)) : '' !== t && (0, l.Z)('An invalid session_replay.block_selector was provided and will not be used', t); }, get mask_input_options() { return e.mask_input_options; }, set mask_input_options(t) { t && 'object' == typeof t ? (e.mask_input_options = { ...t, password: !0 }) : (0, l.Z)('An invalid session_replay.mask_input_option was provided and will not be used', t); }, }, spa: { enabled: !0, harvestTimeSeconds: 10, autoStart: !0 }, }; }, h = {}, p = 'All configuration objects require an agent identifier!'; function g(e) { if (!e) throw new Error(p); if (!h[e]) throw new Error('Configuration for '.concat(e, ' was never set')); return h[e]; } function m(e, t) { if (!e) throw new Error(p); (h[e] = (0, i.D)(t, f())), (0, n.Qy)(e, h[e], 'config'); } function v(e, t) { if (!e) throw new Error(p); var r = g(e); if (r) { for (var n = t.split('.'), i = 0; i < n.length - 1; i++) if ('object' != typeof (r = r[n[i]])) return; r = r[n[n.length - 1]]; } return r; } const b = { accountID: void 0, trustKey: void 0, agentID: void 0, licenseKey: void 0, applicationID: void 0, xpid: void 0, }, y = {}; function A(e) { if (!e) throw new Error('All loader-config objects require an agent identifier!'); if (!y[e]) throw new Error('LoaderConfig for '.concat(e, ' was never set')); return y[e]; } function w(e, t) { if (!e) throw new Error('All loader-config objects require an agent identifier!'); (y[e] = (0, i.D)(t, b)), (0, n.Qy)(e, y[e], 'loader_config'); } const x = (0, n.mF)().o; var E = r(385), _ = r(6818); const T = { buildEnv: _.Re, customTransaction: void 0, disabled: !1, distMethod: _.gF, isolatedBacklog: !1, loaderType: void 0, maxBytes: 3e4, offset: Math.floor( E._A?.performance?.timeOrigin || E._A?.performance?.timing?.navigationStart || Date.now(), ), onerror: void 0, origin: '' + E._A.location, ptid: void 0, releaseIds: {}, session: void 0, xhrWrappable: 'function' == typeof E._A.XMLHttpRequest?.prototype?.addEventListener, version: _.q4, denyList: void 0, }, S = {}; function D(e) { if (!e) throw new Error('All runtime objects require an agent identifier!'); if (!S[e]) throw new Error('Runtime for '.concat(e, ' was never set')); return S[e]; } function j(e, t) { if (!e) throw new Error('All runtime objects require an agent identifier!'); (S[e] = (0, i.D)(t, T)), (0, n.Qy)(e, S[e], 'runtime'); } function N(e) { return (function (e) { try { const t = s(e); return !!t.licenseKey && !!t.errorBeacon && !!t.applicationID; } catch (e) { return !1; } })(e); } }, 9567: (e, t, r) => { r.d(t, { D: () => i }); var n = r(50); function i(e, t) { try { if (!e || 'object' != typeof e) return (0, n.Z)('Setting a Configurable requires an object as input'); if (!t || 'object' != typeof t) return (0, n.Z)('Setting a Configurable requires a model to set its initial properties'); const r = Object.create(Object.getPrototypeOf(t), Object.getOwnPropertyDescriptors(t)), o = 0 === Object.keys(r).length ? e : r; for (let a in o) if (void 0 !== e[a]) try { Array.isArray(e[a]) && Array.isArray(t[a]) ? (r[a] = Array.from(new Set([...e[a], ...t[a]]))) : 'object' == typeof e[a] && 'object' == typeof t[a] ? (r[a] = i(e[a], t[a])) : (r[a] = e[a]); } catch (e) { (0, n.Z)('An error occurred while setting a property of a Configurable', e); } return r; } catch (e) { (0, n.Z)('An error occured while setting a Configurable', e); } } }, 6818: (e, t, r) => { r.d(t, { Re: () => i, gF: () => o, lF: () => a, q4: () => n }); const n = '1.246.1', i = 'PROD', o = 'CDN', a = '2.0.0-alpha.11'; }, 385: (e, t, r) => { r.d(t, { FN: () => s, IF: () => d, Nk: () => f, Tt: () => c, _A: () => o, cv: () => h, iS: () => a, il: () => n, ux: () => u, v6: () => i, w1: () => l, }); const n = 'undefined' != typeof window && !!window.document, i = 'undefined' != typeof WorkerGlobalScope && (('undefined' != typeof self && self instanceof WorkerGlobalScope && self.navigator instanceof WorkerNavigator) || ('undefined' != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis.navigator instanceof WorkerNavigator)), o = n ? window : 'undefined' != typeof WorkerGlobalScope && (('undefined' != typeof self && self instanceof WorkerGlobalScope && self) || ('undefined' != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis)), a = Boolean('hidden' === o?.document?.visibilityState), s = '' + o?.location, c = /iPad|iPhone|iPod/.test(o.navigator?.userAgent), u = c && 'undefined' == typeof SharedWorker, d = (() => { const e = o.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/); return Array.isArray(e) && e.length >= 2 ? +e[1] : 0; })(), l = Boolean(n && window.document.documentMode), f = !!o.navigator?.sendBeacon, h = Math.floor(o?.performance?.timeOrigin || o?.performance?.timing?.navigationStart || Date.now()); }, 1117: (e, t, r) => { r.d(t, { w: () => o }); var n = r(50); const i = { agentIdentifier: '', ee: void 0 }; class o { constructor(e) { try { if ('object' != typeof e) return (0, n.Z)('shared context requires an object as input'); (this.sharedContext = {}), Object.assign(this.sharedContext, i), Object.entries(e).forEach(e => { let [t, r] = e; Object.keys(i).includes(t) && (this.sharedContext[t] = r); }); } catch (e) { (0, n.Z)('An error occured while setting SharedContext', e); } } } }, 8e3: (e, t, r) => { r.d(t, { L: () => d, R: () => c }); var n = r(8325), i = r(1284), o = r(4322), a = r(3325); const s = {}; function c(e, t) { const r = { staged: !1, priority: a.p[t] || 0 }; u(e), s[e].get(t) || s[e].set(t, r); } function u(e) { e && (s[e] || (s[e] = new Map())); } function d() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : '', t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 'feature'; if ((u(e), !e || !s[e].get(t))) return a(t); s[e].get(t).staged = !0; const r = [...s[e]]; function a(t) { const r = e ? n.ee.get(e) : n.ee, a = o.X.handlers; if (r.backlog && a) { var s = r.backlog[t], c = a[t]; if (c) { for (var u = 0; s && u < s.length; ++u) l(s[u], c); (0, i.D)(c, function (e, t) { (0, i.D)(t, function (t, r) { r[0].on(e, r[1]); }); }); } delete a[t], (r.backlog[t] = null), r.emit('drain-' + t, []); } } r.every(e => { let [t, r] = e; return r.staged; }) && (r.sort((e, t) => e[1].priority - t[1].priority), r.forEach(t => { let [r] = t; s[e].delete(r), a(r); })); } function l(e, t) { var r = e[1]; (0, i.D)(t[r], function (t, r) { var n = e[0]; if (r[0] === n) { var i = r[1], o = e[3], a = e[2]; i.apply(o, a); } }); } }, 8325: (e, t, r) => { r.d(t, { A: () => c, ee: () => u }); var n = r(8632), i = r(2210), o = r(234); class a { constructor(e) { this.contextId = e; } } var s = r(3117); const c = 'nr@context:'.concat(s.a), u = (function e(t, r) { var n = {}, s = {}, d = {}, f = !1; try { f = 16 === r.length && (0, o.OP)(r).isolatedBacklog; } catch (e) {} var h = { on: g, addEventListener: g, removeEventListener: function (e, t) { var r = n[e]; if (!r) return; for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1); }, emit: function (e, r, n, i, o) { !1 !== o && (o = !0); if (u.aborted && !i) return; t && o && t.emit(e, r, n); for (var a = p(n), c = m(e), d = c.length, l = 0; l < d; l++) c[l].apply(a, r); var f = b()[s[e]]; f && f.push([h, e, r, a]); return a; }, get: v, listeners: m, context: p, buffer: function (e, t) { const r = b(); if (((t = t || 'feature'), h.aborted)) return; Object.entries(e || {}).forEach(e => { let [n, i] = e; (s[i] = t), t in r || (r[t] = []); }); }, abort: l, aborted: !1, isBuffering: function (e) { return !!b()[s[e]]; }, debugId: r, backlog: f ? {} : t && 'object' == typeof t.backlog ? t.backlog : {}, }; return h; function p(e) { return e && e instanceof a ? e : e ? (0, i.X)(e, c, () => new a(c)) : new a(c); } function g(e, t) { n[e] = m(e).concat(t); } function m(e) { return n[e] || []; } function v(t) { return (d[t] = d[t] || e(h, t)); } function b() { return h.backlog; } })(void 0, 'globalEE'), d = (0, n.fP)(); function l() { (u.aborted = !0), (u.backlog = {}); } d.ee || (d.ee = u); }, 5546: (e, t, r) => { r.d(t, { E: () => n, p: () => i }); var n = r(8325).ee.get('handle'); function i(e, t, r, i, o) { o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r)); } }, 4322: (e, t, r) => { r.d(t, { X: () => o }); var n = r(5546); o.on = a; var i = (o.handlers = {}); function o(e, t, r, o) { a(o || n.E, i, e, t, r); } function a(e, t, r, i, o) { o || (o = 'feature'), e || (e = n.E); var a = (t[o] = t[o] || {}); (a[r] = a[r] || []).push([e, i]); } }, 3239: (e, t, r) => { r.d(t, { bP: () => s, iz: () => c, m$: () => a }); var n = r(385); let i = !1, o = !1; try { const e = { get passive() { return (i = !0), !1; }, get signal() { return (o = !0), !1; }, }; n._A.addEventListener('test', null, e), n._A.removeEventListener('test', null, e); } catch (e) {} function a(e, t) { return i || o ? { capture: !!e, passive: i, signal: t } : !!e; } function s(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], n = arguments.length > 3 ? arguments[3] : void 0; window.addEventListener(e, t, a(r, n)); } function c(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], n = arguments.length > 3 ? arguments[3] : void 0; document.addEventListener(e, t, a(r, n)); } }, 3117: (e, t, r) => { r.d(t, { a: () => n }); const n = (0, r(4402).Rl)(); }, 4402: (e, t, r) => { r.d(t, { Ht: () => u, M: () => c, Rl: () => a, ky: () => s }); var n = r(385); const i = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'; function o(e, t) { return e ? 15 & e[t] : (16 * Math.random()) | 0; } function a() { const e = n._A?.crypto || n._A?.msCrypto; let t, r = 0; return ( e && e.getRandomValues && (t = e.getRandomValues(new Uint8Array(31))), i .split('') .map(e => ('x' === e ? o(t, ++r).toString(16) : 'y' === e ? ((3 & o()) | 8).toString(16) : e)) .join('') ); } function s(e) { const t = n._A?.crypto || n._A?.msCrypto; let r, i = 0; t && t.getRandomValues && (r = t.getRandomValues(new Uint8Array(31))); const a = []; for (var s = 0; s < e; s++) a.push(o(r, ++i).toString(16)); return a.join(''); } function c() { return s(16); } function u() { return s(32); } }, 7056: (e, t, r) => { r.d(t, { Bq: () => n, Hb: () => o, oD: () => i }); const n = 'NRBA', i = 144e5, o = 18e5; }, 7894: (e, t, r) => { function n() { return Math.round(performance.now()); } r.d(t, { z: () => n }); }, 7243: (e, t, r) => { r.d(t, { e: () => i }); var n = r(385); function i(e) { if (0 === (e || '').indexOf('data:')) return { protocol: 'data' }; try { const t = new URL(e, location.href), r = { port: t.port, hostname: t.hostname, pathname: t.pathname, search: t.search, protocol: t.protocol.slice(0, t.protocol.indexOf(':')), sameOrigin: t.protocol === n._A?.location?.protocol && t.host === n._A?.location?.host, }; return ( (r.port && '' !== r.port) || ('http:' === t.protocol && (r.port = '80'), 'https:' === t.protocol && (r.port = '443')), r.pathname && '' !== r.pathname ? r.pathname.startsWith('/') || (r.pathname = '/'.concat(r.pathname)) : (r.pathname = '/'), r ); } catch (e) { return {}; } } }, 50: (e, t, r) => { function n(e, t) { 'function' == typeof console.warn && (console.warn('New Relic: '.concat(e)), t && console.warn(t)); } r.d(t, { Z: () => n }); }, 2587: (e, t, r) => { r.d(t, { N: () => c, T: () => u }); var n = r(8325), i = r(5546), o = r(3325); const a = { stn: [o.D.sessionTrace], err: [o.D.jserrors, o.D.metrics], ins: [o.D.pageAction], spa: [o.D.spa], sr: [o.D.sessionReplay, o.D.sessionTrace], }, s = new Set(); function c(e, t) { const r = n.ee.get(t); e && 'object' == typeof e && (s.has(t) || Object.entries(e).forEach(e => { let [t, n] = e; a[t] ? a[t].forEach(e => { n ? (0, i.p)('feat-' + t, [], void 0, e, r) : (0, i.p)('block-' + t, [], void 0, e, r), (0, i.p)('rumresp-' + t, [Boolean(n)], void 0, e, r); }) : n && (0, i.p)('feat-' + t, [], void 0, void 0, r), (u[t] = Boolean(n)); }), Object.keys(a).forEach(e => { void 0 === u[e] && (a[e]?.forEach(t => (0, i.p)('rumresp-' + e, [!1], void 0, t, r)), (u[e] = !1)); }), s.add(t)); } const u = {}; }, 2210: (e, t, r) => { r.d(t, { X: () => i }); var n = Object.prototype.hasOwnProperty; function i(e, t, r) { if (n.call(e, t)) return e[t]; var i = r(); if (Object.defineProperty && Object.keys) try { return Object.defineProperty(e, t, { value: i, writable: !0, enumerable: !1 }), i; } catch (e) {} return (e[t] = i), i; } }, 1284: (e, t, r) => { r.d(t, { D: () => n }); const n = (e, t) => Object.entries(e || {}).map(e => { let [r, n] = e; return t(r, n); }); }, 4351: (e, t, r) => { r.d(t, { P: () => o }); var n = r(8325); const i = () => { const e = new WeakSet(); return (t, r) => { if ('object' == typeof r && null !== r) { if (e.has(r)) return; e.add(r); } return r; }; }; function o(e) { try { return JSON.stringify(e, i()); } catch (e) { try { n.ee.emit('internal-error', [e]); } catch (e) {} } } }, 3960: (e, t, r) => { r.d(t, { K: () => a, b: () => o }); var n = r(3239); function i() { return 'undefined' == typeof document || 'complete' === document.readyState; } function o(e, t) { if (i()) return e(); (0, n.bP)('load', e, t); } function a(e) { if (i()) return e(); (0, n.iz)('DOMContentLoaded', e); } }, 8632: (e, t, r) => { r.d(t, { EZ: () => u, Qy: () => c, ce: () => o, fP: () => a, gG: () => d, mF: () => s }); var n = r(7894), i = r(385); const o = { beacon: 'bam.nr-data.net', errorBeacon: 'bam.nr-data.net' }; function a() { return i._A.NREUM || (i._A.NREUM = {}), void 0 === i._A.newrelic && (i._A.newrelic = i._A.NREUM), i._A.NREUM; } function s() { let e = a(); return ( e.o || (e.o = { ST: i._A.setTimeout, SI: i._A.setImmediate, CT: i._A.clearTimeout, XHR: i._A.XMLHttpRequest, REQ: i._A.Request, EV: i._A.Event, PR: i._A.Promise, MO: i._A.MutationObserver, FETCH: i._A.fetch, }), e ); } function c(e, t, r) { let i = a(); const o = i.initializedAgents || {}, s = o[e] || {}; return ( Object.keys(s).length || (s.initializedAt = { ms: (0, n.z)(), date: new Date() }), (i.initializedAgents = { ...o, [e]: { ...s, [r]: t } }), i ); } function u(e, t) { a()[e] = t; } function d() { return ( (function () { let e = a(); const t = e.info || {}; e.info = { beacon: o.beacon, errorBeacon: o.errorBeacon, ...t }; })(), (function () { let e = a(); const t = e.init || {}; e.init = { ...t }; })(), s(), (function () { let e = a(); const t = e.loader_config || {}; e.loader_config = { ...t }; })(), a() ); } }, 7956: (e, t, r) => { r.d(t, { N: () => i }); var n = r(3239); function i(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], r = arguments.length > 2 ? arguments[2] : void 0, i = arguments.length > 3 ? arguments[3] : void 0; (0, n.iz)( 'visibilitychange', function () { if (t) return void ('hidden' === document.visibilityState && e()); e(document.visibilityState); }, r, i, ); } }, 1214: (e, t, r) => { r.d(t, { em: () => b, u5: () => D, QU: () => C, _L: () => I, Gm: () => H, Lg: () => L, BV: () => G, Kf: () => K, }); var n = r(8325), i = r(3117); const o = 'nr@original:'.concat(i.a); var a = Object.prototype.hasOwnProperty, s = !1; function c(e, t) { return ( e || (e = n.ee), (r.inPlace = function (e, t, n, i, o) { n || (n = ''); const a = '-' === n.charAt(0); for (let s = 0; s < t.length; s++) { const c = t[s], u = e[c]; d(u) || (e[c] = r(u, a ? c + n : n, i, c, o)); } }), (r.flag = o), r ); function r(t, r, n, s, c) { return d(t) ? t : (r || (r = ''), (nrWrapper[o] = t), (function (e, t, r) { if (Object.defineProperty && Object.keys) try { return ( Object.keys(e).forEach(function (r) { Object.defineProperty(t, r, { get: function () { return e[r]; }, set: function (t) { return (e[r] = t), t; }, }); }), t ); } catch (e) { u([e], r); } for (var n in e) a.call(e, n) && (t[n] = e[n]); })(t, nrWrapper, e), nrWrapper); function nrWrapper() { var o, a, d, l; try { (a = this), (o = [...arguments]), (d = 'function' == typeof n ? n(o, a) : n || {}); } catch (t) { u([t, '', [o, a, s], d], e); } i(r + 'start', [o, a, s], d, c); try { return (l = t.apply(a, o)); } catch (e) { throw (i(r + 'err', [o, a, e], d, c), e); } finally { i(r + 'end', [o, a, l], d, c); } } } function i(r, n, i, o) { if (!s || t) { var a = s; s = !0; try { e.emit(r, n, i, t, o); } catch (t) { u([t, r, n, i], e); } s = a; } } } function u(e, t) { t || (t = n.ee); try { t.emit('internal-error', e); } catch (e) {} } function d(e) { return !(e && 'function' == typeof e && e.apply && !e[o]); } var l = r(2210), f = r(385); const h = {}, p = f._A.XMLHttpRequest, g = 'addEventListener', m = 'removeEventListener', v = 'nr@wrapped:'.concat(n.A); function b(e) { var t = (function (e) { return (e || n.ee).get('events'); })(e); if (h[t.debugId]++) return t; h[t.debugId] = 1; var r = c(t, !0); function i(e) { r.inPlace(e, [g, m], '-', o); } function o(e, t) { return e[1]; } return ( 'getPrototypeOf' in Object && (f.il && y(document, i), y(f._A, i), y(p.prototype, i)), t.on(g + '-start', function (e, t) { var n = e[1]; if (null !== n && ('function' == typeof n || 'object' == typeof n)) { var i = (0, l.X)(n, v, function () { var e = { object: function () { if ('function' != typeof n.handleEvent) return; return n.handleEvent.apply(n, arguments); }, function: n, }[typeof n]; return e ? r(e, 'fn-', null, e.name || 'anonymous') : n; }); this.wrapped = e[1] = i; } }), t.on(m + '-start', function (e) { e[1] = this.wrapped || e[1]; }), t ); } function y(e, t) { let r = e; for (; 'object' == typeof r && !Object.prototype.hasOwnProperty.call(r, g); ) r = Object.getPrototypeOf(r); for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), o = 2; o < n; o++) i[o - 2] = arguments[o]; r && t(r, ...i); } var A = 'fetch-', w = A + 'body-', x = ['arrayBuffer', 'blob', 'json', 'text', 'formData'], E = f._A.Request, _ = f._A.Response, T = 'prototype'; const S = {}; function D(e) { const t = (function (e) { return (e || n.ee).get('fetch'); })(e); if (!(E && _ && f._A.fetch)) return t; if (S[t.debugId]++) return t; function r(e, r, i) { var o = e[r]; 'function' == typeof o && (e[r] = function () { var e, r = [...arguments], a = {}; t.emit(i + 'before-start', [r], a), a[n.A] && a[n.A].dt && (e = a[n.A].dt); var s = o.apply(this, r); return ( t.emit(i + 'start', [r, e], s), s.then( function (e) { return t.emit(i + 'end', [null, e], s), e; }, function (e) { throw (t.emit(i + 'end', [e], s), e); }, ) ); }); } return ( (S[t.debugId] = 1), x.forEach(e => { r(E[T], e, w), r(_[T], e, w); }), r(f._A, 'fetch', A), t.on(A + 'end', function (e, r) { var n = this; if (r) { var i = r.headers.get('content-length'); null !== i && (n.rxSize = i), t.emit(A + 'done', [null, r], n); } else t.emit(A + 'done', [e], n); }), t ); } const j = {}, N = ['pushState', 'replaceState']; function C(e) { const t = (function (e) { return (e || n.ee).get('history'); })(e); return !f.il || j[t.debugId]++ || ((j[t.debugId] = 1), c(t).inPlace(window.history, N, '-')), t; } var O = r(3239); const P = {}, R = ['appendChild', 'insertBefore', 'replaceChild']; function I(e) { const t = (function (e) { return (e || n.ee).get('jsonp'); })(e); if (!f.il || P[t.debugId]) return t; P[t.debugId] = !0; var r = c(t), i = /[?&](?:callback|cb)=([^&#]+)/, o = /(.*)\.([^.]+)/, a = /^(\w+)(\.|$)(.*)$/; function s(e, t) { if (!e) return t; const r = e.match(a), n = r[1]; return s(r[3], t[n]); } return ( r.inPlace(Node.prototype, R, 'dom-'), t.on('dom-start', function (e) { !(function (e) { if (!e || 'string' != typeof e.nodeName || 'script' !== e.nodeName.toLowerCase()) return; if ('function' != typeof e.addEventListener) return; var n = ((a = e.src), (c = a.match(i)), c ? c[1] : null); var a, c; if (!n) return; var u = (function (e) { var t = e.match(o); if (t && t.length >= 3) return { key: t[2], parent: s(t[1], window) }; return { key: e, parent: window }; })(n); if ('function' != typeof u.parent[u.key]) return; var d = {}; function l() { t.emit('jsonp-end', [], d), e.removeEventListener('load', l, (0, O.m$)(!1)), e.removeEventListener('error', f, (0, O.m$)(!1)); } function f() { t.emit('jsonp-error', [], d), t.emit('jsonp-end', [], d), e.removeEventListener('load', l, (0, O.m$)(!1)), e.removeEventListener('error', f, (0, O.m$)(!1)); } r.inPlace(u.parent, [u.key], 'cb-', d), e.addEventListener('load', l, (0, O.m$)(!1)), e.addEventListener('error', f, (0, O.m$)(!1)), t.emit('new-jsonp', [e.src], d); })(e[0]); }), t ); } const k = {}; function H(e) { const t = (function (e) { return (e || n.ee).get('mutation'); })(e); if (!f.il || k[t.debugId]) return t; k[t.debugId] = !0; var r = c(t), i = f._A.MutationObserver; return ( i && ((window.MutationObserver = function (e) { return this instanceof i ? new i(r(e, 'fn-')) : i.apply(this, arguments); }), (MutationObserver.prototype = i.prototype)), t ); } const z = {}; function L(e) { const t = (function (e) { return (e || n.ee).get('promise'); })(e); if (z[t.debugId]) return t; z[t.debugId] = !0; var r = t.context, i = c(t), a = f._A.Promise; return ( a && (function () { function e(r) { var n = t.context(), o = i(r, 'executor-', n, null, !1); const s = Reflect.construct(a, [o], e); return ( (t.context(s).getCtx = function () { return n; }), s ); } (f._A.Promise = e), Object.defineProperty(e, 'name', { value: 'Promise' }), (e.toString = function () { return a.toString(); }), Object.setPrototypeOf(e, a), ['all', 'race'].forEach(function (r) { const n = a[r]; e[r] = function (e) { let i = !1; [...(e || [])].forEach(e => { this.resolve(e).then(a('all' === r), a(!1)); }); const o = n.apply(this, arguments); return o; function a(e) { return function () { t.emit('propagate', [null, !i], o, !1, !1), (i = i || !e); }; } }; }), ['resolve', 'reject'].forEach(function (r) { const n = a[r]; e[r] = function (e) { const r = n.apply(this, arguments); return e !== r && t.emit('propagate', [e, !0], r, !1, !1), r; }; }), (e.prototype = a.prototype); const n = a.prototype.then; (a.prototype.then = function () { var e = this, o = r(e); o.promise = e; for (var a = arguments.length, s = new Array(a), c = 0; c < a; c++) s[c] = arguments[c]; (s[0] = i(s[0], 'cb-', o, null, !1)), (s[1] = i(s[1], 'cb-', o, null, !1)); const u = n.apply(this, s); return (o.nextPromise = u), t.emit('propagate', [e, !0], u, !1, !1), u; }), (a.prototype.then[o] = n), t.on('executor-start', function (e) { (e[0] = i(e[0], 'resolve-', this, null, !1)), (e[1] = i(e[1], 'resolve-', this, null, !1)); }), t.on('executor-err', function (e, t, r) { e[1](r); }), t.on('cb-end', function (e, r, n) { t.emit('propagate', [n, !0], this.nextPromise, !1, !1); }), t.on('propagate', function (e, r, n) { (this.getCtx && !r) || (this.getCtx = function () { if (e instanceof Promise) var r = t.context(e); return r && r.getCtx ? r.getCtx() : this; }); }); })(), t ); } const M = {}, F = 'setTimeout', B = 'setInterval', U = 'clearTimeout', Z = '-start', V = '-', q = [F, 'setImmediate', B, U, 'clearImmediate']; function G(e) { const t = (function (e) { return (e || n.ee).get('timer'); })(e); if (M[t.debugId]++) return t; M[t.debugId] = 1; var r = c(t); return ( r.inPlace(f._A, q.slice(0, 2), F + V), r.inPlace(f._A, q.slice(2, 3), B + V), r.inPlace(f._A, q.slice(3), U + V), t.on(B + Z, function (e, t, n) { e[0] = r(e[0], 'fn-', null, n); }), t.on(F + Z, function (e, t, n) { (this.method = n), (this.timerDuration = isNaN(e[1]) ? 0 : +e[1]), (e[0] = r(e[0], 'fn-', this, n)); }), t ); } var W = r(50); const X = {}, Q = ['open', 'send']; function K(e) { var t = e || n.ee; const r = (function (e) { return (e || n.ee).get('xhr'); })(t); if (X[r.debugId]++) return r; (X[r.debugId] = 1), b(t); var i = c(r), o = f._A.XMLHttpRequest, a = f._A.MutationObserver, s = f._A.Promise, u = f._A.setInterval, d = 'readystatechange', l = ['onload', 'onerror', 'onabort', 'onloadstart', 'onloadend', 'onprogress', 'ontimeout'], h = [], p = (f._A.XMLHttpRequest = function (e) { const t = new o(e), n = r.context(t); try { r.emit('new-xhr', [t], n), t.addEventListener( d, ((a = n), function () { var e = this; e.readyState > 3 && !a.resolved && ((a.resolved = !0), r.emit('xhr-resolved', [], e)), i.inPlace(e, l, 'fn-', w); }), (0, O.m$)(!1), ); } catch (e) { (0, W.Z)('An error occurred while intercepting XHR', e); try { r.emit('internal-error', [e]); } catch (e) {} } var a; return t; }); function g(e, t) { i.inPlace(t, ['onreadystatechange'], 'fn-', w); } if ( ((function (e, t) { for (var r in e) t[r] = e[r]; })(o, p), (p.prototype = o.prototype), i.inPlace(p.prototype, Q, '-xhr-', w), r.on('send-xhr-start', function (e, t) { g(e, t), (function (e) { h.push(e), a && (m ? m.then(A) : u ? u(A) : ((v = -v), (y.data = v))); })(t); }), r.on('open-xhr-start', g), a) ) { var m = s && s.resolve(); if (!u && !s) { var v = 1, y = document.createTextNode(v); new a(A).observe(y, { characterData: !0 }); } } else t.on('fn-end', function (e) { (e[0] && e[0].type === d) || A(); }); function A() { for (var e = 0; e < h.length; e++) g(0, h[e]); h.length && (h = []); } function w(e, t) { return t; } return r; } }, 7825: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.ajax; }, 6660: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.jserrors; }, 3081: (e, t, r) => { r.d(t, { gF: () => o, mY: () => i, t9: () => n, vz: () => s, xS: () => a }); const n = r(3325).D.metrics, i = 'sm', o = 'cm', a = 'storeSupportabilityMetrics', s = 'storeEventMetrics'; }, 4649: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageAction; }, 7633: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageViewEvent; }, 9251: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.pageViewTiming; }, 7144: (e, t, r) => { r.d(t, { t: () => n }); const n = r(3325).D.sessionReplay; }, 3614: (e, t, r) => { r.d(t, { BST_RESOURCE: () => i, END: () => s, FEATURE_NAME: () => n, FN_END: () => u, FN_START: () => c, PUSH_STATE: () => d, RESOURCE: () => o, START: () => a, }); const n = r(3325).D.sessionTrace, i = 'bstResource', o = 'resource', a = '-start', s = '-end', c = 'fn' + a, u = 'fn' + s, d = 'pushState'; }, 7836: (e, t, r) => { r.d(t, { BODY: () => x, CB_END: () => E, CB_START: () => u, END: () => w, FEATURE_NAME: () => i, FETCH: () => T, FETCH_BODY: () => v, FETCH_DONE: () => m, FETCH_START: () => g, FN_END: () => c, FN_START: () => s, INTERACTION: () => f, INTERACTION_API: () => d, INTERACTION_EVENTS: () => o, JSONP_END: () => b, JSONP_NODE: () => p, JS_TIME: () => _, MAX_TIMER_BUDGET: () => a, REMAINING: () => l, SPA_NODE: () => h, START: () => A, originalSetTimeout: () => y, }); var n = r(234); const i = r(3325).D.spa, o = ['click', 'submit', 'keypress', 'keydown', 'keyup', 'change'], a = 999, s = 'fn-start', c = 'fn-end', u = 'cb-start', d = 'api-ixn-', l = 'remaining', f = 'interaction', h = 'spaNode', p = 'jsonpNode', g = 'fetch-start', m = 'fetch-done', v = 'fetch-body-', b = 'jsonp-end', y = n.Yu.ST, A = '-start', w = '-end', x = '-body', E = 'cb' + w, _ = 'jsTime', T = 'fetch'; }, 5938: (e, t, r) => { r.d(t, { W: () => i }); var n = r(8325); class i { constructor(e, t, r) { (this.agentIdentifier = e), (this.aggregator = t), (this.ee = n.ee.get(e)), (this.featureName = r), (this.blocked = !1); } } }, 7530: (e, t, r) => { r.d(t, { j: () => b }); var n = r(3325), i = r(234), o = r(5546), a = r(8325), s = r(7894), c = r(8e3), u = r(3960), d = r(385), l = r(50), f = r(3081), h = r(8632); function p() { const e = (0, h.gG)(); [ 'setErrorHandler', 'finished', 'addToTrace', 'addRelease', 'addPageAction', 'setCurrentRouteName', 'setPageViewName', 'setCustomAttribute', 'interaction', 'noticeError', 'setUserId', 'setApplicationVersion', 'start', ].forEach(t => { e[t] = function () { for (var r = arguments.length, n = new Array(r), i = 0; i < r; i++) n[i] = arguments[i]; return (function (t) { for (var r = arguments.length, n = new Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) n[i - 1] = arguments[i]; let o = []; return ( Object.values(e.initializedAgents).forEach(e => { e.exposed && e.api[t] && o.push(e.api[t](...n)); }), o.length > 1 ? o : o[0] ); })(t, ...n); }; }); } var g = r(2587); const m = e => { const t = e.startsWith('http'); (e += '/'), (r.p = t ? e : 'https://' + e); }; let v = !1; function b(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, b = arguments.length > 2 ? arguments[2] : void 0, y = arguments.length > 3 ? arguments[3] : void 0, { init: A, info: w, loader_config: x, runtime: E = { loaderType: b }, exposed: _ = !0 } = t; const T = (0, h.gG)(); w || ((A = T.init), (w = T.info), (x = T.loader_config)), (0, i.Dg)(e, A || {}), (0, i.GE)(e, x || {}), (w.jsAttributes ??= {}), d.v6 && (w.jsAttributes.isWorker = !0), (0, i.CX)(e, w); const S = (0, i.P_)(e), D = [w.beacon, w.errorBeacon]; v || ((v = !0), S.proxy.assets && (m(S.proxy.assets), D.push(S.proxy.assets)), S.proxy.beacon && D.push(S.proxy.beacon)), (E.denyList = [...(S.ajax.deny_list || []), ...(S.ajax.block_internal ? D : [])]), (0, i.sU)(e, E), p(); const j = (function (e, t) { t || (0, c.R)(e, 'api'); const h = {}; var p = a.ee.get(e), g = p.get('tracer'), m = 'api-', v = m + 'ixn-'; function b(t, r, n, o) { const a = (0, i.C5)(e); return ( null === r ? delete a.jsAttributes[t] : (0, i.CX)(e, { ...a, jsAttributes: { ...a.jsAttributes, [t]: r } }), w(m, n, !0, o || null === r ? 'session' : void 0)(t, r) ); } function y() {} ['setErrorHandler', 'finished', 'addToTrace', 'addRelease'].forEach(e => { h[e] = w(m, e, !0, 'api'); }), (h.addPageAction = w(m, 'addPageAction', !0, n.D.pageAction)), (h.setCurrentRouteName = w(m, 'routeName', !0, n.D.spa)), (h.setPageViewName = function (t, r) { if ('string' == typeof t) return ( '/' !== t.charAt(0) && (t = '/' + t), ((0, i.OP)(e).customTransaction = (r || 'http://custom.transaction') + t), w(m, 'setPageViewName', !0)() ); }), (h.setCustomAttribute = function (e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if ('string' == typeof e) { if (['string', 'number', 'boolean'].includes(typeof t) || null === t) return b(e, t, 'setCustomAttribute', r); (0, l.Z)( 'Failed to execute setCustomAttribute.\nNon-null value must be a string, number or boolean type, but a type of <'.concat( typeof t, '> was provided.', ), ); } else (0, l.Z)( 'Failed to execute setCustomAttribute.\nName must be a string type, but a type of <'.concat( typeof e, '> was provided.', ), ); }), (h.setUserId = function (e) { if ('string' == typeof e || null === e) return b('enduser.id', e, 'setUserId', !0); (0, l.Z)( 'Failed to execute setUserId.\nNon-null value must be a string type, but a type of <'.concat( typeof e, '> was provided.', ), ); }), (h.setApplicationVersion = function (e) { if ('string' == typeof e || null === e) return b('application.version', e, 'setApplicationVersion', !1); (0, l.Z)( 'Failed to execute setApplicationVersion. Expected <String | null>, but got <'.concat(typeof e, '>.'), ); }), (h.start = e => { try { const t = e ? 'defined' : 'undefined'; (0, o.p)(f.xS, ['API/start/'.concat(t, '/called')], void 0, n.D.metrics, p); const r = Object.values(n.D); if (void 0 === e) e = r; else { if ((e = Array.isArray(e) && e.length ? e : [e]).some(e => !r.includes(e))) return (0, l.Z)('Invalid feature name supplied. Acceptable feature names are: '.concat(r)); e.includes(n.D.pageViewEvent) || e.push(n.D.pageViewEvent); } e.forEach(e => { p.emit(''.concat(e, '-opt-in')); }); } catch (e) { (0, l.Z)('An unexpected issue occurred', e); } }), (h.interaction = function () { return new y().get(); }); var A = (y.prototype = { createTracer: function (e, t) { var r = {}, i = this, a = 'function' == typeof t; return ( (0, o.p)(v + 'tracer', [(0, s.z)(), e, r], i, n.D.spa, p), function () { if ((g.emit((a ? '' : 'no-') + 'fn-start', [(0, s.z)(), i, a], r), a)) try { return t.apply(this, arguments); } catch (e) { throw (g.emit('fn-err', [arguments, this, e], r), e); } finally { g.emit('fn-end', [(0, s.z)()], r); } } ); }, }); function w(e, t, r, i) { return function () { return ( (0, o.p)(f.xS, ['API/' + t + '/called'], void 0, n.D.metrics, p), i && (0, o.p)(e + t, [(0, s.z)(), ...arguments], r ? null : this, i, p), r ? void 0 : this ); }; } function x() { r.e(111) .then(r.bind(r, 7438)) .then(t => { let { setAPI: r } = t; r(e), (0, c.L)(e, 'api'); }) .catch(() => (0, l.Z)('Downloading runtime APIs failed...')); } return ( ['actionText', 'setName', 'setAttribute', 'save', 'ignore', 'onEnd', 'getContext', 'end', 'get'].forEach( e => { A[e] = w(v, e, void 0, n.D.spa); }, ), (h.noticeError = function (e, t) { 'string' == typeof e && (e = new Error(e)), (0, o.p)(f.xS, ['API/noticeError/called'], void 0, n.D.metrics, p), (0, o.p)('err', [e, (0, s.z)(), !1, t], void 0, n.D.jserrors, p); }), d.il ? (0, u.b)(() => x(), !0) : x(), h ); })(e, y); return (0, h.Qy)(e, j, 'api'), (0, h.Qy)(e, _, 'exposed'), (0, h.EZ)('activatedFeatures', g.T), j; } }, 3325: (e, t, r) => { r.d(t, { D: () => n, p: () => i }); const n = { ajax: 'ajax', jserrors: 'jserrors', metrics: 'metrics', pageAction: 'page_action', pageViewEvent: 'page_view_event', pageViewTiming: 'page_view_timing', sessionReplay: 'session_replay', sessionTrace: 'session_trace', spa: 'spa', }, i = { [n.pageViewEvent]: 1, [n.pageViewTiming]: 2, [n.metrics]: 3, [n.jserrors]: 4, [n.ajax]: 5, [n.sessionTrace]: 6, [n.pageAction]: 7, [n.spa]: 8, [n.sessionReplay]: 9, }; }, }, n = {}; function i(e) { var t = n[e]; if (void 0 !== t) return t.exports; var o = (n[e] = { exports: {} }); return r[e](o, o.exports, i), o.exports; } (i.m = r), (i.d = (e, t) => { for (var r in t) i.o(t, r) && !i.o(e, r) && Object.defineProperty(e, r, { enumerable: !0, get: t[r] }); }), (i.f = {}), (i.e = e => Promise.all(Object.keys(i.f).reduce((t, r) => (i.f[r](e, t), t), []))), (i.u = e => ({ 111: 'nr-spa', 164: 'nr-spa-compressor', 433: 'nr-spa-recorder' }[e] + '-1.246.1.min.js')), (i.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)), (e = {}), (t = 'NRBA-1.246.1.PROD:'), (i.l = (r, n, o, a) => { if (e[r]) e[r].push(n); else { var s, c; if (void 0 !== o) for (var u = document.getElementsByTagName('script'), d = 0; d < u.length; d++) { var l = u[d]; if (l.getAttribute('src') == r || l.getAttribute('data-webpack') == t + o) { s = l; break; } } s || ((c = !0), ((s = document.createElement('script')).charset = 'utf-8'), (s.timeout = 120), i.nc && s.setAttribute('nonce', i.nc), s.setAttribute('data-webpack', t + o), (s.src = r)), (e[r] = [n]); var f = (t, n) => { (s.onerror = s.onload = null), clearTimeout(h); var i = e[r]; if ((delete e[r], s.parentNode && s.parentNode.removeChild(s), i && i.forEach(e => e(n)), t)) return t(n); }, h = setTimeout(f.bind(null, void 0, { type: 'timeout', target: s }), 12e4); (s.onerror = f.bind(null, s.onerror)), (s.onload = f.bind(null, s.onload)), c && document.head.appendChild(s); } }), (i.r = e => { 'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }), Object.defineProperty(e, '__esModule', { value: !0 }); }), (i.p = 'https://js-agent.newrelic.com/'), (() => { var e = { 801: 0, 92: 0 }; i.f.j = (t, r) => { var n = i.o(e, t) ? e[t] : void 0; if (0 !== n) if (n) r.push(n[2]); else { var o = new Promise((r, i) => (n = e[t] = [r, i])); r.push((n[2] = o)); var a = i.p + i.u(t), s = new Error(); i.l( a, r => { if (i.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) { var o = r && ('load' === r.type ? 'missing' : r.type), a = r && r.target && r.target.src; (s.message = 'Loading chunk ' + t + ' failed.\n(' + o + ': ' + a + ')'), (s.name = 'ChunkLoadError'), (s.type = o), (s.request = a), n[1](s); } }, 'chunk-' + t, t, ); } }; var t = (t, r) => { var n, o, [a, s, c] = r, u = 0; if (a.some(t => 0 !== e[t])) { for (n in s) i.o(s, n) && (i.m[n] = s[n]); if (c) c(i); } for (t && t(r); u < a.length; u++) (o = a[u]), i.o(e, o) && e[o] && e[o][0](), (e[o] = 0); }, r = (self['webpackChunk:NRBA-1.246.1.PROD'] = self['webpackChunk:NRBA-1.246.1.PROD'] || []); r.forEach(t.bind(null, 0)), (r.push = t.bind(null, r.push.bind(r))); })(), (() => { var e = i(50); class t { addPageAction(t, r) { (0, e.Z)('Call to agent api addPageAction failed. The page action feature is not currently initialized.'); } setPageViewName(t, r) { (0, e.Z)('Call to agent api setPageViewName failed. The page view feature is not currently initialized.'); } setCustomAttribute(t, r, n) { (0, e.Z)('Call to agent api setCustomAttribute failed. The js errors feature is not currently initialized.'); } noticeError(t, r) { (0, e.Z)('Call to agent api noticeError failed. The js errors feature is not currently initialized.'); } setUserId(t) { (0, e.Z)('Call to agent api setUserId failed. The js errors feature is not currently initialized.'); } setApplicationVersion(t) { (0, e.Z)('Call to agent api setApplicationVersion failed. The agent is not currently initialized.'); } setErrorHandler(t) { (0, e.Z)('Call to agent api setErrorHandler failed. The js errors feature is not currently initialized.'); } finished(t) { (0, e.Z)('Call to agent api finished failed. The page action feature is not currently initialized.'); } addRelease(t, r) { (0, e.Z)('Call to agent api addRelease failed. The js errors feature is not currently initialized.'); } start(t) { (0, e.Z)('Call to agent api addRelease failed. The agent is not currently initialized.'); } } var r = i(3325), n = i(234); const o = Object.values(r.D); function a(e) { const t = {}; return ( o.forEach(r => { t[r] = (function (e, t) { return !1 !== (0, n.Mt)(t, ''.concat(e, '.enabled')); })(r, e); }), t ); } var s = i(7530); var c = i(8e3), u = i(5938), d = i(3960), l = i(385); class f extends u.W { constructor(e, t, r) { let i = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3]; super(e, t, r), (this.auto = i), (this.abortHandler = void 0), (this.featAggregate = void 0), (this.onAggregateImported = void 0), !1 === (0, n.Mt)(this.agentIdentifier, ''.concat(this.featureName, '.autoStart')) && (this.auto = !1), this.auto && (0, c.R)(e, r); } importAggregator() { let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; if (this.featAggregate) return; if (!this.auto) return void this.ee.on(''.concat(this.featureName, '-opt-in'), () => { (0, c.R)(this.agentIdentifier, this.featureName), (this.auto = !0), this.importAggregator(); }); const r = l.il && !0 === (0, n.Mt)(this.agentIdentifier, 'privacy.cookies_enabled'); let o; this.onAggregateImported = new Promise(e => { o = e; }); const a = async () => { let n; try { if (r) { const { setupAgentSession: e } = await i.e(111).then(i.bind(i, 3228)); n = e(this.agentIdentifier); } } catch (t) { (0, e.Z)( 'A problem occurred when starting up session manager. This page will not start or extend any session.', t, ); } try { if (!this.shouldImportAgg(this.featureName, n)) return (0, c.L)(this.agentIdentifier, this.featureName), void o(!1); const { lazyFeatureLoader: e } = await i.e(111).then(i.bind(i, 8582)), { Aggregate: r } = await e(this.featureName, 'aggregate'); (this.featAggregate = new r(this.agentIdentifier, this.aggregator, t)), o(!0); } catch (t) { (0, e.Z)('Downloading and initializing '.concat(this.featureName, ' failed...'), t), this.abortHandler?.(), (0, c.L)(this.agentIdentifier, this.featureName), o(!1); } }; l.il ? (0, d.b)(() => a(), !0) : a(); } shouldImportAgg(e, t) { return ( e !== r.D.sessionReplay || (!!n.Yu.MO && !1 !== (0, n.Mt)(this.agentIdentifier, 'session_trace.enabled') && (!!t?.isNew || !!t?.state.sessionReplayMode)) ); } } var h = i(7633); class p extends f { static featureName = h.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, h.t, r), this.importAggregator(); } } var g = i(1117), m = i(1284); class v extends g.w { constructor(e) { super(e), (this.aggregatedData = {}); } store(e, t, r, n, i) { var o = this.getBucket(e, t, r, i); return ( (o.metrics = (function (e, t) { t || (t = { count: 0 }); return ( (t.count += 1), (0, m.D)(e, function (e, r) { t[e] = b(r, t[e]); }), t ); })(n, o.metrics)), o ); } merge(e, t, r, n, i) { var o = this.getBucket(e, t, n, i); if (o.metrics) { var a = o.metrics; (a.count += r.count), (0, m.D)(r, function (e, t) { if ('count' !== e) { var n = a[e], i = r[e]; i && !i.c ? (a[e] = b(i.t, n)) : (a[e] = (function (e, t) { if (!t) return e; t.c || (t = y(t.t)); return ( (t.min = Math.min(e.min, t.min)), (t.max = Math.max(e.max, t.max)), (t.t += e.t), (t.sos += e.sos), (t.c += e.c), t ); })(i, a[e])); } }); } else o.metrics = r; } storeMetric(e, t, r, n) { var i = this.getBucket(e, t, r); return (i.stats = b(n, i.stats)), i; } getBucket(e, t, r, n) { this.aggregatedData[e] || (this.aggregatedData[e] = {}); var i = this.aggregatedData[e][t]; return i || ((i = this.aggregatedData[e][t] = { params: r || {} }), n && (i.custom = n)), i; } get(e, t) { return t ? this.aggregatedData[e] && this.aggregatedData[e][t] : this.aggregatedData[e]; } take(e) { for (var t = {}, r = '', n = !1, i = 0; i < e.length; i++) (t[(r = e[i])] = A(this.aggregatedData[r])), t[r].length && (n = !0), delete this.aggregatedData[r]; return n ? t : null; } } function b(e, t) { return null == e ? (function (e) { e ? e.c++ : (e = { c: 1 }); return e; })(t) : t ? (t.c || (t = y(t.t)), (t.c += 1), (t.t += e), (t.sos += e * e), e > t.max && (t.max = e), e < t.min && (t.min = e), t) : { t: e }; } function y(e) { return { t: e, min: e, max: e, sos: e * e, c: 1 }; } function A(e) { return 'object' != typeof e ? [] : (0, m.D)(e, w); } function w(e, t) { return t; } var x = i(8632), E = i(4402), _ = i(4351); var T = i(5546), S = i(7956), D = i(3239), j = i(7894), N = i(9251); class C extends f { static featureName = N.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, N.t, r), l.il && ((0, S.N)(() => (0, T.p)('docHidden', [(0, j.z)()], void 0, N.t, this.ee), !0), (0, D.bP)('pagehide', () => (0, T.p)('winPagehide', [(0, j.z)()], void 0, N.t, this.ee)), this.importAggregator()); } } var O = i(3081); class P extends f { static featureName = O.t9; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, O.t9, r), this.importAggregator(); } } var R = i(6660); class I { constructor(e, t, r, n) { (this.name = 'UncaughtError'), (this.message = e), (this.sourceURL = t), (this.line = r), (this.column = n); } } class k extends f { static featureName = R.t; #e = new Set(); constructor(e, t) { let n = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, R.t, n); try { this.removeOnAbort = new AbortController(); } catch (e) {} this.ee.on('fn-err', (e, t, n) => { this.abortHandler && !this.#e.has(n) && (this.#e.add(n), (0, T.p)('err', [this.#t(n), (0, j.z)()], void 0, r.D.jserrors, this.ee)); }), this.ee.on('internal-error', e => { this.abortHandler && (0, T.p)('ierr', [this.#t(e), (0, j.z)(), !0], void 0, r.D.jserrors, this.ee); }), l._A.addEventListener( 'unhandledrejection', e => { this.abortHandler && (0, T.p)( 'err', [this.#r(e), (0, j.z)(), !1, { unhandledPromiseRejection: 1 }], void 0, r.D.jserrors, this.ee, ); }, (0, D.m$)(!1, this.removeOnAbort?.signal), ), l._A.addEventListener( 'error', e => { this.abortHandler && (this.#e.has(e.error) ? this.#e.delete(e.error) : (0, T.p)('err', [this.#n(e), (0, j.z)()], void 0, r.D.jserrors, this.ee)); }, (0, D.m$)(!1, this.removeOnAbort?.signal), ), (this.abortHandler = this.#i), this.importAggregator(); } #i() { this.removeOnAbort?.abort(), this.#e.clear(), (this.abortHandler = void 0); } #t(e) { return e instanceof Error ? e : void 0 !== e?.message ? new I(e.message, e.filename || e.sourceURL, e.lineno || e.line, e.colno || e.col) : new I('string' == typeof e ? e : (0, _.P)(e)); } #r(e) { let t = 'Unhandled Promise Rejection: '; if (e?.reason instanceof Error) try { return (e.reason.message = t + e.reason.message), e.reason; } catch (t) { return e.reason; } if (void 0 === e.reason) return new I(t); const r = this.#t(e.reason); return (r.message = t + r.message), r; } #n(e) { return e.error instanceof Error ? e.error : new I(e.message, e.filename, e.lineno, e.colno); } } var H = i(2210); let z = 1; const L = 'nr@id'; function M(e) { const t = typeof e; return !e || ('object' !== t && 'function' !== t) ? -1 : e === l._A ? 0 : (0, H.X)(e, L, function () { return z++; }); } function F(e) { if ('string' == typeof e && e.length) return e.length; if ('object' == typeof e) { if ('undefined' != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength; if ('undefined' != typeof Blob && e instanceof Blob && e.size) return e.size; if (!('undefined' != typeof FormData && e instanceof FormData)) try { return (0, _.P)(e).length; } catch (e) { return; } } } var B = i(1214), U = i(7243); class Z { constructor(e) { this.agentIdentifier = e; } generateTracePayload(e) { if (!this.shouldGenerateTrace(e)) return null; var t = (0, n.DL)(this.agentIdentifier); if (!t) return null; var r = (t.accountID || '').toString() || null, i = (t.agentID || '').toString() || null, o = (t.trustKey || '').toString() || null; if (!r || !i) return null; var a = (0, E.M)(), s = (0, E.Ht)(), c = Date.now(), u = { spanId: a, traceId: s, timestamp: c }; return ( (e.sameOrigin || (this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors())) && ((u.traceContextParentHeader = this.generateTraceContextParentHeader(a, s)), (u.traceContextStateHeader = this.generateTraceContextStateHeader(a, c, r, i, o))), ((e.sameOrigin && !this.excludeNewrelicHeader()) || (!e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors())) && (u.newrelicHeader = this.generateTraceHeader(a, s, c, r, i, o)), u ); } generateTraceContextParentHeader(e, t) { return '00-' + t + '-' + e + '-01'; } generateTraceContextStateHeader(e, t, r, n, i) { return i + '@nr=0-1-' + r + '-' + n + '-' + e + '----' + t; } generateTraceHeader(e, t, r, n, i, o) { if (!('function' == typeof l._A?.btoa)) return null; var a = { v: [0, 1], d: { ty: 'Browser', ac: n, ap: i, id: e, tr: t, ti: r } }; return o && n !== o && (a.d.tk = o), btoa((0, _.P)(a)); } shouldGenerateTrace(e) { return this.isDtEnabled() && this.isAllowedOrigin(e); } isAllowedOrigin(e) { var t = !1, r = {}; if ( ((0, n.Mt)(this.agentIdentifier, 'distributed_tracing') && (r = (0, n.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) ) t = !0; else if (r.allowed_origins instanceof Array) for (var i = 0; i < r.allowed_origins.length; i++) { var o = (0, U.e)(r.allowed_origins[i]); if (e.hostname === o.hostname && e.protocol === o.protocol && e.port === o.port) { t = !0; break; } } return t; } isDtEnabled() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.enabled; } excludeNewrelicHeader() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.exclude_newrelic_header; } useNewrelicHeaderForCors() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !1 !== e.cors_use_newrelic_header; } useTraceContextHeadersForCors() { var e = (0, n.Mt)(this.agentIdentifier, 'distributed_tracing'); return !!e && !!e.cors_use_tracecontext_headers; } } var V = i(7825), q = ['load', 'error', 'abort', 'timeout'], G = q.length, W = n.Yu.REQ, X = n.Yu.XHR; class Q extends f { static featureName = V.t; constructor(e, t) { let i = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; if ((super(e, t, V.t, i), (0, n.OP)(e).xhrWrappable)) { (this.dt = new Z(e)), (this.handler = (e, t, r, n) => (0, T.p)(e, t, r, n, this.ee)); try { const e = { xmlhttprequest: 'xhr', fetch: 'fetch', beacon: 'beacon' }; l._A?.performance?.getEntriesByType('resource').forEach(t => { if (t.initiatorType in e && 0 !== t.responseStatus) { const n = { status: t.responseStatus }, i = { rxSize: t.transferSize, duration: Math.floor(t.duration), cbTime: 0 }; K(n, t.name), this.handler('xhr', [n, i, t.startTime, t.responseEnd, e[t.initiatorType]], void 0, r.D.ajax); } }); } catch (e) {} (0, B.u5)(this.ee), (0, B.Kf)(this.ee), (function (e, t, i, o) { function a(e) { var t = this; (t.totalCbs = 0), (t.called = 0), (t.cbTime = 0), (t.end = x), (t.ended = !1), (t.xhrGuids = {}), (t.lastSize = null), (t.loadCaptureCalled = !1), (t.params = this.params || {}), (t.metrics = this.metrics || {}), e.addEventListener( 'load', function (r) { E(t, e); }, (0, D.m$)(!1), ), l.IF || e.addEventListener( 'progress', function (e) { t.lastSize = e.loaded; }, (0, D.m$)(!1), ); } function s(e) { (this.params = { method: e[0] }), K(this, e[1]), (this.metrics = {}); } function c(t, r) { var i = (0, n.DL)(e); i.xpid && this.sameOrigin && r.setRequestHeader('X-NewRelic-ID', i.xpid); var a = o.generateTracePayload(this.parsedOrigin); if (a) { var s = !1; a.newrelicHeader && (r.setRequestHeader('newrelic', a.newrelicHeader), (s = !0)), a.traceContextParentHeader && (r.setRequestHeader('traceparent', a.traceContextParentHeader), a.traceContextStateHeader && r.setRequestHeader('tracestate', a.traceContextStateHeader), (s = !0)), s && (this.dt = a); } } function u(e, r) { var n = this.metrics, i = e[0], o = this; if (n && i) { var a = F(i); a && (n.txSize = a); } (this.startTime = (0, j.z)()), (this.body = i), (this.listener = function (e) { try { 'abort' !== e.type || o.loadCaptureCalled || (o.params.aborted = !0), ('load' !== e.type || (o.called === o.totalCbs && (o.onloadCalled || 'function' != typeof r.onload) && 'function' == typeof o.end)) && o.end(r); } catch (e) { try { t.emit('internal-error', [e]); } catch (e) {} } }); for (var s = 0; s < G; s++) r.addEventListener(q[s], this.listener, (0, D.m$)(!1)); } function d(e, t, r) { (this.cbTime += e), t ? (this.onloadCalled = !0) : (this.called += 1), this.called !== this.totalCbs || (!this.onloadCalled && 'function' == typeof r.onload) || 'function' != typeof this.end || this.end(r); } function f(e, t) { var r = '' + M(e) + !!t; this.xhrGuids && !this.xhrGuids[r] && ((this.xhrGuids[r] = !0), (this.totalCbs += 1)); } function h(e, t) { var r = '' + M(e) + !!t; this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], (this.totalCbs -= 1)); } function p() { this.endTime = (0, j.z)(); } function g(e, r) { r instanceof X && 'load' === e[0] && t.emit('xhr-load-added', [e[1], e[2]], r); } function m(e, r) { r instanceof X && 'load' === e[0] && t.emit('xhr-load-removed', [e[1], e[2]], r); } function v(e, t, r) { t instanceof X && ('onload' === r && (this.onload = !0), ('load' === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, j.z)())); } function b(e, r) { this.xhrCbStart && t.emit('xhr-cb-time', [(0, j.z)() - this.xhrCbStart, this.onload, r], r); } function y(e) { var t, r = e[1] || {}; if ( ('string' == typeof e[0] ? 0 === (t = e[0]).length && l.il && (t = '' + l._A.location.href) : e[0] && e[0].url ? (t = e[0].url) : l._A?.URL && e[0] && e[0] instanceof URL ? (t = e[0].href) : 'function' == typeof e[0].toString && (t = e[0].toString()), 'string' == typeof t && 0 !== t.length) ) { t && ((this.parsedOrigin = (0, U.e)(t)), (this.sameOrigin = this.parsedOrigin.sameOrigin)); var n = o.generateTracePayload(this.parsedOrigin); if (n && (n.newrelicHeader || n.traceContextParentHeader)) if (e[0] && e[0].headers) s(e[0].headers, n) && (this.dt = n); else { var i = {}; for (var a in r) i[a] = r[a]; (i.headers = new Headers(r.headers || {})), s(i.headers, n) && (this.dt = n), e.length > 1 ? (e[1] = i) : e.push(i); } } function s(e, t) { var r = !1; return ( t.newrelicHeader && (e.set('newrelic', t.newrelicHeader), (r = !0)), t.traceContextParentHeader && (e.set('traceparent', t.traceContextParentHeader), t.traceContextStateHeader && e.set('tracestate', t.traceContextStateHeader), (r = !0)), r ); } } function A(e, t) { (this.params = {}), (this.metrics = {}), (this.startTime = (0, j.z)()), (this.dt = t), e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]); var r, n = this.opts || {}, i = this.target; 'string' == typeof i ? (r = i) : 'object' == typeof i && i instanceof W ? (r = i.url) : l._A?.URL && 'object' == typeof i && i instanceof URL && (r = i.href), K(this, r); var o = ('' + ((i && i instanceof W && i.method) || n.method || 'GET')).toUpperCase(); (this.params.method = o), (this.body = n.body), (this.txSize = F(n.body) || 0); } function w(e, t) { var n; (this.endTime = (0, j.z)()), this.params || (this.params = {}), (this.params.status = t ? t.status : 0), 'string' == typeof this.rxSize && this.rxSize.length > 0 && (n = +this.rxSize); var o = { txSize: this.txSize, rxSize: n, duration: (0, j.z)() - this.startTime }; i('xhr', [this.params, o, this.startTime, this.endTime, 'fetch'], this, r.D.ajax); } function x(e) { var t = this.params, n = this.metrics; if (!this.ended) { this.ended = !0; for (var o = 0; o < G; o++) e.removeEventListener(q[o], this.listener, !1); t.aborted || ((n.duration = (0, j.z)() - this.startTime), this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : E(this, e), (n.cbTime = this.cbTime), i('xhr', [t, n, this.startTime, this.endTime, 'xhr'], this, r.D.ajax)); } } function E(e, t) { e.params.status = t.status; var r = (function (e, t) { var r = e.responseType; return 'json' === r && null !== t ? t : 'arraybuffer' === r || 'blob' === r || 'json' === r ? F(e.response) : 'text' === r || '' === r || void 0 === r ? F(e.responseText) : void 0; })(t, e.lastSize); if ((r && (e.metrics.rxSize = r), e.sameOrigin)) { var n = t.getResponseHeader('X-NewRelic-App-Data'); n && (e.params.cat = n.split(', ').pop()); } e.loadCaptureCalled = !0; } t.on('new-xhr', a), t.on('open-xhr-start', s), t.on('open-xhr-end', c), t.on('send-xhr-start', u), t.on('xhr-cb-time', d), t.on('xhr-load-added', f), t.on('xhr-load-removed', h), t.on('xhr-resolved', p), t.on('addEventListener-end', g), t.on('removeEventListener-end', m), t.on('fn-end', b), t.on('fetch-before-start', y), t.on('fetch-start', A), t.on('fn-start', v), t.on('fetch-done', w); })(e, this.ee, this.handler, this.dt), this.importAggregator(); } } } function K(e, t) { var r = (0, U.e)(t), n = e.params || e; (n.hostname = r.hostname), (n.port = r.port), (n.protocol = r.protocol), (n.host = r.hostname + ':' + r.port), (n.pathname = r.pathname), (e.parsedOrigin = r), (e.sameOrigin = r.sameOrigin); } var Y = i(3614); const { BST_RESOURCE: J, RESOURCE: ee, START: te, END: re, FEATURE_NAME: ne, FN_END: ie, FN_START: oe, PUSH_STATE: ae, } = Y; var se = i(7144); class ce extends f { static featureName = se.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, se.t, r), this.importAggregator(); } } var ue = i(7836); const { FEATURE_NAME: de, START: le, END: fe, BODY: he, CB_END: pe, JS_TIME: ge, FETCH: me, FN_START: ve, CB_START: be, FN_END: ye, } = ue; var Ae = i(4649); class we extends f { static featureName = Ae.t; constructor(e, t) { let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; super(e, t, Ae.t, r), this.importAggregator(); } } new (class extends t { constructor(t) { let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : (0, E.ky)(16); super(), l._A ? ((this.agentIdentifier = r), (this.sharedAggregator = new v({ agentIdentifier: this.agentIdentifier })), (this.features = {}), (this.desiredFeatures = new Set(t.features || [])), this.desiredFeatures.add(p), Object.assign(this, (0, s.j)(this.agentIdentifier, t, t.loaderType || 'agent')), this.run()) : (0, e.Z)('Failed to initial the agent. Could not determine the runtime environment.'); } get config() { return { info: (0, n.C5)(this.agentIdentifier), init: (0, n.P_)(this.agentIdentifier), loader_config: (0, n.DL)(this.agentIdentifier), runtime: (0, n.OP)(this.agentIdentifier), }; } run() { const t = 'features'; try { const n = a(this.agentIdentifier), i = [...this.desiredFeatures]; i.sort((e, t) => r.p[e.featureName] - r.p[t.featureName]), i.forEach(t => { if (n[t.featureName] || t.featureName === r.D.pageViewEvent) { const i = (function (e) { switch (e) { case r.D.ajax: return [r.D.jserrors]; case r.D.sessionTrace: return [r.D.ajax, r.D.pageViewEvent]; case r.D.sessionReplay: return [r.D.sessionTrace]; case r.D.pageViewTiming: return [r.D.pageViewEvent]; default: return []; } })(t.featureName); i.every(e => n[e]) || (0, e.Z)( '' .concat(t.featureName, ' is enabled but one or more dependent features has been disabled (') .concat((0, _.P)(i), '). This may cause unintended consequences or missing data...'), ), (this.features[t.featureName] = new t(this.agentIdentifier, this.sharedAggregator)); } }), (0, x.Qy)(this.agentIdentifier, this.features, t); } catch (r) { (0, e.Z)('Failed to initialize all enabled instrument classes (agent aborted) -', r); for (const e in this.features) this.features[e].abortHandler?.(); const n = (0, x.fP)(); return ( delete n.initializedAgents[this.agentIdentifier]?.api, delete n.initializedAgents[this.agentIdentifier]?.[t], delete this.sharedAggregator, n.ee?.abort(), delete n.ee?.get(this.agentIdentifier), !1 ); } } addToTrace(t) { (0, e.Z)('Call to agent api addToTrace failed. The session trace feature is not currently initialized.'); } setCurrentRouteName(t) { (0, e.Z)('Call to agent api setCurrentRouteName failed. The spa feature is not currently initialized.'); } interaction() { (0, e.Z)('Call to agent api interaction failed. The spa feature is not currently initialized.'); } })({ features: [ Q, p, C, class extends f { static featureName = ne; constructor(e, t) { if ((super(e, t, ne, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !l.il)) return; const n = this.ee; let i; (0, B.QU)(n), (this.eventsEE = (0, B.em)(n)), this.eventsEE.on(oe, function (e, t) { this.bstStart = (0, j.z)(); }), this.eventsEE.on(ie, function (e, t) { (0, T.p)('bst', [e[0], t, this.bstStart, (0, j.z)()], void 0, r.D.sessionTrace, n); }), n.on(ae + te, function (e) { (this.time = (0, j.z)()), (this.startPath = location.pathname + location.hash); }), n.on(ae + re, function (e) { (0, T.p)('bstHist', [location.pathname + location.hash, this.startPath, this.time], void 0, r.D.sessionTrace, n); }); try { (i = new PerformanceObserver(e => { const t = e.getEntries(); (0, T.p)(J, [t], void 0, r.D.sessionTrace, n); })), i.observe({ type: ee, buffered: !0 }); } catch (e) {} this.importAggregator({ resourceObserver: i }); } }, ce, P, we, k, class extends f { static featureName = de; constructor(e, t) { if ((super(e, t, de, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !l.il)) return; if (!(0, n.OP)(e).xhrWrappable) return; try { this.removeOnAbort = new AbortController(); } catch (e) {} let r, i = 0; const o = this.ee.get('tracer'), a = (0, B._L)(this.ee), s = (0, B.Lg)(this.ee), c = (0, B.BV)(this.ee), u = (0, B.Kf)(this.ee), d = this.ee.get('events'), f = (0, B.u5)(this.ee), h = (0, B.QU)(this.ee), p = (0, B.Gm)(this.ee); function g(e, t) { h.emit('newURL', ['' + window.location, t]); } function m() { i++, (r = window.location.hash), (this[ve] = (0, j.z)()); } function v() { i--, window.location.hash !== r && g(0, !0); var e = (0, j.z)(); (this[ge] = ~~this[ge] + e - this[ve]), (this[ye] = e); } function b(e, t) { e.on(t, function () { this[t] = (0, j.z)(); }); } this.ee.on(ve, m), s.on(be, m), a.on(be, m), this.ee.on(ye, v), s.on(pe, v), a.on(pe, v), this.ee.buffer([ve, ye, 'xhr-resolved'], this.featureName), d.buffer([ve], this.featureName), c.buffer(['setTimeout' + fe, 'clearTimeout' + le, ve], this.featureName), u.buffer([ve, 'new-xhr', 'send-xhr' + le], this.featureName), f.buffer([me + le, me + '-done', me + he + le, me + he + fe], this.featureName), h.buffer(['newURL'], this.featureName), p.buffer([ve], this.featureName), s.buffer(['propagate', be, pe, 'executor-err', 'resolve' + le], this.featureName), o.buffer([ve, 'no-' + ve], this.featureName), a.buffer(['new-jsonp', 'cb-start', 'jsonp-error', 'jsonp-end'], this.featureName), b(f, me + le), b(f, me + '-done'), b(a, 'new-jsonp'), b(a, 'jsonp-end'), b(a, 'cb-start'), h.on('pushState-end', g), h.on('replaceState-end', g), window.addEventListener('hashchange', g, (0, D.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener('load', g, (0, D.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener( 'popstate', function () { g(0, i > 1); }, (0, D.m$)(!0, this.removeOnAbort?.signal), ), (this.abortHandler = this.#i), this.importAggregator(); } #i() { this.removeOnAbort?.abort(), (this.abortHandler = void 0); } }, ], loaderType: 'spa', }); })(); })(); </script> <!-- NR Script End for www.pearson.com --> <!-- OneTrust Cookies Consent Notice start for www.pearson.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="0d545d30-0e52-4bd4-bbe4-db2d55525649"></script> <script type="text/javascript"> function OptanonWrapper() { var profile = blueConicClient.profile.getProfile(); if(!OnetrustActiveGroups.includes("C0004")){ profile.permission.setLevel(blueConicClient.permission.level.DO_NOT_TRACK); blueConicClient.profile.updateProfile(); } else { profile.permission.setLevel(blueConicClient.permission.level.PERSONAL); blueConicClient.profile.updateProfile(); } } </script> <!-- OneTrust Cookies Consent Notice end for www.pearson.com --> <!-- Start VWO Async SmartCode --> <script> window._vwo_code = window._vwo_code || (function () { var account_id = 725134, version = 1.5, settings_tolerance = 2000, library_tolerance = 2500, use_existing_jquery = false, is_spa = 1, hide_element = "", hide_element_style = "opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important", /* DO NOT EDIT BELOW THIS LINE */ f = false, d = document, vwoCodeEl = d.querySelector("#vwoCode"), filterToleranceTimer, code = { use_existing_jquery: function () { return use_existing_jquery; }, library_tolerance: function () { return library_tolerance; }, hide_element_style: function () { return "{" + hide_element_style + "}"; }, finish: function () { if (!f) { f = true; var a = d.getElementById("_vis_opt_path_hides"); if (a) a.parentNode.removeChild(a); } }, finished: function () { return f; }, load: function (a) { var b = d.createElement("script"); b.src = a; b.type = "text/javascript"; b.innerText; b.onerror = function () { _vwo_code.finish(); }; d.getElementsByTagName("head")[0].appendChild(b); }, getVersion: function () { return version; }, getMatchedCookies: function (matchPattern) { var matchedCookies = []; if (document.cookie) { matchedCookies = document.cookie.match(matchPattern) || []; } return matchedCookies; }, getCombinationCookie: function () { var matchedCookies = code.getMatchedCookies( /(?:^|;)\s?(_vis_opt_exp_\d+_combi=[^;$]*)/gi ); matchedCookies = matchedCookies.map(function (cookie) { try { var decodedCookie = decodeURIComponent(cookie); if ( !/_vis_opt_exp_\d+_combi=(?:\d+,?)+\s*$/.test(decodedCookie) ) { return ""; } return decodedCookie; } catch (e) { return ""; } }); var combinations = []; matchedCookies.forEach(function (each) { var cookiePair = each.match(/([\d,]+)/g); cookiePair && combinations.push(cookiePair.join("-")); }); return combinations.join("|"); }, init: function () { if (d.URL.indexOf("__vwo_disable__") > -1) return; window.settings_timer = setTimeout(function () { _vwo_code.finish(); _vwo_code.removeLoaderAndOverlay(); }, settings_tolerance); var filterConfig = this.filterConfig; if (!filterConfig || filterConfig.filterTime === "balanced") { var a = d.createElement("style"), b = hide_element ? hide_element + "{" + hide_element_style + "}" : "", h = d.getElementsByTagName("head")[0]; a.setAttribute("id", "_vis_opt_path_hides"); vwoCodeEl && a.setAttribute("nonce", vwoCodeEl.nonce); a.setAttribute("type", "text/css"); if (a.styleSheet) a.styleSheet.cssText = b; else a.appendChild(d.createTextNode(b)); h.appendChild(a); } if (filterConfig && filterConfig.filterTime === "early") { this.removeLoaderAndOverlay(); } var c = this.getCombinationCookie(); this.load( "https://dev.visualwebsiteoptimizer.com/j.php?a=" + account_id + "&u=" + encodeURIComponent(d.URL) + "&f=" + +is_spa + "&vn=" + version + (c ? "&c=" + c : "") ); return settings_timer; }, setFilterConfigAndApplyFilter: function (config) { if (!config) { return; } var state = this.isNonLiveMode(account_id) || config.isConsentGiven(); if (state === "1") { hide_element = "body"; window._vwo_settings_timer = _vwo_code.init(); return; } else if (state === "2") { return; } function clearIntervals(timerIds) { for (var i = 0; i < timerIds.length; i++) { clearInterval(timerIds[i]); } } this.filterConfig = config; var popupTimer = setInterval(function () { if (_vwo_code.applyFilters(config)) { clearInterval(popupTimer); } }, 100); var timer = setInterval(function () { var state = config.isConsentGiven(); var shouldClearAllIntervals; if (state === "1") { _vwo_code.showLoader(); window._vwo_settings_timer = _vwo_code.init(); shouldClearAllIntervals = true; } else if (state === "2") { _vwo_code.filterConfig = undefined; _vwo_code.removeLoaderAndOverlay(); shouldClearAllIntervals = true; } if (shouldClearAllIntervals) { clearIntervals([timer, popupTimer]); clearInterval(filterToleranceTimer); } }, 100); if (config.filterTolerance) { filterToleranceTimer = setTimeout(function () { _vwo_code.removeLoaderAndOverlay(); clearIntervals([timer, popupTimer]); }, config.filterTolerance); } }, showLoader: function () { var vwoOverlay = d.getElementsByClassName("vwo-overlay")[0]; if (!vwoOverlay) return; var vwoContentLoader = d.createElement("div"); vwoContentLoader.classList.add("vwo-content-loader"); vwoOverlay.parentNode.insertBefore( vwoContentLoader, vwoOverlay.nextSibling ); }, applyFilters: function (config) { var popup = d.querySelector(config.popupSelector); var popupZIndex; if (!popup && d.getElementById("_vis_opt_overlay")) { return; } var maxZIndex = 2147483647; if (popup) { var popupStyle = window.getComputedStyle(popup); popupZIndex = popupStyle.getPropertyValue("z-index"); if (!popupZIndex || popupZIndex === "auto") { popupZIndex = maxZIndex; } popup.style.zIndex = popupZIndex; } popupZIndex = popupZIndex || maxZIndex; var vwoFilter = "position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: 100%; width: 100%; -webkit-filter: blur(5px); filter: blur(5px); backdrop-filter: saturate(180%) blur(3px); -webkit-backdrop-filter: saturate(180%) blur(3px); z-index:" + (popupZIndex - 1) + ";", vwoLoaderCss = " .vwo-content-loader{ border: 16px solid #f3f3f3; border-top: 16px solid #3498db; border-radius: 50%; width: 90px; height: 90px; position: fixed; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); animation: vwo-spin 2s linear infinite; z-index:" + (popupZIndex - 1) + "; }" + "@keyframes vwo-spin { 0% { -webkit-transform: translate(-50%, -50%) rotate(0deg); transform: translate(-50%, -50%) rotate(0deg); } 100% { -webkit-transform: translate(-50%, -50%) rotate(360deg); transform: translate(-50%, -50%) rotate(360deg); } }"; /** * This below written code should not be tweaked * */ var overlayStyleTag = d.getElementById("_vis_opt_overlay"), overlayCSS = ".vwo-overlay{" + vwoFilter + "}" + vwoLoaderCss; if (overlayStyleTag) { if (overlayStyleTag.styleSheet) { overlayStyleTag.styleSheet.cssText = overlayCSS; } else { var _vwo_textNode = d.createTextNode(overlayCSS); overlayStyleTag.appendChild(_vwo_textNode); overlayStyleTag.removeChild(overlayStyleTag.childNodes[0]); } } else { var a = d.createElement("style"), h = d.getElementsByTagName("head")[0], body = d.getElementsByTagName("body")[0]; var vwoOverlay = d.createElement("div"); vwoOverlay.classList.add("vwo-overlay"); body.prepend(vwoOverlay); a.setAttribute("id", "_vis_opt_overlay"); a.setAttribute("type", "text/css"); if (a.styleSheet) a.styleSheet.cssText = overlayCSS; else a.appendChild(d.createTextNode(overlayCSS)); h.appendChild(a); } return !!popup; }, removeLoaderAndOverlay: function () { var overlay = d.getElementsByClassName("vwo-overlay"); var loader = d.getElementsByClassName("vwo-content-loader"); var overlayStyleTag = d.getElementById("_vis_opt_overlay"); overlay && (overlay = overlay[0]) && overlay.parentElement.removeChild(overlay); loader && (loader = loader[0]) && loader.parentElement.removeChild(loader); overlayStyleTag && overlayStyleTag.parentElement.removeChild(overlayStyleTag); }, isNonLiveMode: function (accountId) { var wName = window.name; if (!wName) { return; } return ( (wName.indexOf("_vis_editor") > -1 || wName.indexOf("_vis_preview_" + accountId) > -1 || wName.indexOf("_vis_heatmap_" + accountId) > -1) && "1" ); }, }; return code; })(); _vwo_code.setFilterConfigAndApplyFilter({ popupSelector: "SELECTOR_PATH_OF_POPUP", filterTime: "FILTER_TIME_AS_PER_YOUR_PREFERENCE", isConsentGiven: function () { var consented =document.cookie.indexOf("C0004%3A1"); if(consented >-1) { return '1'; } else if (consented === -1) { return '2'; } else { return '3'; } }, filterTolerance: "HARD_TIMER_FOR_REMOVING_OVERLAY_AND_POPUP", }); </script> <!-- End VWO Async SmartCode --> <!-- BlueConic script start --> <script type="text/javascript" class="optanon-category-C0004" src="https://k244.pearson.com/script.js"></script> <!-- BlueConic script end --> <!-- Algolia start for pearson.com --> <script type="text/javascript"> var algoliaConfigPath = "/etc/clientlibs/global-store/algolia-search/algolia-configs/live/global-store/sites/en-us/pearsonplus/algolia-config.2.json"; </script> <!-- Algolia end for pearson.com --> <!-- Chat-bot --> <script type="text/javascript" src="https://service.force.com/embeddedservice/5.0/esw.min.js"></script> <!-- / Chat-bot --> <script src="/etc/clientlibs/platform/aem-core/components/content/analytics.min.ACSHASHcf7450745ed4806f0fd9936a4bd0d7f9.js"></script> <script id="digital-data-layer" type="text/javascript"> dataLayer = [{ "version" : "1.0", "site" : { "siteId" : "Pearson+ | US", "siteLabel" : "Pearson+", "domain" : "pearson.com", "siteSection" : "pearsonplus", "language" : "en" }, "pageInfo" : { "pageTitle" : "Pearson+", "pageURL" : "/en-us/pearsonplus.html", "pageTemplate" : "/conf/pearsonplus/settings/wcm/templates/rootless-page", "dateCreated" : "2024-12-06T06:40:15.056Z", "lastUpdated" : "2024-12-06T06:40:04.643Z", "pageCategory" : "Static", "siteSection" : "pearsonplus", "isBypassEnabled" : false, "loginPageLink" : "/store/login", "breadcrumb" : [ "Home (US)", "Pearson+" ], "authHomePage" : "https://plus.pearson.com/home", "redirectIfAuthenticatedByIES" : true } }]; </script> <!-- Google Tag Manager New --> <script>(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-MVH69VF');</script> <!-- End Google Tag Manager --> <script src='https://login.pearson.com/v1/piapi/login/js/v2/session.js'></script> <script type="text/javascript"> var globalProperties = {"siteId":"global-store","homePageLevel":3,"sitemapLevel":5,"sitemapIndexLevel":4,"msmSitesLevel":0,"selfReferencingCanonical":false,"extensionRemovalEnabled":false,"sitemapAlternativeLinksEnabled":false,"firstLevelNavEnabled":true,"secondLevelNavEnabled":true,"navContentEnabled":true,"footerFilteringEnabled":true,"useHomePageLevelInBreadcrumbs":true,"automaticMSMCanonicalTagEnabled":false,"columnControlConfigPath":"/etc/config/platform/aem-core/components/content/column-control-v3/columns","excludedContentPathsForSelfReferencingCanonicalTag":[],"navColumnControlConfigPath":"/etc/config/platform/aem-core/components/content/column-control-v3/columns","embedPageConfigPath":"/etc/config/platform/aem-core/components/page/embed-page/column-width-v2","megaNavContentBSVersion":4,"breadcrumbVersion":"v1","seoBreadcrumbEnabled":false,"seoHtmlMarkupEnabled":false,"enablePageLevelBreadcrumb":false,"blogPostConfig":true,"displayViewAllTagsForBlogs":false,"displayViewAllTagsForEvents":false,"rtlPage":false,"displayPastDatesForEvents":false,"walletAddEditEnabled":false,"walletAttemptsLimitationLogic":false,"cartMergeEnabled":false,"cartToHybrisEnabled":false,"manageSubscriptionEnabled":false,"showAutorenew":false,"updateProfileEnabled":false,"seoToolEnabled":false,"masterNodeDisabledForPreviewServer":false,"altTextGenerationEnabled":false,"recaptchValidationEnabled":true,"recaptchaV3Enabled":false,"multicoloredFaviconEnabled":false,"includeHiddenPagesInSitemap":false,"disableChatbotForInternalUsers":false,"contentSelectorExportJsonEnabled":false,"customDropdownEnabled":false,"contentTileNonSemanticMarkupEnabled":false,"tabPanelAccessibleMarkupEnabled":false,"localeSelectionAccessibleMarkupEnabled":false,"youTubeLazyLoadingEnabled":false,"heroSlideVideoBackgroundEnabled":false,"eventHeadingStyle":"h2","globalProperties":[{"errorPage":"/content/global-store/sites/en-us/pearsonplus/error.html"},{"ies-server-root":"https://login.pearson.com/v1/piapi"},{"ies-server-login-path":"/iesui/signin"},{"pmc-services-server-root":"https://service.pearson.com/pmc-services/user-profile-state"},{"ies-server-signup-path":"/iesui/signup"},{"ies-server-reset-password-path":"/iesui/forgot-unpw"},{"progressive-profile-second-step-url":"https://www.pearson.com/en-us/pearsonplus/user/profiling"},{"launchdarkly-client-id":"65314c1b6faa991281047bf6"},{"ies-client-id":"ejQ30eVDKpw6inZeCXwIaBAcLikqQT2a"}],"translations":{},"productMetatagNames":[],"navLibsCategories":["one-dot-com.one-dot-com.navigation-pearsonplus.nav-hybris","dmcp.globalmessage","one-dot-com.one-dot-com.pearsonplus-chatbot","global.store.algolia-search.pearsonplus","dmcp.custom-header-handler"],"localesInfo":[],"suppressedExcludedLibsCategories":["one-dot-com.one-dot-com.pearsonplus-chatbot"],"standaloneLibsCategories":["global.store.algolia-search.pearsonplus","one-dot-com.one-dot-com.navigation-pearsonplus.nav-standalone","dmcp.globalmessage"]}; </script> <script type="text/javascript"> (function() { window.ContextHub = window.ContextHub || {}; /* setting paths */ ContextHub.Paths = ContextHub.Paths || {}; ContextHub.Paths.CONTEXTHUB_PATH = "/conf/pearsonplus/settings/cloudsettings/contexthub-configuration/contexthub"; ContextHub.Paths.RESOURCE_PATH = "\/content\/global\u002Dstore\/sites\/en\u002Dus\/pearsonplus\/_jcr_content\/contexthub"; ContextHub.Paths.SEGMENTATION_PATH = "\/conf\/pearsonplus\/settings\/wcm\/segments"; ContextHub.Paths.CQ_CONTEXT_PATH = ""; /* setting initial constants */ ContextHub.Constants = ContextHub.Constants || {}; ContextHub.Constants.ANONYMOUS_HOME = "/home/users/f/ffM8qDPc6PG4dId9Yn-e"; ContextHub.Constants.MODE = "no-ui"; }()); </script><script src="/conf/pearsonplus/settings/cloudsettings/contexthub-configuration/contexthub.kernel.js" type="text/javascript"></script> <script src="/etc/clientlibs/platform/aem-core/libraries/jquery-noconflict.min.ACSHASHa4ed5a17b4a8ad9b7f91f37ca61f836f.js"></script> <link rel="alternate" hreflang="en-US" href="https://www.pearson.com/en-us/pearsonplus.html"/> <script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="XCNNJ-G8PCV-U855W-LP259-ULUSU",function(){function e(){if(!r){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,o.appendChild(e),r=!0}}function t(e){r=!0;var n,t,a,i,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(o,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",i=(a.frameElement||a).style,i.width=0,i.height=0,i.border=0,i.display="none",o.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void 0;",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=14,window.BOOMR.url=n+"XCNNJ-G8PCV-U855W-LP259-ULUSU";var i=document.currentScript||document.getElementsByTagName("script")[0],o=i.parentNode,r=!1,d=document.createElement("link");if(d.relList&&"function"==typeof d.relList.supports&&d.relList.supports("preload")&&"as"in d)window.BOOMR.snippetMethod="p",d.href=window.BOOMR.url,d.rel="preload",d.as="script",d.addEventListener("load",e),d.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!r)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),o.appendChild(d);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=""=="true"?1:0,t="",a="bdpnbevydq2gsz227via-f-3c17ae492-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,o={"ak.v":"39","ak.cp":"797525","ak.ai":parseInt("503985",10),"ak.ol":"0","ak.cr":4,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"1b0745cc","ak.r":23331,"ak.a2":n,"ak.m":"x","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":41192,"ak.gh":"23.50.232.140","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1734016336","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==Q1hGcx2Qd+LLlRFfg7xbQ8qyMScgIJS4G8snzboCCAWfrk4yj2ofZldIMFtPsfL+OpW3ZuZfP3HhJ66dSQlD/o76GNEOUhvckmasPXrR9Cg7i3hS58ll8hsLHFbkXG7qrImhpCASvLqAclqeSHk63GNLSk4gARvUksVnlXM+4WRTsew39IlL4ih+I4TacEY+v91pvGL+0wENd1ci6pQleFRz2KqGPqvPA0xZg3ANmclgg/5I8NlC+f7GYve4a5gBiOZpHvGVdCA8Tupo4oEBUPlbqsmL3F2ScThmRjM9PBnsW/gU650kK9SuGm29PActoLaqI6x+omnY7ajyUoV1Gnm9AmX3IghakdZDM4B64Pl5Y5Ks0S3eRdR74sCCSaNM4w+QKWHZ8jM87Qx9lvyhlErj88WKoG6sadhbCne8tsA=","ak.pv":"153","ak.dpoabenc":"","ak.tf":i};if(""!==t)o["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))o["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head> <body data-breadcrumb="false" class="rootless-page page basicpage" id="rootless-page-2541cebaec"> <script src="/etc/clientlibs/platform/aem-core/ies-session.min.ACSHASH70b4b3c7e053d633c2d7be7163e8646a.js"></script> <header> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><section class="column-control layout-default bgcolor--default default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule nav__wrapper nav-content-selector section"> <div class="container"> <div class="row"><div class="col-12"><div class="logo-v2 header__logo section"> <a id="logo-header-pearsonplus" href="https://www.pearson.com/en-us/pearsonplus.html"> <picture> <source media="(max-width: 55px)" srcset="/content/dam/global-store/global/pearplus/logos-and-wordmarks/logo--pearson-plus.svg"/> <img src="/content/dam/global-store/global/pearplus/logos-and-wordmarks/logo--pearson-plus.svg" alt="Pearson+"/> </picture> </a> </div> <div class="function-panel mojo-nav__search content-data-selector section"> <div class="facet__auto_suggest" data-fp-attributes="{"productsTitle":"PRODUCTS","suggestedTitle":"SUGGESTED SEARCHES"}" data-hide-tags="true"></div> </div> <div class="text mojo-nav__secure-text hide section"> <p>Secure Checkout</p> </div> <div class="text create-account-button hide section"> <p><a href="/store/en-us/pearsonplus/login?form=registration">Create account</a></p> </div> <div class="custom-header section"> <nav class="custom-header__container container"> <div id="custom-header" class="row" data-header-path="/store/en-us/pearsonplus/commerce-header-v2"></div> </nav> </div> </div></div> </div> </section> <div class="iparys_inherited"><div class="iparsys parsys"></div> </div> </div> </div> </header> <main role="main"> <div> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control bgcolor--indigo default-padding-top default-padding-bottom min-height--600 aem-GridColumn aem-GridColumn--default--12"> <style> .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png'); background-size: ; background-position: bottom; background-repeat: repeat-x; } @media (max-width:320px) { .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png.transform/tiny-size-xs/img.png'); } } @media (max-width:480px) { .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png.transform/tiny-size-xl/img.png'); } } @media (max-width:991px) { .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png.transform/medium-size/img.png'); } } @media (max-width:1199px) { .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png.transform/big-size-xs/img.png'); } } @media (min-width:1200px) { .bg-969388885 { background-image: url('/content/dam/global-store/global/pearplus/promosummer-curve.png.transform/big-size-xl/img.png'); } } </style> <div class="column-control--bg bg-969388885 "></div> <div class="container"> <div class="row"><div class="col-md-2 col-12"></div><div class="col-md-8 col-12"><div class="content-tile pad--0__figure pad-eq-vertical--0__caption color--white-tinted section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <div class="content-tile-text rte-container"><h1>Pearson+<br /> eTextbooks, study videos, and more — all in one place</h1> </div> </div> </div> </div> </div> <section class="column-control bgcolor--default has-padding-top--none has-padding-bottom--none default-padding-horizontal section pull-up-10-percent"> <div class="row"><div class="col-12"></div></div> </section> <div class="content-tile text-primary-link button-primary pad-bottom--0__pad-top--45__caption pad-eq-horizontal--0__caption color--white-tinted title-typesize--h4 section"> <div class="content-tile-container"> <div class="content-tile__figure"> <div class="content-tile__figcaption"> <div class="content-tile-text rte-container"><h4>Find your eTextbook now. <br /> </h4> </div> </div> </div> </div> </div> <div class="function-panel mojo-hero__search onedotcom-page-search mojo-nav__search has-margin-top--15 has-padding-left--60__has-padding-right--15 section"> <div class="facet__auto_suggest" data-fp-attributes="{"productsTitle":"PRODUCTS","suggestedTitle":"SUGGESTED SEARCHES"}" data-hide-tags="true"></div> </div> <div class="text button-primary text-primary-link has-padding-top--15 has-padding-bottom--45 section"> <p style="text-align: left;"><a href="https://www.pearson.com/en-us/pearsonplus/search.html">View all eTextbooks</a></p> </div> </div><div class="col-md-2 col-12"></div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout bgcolor--default aem-GridColumn aem-GridColumn--default--12 pull-up-10-percent"> <div class="container"> <div class="row"><div class="col-md-4 col-12"><div class="content-tile bgcolor--white-tinted text-primary-link pad--default__figure pad-eq-vertical--30__caption pad-eq-horizontal--30__caption title-typesize--h3 corners-semiround-md boxshadow-sm section"> <div class="content-tile-container"> <figure> <picture style="--original-image-ratio: 1.379"> <source srcset="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg.transform/tiny-size-xs/img.jpeg" media="(max-width:320px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg.transform/tiny-size-xl/img.jpeg" media="(max-width:480px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg.transform/medium-size/img.jpeg" media="(max-width:991px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg.transform/big-size-xs/img.jpeg" media="(max-width:1199px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg.transform/big-size-xl/img.jpeg" media="(min-width:1200px)"/> <img loading='lazy' src="/content/dam/global-store/global/pearplus/hero-etextbooks@3x.jpg" alt="" role="presentation"/> </picture> <figcaption> <h2 class="content-tile__title">eTextbooks</h2> <div class="content-tile-text rte-container"><p>Choose from over 2,000 eTextbooks with audio, flashcards, notes, and more. Everything you need for class.<br /> </p> <p><a href="https://www.pearson.com/en-us/pearsonplus/search.html">Find your eTextbook</a></p> </div> </figcaption> </figure> </div> </div> </div><div class="col-md-4 col-12"><div class="content-tile bgcolor--white-tinted text-primary-link pad--default__figure pad-eq-vertical--30__caption pad-eq-horizontal--30__caption title-typesize--h3 corners-semiround-md boxshadow-sm section"> <div class="content-tile-container"> <figure> <picture style="--original-image-ratio: 1.379"> <source srcset="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg.transform/tiny-size-xs/img.jpeg" media="(max-width:320px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg.transform/tiny-size-xl/img.jpeg" media="(max-width:480px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg.transform/medium-size/img.jpeg" media="(max-width:991px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg.transform/big-size-xs/img.jpeg" media="(max-width:1199px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg.transform/big-size-xl/img.jpeg" media="(min-width:1200px)"/> <img loading='lazy' src="/content/dam/global-store/global/pearplus/hero-channels@3x.jpg" alt="" role="presentation"/> </picture> <figcaption> <h2 class="content-tile__title">Channels | Study & Exam Prep</h2> <div class="content-tile-text rte-container"><p>Watch videos that break down concepts. Take practice exams to help get the results you want. Starting at $7.99/mo.</p> <p><a href="https://www.pearson.com/channels?CEP=plusHP">Go to Channels</a></p> </div> </figcaption> </figure> </div> </div> </div><div class="col-md-4 col-12"><div class="content-tile bgcolor--white-tinted text-primary-link pad--default__figure pad-eq-vertical--30__caption pad-eq-horizontal--30__caption title-typesize--h3 corners-semiround-md boxshadow-sm section"> <div class="content-tile-container"> <figure> <picture style="--original-image-ratio: 1.379"> <source srcset="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg.transform/tiny-size-xs/img.jpeg" media="(max-width:320px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg.transform/tiny-size-xl/img.jpeg" media="(max-width:480px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg.transform/medium-size/img.jpeg" media="(max-width:991px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg.transform/big-size-xs/img.jpeg" media="(max-width:1199px)"/> <source srcset="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg.transform/big-size-xl/img.jpeg" media="(min-width:1200px)"/> <img loading='lazy' src="/content/dam/global-store/global/pearplus/hero-job-match@3x.jpg" alt="" role="presentation"/> </picture> <figcaption> <h2 class="content-tile__title">Job Match</h2> <div class="content-tile-text rte-container"><p>Find an internship or job that’s right for you. Access free work style self-assessments and insights to help you stand out.</p> <p><a href="https://www.pearson.com/jobmatch">Get started</a></p> </div> </figcaption> </figure> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control bgcolor--white-tinted default-padding-top has-padding-bottom--45 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-12"><div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><h2>Included with your eTextbook</h2> </div> </figcaption> </figure> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control bgcolor--white-tinted has-padding-top--none default-padding-bottom aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-6 col-12"><div class="content-tile corners-semiround-md section"> <div class="content-tile-container"> <figure> <picture style="--original-image-ratio: 1.902"> <source srcset="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png.transform/tiny-size-xs/img.png" media="(max-width:320px)"/> <source srcset="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png.transform/tiny-size-xl/img.png" media="(max-width:480px)"/> <source srcset="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png.transform/medium-size/img.png" media="(max-width:991px)"/> <source srcset="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png.transform/big-size-xs/img.png" media="(max-width:1199px)"/> <source srcset="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png.transform/big-size-xl/img.png" media="(min-width:1200px)"/> <img loading='lazy' src="/content/dam/global-store/global/pearplus/Mondly/mondly-dark-1638x861.png" alt="" role="presentation"/> </picture> </figure> </div> </div> </div><div class="col-md-6 col-12"><div class="content-tile button-primary pad-eq-vertical--default__caption section"> <div class="content-tile-container" data-gtm-attribute="mondly" data-gtm-project="partnerships"> <figure> <figcaption> <div class="content-tile-text rte-container"><h3>Mondly by Pearson<br /> </h3> <h4>Get fluent faster with our language learning app</h4> <ul> <li>Enjoy free, unlimited access to 41 languages</li> <li>Get quick lessons designed by world-class linguists</li> <li>Practice your conversations with chatbots</li> </ul> <p><a href="https://www.pearson.com/en-us/pearsonplus/search.html">Choose your eTextbook</a></p> </div> </figcaption> </figure> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control has-padding-bottom--none aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-12"><div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><h2 style="text-align: center;">Choose what you need to get ahead</h2> </div> </figcaption> </figure> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control flex-layout has-padding-top--45 has-padding-bottom--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-md-4 col-12"><div class="content-tile content-tile-panel-item-main bgcolor--indigo text-primary-link button-primary button-wide color--white-tinted section"> <div class="content-tile-container"> <figure> <figcaption> <h2 class="content-tile__title">eTextbook</h2> <div class="content-tile-text rte-container"><h2 style="text-align: center;">$8.49/mo<br /> </h2> <p style="text-align: center;"><span class="minor">6-month term, pay monthly or pay $50.94 upfront</span></p> <ul> <li style="text-align: left;"><b>Instant access to eTextbook</b></li> <li style="text-align: left;"><b>Search, highlight, notes and more</b></li> <li style="text-align: left;"><b>Audio with read-along</b></li> </ul> <p style="text-align: center;"><a href="https://www.pearson.com/en-us/pearsonplus/search.html">Find your eTextbook</a></p> </div> </figcaption> </figure> </div> </div> </div><div class="col-md-4 col-12"><div class="content-tile content-tile-panel-item-main bgcolor--indigo text-primary-link button-primary button-wide color--white-tinted section"> <div class="content-tile-container"> <figure> <figcaption> <h2 class="content-tile__title">Channels</h2> <div class="content-tile-text rte-container"><h2 style="text-align: center;">From $7.99/mo<br /> </h2> <p style="text-align: center;"><span class="minor">Pay monthly or pay upfront quarterly or annually</span></p> <ul> <li style="text-align: left;"><b>Thousands of curated study videos</b></li> <li style="text-align: left;"><b>Practice quizzes</b></li> <li style="text-align: left;"><b>AI-powered summaries</b></li> </ul> <p style="text-align: center;"><a href="https://www.pearson.com/channels?CEP=plusHP">Go to Channels</a></p> </div> </figcaption> </figure> </div> </div> </div><div class="col-md-4 col-12"><div class="content-tile content-tile-panel-item-main bgcolor--indigo text-primary-link button-primary button-wide color--white-tinted section"> <div class="content-tile-container"> <figure> <figcaption> <h2 class="content-tile__title">Job Match</h2> <div class="content-tile-text rte-container"><h2 style="text-align: center;">Free<br /> </h2> <p style="text-align: center;"><span class="minor">No cost, simply sign up to get started</span></p> <ul> <li style="text-align: left;"><b>Internship and job recommendations</b></li> <li style="text-align: left;"><b>Work style insights</b></li> <li style="text-align: left;"><b>Skill-building courses</b></li> </ul> <p style="text-align: center;"><a href="https://www.pearson.com/jobmatch">Get started</a></p> </div> </figcaption> </figure> </div> </div> </div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control has-padding-top--15 aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-12"></div></div> </div> </section> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="embed aem-GridColumn aem-GridColumn--default--12"> <section class="column-control layout-default bgcolor--white-tinted clipping-default gradients-default animated default-gutters has-padding-top--45 has-padding-bottom--30 default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow section"> <div class="container"> <div class="row"><div class="col-12"><div class="title bgcolor--default default-color text-align--center default-type-family default-padding-top default-padding-bottom default-padding-box section"> <h2 class="bgcolor--default default-color text-align--center default-type-family default-padding-top default-padding-bottom default-padding-box "> Learn whenever, wherever you go </h2></div> <div class="content-tile default-design-template behavior--none content-tile-portrait default-layout-alignment bgcolor--default default-links default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color default-title-typesize default-title-typefamily default-title-typeweight default-title-color default-subtitle-typefamily default-subtitle-typesize default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-corner-radius default-shadow section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><h4 style="text-align: center;">Get the Pearson+ app to access your eTextbooks and Channels anywhere</h4> </div> </figcaption> </figure> </div> </div> <section class="column-control layout-default bgcolor--default clipping-default gradients-default default-animation default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule default-corner-radius default-shadow section"> <div class="row"><div class="col-xl-2 col-lg-4 col-md-6 col-12"></div><div class="col-xl-2 col-lg-4 col-md-6 col-12"></div><div class="col-xl-2 col-lg-4 col-md-6 col-12"><div class="content-tile content-tile-icon behavior--none content-tile-portrait default-layout-alignment bgcolor--default default-links default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color default-title-typesize default-title-typefamily default-title-typeweight default-title-color default-subtitle-typefamily default-subtitle-typesize default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-corner-radius default-shadow section"> <div class="content-tile-container"> <figure> <a href="https://pearsonplus.page.link/Mojo_eText_row"> <picture> <img loading='lazy' src="/content/dam/global-store/global/pearplus/badges/badge--app-store-new.svg" alt="" role="presentation"/> </picture> </a> </figure> </div> </div> </div><div class="col-xl-2 col-lg-4 col-md-6 col-12"><div class="content-tile content-tile-icon behavior--none content-tile-portrait default-layout-alignment bgcolor--default default-links default-btn-type default-btn-size default-btn-width pad--default__figure pad-eq-vertical--default__caption pad-eq-horizontal--default__caption default-color default-title-typesize default-title-typefamily default-title-typeweight default-title-color default-subtitle-typefamily default-subtitle-typesize default-subtitle-typeweight default-subtitle-color default-content-tile-text--col-count default-corner-radius default-shadow section"> <div class="content-tile-container"> <figure> <a href="https://pearsonplus.page.link/Mojo_eText_row_Android"> <picture> <img loading='lazy' src="/content/dam/global-store/global/pearplus/badges/badge--google-play.svg" alt="" role="presentation"/> </picture> </a> </figure> </div> </div> </div><div class="col-xl-2 col-lg-4 col-md-6 col-12"></div><div class="col-xl-2 col-lg-4 col-md-6 col-12"></div></div> </section> </div></div> </div> </section> </div> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <section class="column-control animated has-padding-top--45 default-padding-bottom aem-GridColumn aem-GridColumn--default--12"> <div class="container"> <div class="row"><div class="col-12"><div class="title default-color text-align--center section"> <h2 class=" "> Your questions answered </h2></div> <div class="accordion default-animation max-width--col-10 section"> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-1" aria-expanded="false"> <span>What's Pearson+?</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-1"> <div class="text section"> <p><a href="https://www.pearson.com/en-us/pearsonplus.html" target="_blank" class="new-window" aria-label="Pearson+. Opens new tab.">Pearson+</a> is a one-stop shop for eTextbooks and Study & Exam Prep (also referred to as Channels), both designed to help students get better grades in college. eTextbooks and Study & Exam Prep can be purchased separately or together.</p> <p>eTextbooks have built-in tools that simplify studying, like flashcards, audiobook and search. Study & Exam Prep includes video lessons, practice problems, study guides, Q&A with experts and more, to help you understand tricky topics and get you prepared for test time — all in one place.</p> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-2" aria-expanded="false"> <span>What's an eTextbook?</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-2"> <div class="text section"> <p>A Pearson eTextbook is an easy‑to‑use digital version of your assigned textbook. eTextbooks, available in Pearson+, give you access to upgraded study tools, including enhanced search, highlights and notes, customizable flashcards, and audio options for hand-free studying. Plus, you can learn on the go with the Pearson+ app.</p> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-3" aria-expanded="false"> <span>Does Pearson+ offer an eTextbook rental? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-3"> <div class="text section"> <p><a href="https://www.pearson.com/en-us/pearsonplus.html" target="_blank" class="new-window" aria-label="Pearson+. Opens new tab.">Pearson+</a> offers an eTextbook rental, billed as a 6-month subscription. A subscription includes instant access to your eTextbook, including study tools such as the ability to create custom flash cards, take notes, and the option to search and highlight important info in your eTextbook. You can also bundle your eTextbook with Study & Exam Prep.</p> <p>When you check out, you can make a one-time, up-front payment for your eTextbook, or you can choose to pay monthly. If you opt for monthly payments, we will charge your payment method each month until your 6-month subscription ends. If something happens and you need your eTextbook for longer than 6 months, select <b>Extend subscription</b> on the <b>Manage subscription</b> page in <a href="https://www.pearson.com/en-us/pearsonplus/my-account" target="_blank" class="new-window" aria-label="My account. Opens new tab.">My account</a> at any time to continue your subscription before it ends.</p> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-4" aria-expanded="false"> <span>How does the 6-month eTextbook subscription term work?</span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-4"> <div class="text section"> <p>eTextbooks are available for 180 days (6 months). You can make an up-front payment for your subscription or pay monthly. If you opt for monthly payments, we will charge your payment method each month until your subscription ends. You can select <b>Extend subscription</b> on the <b>Manage subscription</b> page in <a href="https://www.pearson.com/en-us/pearsonplus/my-account" target="_blank" class="new-window" aria-label="My account. Opens new tab.">My account</a> at any time to continue your subscription before it ends.</p> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-5" aria-expanded="false"> <span>How does auto-renewal work for eTextbooks? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-5"> <div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><p>When you purchase an eTextbook subscription, it will last 6 months. </p> <p>You can renew your subscription by selecting <b>Extend subscription</b> on the<b> Manage subscription</b> page in <a href="https://www.pearson.com/en-us/pearsonplus/my-account" target="_blank" class="new-window" aria-label="My account. Opens new tab.">My account</a> before your initial term ends.</p> <p>If you extend your subscription, we’ll automatically charge you every month. If you made a one-time payment for your initial 6-month term, you’ll now pay monthly. To make sure your learning is uninterrupted, please check your card details.</p> <p>To avoid the next payment charge, select <b>Cancel subscription</b> on the <b>Manage subscription</b> page in <a href="https://www.pearson.com/en-us/pearsonplus/my-account" target="_blank" class="new-window" aria-label="My account. Opens new tab.">My account</a> before the renewal date. You can subscribe again in the future by purchasing another eTextbook subscription. </p> </div> </figcaption> </figure> </div> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-6" aria-expanded="false"> <span>What’s Channels/Study & Exam Prep? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-6"> <div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><p><a href="https://www.pearson.com/channels" target="_blank" class="new-window" aria-label="Channels. Opens new tab.">Channels</a>, also referred to as Study & Exam Prep, is a video platform with thousands of explanations, solutions, and practice problems in 19 subjects to help you do homework and prep for exams. Videos are personalized to your course, and tutors walk you through solutions. Plus, interactive AI‑powered summaries and a social community help you understand lessons from your class.</p> </div> </figcaption> </figure> </div> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-7" aria-expanded="false"> <span>Does Channels/Study & Exam Prep replace my textbook? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-7"> <div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><p>Channels doesn’t replace traditional textbooks or eTextbooks. It’s an additional tool to help you with your studies, and it can be used with Pearson textbooks or non-Pearson textbooks. </p> </div> </figcaption> </figure> </div> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-8" aria-expanded="false"> <span>How does the Channels/Study & Exam Prep subscription work? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-8"> <div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><p>When you choose a Channels subscription, you're signing up for a 1‑month, 3‑month or 12‑month term and you make an upfront payment for your subscription. By default, these subscriptions auto‑renew at the frequency you select during checkout. You’ll have access to the full video library across all 19 subjects once you’ve subscribed.</p> <p>You can bundle Channels (also referred to as Study & Exam Prep) with your eTextbook at the time of purchase. Bundle subscription terms vary. You can choose your subscription term and payment frequency at checkout.</p> </div> </figcaption> </figure> </div> </div> </div> </section> <section class="accordion-panel"> <h3 class="accordion-panel-header"> <button aria-controls="1746689619-9" aria-expanded="false"> <span>How does auto-renewal work with Channels/Study & Exam Prep? </span> <span class="pull-right fa fa-plus"></span> </button> </h3> <div class="accordion-panel-content accordion-panel-hide" id="1746689619-9"> <div class="content-tile section"> <div class="content-tile-container"> <figure> <figcaption> <div class="content-tile-text rte-container"><p>When you purchase a Channels subscription, it will last 1 month, 3 months or 12 months, depending on the plan you chose. Your subscription will automatically renew at the end of your term unless you cancel it. </p> <p>We use your credit card to renew your subscription automatically. To make sure your learning is uninterrupted, please check your card details. If your payment method fails, we’ll send you an email with instructions for how to update it.</p> </div> </figcaption> </figure> </div> </div> </div> </section> </div> </div></div> </div> </section> </div> </div> </main> <footer> <div class="footer-underlay"></div> <div> <div class="aem-Grid aem-Grid--12 aem-Grid--default--12 "> <!-- Getting class names set from developer configurations and combining it with the one configured in the style tab --> <div class="iparsys parsys aem-GridColumn aem-GridColumn--default--12"><section class="column-control layout-default bgcolor--default default-gutters has-padding-top--45 has-padding-bottom--45 default-padding-horizontal default-min-height default-rule section mojo-footer__wrapper"> <div class="container"> <div class="row"><div class="col-12"><section class="column-control layout-default bgcolor--default default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule section"> <div class="row"><div class="col-12"><div class="logo-v2 footer__logo logo--light section"> <a id="logo-footer-pearsonplus" href="https://www.pearson.com/en-us/pearsonplus.html"> <picture> <source media="(max-width: 800px)"/> <img src="/content/dam/global-store/global/pearplus/logos-and-wordmarks/logo--pearson-plus.svg" alt="Pearson+"/> </picture> </a> </div> <div class="text color--default default-btn-type default-btn-size default-btn-width default-links has-padding-top--none has-padding-bottom--none mojo-footer__tagline section"> <p>This is you learning<br /> </p> </div> </div></div> </section> <div class="link-list mojo-footer__link-list section"> <div> <h3>Pearson+</h3> <ul id="mn-pearson"> <li> <a href="https://www.pearson.com/en-us/pearsonplus/pricing.html">Pricing </a> </li> <li> <a href="https://www.pearson.com/jobmatch">Job Match </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/languages.html" id="lan-footer-link">Languages </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/support.html">Help center </a> </li> <li> <a href="#" id="provide-feedback-link">Send us feedback </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/products-by-category.html">eTextbooks by subject </a> </li> </ul> </div> </div> <div class="link-list mojo-footer__link-list section"> <div> <h3>SUBJECTS</h3> <ul id="mn-subjects"> <li> <a href="/en-us/pearsonplus/search.html/Arts">Arts </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Business+%26+Economics">Business & Economics </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Computer+Science">Computer Science </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Engineering">Engineering </a> </li> <li> <a href="/en-us/pearsonplus/search.html/English">English </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Health+Professions">Health Professions </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Helping+Professions">Helping Professions </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Humanities">Humanities </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Information+Technology">Information Technology </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Mathematics">Mathematics </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Nursing">Nursing </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Science">Science </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Social+Sciences">Social Sciences </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Statistics">Statistics </a> </li> <li> <a href="/en-us/pearsonplus/search.html/Teacher+Education">Teacher Education </a> </li> <li> <a href="/en-us/pearsonplus/search.html/World+Languages">World Languages </a> </li> </ul> </div> </div> <section class="column-control layout-default bgcolor--default default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule section"> <div class="row"><div class="col-12"><div class="text color--default default-btn-type default-btn-size default-btn-width default-links has-padding-top--none has-padding-bottom--none mojo-footer__link-list section"> <h3>Get the app<p> </p> </h3> </div> <div class="logo-v2 section mojo-footer__app-badge mojo-footer__badge-2"> <a id="logo-footer-appstore" href="https://pearsonplus.page.link/Mojo_row"> <picture> <source media="(max-width: 800px)"/> <img src="/content/dam/global-store/global/pearplus/badges/badge--app-store-new.svg" alt="Download on the App Store"/> </picture> </a> </div> <div class="logo-v2 section mojo-footer__app-badge mojo-footer__badge-1"> <a id="logo-footer-playstore" href="https://pearsonplus.page.link/Mojo_row_Android"> <picture> <source media="(max-width: 800px)"/> <img src="/content/dam/global-store/global/pearplus/badges/badge--google-play.svg" alt="Get it on Google Play"/> </picture> </a> </div> </div></div> </section> </div></div> </div> </section> <section class="column-control layout-default bgcolor--default default-gutters has-padding-top--none has-padding-bottom--none default-padding-horizontal default-min-height default-rule mojo-footer__legal-notification section"> <div class="container"> <div class="row"><div class="col-12"><div class="legal-notification section"> <div class="container"> <div class="legal-notification-links-container"> <ul class="legal-notification-links"> <li> <a href="https://www.pearson.com/en-us/pearsonplus/legal/cookie-policy.html" target="_self" aria-label="Cookie Settings" id="open-ot-preference-modal"> Cookies </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/legal/terms-of-use.html" target="_self"> Terms of use </a> </li> <li> <a href="https://www.pearson.com/en-us/privacy-center.html" target="_self"> Privacy </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/legal/cookie-policy.html" target="_self"> Do Not Sell Or Share My Personal Information </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/legal/accessibility.html" target="_self"> Accessibility </a> </li> <li> <a href="https://www.pearson.com/en-us/pearsonplus/legal/patent-notice.html" target="_self"> Patent notice </a> </li> </ul> </div> <small class="legal-notification-copy">© 1996 – 2024 Pearson. All rights reserved.</small> </div> <div class="cq-placeholder" data-emptytext="Legal Notification"></div></div> </div></div> </div> </section> <div class="iparys_inherited"><div class="iparsys parsys"></div> </div> </div> </div> </div> </footer> <script src="/etc/clientlibs/platform/aem-core/libraries/jquery-ui-1-13-2.min.ACSHASH1e2047978946a1d271356d0b557a84a3.js"></script> <script src="/etc/clientlibs/global-store/configs/pearsonplus/page-js-body.min.ACSHASH1c616eb6990ae872598a35e2a9c421e8.js"></script> <script src="/etc/clientlibs/one-dot-com/one-dot-com/pearsonplus-chatbot.min.ACSHASH61ba0c766c0f873095e7264feb857ba1.js"></script> <div class="cloudservice script-include-service"> </div> <div class="cloudservice pearson-data-layer"> <script src="/etc/clientlibs/platform/aem-core/data-layer/user-info.min.ACSHASH97cb021293f880a63703a06739d36b3f.js"></script> </div> <div class="cloudservice gtm"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MVH69VF" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <script type="text/javascript"> var expirationTime = 21; </script> </div> <div class="cloudservice ecommerce-service-component"> <script src="https://www.pearson.com/store/_ui/addons/b2bacceleratoraddon/responsive/common/js/acc.orderform.js"></script> <script src="https://www.pearson.com/store/_ui/addons/pmciamaddon/responsive/common/js/pmciamaddon.js"></script> <div id="expectedMarkup" data-expected-markup="userNav"></div> <script src="/etc/clientlibs/platform/aem-core/components/content/ecommerce-header.min.ACSHASH5c82e1b93e13ad2b47dc3b444f36af1d.js"></script> </div> </body> </html>