CINXE.COM
Admin
<!-- APPLICATION LAYOUT --> <!DOCTYPE html> <html xmlns:og="http://ogp.me/ns#" lang="en-US"> <head> <!-- Data Layer --> <script> window.dataLayer = window.dataLayer || [{"bc.siteId":"CAL-SFPL","bc.language":"en-US","bc.libraryId":93,"bc.localBranch":null,"bc.shortName":"SFPL","bc.longName":"San Francisco Public Library","bc.domain":"sfpl","bc.externalGaId":"UA-235343005-1","bc.externalCoreGAId":"UA-235343005-1","bc.gaCrossDomainNames":[],"bc.gaCrossDomainEnabled":false,"bc.ga4MeasurementId":"G-PG25ME2BDE","bc.cmsEnabled":false,"bc.cmsUrl":"http://bibliocms.com/","bc.crazyEggId":"00178067","bc.allowGoogleAdFeatures":false,"bc.externalEventsGAId":null,"bc.product":"core","bc.version":"Version 9.25.0 Last updated 2024/10/01 11:54 [cor-liv-app20]"}]; </script> <!-- end Data Layer --> <!-- Start Google Tag Manager--> <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-TDPBXX');</script> <!-- End Google Tag Manager --> <!-- NEW RELIC --> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"167eb90b9b","applicationID":"3220185","transactionName":"cw0NTEZbVVpSFxkQV0MRCldaG1pEUgRCBg==","queueTime":0,"applicationTime":119,"agent":""}</script> <script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={xpid:"VQYAUFJaGwACVlFTDwQ=",licenseKey:"167eb90b9b",applicationID:"3220185"};;/*! For license information please see nr-loader-full-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);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{if(null===e[a]){r[a]=null;continue}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.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>d});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.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){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(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 d(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>h,gD:()=>p,xN:()=>g});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const d="[data-nr-mask]",u=()=>{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{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},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(d):""===t||null===t?e.mask_selector=d:(0,a.R)(5,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){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,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,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function h(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function g(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,u());const r=(0,s.nY)(e);r&&(r.init=l[e])}function p(e,t){if(!e)throw new Error(f);var r=h(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}},5603:(e,t,r)=>{"use strict";r.d(t,{a:()=>c,o:()=>s});var n=r(384),i=r(8122);const o={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},a={};function s(e){if(!e)throw new Error("All loader-config objects require an agent identifier!");if(!a[e])throw new Error("LoaderConfig for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.loader_config=a[e])}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},d={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},u={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!u[e])throw new Error("Runtime for ".concat(e," was never set"));return u[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");u[e]={...(0,n.a)(t,d),...c},Object.hasOwnProperty.call(u[e],"harvestCount")||Object.defineProperty(u[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=u[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,Yq:()=>a,xv:()=>n});const n="1.274.0",i="PROD",o="CDN",a="^2.0.0-alpha.17"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>d,RI:()=>i,WN:()=>f,bv:()=>o,gm:()=>a,lR:()=>l,m:()=>c,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)()},7295:(e,t,r)=>{"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>o});var n=[];function i(e){if(!e||o(e))return!1;if(0===n.length)return!0;for(var t=0;t<n.length;t++){var r=n[t];if("*"===r.hostname)return!1;if(s(r.hostname,e.hostname)&&c(r.pathname,e.pathname))return!1}return!0}function o(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let o,a;i>0?(o=r.substring(0,i),a=r.substring(i)):(o=r,a="");let[s]=o.split(":");n.push({hostname:s,pathname:a})}}function s(e,t){return!(e.length>t.length)&&t.indexOf(e)===t.length-e.length}function c(e,t){return 0===e.indexOf("/")&&(e=e.substring(1)),0===t.indexOf("/")&&(t=t.substring(1)),""===e||e===t}},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>d});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function d(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),h(e,t,!1),s[e].size&&f(e))}function u(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(u(e),!e||!s[e].get(t)||r)return h(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),h(e,t)})))}function h(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)g(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function g(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>d});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),d=function e(t,r){var n={},s={},u={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={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(d.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=h(n),c=p(e),u=c.length,l=0;l<u;l++)c[l].apply(a,r);var g=v()[s[e]];g&&g.push([f,e,r,a]);return a},get:m,listeners:p,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!v()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function g(e,t){n[e]=p(e).concat(t)}function p(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),u=(0,n.Zm)();u.ee||(u.ee=d)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).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))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,ZF:()=>c,bz:()=>a,el:()=>d});var n=r(6154);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.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),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.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));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 d(){return s(32)}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>d,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},d={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},7485:(e,t,r)=>{"use strict";r.d(t,{D:()=>i});var n=r(6154);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.gm?.location?.protocol&&t.host===n.gm?.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{}}}},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>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}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},3304:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var n=r(7836);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){}return""}}},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>u,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>d,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function d(e){let t=a();return t.initializedAgents?.[e]}function u(e,t){a()[e]=t}function l(){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()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},8139:(e,t,r)=>{"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),o=r(8990),a=r(6154);const s={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e){var t=function(e){return(e||n.ee).get("events")}(e);if(s[t.debugId]++)return t;s[t.debugId]=1;var r=(0,i.YM)(t,!0);function f(e){r.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,f),h(a.gm,f),h(c.prototype,f)),t.on(d+"-start",(function(e,t){var n=e[1];if(null!==n&&("function"==typeof n||"object"==typeof n)){var i=(0,o.I)(n,l,(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(u+"-start",(function(e){e[1]=this.wrapped||e[1]})),t}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);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],d=e[c];u(d)||(e[c]=r(d,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return u(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){d([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,u,l;try{a=this,o=[...arguments],u="function"==typeof n?n(o,a):n||{}}catch(t){d([t,"",[o,a,s],u],e)}i(r+"start",[o,a,s],u,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],u,c),e}finally{i(r+"end",[o,a,l],u,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){d([t,r,n,i],e)}s=a}}}function d(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function u(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},9300:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.ajax},3333:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,Zp:()=>i,mq:()=>s,nf:()=>a,qN:()=>o});const n=r(860).K7.genericEvents,i=["auxclick","click","copy","keydown","paste","scrollend"],o=["focus","blur"],a=4,s=1e3},6774:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.jserrors},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,TZ:()=>a,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log",a=n.K7.logging},3785:(e,t,r)=>{"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),o=r(860),a=r(3969),s=r(993);function c(e,t,r={},c=s.p_.INFO){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,o.K7.metrics,e),(0,n.p)(s.ET,[(0,i.t)(),t,r,c],void 0,o.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(s.p_).some((t=>t===e.toUpperCase().trim()))}},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{BB:()=>u,G4:()=>o,Qb:()=>l,TZ:()=>i,Ug:()=>a,_s:()=>s,bc:()=>d,yP:()=>c});var n=r(2614);const i=r(860).K7.sessionReplay,o={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"},a=.12,s={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},c={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0},d={RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},u=5e3,l={API:"api"}},5270:(e,t,r)=>{"use strict";r.d(t,{Aw:()=>c,CT:()=>d,SR:()=>s});var n=r(384),i=r(9417),o=r(7767),a=r(6154);function s(e){return!!(0,n.dV)().o.MO&&(0,o.V)(e)&&!0===(0,i.gD)(e,"session_trace.enabled")}function c(e){return!0===(0,i.gD)(e,"session_replay.preload")&&s(e)}function d(e,t){const r=t.correctAbsoluteTimestamp(e);return{originalTimestamp:e,correctedTimestamp:r,timestampDiff:e-r,originTime:a.WN,correctedOriginTime:t.correctedOriginTime,originTimeDiff:Math.floor(a.WN-t.correctedOriginTime)}}},3738:(e,t,r)=>{"use strict";r.d(t,{He:()=>i,Kp:()=>s,Lc:()=>d,Rz:()=>u,TZ:()=>n,bD:()=>o,d3:()=>a,jx:()=>l,uP:()=>c});const n=r(860).K7.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,d="fn"+s,u="pushState",l=1e3},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7767:(e,t,r)=>{"use strict";r.d(t,{V:()=>o});var n=r(9417),i=r(6154);const o=e=>i.RI&&!0===(0,n.gD)(e,"privacy.cookies_enabled")},425:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),d=r(5289),u=r(6154),l=r(944),f=r(3969),h=r(384),g=r(6344);const p=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",g.G4.RECORD,g.G4.PAUSE,"log","wrapLogger"],m=["setErrorHandler","finished","addToTrace","addRelease"];var v=r(1863),b=r(2614),y=r(993),R=r(3785),x=r(2646),w=r(3434);function T(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,w.YM)(i),a=new x.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function A(){const e=(0,h.pV)();p.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const E={};var S=r(9417),_=r(5603),O=r(5284);const N=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let I=!1;function P(e,t={},p,x){let{init:w,info:P,loader_config:j,runtime:C={},exposed:k=!0}=t;C.loaderType=p;const H=(0,h.pV)();P||(w=H.init,P=H.info,j=H.loader_config),(0,S.xN)(e.agentIdentifier,w||{}),(0,_.a)(e.agentIdentifier,j||{}),P.jsAttributes??={},u.bv&&(P.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,P);const D=(0,S.D0)(e.agentIdentifier),L=[P.beacon,P.errorBeacon];I||(D.proxy.assets&&(N(D.proxy.assets),L.push(D.proxy.assets)),D.proxy.beacon&&L.push(D.proxy.beacon),A(),(0,h.US)("activatedFeatures",O.B),e.runSoftNavOverSpa&&=!0===D.soft_navigations.enabled&&D.feature_flags.includes("soft_nav")),C.denyList=[...D.ajax.deny_list||[],...D.ajax.block_internal?L:[]],C.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,C),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=function(e,t,h=!1){t||(0,c.Ak)(e,"api");const p={};var x=s.ee.get(e),w=x.get("tracer");E[e]=b.g.OFF,x.on(g.G4.REPLAY_RUNNING,(t=>{E[e]=t}));var A="api-",S=A+"ixn-";function _(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),I(A,n,!0,o||null===r?"session":void 0)(t,r)}function O(){}p.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,x),(0,R.R)(x,e,t,r)},p.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,x),T(x,e,t,{customAttributes:r,level:i})},m.forEach((e=>{p[e]=I(A,e,!0,"api")})),p.addPageAction=I(A,"addPageAction",!0,n.K7.genericEvents),p.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,I(A,"setPageViewName",!0)()},p.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return _(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},p.setUserId=function(e){if("string"==typeof e||null===e)return _("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},p.setApplicationVersion=function(e){if("string"==typeof e||null===e)return _("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},p.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,x),x.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},p[g.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.RECORD,[],void 0,n.K7.sessionReplay,x)},p[g.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,x),(0,a.p)(g.G4.PAUSE,[],void 0,n.K7.sessionReplay,x)},p.interaction=function(e){return(new O).get("object"==typeof e?e:{})};const N=O.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,x),h||(0,a.p)(S+"tracer",[(0,v.t)(),e,r],i,n.K7.spa,x),function(){if(w.emit((o?"":"no-")+"fn-start",[(0,v.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw w.emit("fn-err",[arguments,this,t],r),t}finally{w.emit("fn-end",[(0,v.t)()],r)}}}};function I(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,x),i&&(0,a.p)(e+t,[(0,v.t)(),...arguments],r?null:this,i,x),r?void 0:this}}function P(){r.e(891).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),x.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{N[e]=I(S,e,void 0,h?n.K7.softNav:n.K7.spa)})),p.setCurrentRouteName=h?I(S,"routeName",void 0,n.K7.softNav):I(A,"routeName",!0,n.K7.spa),p.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,x),(0,a.p)("err",[t,(0,v.t)(),!1,r,!!E[e]],void 0,n.K7.jserrors,x)},u.RI?(0,d.GG)((()=>P()),!0):P(),p}(e.agentIdentifier,x,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=k),I=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},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=>({95:"nr-full-compressor",222:"nr-full-recorder",891:"nr-full"}[e]+"-1.274.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var d=document.getElementsByTagName("script"),u=0;u<d.length;u++){var l=d[u];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={891:"sha512-Sx2xJQrHp2m/Ngn/ZcfBCUwNr2Xy/C5urYtWpfm3bWpil4spXOQGTtNwIfF5HvPGioGASn9QTyE4Z+zC7r7wcg==",222:"sha512-hMte3OWgwwYeisSiD7WCIx/6tT16zLaPjag9uF4tIZp7ybOvrJKbeyzhe4fz1tDbkdcdOMm8dvgPPLBatSAGeA==",95:"sha512-MPaT9dkHv16XzwEUVZPyqpN1do/Er1XFAZoIAPYWylmv+iGIThqN+GwQq27pUyAX7sNXVJQVZezH96p53Ks3Pg=="};(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,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(g);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.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={959:0,85: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,d=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);d<a.length;d++)o=a[d],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function d(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var u=i(425);var l=i(1687),f=i(4234),h=i(5289),g=i(6154),p=i(5270),m=i(7767),v=i(6389);class b extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,v.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if((0,m.V)(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(891).then(i.bind(i,6526));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(891).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(891).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};g.RI?(0,h.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return(0,p.SR)(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var y=i(6630);class R extends b{static featureName=y.T;constructor(e,t=!0){super(e,y.T,t),this.importAggregator(e)}}var x=i(384);var w=i(9908),T=i(2843),A=i(3878),E=i(782),S=i(1863);class _ extends b{static featureName=E.T;constructor(e,t=!0){super(e,E.T,t),g.RI&&((0,T.u)((()=>(0,w.p)("docHidden",[(0,S.t)()],void 0,E.T,this.ee)),!0),(0,A.sp)("pagehide",(()=>(0,w.p)("winPagehide",[(0,S.t)()],void 0,E.T,this.ee))),this.importAggregator(e))}}var O=i(3969);class N extends b{static featureName=O.TZ;constructor(e,t=!0){super(e,O.TZ,t),this.importAggregator(e)}}var I=i(6774),P=i(3304);class j{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,P.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function C(e){return D(e)?e:new j(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic)}function k(e){const t="Unhandled Promise Rejection";if(!e?.reason)return;if(D(e.reason))try{return e.reason.message=t+": "+e.reason.message,C(e.reason)}catch(t){return C(e.reason)}const r=C(e.reason);return r.message=t+": "+r?.message,r}function H(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new j(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic);return t.name=SyntaxError.name,t}return D(e.error)?e.error:C(e)}function D(e){return e instanceof Error&&!!e.stack}class L extends b{static featureName=I.T;#r=!1;constructor(e,r=!0){super(e,I.T,r);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(e=>{this.abortHandler&&(0,w.p)("ierr",[C(e),(0,S.t)(),!0,{},this.#r],void 0,this.featureName,this.ee)})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.#r=e})),g.gm.addEventListener("unhandledrejection",(e=>{this.abortHandler&&(0,w.p)("err",[k(e),(0,S.t)(),!1,{unhandledPromiseRejection:1},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",(e=>{this.abortHandler&&(0,w.p)("err",[H(e),(0,S.t)(),!1,{},this.#r],void 0,this.featureName,this.ee)}),(0,A.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e)}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var K=i(8990);let M=1;const U="nr@id";function V(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,K.I)(e,U,(function(){return M++}))}function G(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.A)(e).length}catch(e){return}}}var F=i(8139),B=i(7836),W=i(3434);const z={},q=["open","send"];function Z(t){var r=t||B.ee;const n=function(e){return(e||B.ee).get("xhr")}(r);if(z[n.debugId]++)return n;z[n.debugId]=1,(0,F.u)(r);var i=(0,W.YM)(n),o=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,s=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],l=[],f=g.gm.XMLHttpRequest=function(t){const r=new o(t),a=n.context(r);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(s=a,function(){var e=this;e.readyState>3&&!s.resolved&&(s.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",y)}),(0,A.jT)(!1))}catch(t){(0,e.R)(15,t);try{n.emit("internal-error",[t])}catch(e){}}var s;return r};function h(e,t){i.inPlace(t,["onreadystatechange"],"fn-",y)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,f),f.prototype=o.prototype,i.inPlace(f.prototype,q,"-xhr-",y),n.on("send-xhr-start",(function(e,t){h(e,t),function(e){l.push(e),a&&(p?p.then(b):c?c(b):(m=-m,v.data=m))}(t)})),n.on("open-xhr-start",h),a){var p=s&&s.resolve();if(!c&&!s){var m=1,v=document.createTextNode(m);new a(b).observe(v,{characterData:!0})}}else r.on("fn-end",(function(e){e[0]&&e[0].type===d||b()}));function b(){for(var e=0;e<l.length;e++)h(0,l[e]);l.length&&(l=[])}function y(e,t){return t}return n}var Y="fetch-",X=Y+"body-",Q=["arrayBuffer","blob","json","text","formData"],J=g.gm.Request,ee=g.gm.Response,te="prototype";const re={};function ne(e){const t=function(e){return(e||B.ee).get("fetch")}(e);if(!(J&&ee&&g.gm.fetch))return t;if(re[t.debugId]++)return t;function r(e,r,n){var i=e[r];"function"==typeof i&&(e[r]=function(){var e,r=[...arguments],o={};t.emit(n+"before-start",[r],o),o[B.P]&&o[B.P].dt&&(e=o[B.P].dt);var a=i.apply(this,r);return t.emit(n+"start",[r,e],a),a.then((function(e){return t.emit(n+"end",[null,e],a),e}),(function(e){throw t.emit(n+"end",[e],a),e}))})}return re[t.debugId]=1,Q.forEach((e=>{r(J[te],e,X),r(ee[te],e,X)})),r(g.gm,"fetch",Y),t.on(Y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(Y+"done",[null,r],n)}else t.emit(Y+"done",[e],n)})),t}var ie=i(7485),oe=i(5603);class ae{constructor(e){this.agentIdentifier=e}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var t=(0,oe.o)(this.agentIdentifier);if(!t)return null;var n=(t.accountID||"").toString()||null,i=(t.agentID||"").toString()||null,o=(t.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,r.ZF)(),s=(0,r.el)(),c=Date.now(),d={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),d}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 g.gm?.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)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1,r={};if((0,s.gD)(this.agentIdentifier,"distributed_tracing")&&(r=(0,s.D0)(this.agentIdentifier).distributed_tracing),e.sameOrigin)t=!0;else if(r.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,ie.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}isDtEnabled(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.enabled}excludeNewrelicHeader(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=(0,s.gD)(this.agentIdentifier,"distributed_tracing");return!!e&&!!e.cors_use_tracecontext_headers}}var se=i(9300),ce=i(7295),de=["load","error","abort","timeout"],ue=de.length,le=(0,x.dV)().o.REQ,fe=(0,x.dV)().o.XHR;class he extends b{static featureName=se.T;constructor(e,t=!0){super(e,se.T,t),this.dt=new ae(e.agentIdentifier),this.handler=(e,t,r,n)=>(0,w.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach((t=>{if(t.initiatorType in e&&0!==t.responseStatus){const r={status:t.responseStatus},n={rxSize:t.transferSize,duration:Math.floor(t.duration),cbTime:0};ge(r,t.name),this.handler("xhr",[r,n,t.startTime,t.responseEnd,e[t.initiatorType]],void 0,a.K7.ajax)}}))}catch(e){}ne(this.ee),Z(this.ee),function(e,t,r,n){function i(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){T(t,e)}),(0,A.jT)(!1)),g.lR||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,A.jT)(!1))}function o(e){this.params={method:e[0]},ge(this,e[1]),this.metrics={}}function s(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var i=n.generateTracePayload(this.parsedOrigin);if(i){var o=!1;i.newrelicHeader&&(r.setRequestHeader("newrelic",i.newrelicHeader),o=!0),i.traceContextParentHeader&&(r.setRequestHeader("traceparent",i.traceContextParentHeader),i.traceContextStateHeader&&r.setRequestHeader("tracestate",i.traceContextStateHeader),o=!0),o&&(this.dt=i)}}function c(e,r){var n=this.metrics,i=e[0],o=this;if(n&&i){var a=G(i);a&&(n.txSize=a)}this.startTime=(0,S.t)(),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<ue;s++)r.addEventListener(de[s],this.listener,(0,A.jT)(!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 u(e,t){var r=""+V(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function l(e,t){var r=""+V(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function f(){this.endTime=(0,S.t)()}function h(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-added",[e[1],e[2]],r)}function p(e,r){r instanceof fe&&"load"===e[0]&&t.emit("xhr-load-removed",[e[1],e[2]],r)}function m(e,t,r){t instanceof fe&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,S.t)()))}function v(e,r){this.xhrCbStart&&t.emit("xhr-cb-time",[(0,S.t)()-this.xhrCbStart,this.onload,r],r)}function b(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.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,ie.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var i=n.generateTracePayload(this.parsedOrigin);if(i&&(i.newrelicHeader||i.traceContextParentHeader))if(e[0]&&e[0].headers)s(e[0].headers,i)&&(this.dt=i);else{var o={};for(var a in r)o[a]=r[a];o.headers=new Headers(r.headers||{}),s(o.headers,i)&&(this.dt=i),e.length>1?e[1]=o:e.push(o)}}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 y(e,t){this.params={},this.metrics={},this.startTime=(0,S.t)(),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 le?r=i.url:g.gm?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),ge(this,r);var o=(""+(i&&i instanceof le&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.body=n.body,this.txSize=G(n.body)||0}function R(e,t){if(this.endTime=(0,S.t)(),this.params||(this.params={}),(0,ce.iW)(this.params))return;let n;this.params.status=t?t.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);const i={txSize:this.txSize,rxSize:n,duration:(0,S.t)()-this.startTime};r("xhr",[this.params,i,this.startTime,this.endTime,"fetch"],this,a.K7.ajax)}function x(e){const t=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(let t=0;t<ue;t++)e.removeEventListener(de[t],this.listener,!1);t.aborted||(0,ce.iW)(t)||(n.duration=(0,S.t)()-this.startTime,this.loadCazptureCalled||4!==e.readyState?null==t.status&&(t.status=0):T(this,e),n.cbTime=this.cbTime,r("xhr",[t,n,this.startTime,this.endTime,"xhr"],this,a.K7.ajax))}}function T(e,r){e.params.status=r.status;var n=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?G(e.response):"text"===r||""===r||void 0===r?G(e.responseText):void 0}(r,e.lastSize);if(n&&(e.metrics.rxSize=n),e.sameOrigin){var i=r.getResponseHeader("X-NewRelic-App-Data");i&&((0,w.p)(O.rs,["Ajax/CrossApplicationTracing/Header/Seen"],void 0,a.K7.metrics,t),e.params.cat=i.split(", ").pop())}e.loadCaptureCalled=!0}t.on("new-xhr",i),t.on("open-xhr-start",o),t.on("open-xhr-end",s),t.on("send-xhr-start",c),t.on("xhr-cb-time",d),t.on("xhr-load-added",u),t.on("xhr-load-removed",l),t.on("xhr-resolved",f),t.on("addEventListener-end",h),t.on("removeEventListener-end",p),t.on("fn-end",v),t.on("fetch-before-start",b),t.on("fetch-start",y),t.on("fn-start",m),t.on("fetch-done",R)}(e,this.ee,this.handler,this.dt),this.importAggregator(e)}}function ge(e,t){var r=(0,ie.D)(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}const pe={},me=["pushState","replaceState"];function ve(e){const t=function(e){return(e||B.ee).get("history")}(e);return!g.RI||pe[t.debugId]++||(pe[t.debugId]=1,(0,W.YM)(t).inPlace(window.history,me,"-")),t}var be=i(3738);const{He:ye,bD:Re,d3:xe,Kp:we,TZ:Te,Lc:Ae,uP:Ee,Rz:Se}=be;class _e extends b{static featureName=Te;constructor(e,t=!0){super(e,Te,t);if(!(0,m.V)(this.agentIdentifier))return void this.deregisterDrain();const r=this.ee;let n;ve(r),this.eventsEE=(0,F.u)(r),this.eventsEE.on(Ee,(function(e,t){this.bstStart=(0,S.t)()})),this.eventsEE.on(Ae,(function(e,t){(0,w.p)("bst",[e[0],t,this.bstStart,(0,S.t)()],void 0,a.K7.sessionTrace,r)})),r.on(Se+xe,(function(e){this.time=(0,S.t)(),this.startPath=location.pathname+location.hash})),r.on(Se+we,(function(e){(0,w.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,a.K7.sessionTrace,r)}));try{n=new PerformanceObserver((e=>{const t=e.getEntries();(0,w.p)(ye,[t],void 0,a.K7.sessionTrace,r)})),n.observe({type:Re,buffered:!0})}catch(e){}this.importAggregator(e,{resourceObserver:n})}}var Oe=i(2614);class Ne extends b{static featureName=t.TZ;#i;#o;constructor(e,r=!0){let n;super(e,t.TZ,r),this.replayRunning=!1,this.#o=e;try{n=JSON.parse(localStorage.getItem("".concat(Oe.H3,"_").concat(Oe.uh)))}catch(e){}(0,p.SR)(e.agentIdentifier)&&this.ee.on(t.G4.RECORD,(()=>this.#a())),this.#s(n)?(this.#i=n?.sessionReplayMode,this.#c()):this.importAggregator(e),this.ee.on("err",(e=>{this.replayRunning&&(this.errorNoticed=!0,(0,w.p)(t.G4.ERROR_DURING_REPLAY,[e],void 0,this.featureName,this.ee))})),this.ee.on(t.G4.REPLAY_RUNNING,(e=>{this.replayRunning=e}))}#s(e){return e&&(e.sessionReplayMode===Oe.g.FULL||e.sessionReplayMode===Oe.g.ERROR)||(0,p.Aw)(this.agentIdentifier)}#d=!1;async#c(e){if(!this.#d){this.#d=!0;try{const{Recorder:t}=await Promise.all([i.e(891),i.e(222)]).then(i.bind(i,8589));this.recorder??=new t({mode:this.#i,agentIdentifier:this.agentIdentifier,trigger:e,ee:this.ee}),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording}catch(e){}this.importAggregator(this.#o,{recorder:this.recorder,errorNoticed:this.errorNoticed})}}#a(){this.featAggregate?this.featAggregate.mode!==Oe.g.FULL&&this.featAggregate.initializeRecording(Oe.g.FULL,!0):(this.#i=Oe.g.FULL,this.#c(t.Qb.API),this.recorder&&this.recorder.parent.mode!==Oe.g.FULL&&(this.recorder.parent.mode=Oe.g.FULL,this.recorder.stopRecording(),this.recorder.startRecording(),this.abortHandler=this.recorder.stopRecording))}}var Ie=i(3333);class Pe extends b{static featureName=Ie.TZ;constructor(e,t=!0){super(e,Ie.TZ,t);const r=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.user_actions.enabled];g.RI&&e.init.user_actions.enabled&&(Ie.Zp.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)),!0))),Ie.qN.forEach((e=>(0,A.sp)(e,(e=>(0,w.p)("ua",[e],void 0,this.featureName,this.ee)))))),r.some((e=>e))?this.importAggregator(e):this.deregisterDrain()}}var je=i(993),Ce=i(3785);class ke extends b{static featureName=je.TZ;constructor(e,t=!0){super(e,je.TZ,t);const r=this.ee;this.ee.on("wrap-logger-end",(function([e]){const{level:t,customAttributes:n}=this;(0,Ce.R)(r,e,n,t)})),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),g.gm?(this.features={},(0,x.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(R),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,u.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=d(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,x.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[R,_,_e,Ne,he,N,L,Pe,ke],loaderType:"pro"})})()})();</script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Library", "url": "https://sfpl.bibliocommons.com/", "name": "San Francisco Public Library", "logo": "https://cor-liv-cdn-static.bibliocommons.com/images/CAL-SFPL/logo.png?1732976717612", "image": "https://cor-liv-cdn-static.bibliocommons.com/images/CAL-SFPL/logo.png?1732976717612" } </script> <script type="text/javascript" charset="utf-8"> var registered_messages = []; var controller_js = '//cor-cdn-static.bibliocommons.com/assets/controllers/session-a036d1c34a8bc6fe0da9699b605da532.js'; </script> <script type="text/javascript"> document.write("<style type=\"text/css\">.hide_on_script{display:none;}</style>"); var event_query = "" </script> <title data-analytics="session">Log In | San Francisco Public Library | BiblioCommons</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="App-Version" content="Version 9.25.0 Last updated 2024/10/01 11:54 [cor-liv-app20]"> <meta name="format-detection" content="telephone=no"> <meta name="google-site-verification" content="XP15EF9-Mx4nKTFwmhzJkL6q7mc-CuNVTmbkg8MnZRU" /> <meta content="authenticity_token" name="csrf-param" /> <meta content="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" name="csrf-token" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta property="og:site_name" content="San Francisco Public Library"> <meta property="og:url" content="https://sfpl.bibliocommons.com/user/login?destination=%2Fcollection%2Fadd%2Fmy%2Flibrary%3Fbib%3D6312151093%26bib_status%3Dfuture%26button_styles%255B%255D%3Dcombo_button"> <meta property="fb:app_id" content="821053187955346"> <meta property="title" content="Log In | San Francisco Public Library | BiblioCommons"> <meta property="og:title" content="Log In | San Francisco Public Library | BiblioCommons"> <meta name="twitter:title" content="Log In | San Francisco Public Library | BiblioCommons"> <meta name="description" content="Explore San Francisco Public Library. New titles, recently rated, and recently tagged by the library community."> <meta name="og:description" content="Explore San Francisco Public Library. New titles, recently rated, and recently tagged by the library community."> <meta name="twitter:description" content="Explore San Francisco Public Library. New titles, recently rated, and recently tagged by the library community."> <meta name="twitter:card" content="summary"> <link href="//cor-cdn-static.bibliocommons.com/assets/bc_base-7458b34fb4de9be11818e405e123b860.css" media="screen" rel="stylesheet" type="text/css" /> <link href="//cor-cdn-static.bibliocommons.com/assets/core-0ebb1c96c1022e0da243d70f0cde2466.css" media="screen" rel="stylesheet" type="text/css" /> <link href="//cor-cdn-static.bibliocommons.com/assets/controllers/session-d64750f199c2bd27fd47e6758652b573.css" media="screen" rel="stylesheet" type="text/css" /> <link href="//cor-liv-cdn-static.bibliocommons.com/dynamic_stylesheet/CAL-SFPL/library_branding.css?1732976717612" media="all" rel="stylesheet" type="text/css" /> <link href="//cor-liv-cdn-static.bibliocommons.com/dynamic_stylesheet/CAL-SFPL/stylesheet.css?1732976717612" media="all" rel="stylesheet" type="text/css" /> <!--[if lt IE 9]><link href="//cor-cdn-static.bibliocommons.com/assets/deprecated/context/core/IE-223cce97d2a1ab4365e01eb4070abbb7.css" media="screen" rel="stylesheet" type="text/css" /><![endif]--> <!--[if IE 8]><link href="//cor-cdn-static.bibliocommons.com/assets/deprecated/context/core/IE8-6423c920b2af42d04525fdd61d76a9ee.css" media="screen" rel="stylesheet" type="text/css" /><![endif]--> <!--[if IE 9]><link href="//cor-cdn-static.bibliocommons.com/assets/deprecated/context/core/ie9-f9eebad232c8e6d89bc517dc1c34ab40.css" media="screen" rel="stylesheet" type="text/css" /><![endif]--> <script type="text/javascript" charset="utf-8"> var registered_messages = []; </script> <script type="text/javascript"> var AUTH_TOKEN = "GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg="; var BC_USER_ID = 0; var BC_LIBRARY_ID = 93; var BC_USERNAME = ""; var BC_MD5_USER = ""; var at_local_branch = ""; var USER_PRESENT = "false"; var current_time = "Sun, 01 Dec 2024 04:25:09 GMT"; var j_callback = ""; var SEND_FORMS = true; var CURRENT_LOCALE = "en-US"; var back_to_link_page_id = ""; var AUTH_RULES = { is_program_agency: false, recently_returned_enabled: true, registration_requires_user_segments: false, digital_service_enabled: true, show_barcodeless_if_login_fail: false, reminder_messaging_enabled: false, numeric_password_required: false, confirm_password: true, supported_registration_types: ["ILS_BACKED"], required_fields: ["barcode", "user_pin", "first_name", "last_name", "location_city", "location_name", "user_name", "password", "confirm_password", "accept_terms", "user_zip_code", "user_grade"], reminder_types: [], default_page: 'dashboard', restricted_age_limit: 13, password_min_length: 4, password_max_length: 30, pre_registration_account_linking: false, pre_registration_matching: false, restrict_free_text_entry: true }; var READING_TIME_LAST_NUDGE = false; var USER_HAS_NEW_BADGES = false; var DOE_LOGIN_REDIRECT = false; /* Localization */ var less = "Show less"; var more = "Show more"; var sSearch = "Search entries:"; var sLengthMenu = "Display _MENU_ records per page"; var sZeroRecords = "Nothing found"; var sInfo = "Showing _START_ to _END_ of _TOTAL_ records"; var sInfoEmpty = "Showing 0 to 0 of 0 records"; var sInfoFiltered = "(filtered from _MAX_ total records)"; var sNext = "Next"; var sPrevious = "Previous"; var od_localizations = { fetch_message: "Checking Availability...", wait_message: "Please wait, other requests are pending.", request_available: "Check availability", digital_request: "Place hold", checkout: "Available for checkout" } var DISABLE_MSG = "If you edit the query directly, the form below will be disabled."; var ADDED = '<i aria-hidden="true" class=" icon-ok"></i> Added to...'; var CLOSETEXT = "Close"; var START_DATE = "Pick a start date."; var DONE_BUTTON = "Done"; var END_DATE = "Suspend End Date"; var START_DATE = "Suspend Start Date"; var YOUR_USERNAME_IS = "Your username is:"; var localized_validator_messages = { accept_terms: { required: "You must accept the terms." } , user_name:{ remote: "Someone already has that username", matchesPattern: "Your username can contain only letters, numbers, or underscores (no spaces). It cannot contain numbers only." } , validExactPwd: "Your password must be {0} characters in length" , validExactPin: "Your PIN must be {0} numeric digits" , required: "This field is required." , remote: "Please fix this field." , email: "Please enter a valid email address." , multiemail: "Please enter valid email address(es)." , url: "Please enter a valid URL." , date: "Please enter a valid date." , dateISO: "Please enter a valid date (ISO)." , number: "Please enter a valid number." , digits: "Please enter only digits." , creditcard: "Please enter a valid credit card number." , equalTo: "Please enter the same value again." , accept: "Please enter a value with a valid extension." , maxlength: "Please enter no more than {0} characters." , minlength: "Please enter at least {0} characters." , rangelength: "Please enter a value between {0} and {1} characters long." , range: "Please enter a value between {0} and {1}." , max: "Please enter a value less than or equal to {0}." , min: "Please enter a value greater than or equal to {0}." , filteredPhone: "Please enter a valid 10-digit North American phone number." , s4pYearRange: "Please enter a 4-digit year from 1901 to {0}" , reportDateRange: "This date is outside the maximum range of 3 months." , badgesAgeRange: "Minimum age cannot be more than max age." , badgesCode: "Text, numbers, underscores and hashtags only please. Code must have at least 2 characters." , twitterusername: "Twitter username cannot contain spaces or symbols." , suggested_purchases_select_reason: "Please select a reason." }; var BCLang = { more: "More", like: "Like", likes: "likes", liked: "Liked", unlike: "Unlike", unliked: "unliked", list: "List", lists: "Lists", title: "Title", titles: "Titles", library: "library", libraries: "libraries", person: "person", people: "people", show_more: "Show More", loading: "Loading...", buttons: { save: "Save", cancel: "Cancel" }, errors_and_messages: { errors: "An error occurred and your request could not be completed. Please try again later", preferred_location_selected: "This location has been selected.", covers_copied: "Jacket cover images copied to clipboard." }, user_profile: { duplicate_label: "You have entered a duplicate label", user_added: "User added" }, color: "color", animal: "animal", reg_color_picked: "picked color", reg_animal_picked: "picked animal", reg_confirm_tos: "Confirm your acceptance of the terms and conditions", something_went_wrong: "Something went wrong, please try later.", help_bubble: { borrowing_select_items: { text: "Switch to manage multiple items from here...", title: "You will be able to select and manage items of all status types." }, borrowing_summary: { title: "Your borrowing summary menu can be accessed from here" }, checkedout_ratings: { text: "Titles you rate are automatically added to your Completed Shelf, and default to the privacy setting of your shelf.<br><a data-js=\"help_popout\" href=\"https://help.bibliocommons.com/045faq/040faq-my-shelves\">Learn more<\/a>", title: "Rate or add titles to your Shelves" }, borrowing_summary_view: { text: "Your items are grouped by status when 2 or more status types exist. You can manage your items in groups, or...", title: "This is your summary view" }, holds_shelves: { text: "Shelves allow you to keep a reference to the items you have borrowed or wish to borrow. You can add and move items to your For Later, In Progress, or Completed Shelf, and you can keep them private or public.<br><a data-js=\"help_popout\" href=\"https://help.bibliocommons.com/045faq/040faq-my-shelves\">Learn more<\/a>", title: "Add items to your Shelves" }, borrowing_faqs: { text: "You can access the FAQs or take this tour from here." }, next_text: "OK, Next", close_text: "OK, Got it.", borrowing_batch_actions: { title: "Select the items you want to manage, and then choose the action you want to take from here" }, borrowing_individual_actions: { title: "Access individual item actions from here" } } }; var HELP_BUBBLES = {}; var bc_feature = {}; bc_feature['CirculationPopularity'] = true; bc_feature['RecentCommentsCarousel'] = false; bc_feature['ReaderAssetBuild'] = false; bc_feature['ReaderConsolidatedMenu'] = false; bc_feature['ReaderEcwImageFix'] = false; bc_feature['ReaderForceDownload'] = false; bc_feature['ReaderForceDownloadReadPage'] = false; bc_feature['ReaderNativeLogout'] = false; bc_feature['ReaderStartupScreen'] = false; bc_feature['ReaderSafariHomescreen'] = false; bc_feature['ResponsiveShelves'] = false; bc_feature['ResponsiveShelvesOptIn'] = false; bc_feature['RevisedFrbrRatingFacet'] = false; bc_feature['MyConversations'] = false; bc_feature['UseAcquisitionCoreStub'] = false; bc_feature['RemoveFooterPartials'] = false; bc_feature['LikingLibraryBreakdown'] = false; bc_feature['ShowOclcIds'] = false; bc_feature['SaveUserInfoForReporting'] = false; bc_feature['BootstrapPopovers'] = false; bc_feature['CheckedOutOUTStatus'] = true; bc_feature['EHoldingsStatus'] = false; bc_feature['BorrowingWidgetCaching'] = false; bc_feature['WrapLegacyWithBootstrap'] = true; bc_feature['NerfListCarousel'] = true; bc_feature['ItemFormatPicker'] = true; bc_feature['NerfShelves'] = true; bc_feature['NerfShelvesOptIn'] = true; bc_feature['NerfBorrowing'] = true; bc_feature['NerfBorrowingOptIn'] = true; bc_feature['HoldsWhileYouWaitRecommendations'] = false; bc_feature['BatchAddToShelf'] = false; bc_feature['ReactPrivacyToggle'] = false; bc_feature['ReactCommentEditor'] = false; bc_feature['ReactSummaryEditor'] = false; bc_feature['ReactQuotationEditor'] = false; bc_feature['ReactContentAdvisoryEditor'] = false; bc_feature['SecurityDarkRelease'] = false; bc_feature['ReactAgeSuitibilityEditor'] = false; bc_feature['CopyListCoversButton'] = true; bc_feature['ThreeWayAccountLinking'] = false; bc_feature['SearchBoosting'] = false; var THIRD_PARTY_RECOMMENDATIONS = {}; THIRD_PARTY_RECOMMENDATIONS['novelist'] = {"apikey":"sfpl.main.novsel2:dGJyMOPY8U2vrbcA","maxitems":5,"maxisbns":5}; var is_responsive_registration = true; var frbr_enabled = false if (typeof console == "undefined" || typeof console.debug == "undefined") var console = { log: function() {}, warn: function() {}, info: function() {}, error: function() {} }; console.debug = function() {}; document.write("<style type=\"text/css\">.hide_on_script{display:none;}</style>"); var auto_suggest_enabled = true; var open_dropdown = ""; var open_popup = ""; var open_editor = ""; var open_details = ""; var selected_items = []; var open_tip = ""; var help_win = false; var fines_popup_width = 800; var fines_popup_height = 550; var renew_enabled = true; var registrar = { hooks: {}, handlers: {}, remove_hook: function(type){ this.hooks[type] = []; }, add_hook: function(type, o) { if (typeof(o) == "string") o = {element: o}; if (this.hooks[type] == undefined) { this.hooks[type] = []; } this.hooks[type].push(o); if (this.handlers[type] != undefined) { for (var i=0; i < this.handlers[type].length; i++) { this.inform_handler(this.handlers[type][i], o); }; } }, add_handler: function(types, handler, opts) { if (typeof(types) != "object") { types = [types]; } if (opts == undefined) { opts = {delay: 0}; } for (var i=0; i < types.length; i++) { var type = types[i]; if (this.handlers[type] == undefined) { this.handlers[type] = []; } var h = {handler: handler, opts: opts}; this.handlers[type].push(h); if (this.hooks[type] != undefined) { var hook_length = this.hooks[type].length; if (hook_length > 0) { if (h.opts.delay != 0) { this.chained_inform_handler(0, h, type); } else { for (var i=0; i < this.hooks[type].length; i++) { this.inform_handler(h, this.hooks[type][i]); } } } } }; }, chained_inform_handler: function(idx, h, type) { if (idx < this.hooks[type].length) { registrar.inform_handler(h, this.hooks[type][idx]); setTimeout(function() { registrar.chained_inform_handler(idx+1, h, type); }, h.opts.delay); } }, inform_handler: function(h, hook) { h.handler(hook); } }; registrar.add_handler("dropdown", function(o) { var hover = false; if (o.hover != undefined && o.hover != null) hover = o.hover; if (!o.hover && o.trigger) document.getElementById(o.trigger).onclick = function(){return false;}; }); var DOAUTH = true; HAS_SCHOOLS = false var CHECK_FOR_BADGES = false; var CMS_ENABLED = false; var CMS_URL = ""; var images_path_location = /assets/; </script> <script type="text/javascript"> if (typeof console == "undefined" || typeof console.debug == "undefined") var console = { log: function() {}, warn: function() {}, info: function() {}, error: function() {} }; console.debug = function() {}; </script> <script type="text/javascript"> var messages = []; </script> <link href="//cor-cdn-static.bibliocommons.com/assets/print-887e1ad12746a48f7a18776d8f41080c.css" media="print" rel="stylesheet" type="text/css" /> <link rel="shortcut icon" href="/images/CAL-SFPL/favicon.ico"/> </head> <body id="context_core" class='lt_responsive two_col '> <div class="screen_reader_navigation" role="navigation"> <a class="hidden-xs hidden-sm screen_reader_nav" href="#header_main_nav" data-js="skip_to_main_nav"> Skip to main navigation </a> <a class="hidden-lg hidden-md screen_reader_nav" href="#header_main_nav" data-js="header_nav_xs_trigger" data-target = "header-main-nav"> Skip to main navigation </a> <a class="hidden-xs hidden-sm screen_reader_nav" href="#desktop_search_form" data-js="skip_to_search_field"> Skip to search </a> <a class="hidden-lg hidden-md screen_reader_nav" href="#mobile_search_form" data-js="header_search_xs_trigger"> Skip to search </a> <a class="screen_reader_nav" href="#content-start" data-js="skip_to_content_start"> Skip to content </a> </div> <div id="ct_session" data-test-id="session_page" class="view_medium"> <div class="cp_biblio_master_message"> <!-- IE Browser Message --><p>We're sorry, the Internet Explorer web browser is no longer supported by this website.</p> <p>Please download a different browser such as <a href="https://www.mozilla.org/en-US/firefox/new/">Mozilla Firefox</a>, <a href="https://www.google.com/chrome/">Google Chrome</a>, or <a href="https://www.microsoft.com/en-us/edge">Microsoft Edge</a> to improve your experience.</p> <p>Contact your library if you need assistance.</p> </div> <header> <script type="text/javascript"> window.BCHeaderConfig = {"is_externally_rendered":false,"initial_state":{},"core_base_url":"https://sfpl.bibliocommons.com/","web_base_url":null,"domain":"sfpl","messages":{"ada_suggestions_below":"Suggestions below."}}; </script> <div class="cp_header_wrapper"> <div class="cp_header" data-js="cp_header" testid="header" data-responsive="true"> <div class="cp_header_biblio_bar"> <div class="container"> <div class="row"> <div class="col-xs-12"> <div class="pull-left"> <div class="hidden-xs"> <a href="javascript:void(0);" aria-expanded="false" class="biblio_bar_link language_dropdown_trigger dropdown-toggle hide_trigger_icon" data-toggle="dropdown" id="biblio_language_trigger" lang="en-US" testid="selected_language"> <svg aria-hidden="true" class="svg_icon " focusable="false" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"> <path d="M5.994 0C2.682 0 0 2.688 0 6C0 9.312 2.682 12 5.994 12C9.312 12 12 9.312 12 6C12 2.688 9.312 0 5.994 0ZM10.152 3.6H8.382C8.19 2.85 7.914 2.13 7.554 1.464C8.658 1.842 9.576 2.61 10.152 3.6ZM6 1.224C6.498 1.944 6.888 2.742 7.146 3.6H4.854C5.112 2.742 5.502 1.944 6 1.224ZM1.356 7.2C1.26 6.816 1.2 6.414 1.2 6C1.2 5.586 1.26 5.184 1.356 4.8H3.384C3.336 5.196 3.3 5.592 3.3 6C3.3 6.408 3.336 6.804 3.384 7.2H1.356ZM1.848 8.4H3.618C3.81 9.15 4.086 9.87 4.446 10.536C3.342 10.158 2.424 9.396 1.848 8.4ZM3.618 3.6H1.848C2.424 2.604 3.342 1.842 4.446 1.464C4.086 2.13 3.81 2.85 3.618 3.6ZM6 10.776C5.502 10.056 5.112 9.258 4.854 8.4H7.146C6.888 9.258 6.498 10.056 6 10.776ZM7.404 7.2H4.596C4.542 6.804 4.5 6.408 4.5 6C4.5 5.592 4.542 5.19 4.596 4.8H7.404C7.458 5.19 7.5 5.592 7.5 6C7.5 6.408 7.458 6.804 7.404 7.2ZM7.554 10.536C7.914 9.87 8.19 9.15 8.382 8.4H10.152C9.576 9.39 8.658 10.158 7.554 10.536ZM8.616 7.2C8.664 6.804 8.7 6.408 8.7 6C8.7 5.592 8.664 5.196 8.616 4.8H10.644C10.74 5.184 10.8 5.586 10.8 6C10.8 6.414 10.74 6.816 10.644 7.2H8.616Z" /> </svg> <span aria-hidden="true">English</span><span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="English, collapsed" data-text-expanded="English, expanded">English, collapsed</span><span aria-hidden="true" class="icon-arrow"></span></a> <ul class="dropdown-menu biblio_languages" aria-labelledby="biblio_language_trigger" testid="list_of_langs"> <li><a href="/info/switch_language?external=false&selected_language=es-ES" class="" lang="es-ES">Español</a></li> <li><a href="/info/switch_language?external=false&selected_language=zh-TW" class="" lang="zh-TW">繁體中文</a></li> <li><a href="/info/switch_language?external=false&selected_language=zh-CN" class="" lang="zh-CN">简体中文</a></li> <li><a href="/info/switch_language?external=false&selected_language=ru-RU" class="" lang="ru-RU">Русский</a></li> <li><a href="/info/switch_language?external=false&selected_language=vi-VN" class="" lang="vi-VN">Tiếng Việt</a></li> <li><a href="/info/switch_language?external=false&selected_language=fil-PH" class="" lang="fil-PH">Filipino</a></li> <li><a href="/info/switch_language?external=false&selected_language=ja-JA" class="" lang="ja-JA">日本語</a></li> </ul> </div> <a href="#language-switcher-overlay" class="biblio_bar_link visible-xs language_overlay_trigger" data-js="language_overlay_trigger" data-target="language_switcher_overlay" testid="language_trigger"> <svg aria-hidden="true" class="svg_icon " focusable="false" height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"> <path d="M5.994 0C2.682 0 0 2.688 0 6C0 9.312 2.682 12 5.994 12C9.312 12 12 9.312 12 6C12 2.688 9.312 0 5.994 0ZM10.152 3.6H8.382C8.19 2.85 7.914 2.13 7.554 1.464C8.658 1.842 9.576 2.61 10.152 3.6ZM6 1.224C6.498 1.944 6.888 2.742 7.146 3.6H4.854C5.112 2.742 5.502 1.944 6 1.224ZM1.356 7.2C1.26 6.816 1.2 6.414 1.2 6C1.2 5.586 1.26 5.184 1.356 4.8H3.384C3.336 5.196 3.3 5.592 3.3 6C3.3 6.408 3.336 6.804 3.384 7.2H1.356ZM1.848 8.4H3.618C3.81 9.15 4.086 9.87 4.446 10.536C3.342 10.158 2.424 9.396 1.848 8.4ZM3.618 3.6H1.848C2.424 2.604 3.342 1.842 4.446 1.464C4.086 2.13 3.81 2.85 3.618 3.6ZM6 10.776C5.502 10.056 5.112 9.258 4.854 8.4H7.146C6.888 9.258 6.498 10.056 6 10.776ZM7.404 7.2H4.596C4.542 6.804 4.5 6.408 4.5 6C4.5 5.592 4.542 5.19 4.596 4.8H7.404C7.458 5.19 7.5 5.592 7.5 6C7.5 6.408 7.458 6.804 7.404 7.2ZM7.554 10.536C7.914 9.87 8.19 9.15 8.382 8.4H10.152C9.576 9.39 8.658 10.158 7.554 10.536ZM8.616 7.2C8.664 6.804 8.7 6.408 8.7 6C8.7 5.592 8.664 5.196 8.616 4.8H10.644C10.74 5.184 10.8 5.586 10.8 6C10.8 6.414 10.74 6.816 10.644 7.2H8.616Z" /> </svg> <span class="sr-only"> Select language, opens an overlay </span> </a> <script type="text/html" data-js="language_switcher_overlay"> <div class="language_switcher_overlay"> <h3>Select language</h3> <ul> <li><a href="/info/switch_language?external=false&selected_language=es-ES" class="" lang="es-ES">Español</a></li> <li><a href="/info/switch_language?external=false&selected_language=zh-TW" class="" lang="zh-TW">繁體中文</a></li> <li><a href="/info/switch_language?external=false&selected_language=zh-CN" class="" lang="zh-CN">简体中文</a></li> <li><a href="/info/switch_language?external=false&selected_language=ru-RU" class="" lang="ru-RU">Русский</a></li> <li><a href="/info/switch_language?external=false&selected_language=vi-VN" class="" lang="vi-VN">Tiếng Việt</a></li> <li><a href="/info/switch_language?external=false&selected_language=fil-PH" class="" lang="fil-PH">Filipino</a></li> <li><a href="/info/switch_language?external=false&selected_language=ja-JA" class="" lang="ja-JA">日本語</a></li> </ul> </div> </script> </div> <div class="pull-left visible-xs help_location_links_xs"> <a href="https://help.bibliocommons.com" class="biblio_bar_link header_help_link" data-js="header_help_link" data-target="header_help_dropdown_menu" data-ga-category="header_help_link" data-ga-label="Help Link" testid="link_help"> <i aria-hidden="true" class=" icon-help-circled"></i> <span class="hidden-xs" aria-hidden="true">Help</span> <span class="sr-only">Help, opens a new window</span> </a> </div> <div class="pull-right header_biblio_bar_right" > <div class="hidden-xs help_location_links" > <a href="https://help.bibliocommons.com" class="biblio_bar_link header_help_link" data-js="header_help_link" data-target="header_help_dropdown_menu" data-ga-category="header_help_link" data-ga-label="Help Link" testid="link_help"> <i aria-hidden="true" class=" icon-help-circled"></i> <span class="hidden-xs" aria-hidden="true">Help</span> <span class="sr-only">Help, opens a new window</span> </a> </div> <!-- begin BCNAV --> <div data-js="bc_my_account_nav" class="bc_my_account_nav"> <!-- Template: t_biblionav_admin_nav --> <div class="admin_nav hidden" data-js="biblionav_admin_nav" testid="admin_nav"> <a href="#" aria-expanded="false" class="biblio_bar_link admin_nav_trigger dropdown-toggle hide_trigger_icon" data-js="admin_nav_trigger" data-toggle="dropdown" id="admin_nav_trigger" testid="admin_nav_trigger"> <svg aria-hidden="false" class="svg_icon " focusable="false" height="14" viewBox="0 0 30 32" width="14" xmlns="http://www.w3.org/2000/svg"> <title>Admin</title> <path d="M6.848 26.272q0-0.448-0.32-0.8t-0.8-0.32-0.8 0.32-0.352 0.8 0.352 0.8 0.8 0.352 0.8-0.352 0.32-0.8zM18.368 18.784l-12.192 12.192q-0.672 0.64-1.6 0.64t-1.632-0.64l-1.888-1.952q-0.672-0.64-0.672-1.6 0-0.928 0.672-1.632l12.16-12.16q0.704 1.76 2.048 3.104t3.104 2.048zM29.696 11.008q0 0.704-0.416 1.888-0.864 2.4-2.944 3.904t-4.608 1.472q-3.328 0-5.664-2.336t-2.336-5.664 2.336-5.632 5.664-2.368q1.024 0 2.144 0.32t1.92 0.832q0.288 0.192 0.288 0.48t-0.288 0.512l-5.216 3.008v4l3.456 1.92q0.064-0.064 1.408-0.864t2.4-1.44 1.28-0.64q0.256 0 0.416 0.16t0.16 0.448z"></path> </svg> <span aria-hidden="true" class="hidden-sm hidden-xs">Admin</span><span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="Admin, collapsed" data-text-expanded="Admin, expanded">Admin, collapsed</span><span aria-hidden="true" class="icon-arrow"></span></a> <ul class="dropdown-menu admin_nav_menu" data-js="admin_nav_menu" aria-labelledby="admin_nav_trigger"> </ul> </div> <script id="t_biblionav_admin_nav" type="x-handlebars-template"> {{#if admin_nav.length}} <li aria-hidden="true" class="dropdown-header"> Library </li> {{#each admin_nav}} <li aria-hidden="true"> <a href="{{link}}" testid="biblionav_admin_{{locals.testid}}">{{title}}</a> </li> {{/each}} {{/if}} {{#if bcadmin_nav.length}} <li aria-hidden="true" class="divider"></li> <li aria-hidden="true" class="dropdown-header"> BC Admin </li> {{#each bcadmin_nav}} <li aria-hidden="true"> <a href="{{link}}" testid="biblionav_admin_{{locals.testid}}">{{title}}</a> </li> {{/each}} {{/if}} </script> <div class="biblio_bar_my_account"> <a href="javascript:void(0);" class="dropdown-toggle my_account_toggle biblio_bar_link hide_trigger_icon " data-test-id="user_state_logged_out" id="biblionav_account_trigger" data-js="biblionav_account_trigger" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <!-- Template: t_biblionav_account_trigger --> <span data-test-id="biblio-bar-login"> Log In / My SFPL </span> </a> <ul class="dropdown-menu biblionav_my_account" data-js="biblionav_my_account" aria-labelledby="biblionav_account_trigger"> <!-- Template - t_biblionav_my_account_user_info --> <li class="info" data-js="biblionav_my_account_user_info"> <a href="https://sfpl.bibliocommons.com/user/login" class="btn btn-transactional btn-block log_in_btn" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://sfpl.bibliocommons.com/user/login"},"ui":{"ui_component_label":"Log In / Register","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" data-js="header_login_link" testid="biblionav_login">Log In / Register</a> </li> <li aria-hidden="true" role="presentation" class="divider"></li> <li> <a href="https://sfpl.bibliocommons.com/dashboard/user_dashboard" class=" " data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/dashboard/user_dashboard"},"ui":{"ui_component_label":"My Library Dashboard","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_mylibrary">My Library Dashboard</a> </li> <li aria-hidden="true" role="presentation" class="divider"></li> <li class="dropdown-header">My Borrowing</li> <li> <a href="https://sfpl.bibliocommons.com/checkedout" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/checkedout"},"ui":{"ui_component_label":"Checked Out","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_checkedout">Checked Out</a> </li> <li> <a href="https://sfpl.bibliocommons.com/holds" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/holds"},"ui":{"ui_component_label":"On Hold","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_holds">On Hold</a> </li> <li> <a href="https://sfpl.bibliocommons.com/recentlyreturned" class="hidden indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/recentlyreturned"},"ui":{"ui_component_label":"Borrowing History","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" data-js="borrowing_history_menu_item" testid="biblionav_borrowing_history">Borrowing History</a> </li> <li> <a href="https://sfpl.bibliocommons.com/fines" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/fines"},"ui":{"ui_component_label":"Fees","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_fines">Fees</a> </li> <li> <a href="https://sfpl.bibliocommons.com/v2/interlibraryloans" class="hidden indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/v2/interlibraryloans"},"ui":{"ui_component_label":"ILL Requests","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}">ILL Requests</a> </li> <li aria-hidden="true" role="presentation" class="divider"></li> <li class="dropdown-header">My Collections</li> <li> <a href="https://sfpl.bibliocommons.com/collection/show/my/library/for_later" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/collection/show/my/library/for_later"},"ui":{"ui_component_label":"For Later Shelf","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_shelves_future">For Later Shelf</a> </li> <li> <a href="https://sfpl.bibliocommons.com/collection/show/my/library/completed" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/collection/show/my/library/completed"},"ui":{"ui_component_label":"Completed Shelf","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_shelves_past">Completed Shelf</a> </li> <li> <a href="https://sfpl.bibliocommons.com/collection/show/my/library/in_progress" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/collection/show/my/library/in_progress"},"ui":{"ui_component_label":"In Progress Shelf","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_shelves_present">In Progress Shelf</a> </li> <li> <a href="https://sfpl.bibliocommons.com/lists/show/mine" class=" indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/lists/show/mine"},"ui":{"ui_component_label":"Lists","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_lists">Lists</a> </li> <li aria-hidden="true" role="presentation" class="divider"></li> <li> <a href="https://sfpl.bibliocommons.com/user_profile/me" class=" " data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/user_profile/me"},"ui":{"ui_component_label":"My Profile","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_myprofile">My Profile</a> </li> <li aria-hidden="true" role="presentation" class="divider"></li> <li> <a href="https://sfpl.bibliocommons.com/account" class=" " data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.bibliocommons.com/account"},"ui":{"ui_component_label":"My Settings","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_mysettings">My Settings</a> </li> <!-- Template: t_biblionav_account_selector --> <li data-js='biblionav_account_selector'></li> </ul> </div> </div> <!-- end BCNAV --> <script id="t_biblionav_divider" type="x-handlebars-template"> <li aria-hidden="true" role="presentation" class="divider" data-js="divider_{{divider_name}}"></li> </script> <script id="t_biblionav_account_trigger" type="x-handlebars-template"> {{#if logged_in}} <div class="cp_user_avatar sm home_patron" testid="user_avatar_{{user_id}}"> {{#if user_avatar}} <img src="{{user_avatar}}" class="img-circle" alt=""> {{else}} <div class="img-circle initial"><span aria-hidden="true">{{user_initial}}</span></div> {{/if}} </div> <span class="hidden-xs user_identity_name" aria-hidden= "true">{{user_name}}</span> <span class="sr-only hidden-xs" data-js="sr-only-dropdown-toggle" data-text-collapsed="User {{user_name}}." data-text-expanded="User {{user_name}}.">User {{user_name}}.</span> <span class="sr-only visible-xs" data-js="sr-only-dropdown-toggle" data-text-collapsed="For {{user_name}}. Double-tap to expand." data-text-expanded="Menu for {{user_name}} shows pop-up">For {{user_name}}. Double-tap to expand.</span> {{else}} <span aria-hidden= "true" class="my_account_label">Log In / My SFPL</span> <span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="User Log In / My SFPL." data-text-expanded="User Log In / My SFPL.">User Log In / My SFPL.</span> {{/if}} <span class="icon-arrow" aria-hidden="true"></span> </script> <script id="t_biblionav_my_account_user_info" type="x-handlebars-template"> <li class="info" data-js="biblionav_my_account_user_info"> {{#if logged_in}} <div class="pull-left"> <div class="my-account"><b>My Account</b></div> </div> <div class="pull-right notification-buttons"> <a href="https://sfpl.bibliocommons.com/user_profile/me/notification_feed" class="btn btn-default btn-flat" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://sfpl.bibliocommons.com/user_profile/me/notification_feed"},"ui":{"ui_component_label":"{{unread_notifications}} notifications","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_notifications"> <i aria-hidden="true" class=" icon-bell"></i> {{#if unread_notifications}} <span class="badge" aria-hidden="true">{{unread_notifications}}</span> <span class="sr-only"> {{unread_notifications}} notifications </span> {{else}} <span class="sr-only">Notifications</span> {{/if}} </a> <a href="https://sfpl.bibliocommons.com/account/personal_information" class="btn btn-default btn-flat" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://sfpl.bibliocommons.com/account/personal_information"},"ui":{"ui_component_label":"My Settings","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_mysettings"> <i aria-hidden="true" class=" icon-cog"></i> <span class="sr-only">My Settings</span> </a> </div> <a href="https://sfpl.bibliocommons.com/user/logout" class="btn btn-transactional btn-block log_out_btn" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://sfpl.bibliocommons.com/user/logout"},"ui":{"ui_component_label":"Log Out","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" testid="biblionav_logout">Log Out</a> {{else}} <a href="https://sfpl.bibliocommons.com/user/login" class="btn btn-transactional btn-block log_in_btn" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://sfpl.bibliocommons.com/user/login"},"ui":{"ui_component_label":"Log In / Register","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" data-js="header_login_link" testid="biblionav_login">Log In / Register</a> {{/if}} </li> </script> <script id="t_biblionav_account_selector" type="x-handlebars-template"> <ul> <li aria-hidden="true" role="presentation" class="divider"></li> <li aria-hidden="true" role="presentation" class="dropdown-header"> Switch Library Account </li> {{#each accounts}} <li> <a href="https://{{link}}" class="indented" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_value":"https://{{link}}"},"ui":{"ui_component_label":"{{text}}","ui_component_type":"link-text","ui_container_type":"header-account-menu"}}]}" data-js="switch_linked_library" data-host="{{link}}" testid="biblionav_multiaccount_lib_{{text}}"> {{text}} <i aria-hidden="true" class=" icon-right"></i> </a> </li> {{/each}} </ul> </script> </div> </div> </div> </div> </div><!-- /.cp_header_biblio_bar --> <div class="header_main"> <div class="client_and_search" data-test-id="header-desktop-search"> <div class="container"> <div class="pull-left cp_header_client_area"> <div class="pull-left logo"> <a href="http://sfpl.org"><picture><source media="(max-width: 991px)" sizes="64px" srcset="//cor-liv-cdn-static.bibliocommons.com/images/CAL-SFPL/mobile_logo.png?1732976717612" /><img alt="San Francisco Public Library" src="//cor-liv-cdn-static.bibliocommons.com/images/CAL-SFPL/logo.png?1732976717612" title="" /></picture></a> </div> <div class="pull-left visible-xs-block visible-sm-block xs_icon_triggers"> <a href="#" aria-label="Main navigation" data-ga-category="mobile_header_main_nav" data-ga-label="Mobile Main Nav" data-js="header_nav_xs_trigger" data-main-nav="true" data-target="header-main-nav" id="header_nav_xs_trigger" role="button"><i aria-hidden="true" class=" icon-menu"></i><span class="sr-only">Main navigation</span></a> </div> </div> <div class="visible-xs-block visible-sm-block xs_icon_triggers"> <a href="#" aria-label="Open search form" class="header_search_xs" data-icon-off="icon-cancel" data-icon-on="icon-search" data-js="header_search_xs_trigger" role="button"><i aria-hidden="true" class=" icon-search"></i><span class="sr-only">Open search form</span></a> </div> <div class="hidden-xs hidden-sm header_collapsible_search_wrapper"> <div class="header_search_wrapper header_search_wrapper_desktop header_search_catalogue" data-js="header_search_wrapper header_search_wrapper_desktop"> <div class="cp_header_search" id="header_search" data-js="header_search"> <div> <div class="pull-left"> <span class="connector" aria-hidden="true">Search the</span> <div class="bootstrap-select-wrapper" data-test-id="header-other-search-options"><select aria-label="Search alternatives" class=" selectpicker form-control" data-dropup-auto="false" data-js="header_search_target" data-style="btn-flat btn-default" name="searchOpt" testid="search_scope"><option value="catalogue" data-action="https://sfpl.bibliocommons.com/search" data-query-field="q">Catalog</option> <option value="articles" data-action="https://www.ezproxy.sfpl.org/login?url=https://search.ebscohost.com/login.aspx?authtype=ip,guest&profid=eds&custid=sfpl&groupid=main&direct=true&site=eds-live&scope=site&bquery=__QUERY__" data-query-field="">Articles/Databases</option> <option value="website" data-action="https://sfpl.org/search-page?keys=__QUERY__&type=this_site" data-query-field="">Site</option> <option value="Search_360" data-action="https://digitalsf.org/islandora/search/__QUERY__?type=dismax" data-query-field="">Photos</option> <option value="Events" data-action="https://sfpl.org/events/#!/filters?keys=__QUERY__" data-query-field="">Events</option></select></div> </div> <form action="https://sfpl.bibliocommons.com/search" class="collapsible_search_form" data-js="header_search_form desktop_search_form" id="desktop_search_form" name="desktop_search_form"> <input data-js="header_search_origin" name="origin" type="hidden" value="user-query" /> <div class="pull-left"> <div data-js="header_target_search_options" data-target="catalogue"> <div class="form-group"> <span class="connector" aria-hidden="true"> by </span> <!-- begin SEARCH TYPE --> <div class="bootstrap-select-wrapper" data-test-id="header-search-type-dropdown"><select aria-label="Search type" class="form-control selectpicker form-control" data-dropup-auto="false" data-js="search_type" data-style="btn-flat btn-default" id="search_filter_id_59lgsm0vaan341j0cf50oeu20b" name="t" testid="search_filter"><option value="smart">Keyword</option> <option value="title">Title</option> <option value="author">Author</option> <option value="series">Series</option> <option value="subject">Subject</option> <option value="tag">Tag</option> <option value="userlist">List</option> <option value="user">User</option></select></div> <input data-js="search_category" id="search_category_id_1bo1vdm98c9d3qd6rukcb07rgh" name="search_category" testid="search_category" type="hidden" value="keyword" /> <!-- end SEARCH TYPE--> </div> </div> </div> <!-- begin SEARCH INPUT --> <div class="input-group header_search_box"> <label class="sr-only" for="search_box_id_5im95edrn71aifl5mu999776c9">Enter search query</label> <span class="main_search_input_wrapper" data-js="main_search_input_wrapper"> <input aria-activedescendant="" aria-autocomplete="both" aria-haspopup="listbox" aria-owns="header_auto_suggest_id_3n6edd4ak6rqbpp2oc9509873v" autocomplete="off" class="form-control main_search_input text" data-js="main_search_input" id="search_box_id_5im95edrn71aifl5mu999776c9" maxlength="1000" name="q" testid="main_search_input" type="search" /> <span class="header_search_filter_lock form-control-feedback" data-js="search_filter_locked" aria-hidden="true"> <svg aria-hidden="true" class="svg_icon " focusable="false" height="16" style="margin-top:10px;" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"> <path d="M16 11.998V3.998H17V1.998H7V3.998H8V11.998L6 13.998V15.998H11.2V21.998H12.8V15.998H18V13.998L16 11.998Z" /> </svg> </span> <button class="btn btn-link header_search_clear_button" data-js="header_search_clear_button" type="button"> <div class="sr-only"> Clear Text </div> <svg aria-hidden="true" class="svg_icon svg_close_icon" focusable="false" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"> <rect width="2" height="16" x="6.964" y="-.036" fill="currentColor" transform="rotate(45 7.964 7.964)"/> <rect width="2" height="16" x="6.964" y="-.036" fill="currentColor" transform="scale(-1 1) rotate(45 0 -11.263)"/> </svg> </button> <div data-js="header_auto_suggest" class="cp_header_auto_suggest hidden"> <div data-js="auto_suggest_aria_messages" class="sr-only" role="alert" aria-live="polite" aria-atomic="false"></div> <ul id="header_auto_suggest_id_3n6edd4ak6rqbpp2oc9509873v" data-js="suggestion-menu" class="dropdown-menu" role="listbox"></ul> <div class="hidden"> <svg aria-hidden="true" class="suggestion-skeleton-icon pulse" data-js="suggestion_skeleton_svg" focusable="false" height="14" preserveAspectRatio="xMinYMin meet" viewBox="0 0 10 10" width="14" xmlns="http://www.w3.org/2000/svg"> <rect fill="currentColor" width="2000" height="10"></rect> </svg> </div> </div> </span> <span class="input-group-btn"> <button type="submit" class="btn btn-primary btn-flat"> <i aria-hidden="true" class=" icon-search"></i> <span class="sr-only">Search</span> </button> </span> </div> <!-- end SEARCH INPUT --> </form> </div> <div class="pull-right small adv_search"> <a href="https://sfpl.bibliocommons.com/user/saved_searches" class="hidden" data-ga-category="header_saved_searches" data-js="save_search_overlay" testid="link_savedsearches">Saved Searches</a> <a href="https://sfpl.bibliocommons.com/search" test_id="link_advancedsearch">Advanced Search</a> </div> </div> </div> </div> </div> </div><!-- /.client_and_search --> <div class="clearfix header_search_wrapper search_wrapper_xs header_search_catalogue" data-js="header_search_wrapper header_search_wrapper_xs" data-test-id="header-mobile-search"> <div class="col-xs-12"> <div class="cp_header_search" data-js="header_search"> <h2 data-js="header_search_title" class="header_search_title" tabindex="-1"> Search </h2> <div class="form-group"> <div class="bootstrap-select-wrapper" data-test-id="header-other-search-options"><select aria-label="Search alternatives" class=" selectpicker form-control" data-dropup-auto="false" data-js="header_search_target" data-style="btn-flat btn-default" name="searchOpt" testid="search_scope"><option value="catalogue" data-action="https://sfpl.bibliocommons.com/search" data-query-field="q">Catalog</option> <option value="articles" data-action="https://www.ezproxy.sfpl.org/login?url=https://search.ebscohost.com/login.aspx?authtype=ip,guest&profid=eds&custid=sfpl&groupid=main&direct=true&site=eds-live&scope=site&bquery=__QUERY__" data-query-field="">Articles/Databases</option> <option value="website" data-action="https://sfpl.org/search-page?keys=__QUERY__&type=this_site" data-query-field="">Site</option> <option value="Search_360" data-action="https://digitalsf.org/islandora/search/__QUERY__?type=dismax" data-query-field="">Photos</option> <option value="Events" data-action="https://sfpl.org/events/#!/filters?keys=__QUERY__" data-query-field="">Events</option></select></div> </div> <form accept-charset="UTF-8" action="https://sfpl.bibliocommons.com/search" data-js="header_search_form mobile_search_form" id="mobile_search_form" method="get" name="mobile_search_form"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div> <input data-js="header_search_origin" id="origin" name="origin" type="hidden" value="user-query" /> <div data-js="header_target_search_options" data-target="catalogue"> <div class="form-group"> <span class="connector" aria-hidden="true"> by </span> <!-- begin SEARCH TYPE --> <div class="bootstrap-select-wrapper" data-test-id="header-search-type-dropdown"><select aria-label="Search type" class="form-control selectpicker form-control" data-dropup-auto="false" data-js="search_type" data-style="btn-flat btn-default" id="search_filter_id_4puren9vj2vk5t3lgvkgq7m1jq" name="t" testid="search_filter"><option value="smart">Keyword</option> <option value="title">Title</option> <option value="author">Author</option> <option value="series">Series</option> <option value="subject">Subject</option> <option value="tag">Tag</option> <option value="userlist">List</option> <option value="user">User</option></select></div> <input data-js="search_category" id="search_category_id_4k9aqie4b11b56kt91so1anpff" name="search_category" testid="search_category" type="hidden" value="keyword" /> <!-- end SEARCH TYPE--> </div> </div> <div class="form-group"> <!-- begin SEARCH INPUT --> <div class="input-group header_search_box"> <label class="sr-only" for="search_box_id_6ev79nh3cp5pco5pe6d1cds951">Enter search query</label> <span class="main_search_input_wrapper" data-js="main_search_input_wrapper"> <input aria-activedescendant="" aria-autocomplete="both" aria-haspopup="listbox" aria-owns="header_auto_suggest_id_6ejcbd8db6qes4b9j4bjk6qbg0" autocomplete="off" class="form-control main_search_input text" data-js="main_search_input" id="search_box_id_6ev79nh3cp5pco5pe6d1cds951" maxlength="1000" name="q" testid="main_search_input" type="search" /> <span class="header_search_filter_lock form-control-feedback" data-js="search_filter_locked" aria-hidden="true"> <svg aria-hidden="true" class="svg_icon " focusable="false" height="16" style="margin-top:10px;" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg"> <path d="M16 11.998V3.998H17V1.998H7V3.998H8V11.998L6 13.998V15.998H11.2V21.998H12.8V15.998H18V13.998L16 11.998Z" /> </svg> </span> <button class="btn btn-link header_search_clear_button" data-js="header_search_clear_button" type="button"> <div class="sr-only"> Clear Text </div> <svg aria-hidden="true" class="svg_icon svg_close_icon" focusable="false" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"> <rect width="2" height="16" x="6.964" y="-.036" fill="currentColor" transform="rotate(45 7.964 7.964)"/> <rect width="2" height="16" x="6.964" y="-.036" fill="currentColor" transform="scale(-1 1) rotate(45 0 -11.263)"/> </svg> </button> <div data-js="header_auto_suggest" class="cp_header_auto_suggest hidden"> <div data-js="auto_suggest_aria_messages" class="sr-only" role="alert" aria-live="polite" aria-atomic="false"></div> <ul id="header_auto_suggest_id_6ejcbd8db6qes4b9j4bjk6qbg0" data-js="suggestion-menu" class="dropdown-menu" role="listbox"></ul> <div class="hidden"> <svg aria-hidden="true" class="suggestion-skeleton-icon pulse" data-js="suggestion_skeleton_svg" focusable="false" height="14" preserveAspectRatio="xMinYMin meet" viewBox="0 0 10 10" width="14" xmlns="http://www.w3.org/2000/svg"> <rect fill="currentColor" width="2000" height="10"></rect> </svg> </div> </div> </span> <span class="input-group-btn"> <button type="submit" class="btn btn-primary btn-flat"> <i aria-hidden="true" class=" icon-search"></i> <span class="sr-only">Search</span> </button> </span> </div> <!-- end SEARCH INPUT --> </div> </form> <div class="form-group pull-right adv_search"> <a href="https://sfpl.bibliocommons.com/user/saved_searches" class="hidden" data-ga-category="header_saved_searches" data-js="save_search_overlay" testid="link_savedsearches">Saved Searches</a> <a href="https://sfpl.bibliocommons.com/search" test_id="link_advancedsearch">Advanced Search</a> </div> </div> <!-- /.cp_header_search --> </div> </div> <div class="navbar yamm navbar-default hidden-xs hidden-sm cp_header_nav" data-js="header-top-nav"> <div class="container"> <nav class="navbar-collapse collapse col-md-12"> <ul class="nav navbar-nav header_main_nav" id="header_main_nav" aria-haspopup="true" data-js="header-main-nav"> <li class='dropdown desktop mobile' data-ga-category='header_top_level_nav' data-ga-label='Explore' data-ga-event='show'><a href="#explore_menu" class="dropdown-toggle hide_trigger_icon" data-analytics-payload="{"method":"trackNavigate","args":[{"ui":{"ui_component_label":"Explore","ui_component_type":"dropdown-menu","ui_container_title":"Explore","ui_container_type":"header-navigation"}}]}" data-toggle="dropdown" testid="link_explore"><span aria-hidden="true">Explore</span><span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="Explore, collapsed" data-text-expanded="Explore, expanded">Explore, collapsed</span><span aria-hidden="true" class="icon-arrow"></span></a><div class="dropdown-menu" data-listbox="true"> <div class="yamm-content"><div class="menu-column"><ul class="list-unstyled"><li class='desktop mobile'><a href="/" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"dashboard"}},"ui":{"ui_component_label":"Recent Activity","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Recent Activity - Explore" testid="link_whatsnew">Recent Activity</a></li><li class='desktop mobile'><a href="/explore/recent_arrivals" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"recent_arrivals"}},"ui":{"ui_component_label":"New Titles","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="New Titles - Explore" testid="link_explorenewlyacquired">New Titles</a></li><li class='desktop mobile'><a href="/explore/awards" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"awards"}},"ui":{"ui_component_label":"Awards","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Awards - Explore" testid="link_exploreawards">Awards</a></li><li class='desktop mobile'><a href="/explore/bestsellers" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"bestsellers"}},"ui":{"ui_component_label":"Bestsellers","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Bestsellers - Explore" testid="link_explorebestsellers">Bestsellers</a></li><li class='desktop mobile'><a href="/explore/featured_lists/staff_picks" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"featured_lists","action":"show","id":"staff_picks"}},"ui":{"ui_component_label":"Staff Picks","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Staff Picks - Explore" testid="link_e">Staff Picks</a></li><li class='desktop mobile'><a href="/explore/featured_lists/languages" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":{"controller":"featured_lists","action":"show","id":"languages"}},"ui":{"ui_component_label":"International Languages","ui_component_type":"link-text","ui_container_title":"Explore","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="International Languages - Explore" testid="link_e">International Languages</a></li></ul></div> </div></div></li><li class='dropdown desktop mobile' data-ga-category='header_top_level_nav' data-ga-label='Books & Media' data-ga-event='show'><a href="#books_media_menu" class="dropdown-toggle hide_trigger_icon" data-analytics-payload="{"method":"trackNavigate","args":[{"ui":{"ui_component_label":"Books & Media","ui_component_type":"dropdown-menu","ui_container_title":"Books & Media","ui_container_type":"header-navigation"}}]}" data-toggle="dropdown"><span aria-hidden="true">Books & Media</span><span class="sr-only" data-js="sr-only-dropdown-toggle" data-text-collapsed="Books & Media, collapsed" data-text-expanded="Books & Media, expanded">Books & Media, collapsed</span><span aria-hidden="true" class="icon-arrow"></span></a><div class="dropdown-menu" data-listbox="true"> <div class="yamm-content"><div class="menu-column"><ul class="list-unstyled"><li class='desktop mobile'><a href="https://sflib1.sfpl.org/search" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sflib1.sfpl.org/search"},"ui":{"ui_component_label":"Classic Catalog","ui_component_type":"link-text","ui_container_title":"Books & Media","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Classic Catalog - Books & Media">Classic Catalog</a></li><li class='desktop mobile'><a href="https://sfpl.org/readthis" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/readthis"},"ui":{"ui_component_label":"Read This!","ui_component_type":"link-text","ui_container_title":"Books & Media","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Read This! - Books & Media">Read This!</a></li><li class='desktop mobile'><a href="https://sfpl.libanswers.com/faq/103121" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.libanswers.com/faq/103121"},"ui":{"ui_component_label":"Link+","ui_component_type":"link-text","ui_container_title":"Books & Media","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="Link+ - Books & Media">Link+</a></li><li class='desktop mobile'><a href="https://sfpl.org/onecityonebook" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/onecityonebook"},"ui":{"ui_component_label":"One City One Book","ui_component_type":"link-text","ui_container_title":"Books & Media","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="One City One Book - Books & Media">One City One Book</a></li><li class='desktop mobile'><a href="https://sfpl.org/research-learn/elibrary" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/research-learn/elibrary"},"ui":{"ui_component_label":"eBooks, Streaming Movies","ui_component_type":"link-text","ui_container_title":"Books & Media","ui_container_type":"header-navigation-menu"}}]}" data-ga-category="header_sub_level_nav" data-ga-label="eBooks, Streaming Movies - Books & Media">eBooks, Streaming Movies</a></li></ul></div> </div></div></li><li class='desktop mobile'><a href="https://sfpl.org/research-learn" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/research-learn"},"ui":{"ui_component_label":"Research & Learn","ui_component_type":"link-text","ui_container_title":"Research & Learn","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Research & Learn">Research & Learn</a></li><li class='desktop mobile'><a href="https://sfpl.org/calendar" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/calendar"},"ui":{"ui_component_label":"Events & Exhibits","ui_component_type":"link-text","ui_container_title":"Events & Exhibits","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Events & Exhibits">Events & Exhibits</a></li><li class='desktop mobile'><a href="https://sfpl.org/services" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/services"},"ui":{"ui_component_label":"Support & Services","ui_component_type":"link-text","ui_container_title":"Support & Services","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Support & Services">Support & Services</a></li><li class='desktop mobile'><a href="https://sfpl.org/kids" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/kids"},"ui":{"ui_component_label":"Kids","ui_component_type":"link-text","ui_container_title":"Kids","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Kids">Kids</a></li><li class='desktop mobile'><a href="https://themixatsfpl.org/" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://themixatsfpl.org/"},"ui":{"ui_component_label":"Teens","ui_component_type":"link-text","ui_container_title":"Teens","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Teens">Teens</a></li><li class='desktop mobile'><a href="https://sfpl.org/locations" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/locations"},"ui":{"ui_component_label":"Locations","ui_component_type":"link-text","ui_container_title":"Locations","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="Locations">Locations</a></li><li class='desktop mobile'><a href="https://sfpl.org/about" data-analytics-payload="{"method":"trackNavigate","args":[{"metadata":{"metadata_category_type":"navigation","metadata_value":"https://sfpl.org/about"},"ui":{"ui_component_label":"About","ui_component_type":"link-text","ui_container_title":"About","ui_container_type":"header-navigation"}}]}" data-ga-category="header_top_level_nav" data-ga-label="About">About</a></li> </ul> </nav> </div> </div> <!-- /.cp_header_nav --> <script id="t_biblionav_header_nav_xs" type="x-handlebars-template"> <div class="navbar yamm navbar-default cp_header_nav"> <nav class="col-xs-12"> {{{nav_html}}} </nav> </div> </script> </div> </div><!-- /.cp_header --> </div> </header> <div class="container container_for_page"> <main id="page"> <div class="legacy_page_row"> <div id="top_banner"> </div> <div id="main" class="clearfix row"> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-9" data-analytics="{ "Section": "Center" }" id=""> <div class="content clearfix"> <h1 id="content-start"> Log In </h1> <a href="https://help.bibliocommons.com/000getting/005logging-in" class="help_icon blockHijack inline" id="main_help_000getting/005logging_in_id_fq93a939dfi4dumova4md3b35" target="_blank"><i aria-hidden="true" class=" icon-info-circled"></i><span class="sr-only">Help for logging in, opens a new window</span></a> <div class="alert cp_system_message high collapsed" role="alert" data-notice_id="2049671949" testid="system_message high" data-js="system_message"> <button type="button" class="close" data-dismiss="alert" testid="system_message_close_button" aria-label="hide"><span aria-hidden="true">×</span></button> <div class="wrapper"> <div class="priority_box"> <i aria-hidden="true" class=" icon-attention"></i> </div> <div class="message_box" testid="system_message_text" data-js="expand-text" > Try our improved mobile app! Go to your app store and search “SFPL” to get the update. 試一試圖書館已革新的流動應用程式!瀏覽您的應用程式商店並用SFPL蒐索獲取更新。Prueba nuestra aplicación móvil mejorada. Ve a tu tienda de aplicaciones y busca "SFPL" para obtener la actualización. </div> <div class="collapse_expand_actions" data-js="collapse_expand_actions"> <a href="#" class="expand_trigger" data-js="expand_action"> <i aria-hidden="true" class=" icon-down-dir"></i> <span class="sr-only">Show more</span> </a> <a href="#" class="collapse_trigger" data-js="collapse_action"> <i aria-hidden="true" class=" icon-up-dir"></i> <span class="sr-only">Show less</span> </a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-6 col-md-5"> <form accept-charset="UTF-8" action="https://sfpl.bibliocommons.com/user/login?destination=%2Fcollection%2Fadd%2Fmy%2Flibrary%3Fbib%3D6312151093%26bib_status%3Dfuture%26button_styles%255B%255D%3Dcombo_button" autocorrect="off" class="loginForm left" data-js="login_form" id="login_2m3ohpe02di7dj81nttl5ejhc4" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" /></div> <label for="user_name_2m3ohpe02di7dj81nttl5ejhc4">Username or Barcode:</label> <input class="field_username text" data-js="username_login" id="user_name_2m3ohpe02di7dj81nttl5ejhc4" name="name" testid="field_username" type="text" /> <label for="user_pin_2m3ohpe02di7dj81nttl5ejhc4"> Password: </label> <input autocomplete="on" class="text" id="user_pin_2m3ohpe02di7dj81nttl5ejhc4" name="user_pin" testid="field_userpin" type="password" value="" /> <p> <a href="/user/forgot" class="help" target="_parent" testid="link_forgotpin">Forgot your Password?</a> </p> <div class="bc_checkbox"> <input class="rememberMe" id="remember_2m3ohpe02di7dj81nttl5ejhc4" name="remember_me" testid="checkbox_rememberme" type="checkbox" value="true" /> <label for="remember_2m3ohpe02di7dj81nttl5ejhc4">Remember me on this device</label> </div> <input id="local" name="local" type="hidden" value="false" /> <p> <input alt="Log In" class="btn btn-primary" data-js="button_login" name="commit" testid="button_login" title="Log In" type="submit" value="Log In" /> <a href="https://sfpl.libanswers.com/faq/65116" target="_parent">Get a Card</a> </p> </form> </div> <div class="col-xs-12 col-sm-6 col-md-7"> </div> </div> </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-3" data-analytics="{ "Section": "Right" }" id=""> <div class="tout"> <div class="toutContent"> <h2>Welcome to Your New Catalog!</h2> <p>Here's what's new…</p> <ul> <li>Find what you want with a better search.</li> <li>Track your borrowing.</li> <li>Rate and review titles you borrow, and share your opinions on them.</li> <li>Get personalized recommendations.</li> </ul> </div> </div> <div class="tout"> <div class="toutContent"> <h2 id="content-start">Trouble logging in?</h2> <p><a href="https://help.bibliocommons.com/000getting/005logging-in" class="help_popup" id="id_2t30enp8j9lph8b355tncvaoj0" target="_blank">Click here for help.</a></p> </div> </div> </div> </div> <!-- /#main --> </div> </main> <!-- /#page --> </div> <div data-react-class="FeedbackBoxContainer" data-react-props="{}"></div> <footer id="footer" class=""> <div class="footerContent clearfix container"> <div class="footerLinks"> <div class="library-custom-links"> <a href="https://sfpl.org/contact" testid="footer_link_1">Contact</a> <a href="https://sfpl.org/databases" testid="footer_link_2">Articles & Databases</a> <a href="https://sfpl.org/books-and-media/suggest-title" testid="footer_link_3">Suggest a Title</a> <a href="https://sfpl.libanswers.com/faq/97320" testid="footer_link_4">Interlibrary Loan</a> <a href="https://sflib1.sfpl.org/search" testid="footer_link_5">Classic Catalog</a> <a href="https://sfpl.libanswers.com/" testid="footer_link_6">FAQ</a> </div> <div class="policy-links"> <a href="/info/privacy" testid="footer_link_privacy">Privacy Statement</a> <a href="/info/terms" testid="footer_link_terms">Terms of Use</a> <a href="/info/accessibility" testid="footer_link_accessibility_statement">Accessibility Statement</a> </div> </div> </div> </footer> <div class="container"> <div class="appserver"> <div class="powered-by"> Powered by BiblioCommons. </div> <div class="product-version"> BiblioCore: app20 Version 9.25.0 Last updated 2024/10/01 11:54 </div> </div> </div> <!-- begin POSITIONED ELEMENTS --> <div class="errorSpace messaging"> <div class="errors">[]</div> </div> <div class="messageSpace messaging"> <div class="messages">[]</div> </div> <div data-analytics='{ "Section":"Messaging" }'> <div class="messaging" data-test-id="top-message-container" id="id_i4ou0aro8rk6fcn6hnqq0p5kr"> <div class="messageContent"> <span class="message-icon"></span> <div class="top_message" id="msg_id_2e76ft1kjr1g4m73tgd9cs6sbt"> <a name=""></a> </div> </div> <div class="closeButton" data-js="close_system_message" data-test-id="message-close-button"></div> </div> <script type="text/javascript" charset="utf-8"> registered_messages.push( {element: 'msg_id_2e76ft1kjr1g4m73tgd9cs6sbt', key: [], type: ["message","error"]}); </script> </div> <div class="cp_bc_modal"> <div class="modal fade" id="master_modal" data-test-id="modal-container" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> </div> </div> </div> </div> <!-- Currently, we cannot cache these templates because the content would change depending on the value of the feature flag.--> <script type="x-handlebars-template" id="discussion_flag_tpl" charset="utf-8"> <div class="flagging overlay-white" id="flag_{{content_id}}"> <div class="flag_selection"> <h4> <span class="flag_icon"><i aria-hidden="true" class=" icon-flag-empty"></i></span> Flag this content because: <a href="https://help.bibliocommons.com/025ug/060reporting-inappropriate-content/" class="help_icon blockHijack inline" id="main_help_025ug/060reporting-inappropriate-content/_id_4bet5sikg8s1phe6em7aquobro" target="_blank"><i aria-hidden="true" class=" icon-info-circled"></i></a> </h4> {{#if flag_options.violates_appropriate_use_show_option}} <div class="types" testid="violates_appropriate_use"> <a href="#" data-js="type_form_trigger" data-type="violates_appropriate_use"><i aria-hidden="true" class=" icon-right-open"></i> Violates Appropriate Use Standards</a> </div> <form accept-charset="UTF-8" action="/{{controller}}/flag/{{content_id}}" class="flag_form" id="flag_form_violates_appropriate_use" method="post" style="display:none;" testid="flag_form_violates_appropriate_use"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" /></div> <input data-js="flag_type" id="flag_type" name="flag_type" type="hidden" value="VIOLATES_APPROPRIATE_USE" /> <input data-js="java-content-class" id="content_class" name="content_class" type="hidden" value="{{java_content_class}}" /> <p>Please review the Appropriate Use standard and tell us which term has been violated.</p> <input checked="checked" id="violation_type_UNRELATED" name="violation_type" type="radio" value="UNRELATED" /> Unrelated <br/> <input id="violation_type_UNLAWFUL" name="violation_type" type="radio" value="UNLAWFUL" /> Unlawful <br/> <input id="violation_type_OBSCENE" name="violation_type" type="radio" value="OBSCENE" /> Obscene <br/> <input id="violation_type_MARKETING_SCHEME" name="violation_type" type="radio" value="MARKETING_SCHEME" /> Marketing Scheme <br/> <input id="violation_type_ADVERTISING" name="violation_type" type="radio" value="ADVERTISING" /> Advertising <br/> <input id="violation_type_PRIVACY_VIOLATION" name="violation_type" type="radio" value="PRIVACY_VIOLATION" /> Privacy Violation <br/> <input id="violation_type_VIRUS" name="violation_type" type="radio" value="VIRUS" /> Virus <br/> <input id="violation_type_RIGHTS_VIOLATION" name="violation_type" type="radio" value="RIGHTS_VIOLATION" /> Rights Violation <br/> <input id="violation_type_CRIMINAL_ADVICE" name="violation_type" type="radio" value="CRIMINAL_ADVICE" /> Criminal Advice <br/> <p><label for="accept" class="review_standards"><input class="required" id="accept" name="accept" type="checkbox" value="1" /> I have reviewed the <a href="/info/terms" target="_blank">Appropriate Use Standards</a></label></p> <input class="btn btn-primary" name="commit" type="submit" value="Submit" /> </form> {{/if}} {{#if flag_options.offensive_show_option}} <div class="types" testid="offensive"> <a href="#" data-js="type_form_trigger" data-type="offensive"><i aria-hidden="true" class=" icon-right-open"></i> Is offensive (To me or my community)</a> </div> <form accept-charset="UTF-8" action="/{{controller}}/flag/{{content_id}}" class="flag_form" id="flag_form_offensive" method="post" style="display:none;" testid="flag_form_offensive"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" /></div> <input data-js="flag_type" id="flag_type" name="flag_type" type="hidden" value="OFFENSIVE" /> <input data-js="java-content-class" id="content_class" name="content_class" type="hidden" value="{{java_content_class}}" /> <p>This content is offensive because:</p> <textarea class="required" id="reason" name="reason" placeholder="Please enter the reason"> </textarea> <input class="btn btn-primary" name="commit" type="submit" value="Submit" /> </form> {{/if}} {{#if flag_options.spoiler_show_option}} <div class="types" testid="spoiler"> <a href="#" data-js="type_form_trigger" data-type="spoiler"><i aria-hidden="true" class=" icon-right-open"></i> Contains spoilers (Gives away the ending)</a> </div> <form accept-charset="UTF-8" action="/{{controller}}/flag/{{content_id}}" class="flag_form" id="flag_form_spoiler" method="post" style="display:none;" testid="flag_form_spoiler"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" /></div> <input data-js="flag_type" id="flag_type" name="flag_type" type="hidden" value="SPOILER" /> <input data-js="java-content-class" id="content_class" name="content_class" type="hidden" value="{{java_content_class}}" /> <p>This content contains spoilers.</p> <p>Some people don't want to ruin the ending.</p> <input class="btn btn-primary" name="commit" type="submit" value="Submit" /> </form> {{/if}} </div> </div> </script> <!-- For the popout when user clicks "Contains Spoiler" on a tagged UGC. --> <script type="x-handlebars-template" id="ugc_flagged_content_spoiler_info" charset="utf-8"> <p><b>May contain spoilers</b><br> Spoilers give away details you may not want to know until you've read/watched this yourself.</p> </script> <!-- For the popout when user clicks "Contains Offensive Content" on a tagged UGC. --> <script type="x-handlebars-template" id="ugc_flagged_content_offensive_info" charset="utf-8"> <p><b>This content has been tagged as offensive</b><br> This content has been reported by other users as offensive. <a href="/info/terms">Learn more about reported content.</a></p> </script> <script id="dropdown_filter_template" type="x-handlebars-template" charset="UTF-8"> <div class="cp_filter_overlay"> <h2 class="filter_title" data-js='overlay-title'>{{{title}}}</h2> <div class="list-group"> {{#each options}} <a class="list-group-item {{#if active}} active {{/if}}" href="#" data-js="filter-option" data-filter-attribute="{{filterAttribute}}">{{filterLabel}}</a> {{/each}} </div> </div> </script> <script type="x-handlebars-template" id="list_more_actions_tmpl" charset="utf-8"> <div class="more_actions_overlay"> <div class="content-header"> <button type="button" class="close close_top_right" data-js="close_button"> <span aria-hidden="true">×</span> </button> <h4 class="content-title" id="modal_label"> {{{sectionTitle}}} </h4> </div> <div class="content-body"> <h3 class="inline_bib_title">{{{bibTitle}}}</h3> <div class="more_actions_info" data-js="more_actions_info_container"></div> <div class="list-group more_actions_list" data-js="append-links"> </div> <a href="#" data-js="close_button" class="nevermind_link"> No, go back </a> </div> </div> </script> <script data-js="like_button_template" type="text/x-handlebars-template" charset="utf-8"> <button class="like_button {{liking_like_status liked}}" data-liked="{{liked}}" data-js="like_button" data-count="{{like_count}}" data-content-id="{{content_id}}" data-resource="{{resource}}"> {{liking_like_heart_icon liked}}{{liking_like_state liked display_text="true"}} </button> {{#if like_count_button_enabled}} {{#if like_count}} <button class="like_count_button" data-js="like_count_button">{{format_number_with_commas like_count}} {{liking_like_noun like_count}}</button> {{/if}} {{/if}} </script> <script data-js="like_breakdown_template" type="text/x-handlebars-template" charset="utf-8"> <a href="#" class="like_breakdown_close" data-js="like_breakdown_close"><i aria-hidden="true" class=" icon-cancel"></i></a> {{#liking_ifContentHasLikes like_count}} <h4 class="like_breakdown_heading"> {{#liking_if_single_user_liked like_count}} {{liking_liked_users_count like_count}} likes this {{else}} {{liking_liked_users_count like_count}} like this {{/liking_if_single_user_liked}} </h4> <span class="like_usernames"> <i aria-hidden="true" class=" icon-heart"></i> {{#if liked}} You{{#liking_unlessContentOnlyHasOneLike like_count}},{{/liking_unlessContentOnlyHasOneLike}} {{/if}} {{#each liked_users.users}} {{#if is_active}} <a class="like_username" href="/user_profile/{{id}}">{{username}}</a>{{#unless @last}},{{/unless}} {{else}} <span class="like_username" title="Inactive User">{{username}}</span>{{#unless @last}},{{/unless}} {{/if}} {{/each}} </span> {{#if liked_users.see_more}} <div class="like_usernames_see_more_wrap"> <a href="{{url}}" data-js="like_breakdown_see_more">See more<i aria-hidden="true" class=" icon-down-dir"></i></a> <i aria-hidden="true" class="hidden icon-spinner" data-js="liked_users_spinner"></i> </div> {{/if}} {{else}} <h4 class="like_breakdown_heading">No one has liked this yet. Be the first!</h4> {{/liking_ifContentHasLikes}} </script> <script id="tmpl_save_search_form" type="text/x-handlebars"> <form accept-charset="UTF-8" action="/user/save_search" class="form-inline save_search_form" data-js="save_search_form" data-remote="true" data-type="json" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="GDpKcQ06wSG39YNaF8Mo1HF8PkKrxZxxPALvSxgkXIg=" /></div> <div data-js="messaging"> </div> <button type="button" class="close close_top_right" data-js="close_button"> <span aria-hidden="true">×</span> </button> <input type="hidden" name="search_string" data-js="search_string"> <input type="hidden" name="inline_messaging" value="true"> <input type="hidden" name="original_search_name" data-js="original_search_name"> <div class="search_prompt"> <div class="form-group"> <label for="search_name"> Save search as: </label> <input type="text" name="search_name" data-js="search_name" required class="form-control search_name_field" maxlength="100" value="{{current_query}}"> <div class="form_buttons"> <button type="submit" class="btn btn-primary" data-saving-text="<i class='icon-spinner animate-spin'></i> Saving..." data-js="save_button"> <i aria-hidden="true" class=" icon-ok"></i> Save it </button> <a href="#" data-js="close_button" class="btn btn-default"> Cancel </a> </div> </div> </div> <div class="duplicate_search_prompt"> <div class="form-group"> <span> You already have a search saved as "<span class="replace_query" data-js="search_name_replace"></span>". Replace it with this one? </span> <div class="form_buttons"> <button type="submit" class="btn btn-primary" data-saving-text="<i class='icon-spinner animate-spin'></i> Saving..." data-js="save_button" name="replace" value="true"> Yes, replace it </button> <a href="#" data-js="choose_new_name" class="btn btn-default"> Choose new name </a> <a href="#" data-js="close_button" class="btn btn-default"> Cancel </a> </div> </div> </div> </form></script> <script type="x-handlebars-template" id="confirmation_prompt_tpl" charset="utf-8"> <div class="content-header"> <button type="button" class="close close_top_right" data-js="close_button" data-test-id="modal-close-button"> <span aria-hidden="true">×</span> <span class="sr-only">Close Dialog</span> </button> <h4 class="content-title" id="modal_label"> Log In {{#if title}} {{title}} {{else}} Are you sure? {{/if}} </h4> </div> <div class="content-body"> <p>Caution: This cannot be undone.</p> {{#if message}}<p> {{message}}</p>{{/if}} <label for="conf_prompt_ignore" data-js="confirmation-prompt-do-not-show-again"> <input data-js="pretty-checkbox conf_prompt_ignore" id="conf_prompt_ignore" name="conf_prompt_ignore" testid="conf_checkbox" type="checkbox" value="1" /> Don't show this message again </label> </div> <div class="content-footer"> <input class="btn btn-transactional" data-js="conf_proceed_btn" data-test-id="confirmation-proceed-button" name="commit" testid="conf_proceed_btn" type="submit" value="Yes, I'm sure" /> <a href="#" class="nevermind_link link_contextual" data-js="close_button" testid="conf_cancel_btn">No, go back</a> </div> </script> <script data-js="user_card_template" type="text/x-handlebars-template" charset="utf-8"> <div class="card" testid="user_card_hover_{{id}}" data-test-id="user-card-content-{{id}}"> <div class="row card-row"> <div class="col-xs-3"> <span class="cp_user_avatar md {{libraryMembership}}" testid="user_avatar"> <a href="/user_profile/{{id}}"> {{#if avatar}} <img src="{{avatar}}" class="img-circle"> {{else}} <div class="img-circle initial"><span>{{initial}}</span></div> {{/if}} </a> </span> </div> <div class="col-xs-9 user-card-info"> <h4 class="user-card-username"> <a href="/user_profile/{{id}}" title="{{name}}'s Profile" testid="user_profile_link" data-ga-category="user_card" data-ga-label="User Profile Link"> {{name}} </a> </h4> {{#if libraryName}} <p>{{libraryName}}</p> {{/if}} {{#if staff}}<p><span class="cp_staff_stamp">Library Staff</span></p>{{/if}} <p> <a href="/user_profile/{{id}}" title="{{name}}'s Profile" data-ga-category="user_card" data-ga-label="User Profile Link" data-test-id="user-profile-link" > View Profile </a> </p> <p> <a href="/user/login" class="btn btn-secondary btn-flat btn-sm" testid="logged_out_follow_user"><i aria-hidden="true" class=" icon-user-plus"></i>Follow</a> <a href="/user/login" class="btn btn-secondary btn-flat btn-sm" testid="logged_out_ignore_user"><i aria-hidden="true" class=" icon-block"></i>Ignore</a> </p> {{#if is_currently_logged_in_user}}<div class="status-label status-label-info">This is me!</div>{{/if}} </div> </div> </div> </script> <script charset="utf-8" data-js="tour_dots_template" type="text/x-handlebars-template"> <div class="pagination_dots"> {{#each steps}} <div class="dot {{#isTourDotFilledIn ../currentStep @index}}active{{/isTourDotFilledIn}}"></div> {{/each}} </div> </script> <div id="overlay" aria-hidden="true" role="application" data-js="overlay-container" data-test-id="overlay-container"> <div class="overlay-backdrop"></div> <div class="overlay-inner"> <div class="overlay-body" data-test-id="overlay-body"></div> <a href="#close-overlay" class="overlay-close js-close-trigger" data-test-id="overlay-close"> <i aria-hidden="true" class=" icon-cancel"></i> <span class="sr-only">Close Dialog</span> </a> </div> </div> <div class="popup-box-ie-position"> <div class="popout-box"> <div id="popout-box-content" aria-live="polite" aria-atomic="true" aria-relevant="additions"></div> <div class="popout-box-border"></div> <div class="popout-box-arrow"></div> </div> </div> <div class="spinner " data-test-id="" id="globalSpinner"> <img alt="" data-test-id="spinner-image" src="//cor-cdn-static.bibliocommons.com/assets/ajax-loader-2ad22ee6988a62b7f1661cb696219501.gif" title="" /> </div> <a class="btn btn-secondary cp_sticky_tab btn-float back_to_top" data-bottom="30" data-right="0" data-js="sticky_tab back_to_top"> <i aria-hidden="true" class=" icon-up"></i> To Top </a> <!-- end POSITIONED ELEMENTS --> </div> <!-- /#ct_controller --> <!-- begin JS BLOCK --> <script src="//cor-cdn-static.bibliocommons.com/assets/vendor-c51265b3f46952539b0d2eb34dbdeee1.js" type="text/javascript"></script> <script type="text/javascript" src="/v2/sdk.js"></script> <script src="//cor-cdn-static.bibliocommons.com/assets/core-9dcdf893958c70a566159f0e9c75e4b3.js" type="text/javascript"></script> <script src="//cor-cdn-static.bibliocommons.com/assets/controllers/session-a036d1c34a8bc6fe0da9699b605da532.js" type="text/javascript"></script> <script> const sdk = window.BiblioCommonsSDK || null; if (sdk && sdk.onAnalyticsReady) { sdk.onAnalyticsReady(function(analytics) { let list = null; analytics.trackPageView({ list }); window.addEventListener('beforeprint', function() { analytics.trackPagePrint(); }); }); } else { console.error('BiblioCommonsSDK with onAnalyticsReady handler not found'); } </script> <!-- end JS BLOCK --> </body> </html>