{"version":3,"sources":["webpack:///../resources/assets/js/analytics/track-photo.ts","webpack:///../resources/assets/js/components/ImgixImage.tsx","webpack:///../resources/assets/js/components/TrackingPixel.tsx","webpack:///../resources/assets/js/components/VectorIcon.tsx","webpack:///../resources/assets/js/components/WidthProvider.tsx","webpack:///../resources/assets/js/gallery/DesktopGallery.tsx","webpack:///../resources/assets/js/gallery/DirectionalNavigation.tsx","webpack:///../resources/assets/js/gallery/Gallery.tsx","webpack:///../resources/assets/js/gallery/GalleryAd.tsx","webpack:///../resources/assets/js/gallery/GridView.tsx","webpack:///../resources/assets/js/gallery/MobileGallery.tsx","webpack:///../resources/assets/js/gallery/ModalImage.tsx","webpack:///../resources/assets/js/gallery/NavigationHeader.tsx","webpack:///../resources/assets/js/gallery/styles.ts"],"names":["getPhotoAnalyticsUrl","photo","analyticsParams","isModalView","baseUrl","analytics","window","addUserToOmnitureBeaconParameters","Object","assign","updateOmnitureBeaconParameter","url","prop31","Math","floor","random","values","join","ImgixImage","PureComponent","constructor","React","createRef","imageUrl","isLoading","imageContainer","current","width","height","getBoundingClientRect","options","w","fit","props","h","imgixUrl","src","state","setState","event","onLoad","componentDidMount","updateImageUrl","addEventListener","componentWillUnmount","removeEventListener","componentDidUpdate","prevProps","render","ref","className","onClick","style","display","justifyContent","alignItems","alt","maxHeight","padding","margin","onImageLoaded","TrackingPixel","iconPath","Platform","select","desktop","mobile","VectorIcon","backgroundImage","name","backgroundPosition","backgroundRepeat","backgroundSize","WidthProvider","container","updateWidth","resizeHandler","fromEvent","subscribe","children","unsubscribe","DesktopGalleryView","DesktopGallery","view","thumbnailView","THUMBNAIL","SLIDESHOW","StateMachine","init","transitions","from","to","GRID","methods","onGridView","onSlideshowView","photos","length","componentInViewport","grabFocus","focusTarget","focus","nextIndex","onIndexChange","useHash","history","replaceState","preventDefault","slideIndex","items","showImage","machine","can","slideshowView","gridView","_event","index","disableAds","adStart","adInterval","numAdsBefore","ceil","openModal","closeModal","showNextImage","enterFullscreen","key","showPreviousImage","exitFullscreen","prevState","Logger","logComponentUpdate","slideChanged","enteredFullscreen","switchedGridState","fireAnalytics","location","hash","substr","hashNum","parseInt","isNaN","keyboardSubscription","document","pipe","filter","target","onKeyPress","onScroll","scrollSubscription","throttleTime","top","innerHeight","classes","galleryBlur","aspectRatio","slotString","hideNavigation","viewContext","thumbnailUrl","adReadyThreshold","activeItem","activeItemIsAd","isGalleryAd","hasMultipleImages","isThumbnailView","isSlideshowView","isGridView","isHomeAd","renderNavigationHeader","renderDirectionalNavigation","renderSlideshow","renderCredit","hasOwnProperty","renderCaption","isFullWidthGallery","abs","innerWidth","tabIndex","overflow","marginBottom","Fragment","expandable","onImageClick","expandIcon","map","item","isShowing","isReady","GalleryAd","ready","adIndex","id","adId","sizes","styles","fullscreenAdContainer","slugStyle","color","refreshSlotOnMount","GlobalData","get","isMobile","NavigationHeader","currentIndex","numItems","padded","onSlideshowClick","requestSlideshowView","onGridClick","requestGridView","onPrevClick","onNextClick","position","isActive","title","multiClass","adSlide","adContainer","hideSlug","fill","altText","DirectionalNavigation","onPrev","onNext","containerHeight","photoCredit","textAlign","paddingRight","isGalleryPhoto","author","credit","photoCaption","caption","paddingLeft","captionIcon","GridView","Modal","isOpen","onRequestClose","ariaHideApp","shouldCloseOnOverlayClick","overlay","modalOverlay","content","modalContent","modalClose","modalCloseIcon","ModalImage","total","showSocial","StyledDesktopGallery","injectSheet","href","arrow","leftArrow","rightArrow","arrowHeight","constrain","arrowWidth","topOffset","cursor","zIndex","left","right","GalleryViews","Gallery","DEFAULT","analyticsUrl","MODAL","onModalOpen","onModalClose","modalOpen","trackingBeaconUrl","analyticsVersion","gaEvent","indexDiff","StribAnalyticsHub","trackEvent","optimizelyProps","eventName","dataLayer","push","galleryType","galleryTitle","decodeURIComponent","pageName","photoNumber","photosWithAds","adsInserted","i","shouldRenderAd","_prevProps","optimizelyEvent","GalleryComponent","MobileGallery","handleIndexChange","trackActiveImage","requestModalOpen","requestModalClose","Component","pushed","shouldComponentUpdate","nextProps","propKeys","keys","thisProp","nextProp","JSON","stringify","some","updateNeeded","keyValue","pos","lastIndex","set","ad","createElement","dartSlotString","adSlug","currentTarget","getAttribute","minImageSize","marginSize","imagesPerRow","widthNoMargins","imageSize","numRows","rows","slice","row","rowIndex","photoIndex","onPhotoClick","marginRight","adsRendered","$","storyId","swipebox","removeBarsOnMobile","closeBySwipe","loopAtEnd","beforeOpen","afterOpen","onModalOpened","afterClose","initialIndexOnArray","prevSlide","nextSlide","afterMedia","inlineContainer","getElementsByClassName","ReactDOM","detach","css","appendTo","bottom","fontFamily","lineHeight","fontSize","remove","initSwipebox","showCaption","shareTitle","dataAttributes","dataProps","split","attr","kv","toLowerCase","substring","infoContainer","bylineCounterContainer","modalText","counter","byline","flexDirection","backgroundColor","flexGrow","minHeight","textTransform","letterSpacing","fontWeight","viewOption","slideshowOption","icon","viewLabel","gridOption","navigationControls","nextPrevLabel","paddingBottom","textDecoration","marginLeft","paddingTop","opacity","float","marginTop","base","border","borderRadius","boxShadow","pointerEvents","outline","borderWidth"],"mappings":";;;;;;;;;;AAEA;AAAA;AAAA;AACM,SAAUA,oBAAV,CACJC,KADI,EAEJC,eAFI,EAGJC,WAHI,EAIJC,OAJI,EAIW;EAEf;EACA,IAAIC,SAAS,GAAGC,MAAM,CAACC,iCAAP,CACdC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBP,eAAlB,CADc,CAAhB;EAGAG,SAAS,GAAGC,MAAM,CAACI,6BAAP,CACVL,SADU,EAEV,OAFU,EAGV,MAAMJ,KAAK,CAACU,GAAG,EAHL,CAAZ;;EAKA,IAAIR,WAAJ,EAAiB;IACfE,SAAS,GAAGC,MAAM,CAACI,6BAAP,CACVL,SADU,EAEV,QAFU,EAGV,GAAGH,eAAe,CAACU,MAAM,cAHf,CAAZ;EAKD;;EAED,OAAO,GAAGR,OAAO,IAAIS,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,MAA3B,CAAkC,IAAIP,MAAM,CAACQ,MAAP,CACzDX,SADyD,EAEzDY,IAFyD,CAEpD,GAFoD,CAEhD,EAFX;AAGD,C;;;;;;;;;;;;AC7BD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AA8BA;;;;AAGM,MAAOC,UAAP,SAA0BC,mDAA1B,CAAqD;EAA3DC;;IAIE,sBAAiBC,4CAAK,CAACC,SAAN,EAAjB;IACA,aAAe;MACbC,QAAQ,EAAE,EADG;MAEbC,SAAS,EAAE;IAFE,CAAf;;IAgBA,sBAAiB,MAAK;MACpB,IAAI,KAAKC,cAAL,CAAoBC,OAAxB,EAAiC;QAC/B,MAAM;UACJC,KADI;UAEJC;QAFI,IAGF,KAAKH,cAAL,CAAoBC,OAApB,CAA4BG,qBAA5B,EAHJ;;QAIA,IAAIF,KAAJ,EAAW;UACT,MAAMG,OAAO,GAA0B;YACrCC,CAAC,EAAElB,IAAI,CAACC,KAAL,CAAWa,KAAX,CADkC;YAErCK,GAAG,EAAE,KAAKC,KAAL,CAAWD;UAFqB,CAAvC;;UAIA,IAAIJ,MAAJ,EAAY;YACVE,OAAO,CAACI,CAAR,GAAYrB,IAAI,CAACC,KAAL,CAAWc,MAAX,CAAZ;UACD;;UACD,MAAML,QAAQ,GAAGY,6DAAQ,CAAC,KAAKF,KAAL,CAAWG,GAAZ,EAAiBN,OAAjB,CAAzB;;UACA,IAAIP,QAAQ,KAAK,KAAKc,KAAL,CAAWd,QAA5B,EAAsC;YACpC,KAAKe,QAAL,CAAc;cAAEf,QAAF;cAAYC,SAAS,EAAE;YAAvB,CAAd;UACD;QACF;MACF;IACF,CApBD;;IAqBA,qBAAiBe,KAAD,IAA0B;MACxC,KAAKD,QAAL,CAAc;QAAEd,SAAS,EAAE;MAAb,CAAd;MACA,KAAKS,KAAL,CAAWO,MAAX,IAAqB,KAAKP,KAAL,CAAWO,MAAX,CAAkBD,KAAlB,CAArB;IACD,CAHD;EA4BD;;EA7DCE,iBAAiB;IACf,KAAKC,cAAL;IACApC,MAAM,CAACqC,gBAAP,CAAwB,QAAxB,EAAkC,KAAKD,cAAvC;EACD;;EACDE,oBAAoB;IAClBtC,MAAM,CAACuC,mBAAP,CAA2B,QAA3B,EAAqC,KAAKH,cAA1C;EACD;;EACDI,kBAAkB,CAACC,SAAD,EAAiB;IACjC,IAAI,KAAKd,KAAL,CAAWG,GAAX,KAAmBW,SAAS,CAACX,GAAjC,EAAsC;MACpC,KAAKM,cAAL;IACD;EACF;;EA0BDM,MAAM;IACJ,MAAM;MAAEzB;IAAF,IAAe,KAAKc,KAA1B;IACA,OACEhB;MACE4B,GAAG,EAAE,KAAKxB,cADZ;MAEEyB,SAAS,EAAE,KAAKjB,KAAL,CAAWiB,SAFxB;MAGEC,OAAO,EAAE,KAAKlB,KAAL,CAAWkB,OAHtB;MAIEC,KAAK,EAAE;QACLC,OAAO,EAAE,MADJ;QAELC,cAAc,EAAE,QAFX;QAGLC,UAAU,EAAE;MAHP;IAJT,GAUGhC,QAAQ,IACPF;MACEe,GAAG,EAAEb,QADP;MAEEiC,GAAG,EAAE,KAAKvB,KAAL,CAAWuB,GAFlB;MAGEJ,KAAK,EAAE;QAAEK,SAAS,EAAE,MAAb;QAAqBC,OAAO,EAAE,CAA9B;QAAiCC,MAAM,EAAE;MAAzC,CAHT;MAIEnB,MAAM,EAAE,KAAKoB;IAJf,EAXJ,CADF;EAqBD;;AArEwD;AAClD1C,0BAA+B;EACpCc,GAAG,EAAE;AAD+B,CAA/B,C;;;;;;;;;;;;ACnCT;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM6B,aAAa,GAA4C,CAAC;EACrElD,GADqE;EAErEuC;AAFqE,CAAD,KAIpE7B;EAAK6B,SAAS,EAAEA,SAAhB;EAA2BE,KAAK,EAAE;IAAEC,OAAO,EAAE;EAAX,CAAlC;EAAuDG,GAAG,EAAE,EAA5D;EAAgEpB,GAAG,EAAEzB;AAArE,EAJK,C;;;;;;;;;;;;ACFP;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAWA;;AACA,MAAMmD,QAAQ,GAAGC,wDAAQ,CAACC,MAAT,CAAgB;EAC/BC,OAAO,EAAE,oBADsB;EAE/BC,MAAM,EAAE;AAFuB,CAAhB,CAAjB;AAKA;;;;;AAIM,MAAOC,UAAP,SAA0BhD,mDAA1B,CAA8C;EAClD6B,MAAM;IACJ,OACE3B;MACE6B,SAAS,EAAE,KAAKjB,KAAL,CAAWiB,SADxB;MAEEC,OAAO,EAAE,KAAKlB,KAAL,CAAWkB,OAFtB;MAGEC,KAAK,EAAE;QACLgB,eAAe,EAAE,QAAQN,QAAQ,GAAG,KAAK7B,KAAL,CAAWoC,IAAI,QAD9C;QAELC,kBAAkB,EAAE,SAFf;QAGLC,gBAAgB,EAAE,WAHb;QAILC,cAAc,EAAE;MAJX;IAHT,EADF;EAYD;;AAdiD,C;;;;;;;;;;;;ACtBpD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAUM,MAAOC,aAAP,SAA6BtD,mDAA7B,CAAwD;EAA9DC;;IACE,aAAQ;MAAEO,KAAK,EAAE;IAAT,CAAR;IAEA,iBAAYN,4CAAK,CAACC,SAAN,EAAZ;;IAUA,mBAAc,MAAK;MACjB,IAAI,KAAKoD,SAAL,CAAehD,OAAnB,EAA4B;QAC1B,MAAM;UAAEC;QAAF,IAAY,KAAK+C,SAAL,CAAehD,OAAf,CAAuBG,qBAAvB,EAAlB;QACA,KAAKS,QAAL,CAAc;UAAEX;QAAF,CAAd;MACD;IACF,CALD;EAkBD;;EAxBCc,iBAAiB;IACf,KAAKkC,WAAL;IAEA,KAAKC,aAAL,GAAqBC,sDAAS,CAACvE,MAAD,EAAS,QAAT,CAAT,CAA4BwE,SAA5B,CAAsC,KAAKH,WAA3C,CAArB;EACD;;EASD3B,MAAM;IACJ,OACE3B;MAAK4B,GAAG,EAAE,KAAKyB;IAAf,GACG,KAAKrC,KAAL,CAAWV,KAAX,IAAoB,KAAKM,KAAL,CAAW8C,QAAX,CAAoB,KAAK1C,KAAL,CAAWV,KAA/B,CADvB,CADF;EAKD;;EAEDiB,oBAAoB;IAClB,KAAKgC,aAAL,CAAmBI,WAAnB;EACD;;AA9B2D,C;;;;;;;;;;;;ACX9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAEA;CAEA;;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAYA,IAAKC,kBAAL;;AAAA,WAAKA,kBAAL,EAAuB;EACrBA;EACAA;EACAA;AACD,CAJD,EAAKA,kBAAkB,KAAlBA,kBAAkB,MAAvB;AAmCA;;;;;;;;AAMM,MAAOC,cAAP,SAA8B/D,mDAA9B,CAAuE;EAA7EC;;IAeE,aAAe;MACb+D,IAAI,EAAE,KAAKlD,KAAL,CAAWmD,aAAX,GACFH,kBAAkB,CAACI,SADjB,GAEFJ,kBAAkB,CAACK;IAHV,CAAf;IAMA,eAAU,IAAIC,+DAAJ,CAAiB;MACzBC,IAAI,EAAE,KAAKnD,KAAL,CAAW8C,IADQ;MAEzBM,WAAW,EAAE,CACX;QACEpB,IAAI,EAAE,UADR;QAEEqB,IAAI,EAAET,kBAAkB,CAACK,SAF3B;QAGEK,EAAE,EAAEV,kBAAkB,CAACW;MAHzB,CADW,EAMX;QACEvB,IAAI,EAAE,eADR;QAEEqB,IAAI,EAAET,kBAAkB,CAACW,IAF3B;QAGED,EAAE,EAAEV,kBAAkB,CAACK;MAHzB,CANW,CAFY;MAczBO,OAAO,EAAE;QACPC,UAAU,EAAE,MAAM,KAAKA,UAAL,EADX;QAEPC,eAAe,EAAE,MAAM,KAAKA,eAAL;MAFhB;IAdgB,CAAjB,CAAV;IAoBA,mBAAc1E,4CAAK,CAACC,SAAN,EAAd;IA+EA;;IACA,gBAAW,MAAK;MACd,IACE,KAAKe,KAAL,CAAW8C,IAAX,KAAoBF,kBAAkB,CAACI,SAAvC,IACA,KAAKpD,KAAL,CAAW+D,MAAX,CAAkBC,MAAlB,GAA2B,CAD3B,IAEA,KAAKC,mBAAL,EAHF,EAIE;QACA,KAAKC,SAAL;MACD;IACF,CARD;IAUA;;;IACA,iBAAY,MAAK;MACf,IAAI,KAAKC,WAAL,CAAiB1E,OAArB,EAA8B;QAC5B,KAAK0E,WAAL,CAAiB1E,OAAjB,CAAyB2E,KAAzB;MACD;IACF,CAJD;IAMA;;;IACA,iBAAaC,SAAD,IAAsB;MAChC,KAAKrE,KAAL,CAAWsE,aAAX,CAAyBD,SAAzB;;MACA,IAAI,KAAKrE,KAAL,CAAWuE,OAAf,EAAwB;QACtBlG,MAAM,CAACmG,OAAP,CAAeC,YAAf,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,IAAIJ,SAAS,GAAG,CAAC,EAAvD;MACD;IACF,CALD;IAOA;;;IACA,qBAAiB/D,KAAD,IAA0B;MACxC,IAAIA,KAAJ,EAAW;QACTA,KAAK,CAACoE,cAAN;MACD;;MACD,MAAML,SAAS,GACb,KAAKrE,KAAL,CAAW2E,UAAX,GAAwB,CAAxB,GAA4B,KAAK3E,KAAL,CAAW4E,KAAX,CAAiBZ,MAA7C,GACI,KAAKhE,KAAL,CAAW2E,UAAX,GAAwB,CAD5B,GAEI,CAHN;MAIA,KAAKE,SAAL,CAAeR,SAAf;IACD,CATD;IAWA;;;IACA,yBAAqB/D,KAAD,IAA0B;MAC5C,IAAIA,KAAJ,EAAW;QACTA,KAAK,CAACoE,cAAN;MACD;;MACD,MAAML,SAAS,GACb,KAAKrE,KAAL,CAAW2E,UAAX,GAAwB,CAAxB,IAA6B,CAA7B,GACI,KAAK3E,KAAL,CAAW2E,UAAX,GAAwB,CAD5B,GAEI,KAAK3E,KAAL,CAAW4E,KAAX,CAAiBZ,MAAjB,GAA0B,CAHhC;MAIA,KAAKa,SAAL,CAAeR,SAAf;IACD,CATD;IAWA;;;IACA,4BAAwB/D,KAAD,IAA0B;MAC/C,IAAIA,KAAJ,EAAW;QACTA,KAAK,CAACoE,cAAN;MACD;;MAED,IAAI,KAAKI,OAAL,CAAaC,GAAb,CAAiB,eAAjB,CAAJ,EAAuC;QACrC,KAAKD,OAAL,CAAaE,aAAb;MACD;IACF,CARD;IAUA;;;IACA,uBAAkB,MAAK;MACrB,IAAI,KAAKhF,KAAL,CAAWuE,OAAf,EAAwB;QACtBlG,MAAM,CAACmG,OAAP,CAAeC,YAAf,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,IAAI,KAAKzE,KAAL,CAAW2E,UAAX,GAAwB,CAAC,EAAnE;MACD;;MAED,KAAKtE,QAAL,CAAc;QAAE6C,IAAI,EAAEF,kBAAkB,CAACK;MAA3B,CAAd;IACD,CAND;IAQA;;;IACA,uBAAmB/C,KAAD,IAA0B;MAC1C,IAAIA,KAAJ,EAAW;QACTA,KAAK,CAACoE,cAAN;MACD;;MAED,IAAI,KAAKI,OAAL,CAAaC,GAAb,CAAiB,UAAjB,CAAJ,EAAkC;QAChC,KAAKD,OAAL,CAAaG,QAAb;MACD;IACF,CARD;IAUA;;;IACA,kBAAa,MAAK;MAChB,IAAI,KAAKjF,KAAL,CAAWuE,OAAf,EAAwB;QACtBlG,MAAM,CAACmG,OAAP,CAAeC,YAAf,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,OAAtC;MACD;;MAED,KAAKpE,QAAL,CAAc;QAAE6C,IAAI,EAAEF,kBAAkB,CAACW;MAA3B,CAAd;IACD,CAND;IAQA;;;IACA,uBAAkB,CAACuB,MAAD,EAAyBC,KAAzB,KAA2C;MAC3D,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;QAC7B,MAAM;UAAEC,UAAF;UAAcC,OAAd;UAAuBC;QAAvB,IAAsC,KAAKtF,KAAjD;QAEA,MAAMuF,YAAY,GAAGH,UAAU,GAC3B,CAD2B,GAE3BxG,IAAI,CAAC4G,IAAL,CAAU,CAACL,KAAK,GAAGE,OAAT,IAAoBC,UAA9B,CAFJ;QAIA,KAAKT,SAAL,CAAeM,KAAK,GAAGI,YAAvB;QACA,KAAKvF,KAAL,CAAWyF,SAAX;MACD,CATD,MASO;QACL,KAAKzF,KAAL,CAAWyF,SAAX;MACD;IACF,CAbD;IAeA;;;IACA,sBAAiB,MAAK;MACpB,KAAKzF,KAAL,CAAW0F,UAAX;;MAEA,IAAI,KAAKtF,KAAL,CAAW8C,IAAX,KAAoBF,kBAAkB,CAACW,IAAvC,IAA+C,KAAK3D,KAAL,CAAWuE,OAA9D,EAAuE;QACrElG,MAAM,CAACmG,OAAP,CAAeC,YAAf,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,OAAtC;MACD;IACF,CAND;IAQA;;;IACA,oBAAe,CAACnE,KAAD,EAAoB6E,KAApB,KAAsC;MACnD,IAAI7E,KAAJ,EAAW;QACTA,KAAK,CAACoE,cAAN;MACD;;MAED,KAAKR,SAAL;;MAEA,IAAI,KAAKlE,KAAL,CAAW9B,WAAf,EAA4B;QAC1B,KAAKyH,aAAL,CAAmBrF,KAAnB;MACD,CAFD,MAEO;QACL,KAAKsF,eAAL,CAAqBtF,KAArB,EAA4B6E,KAA5B;MACD;IACF,CAZD;IAcA;;;IACA,kBAAc7E,KAAD,IAAyB;MACpC,QAAQA,KAAK,CAACuF,GAAd;QACE,KAAK,WAAL;UACE,KAAKC,iBAAL,CAAuBxF,KAAvB;UACA;;QACF,KAAK,YAAL;UACE,KAAKqF,aAAL,CAAmBrF,KAAnB;UACA;;QACF,KAAK,QAAL;UACE,KAAKyF,cAAL;UACA;MATJ;IAWD,CAZD;EAuSD;;EAvfClF,kBAAkB,CAACC,SAAD,EAAiCkF,SAAjC,EAAiD;IACjEC,oDAAM,CAACC,kBAAP,CAA0BpF,SAA1B,EAAqCkF,SAArC,EAAgD,KAAKhG,KAArD,EAA4D,KAAKI,KAAjE;IAEA,MAAM+F,YAAY,GAAGrF,SAAS,CAAC6D,UAAV,KAAyB,KAAK3E,KAAL,CAAW2E,UAAzD;IACA,MAAMyB,iBAAiB,GAAG,CAACtF,SAAS,CAAC5C,WAAX,IAA0B,KAAK8B,KAAL,CAAW9B,WAA/D;IACA,MAAMmI,iBAAiB,GAAGL,SAAS,CAAC9C,IAAV,KAAmB,KAAK9C,KAAL,CAAW8C,IAAxD,CALiE,CAKJ;;IAE7D,IAAIkD,iBAAiB,IAAKD,YAAY,IAAI,CAACE,iBAA3C,EAA+D;MAC7D,KAAKnC,SAAL;MACA,KAAKlE,KAAL,CAAWsG,aAAX;IACD;EACF;EAED;;;EACA9F,iBAAiB;IACf,IAAI,KAAKR,KAAL,CAAWuE,OAAX,IAAsBlG,MAAM,CAACkI,QAAP,CAAgBC,IAA1C,EAAgD;MAC9C,MAAMA,IAAI,GAAGnI,MAAM,CAACkI,QAAP,CAAgBC,IAAhB,CAAqBC,MAArB,CAA4B,CAA5B,CAAb;;MAEA,IAAID,IAAI,KAAK,MAAT,IAAmB,KAAK1B,OAAL,CAAaC,GAAb,CAAiB,UAAjB,CAAvB,EAAqD;QACnD,KAAKD,OAAL,CAAaG,QAAb;MACD,CAFD,MAEO;QACL,MAAMyB,OAAO,GAAGC,QAAQ,CAACH,IAAD,EAAO,EAAP,CAAxB;;QAEA,IACE,CAACI,KAAK,CAACF,OAAD,CAAN,IACAA,OAAO,IAAI,CADX,IAEAA,OAAO,IAAI,KAAK1G,KAAL,CAAW4E,KAAX,CAAiBZ,MAH9B,EAIE;UACA,KAAKa,SAAL,CAAe6B,OAAO,GAAG,CAAzB;QACD,CAND,MAMO;UACLrI,MAAM,CAACmG,OAAP,CAAeC,YAAf,CAA4B,IAA5B,EAAkC,EAAlC,EAAsC,IAAI,KAAKzE,KAAL,CAAW2E,UAAX,GAAwB,CAAC,EAAnE;QACD;MACF;IACF;;IAED,KAAKkC,oBAAL,GAA4BjE,sDAAS,CAAgBkE,QAAhB,EAA0B,OAA1B,CAAT,CACzBC,IADyB,CAExBC,6DAAM,CACJ1G,KAAK,IACH;IACAA,KAAK,CAAC2G,MAAN,KAAiB,KAAK9C,WAAL,CAAiB1E,OAAlC,IACA;IACA,EACE,KAAKW,KAAL,CAAW8C,IAAX,KAAoBF,kBAAkB,CAACW,IAAvC,IACA,CAAC,KAAK3D,KAAL,CAAW9B,WAFd,CAFA,IAMA;IACA,EACE,KAAKkC,KAAL,CAAW8C,IAAX,KAAoBF,kBAAkB,CAACI,SAAvC,IACA,CAAC,KAAKpD,KAAL,CAAW9B,WAFd,CAVE,CAFkB,EAkBzB2E,SAlByB,CAkBf,KAAKqE,UAlBU,CAA5B;IAoBA,KAAKC,QAAL;IACA,KAAKC,kBAAL,GAA0BxE,sDAAS,CAACvE,MAAD,EAAS,QAAT,CAAT,CACvB0I,IADuB,CAClBM,mEAAY,CAAC,IAAD,CADM,EAEvBxE,SAFuB,CAEb,KAAKsE,QAFQ,CAA1B;EAGD;EAED;;;EACAxG,oBAAoB;IAClB,KAAKkG,oBAAL,CAA0B9D,WAA1B;IACA,KAAKqE,kBAAL,CAAwBrE,WAAxB;EACD;EAED;;;EACAkB,mBAAmB;IACjB,IAAI,CAAC,KAAKE,WAAL,CAAiB1E,OAAtB,EAA+B;MAC7B,OAAO,KAAP;IACD;;IACD,MAAM;MAAE6H;IAAF,IAAU,KAAKnD,WAAL,CAAiB1E,OAAjB,CAAyBG,qBAAzB,EAAhB;IAEA,OAAO0H,GAAG,IAAI,CAAP,IAAYA,GAAG,IAAIjJ,MAAM,CAACkJ,WAAjC;EACD;;EAmJDxG,MAAM;IACJ,MAAM;MACJ6D,KADI;MAEJb,MAFI;MAGJyD,OAHI;MAIJC,WAJI;MAKJC,WALI;MAMJC,UANI;MAOJC,cAPI;MAQJjD,UARI;MASJkD,WATI;MAUJ3J,WAVI;MAWJ4J,YAXI;MAYJC;IAZI,IAaF,KAAK/H,KAbT;IAcA,MAAM;MAAEkD;IAAF,IAAW,KAAK9C,KAAtB;IAEA,MAAM4H,UAAU,GAAGpD,KAAK,CAACD,UAAD,CAAxB;IACA,MAAMsD,cAAc,GAAGC,6DAAW,CAACF,UAAD,CAAlC;IACA,MAAMG,iBAAiB,GAAGpE,MAAM,CAACC,MAAP,GAAgB,CAA1C;IAEA,MAAMoE,eAAe,GAAGlF,IAAI,KAAKF,kBAAkB,CAACI,SAApD;IACA,MAAMiF,eAAe,GAAGnF,IAAI,KAAKF,kBAAkB,CAACK,SAApD;IACA,MAAMiF,UAAU,GAAGpF,IAAI,KAAKF,kBAAkB,CAACW,IAA/C;IACA,MAAM4E,QAAQ,GAAGN,cAAc,IAAIJ,WAAW,KAAK,MAAnD;IAEA,MAAMW,sBAAsB,GAC1B,CAACZ,cAAD,IAAmB,CAACQ,eAApB,IAAuCD,iBADzC;IAEA,MAAMM,2BAA2B,GAC/B,CAACvK,WAAW,IAAImK,eAAhB,KAAoCF,iBADtC;IAEA,MAAMO,eAAe,GAAG,CAACN,eAAzB;IACA,MAAMO,YAAY,GAChBN,eAAe,KACdL,UAAU,CAACY,cAAX,CAA0B,SAA1B,KAAwCX,cAD1B,CADjB;IAGA,MAAMY,aAAa,GAAGR,eAAtB;IAEA,OACEjJ,2DAACoD,wEAAD,EAAc,IAAd,EACG9C,KAAK,IAAG;MACP,MAAMC,MAAM,GAAGD,KAAK,GAAGgI,WAAvB;MACA,MAAMoB,kBAAkB,GAAGlK,IAAI,CAACmK,GAAL,CAASrJ,KAAK,GAAGrB,MAAM,CAAC2K,UAAxB,IAAsC,CAAjE;MAEA,OACE5J;QAAK6J,QAAQ,EAAE,CAAC,CAAhB;QAAmBjI,GAAG,EAAE,KAAKmD;MAA7B,GAEGiE,eAAe,IACdhJ;QACE+B,KAAK,EAAE;UAAExB,MAAF;UAAUuJ,QAAQ,EAAE,QAApB;UAA8BC,YAAY,EAAE;QAA5C;MADT,GAGE/J,2DAACgK,8CAAD,EAAS,IAAT,EACEhK;QACE6B,SAAS,EAAEuG,OAAO,CAAC6B,UADrB;QAEElJ,GAAG,EAAED,8DAAQ,CAAC4H,YAAD,EAAe;UAC1B/H,GAAG,EAAE,MADqB;UAE1BD,CAAC,EAAElB,IAAI,CAACC,KAAL,CAAWa,KAAX,CAFuB;UAG1BO,CAAC,EAAErB,IAAI,CAACC,KAAL,CAAWc,MAAX;QAHuB,CAAf,CAFf;QAOEuB,OAAO,EAAE,KAAKoI;MAPhB,EADF,EAUElK,2DAAC8C,kEAAD,EAAW;QACTE,IAAI,EAAE,iBADG;QAETnB,SAAS,EAAEuG,OAAO,CAAC+B;MAFV,CAAX,CAVF,CAHF,EAmBG3E,KAAK,CAAC4E,GAAN,CAAU,CAACC,IAAD,EAAOtE,KAAP,KAAgB;QACzB,IAAI+C,6DAAW,CAACuB,IAAD,CAAf,EAAuB;UACrB,MAAMC,SAAS,GAAGvE,KAAK,KAAKR,UAAV,IAAwBzG,WAA1C;UACA,MAAMyL,OAAO,GACX/K,IAAI,CAACmK,GAAL,CAASpE,UAAU,GAAGQ,KAAtB,KAAgC4C,gBADlC;UAEA,OACE3I,2DAACwK,qDAAD,EAAU;YACR/D,GAAG,EAAEV,KADG;YAER0E,KAAK,EAAEF,OAFC;YAGRxE,KAAK,EAAEsE,IAAI,CAACK,OAHJ;YAIRC,EAAE,EAAE,GAAGN,IAAI,CAACO,IAAI,IAAIP,IAAI,CAACK,OAAO,EAJxB;YAKRnC,UAAU,EAAEA,UALJ;YAMRsC,KAAK,EAAE,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,CANC;YAOR9I,KAAK,EACHuI,SAAS,GACLQ,+CAAM,CAACC,qBADF,GAEL;cAAE/I,OAAO,EAAE;YAAX,CAVE;YAYRgJ,SAAS,EACPlM,WAAW,GAAG;cAAEmM,KAAK,EAAE;YAAT,CAAH,GAAuB;cAAEA,KAAK,EAAE;YAAT,CAb5B;YAeRC,kBAAkB,EAChB,CAAC,CAACC,2DAAU,CAACC,GAAX,CAAe,0BAAf,CAhBI;YAkBRC,QAAQ,EAAE;UAlBF,CAAV,CADF;QAsBD;;QAED,OAAO,IAAP;MACD,CA9BA,CAnBH,CAHJ,EAyDGjC,sBAAsB,IACrBpJ,2DAACsL,0DAAD,EAAiB;QACfpC,UAAU,EAAEA,UADG;QAEfqC,YAAY,EAAEhG,UAFC;QAGfiG,QAAQ,EAAEhG,KAAK,CAACZ,MAHD;QAIf6G,MAAM,EAAE/B,kBAJO;QAKfgC,gBAAgB,EAAE,KAAKC,oBALR;QAMfC,WAAW,EAAE,KAAKC,eANH;QAOfC,WAAW,EAAE,KAAKpF,iBAPH;QAQfqF,WAAW,EAAE,KAAKxF;MARH,CAAjB,CA1DJ,EAqEEvG;QAAK+B,KAAK,EAAE;UAAEiK,QAAQ,EAAE;QAAZ;MAAZ,GAEG1C,eAAe,IACdtJ;QAAK+B,KAAK,EAAE;UAAExB,MAAM,EAAE2I,UAAU,GAAG,CAAH,GAAO3I;QAA3B;MAAZ,GACGiF,KAAK,CAAC4E,GAAN,CAAU,CAACC,IAAD,EAAOtE,KAAP,KAAgB;QACzB,IAAI+C,6DAAW,CAACuB,IAAD,CAAf,EAAuB;UACrB,MAAM4B,QAAQ,GACZlG,KAAK,KAAKR,UAAV,KAAyB,CAAC2D,UAAD,IAAepK,WAAxC,CADF;UAEA,OACEkB;YACEyG,GAAG,EAAEV,KADP;YAEEmG,KAAK,EAAE,eAFT;YAGEpK,OAAO,EAAE,KAAKoI,YAHhB;YAIErI,SAAS,EAAEsK,0DAAU,CACnB/D,OAAO,CAACgE,OADW,EAEnBhE,OAAO,CAAC6B,UAFW,CAJvB;YAQElI,KAAK,EAAE;cACLC,OAAO,EAAEiK,QAAQ,GAAG,OAAH,GAAa;YADzB;UART,GAYEjM,2DAACwK,qDAAD,EAAU;YACRzE,KAAK,EAAEsE,IAAI,CAACK,OADJ;YAERD,KAAK,EACHjL,IAAI,CAACmK,GAAL,CAASpE,UAAU,GAAGQ,KAAtB,KAAgC4C,gBAH1B;YAKRgC,EAAE,EAAE,GAAGN,IAAI,CAACO,IAAI,IAAIP,IAAI,CAACK,OAAO,EALxB;YAMRnC,UAAU,EAAEA,UANJ;YAORsC,KAAK,EAAE,CAAC,CAAC,GAAD,EAAM,GAAN,CAAD,CAPC;YAQR9I,KAAK,EACHjD,WAAW,GACPgM,+CAAM,CAACC,qBADA,GAEPD,+CAAM,CAACuB,WAXL;YAaRC,QAAQ,EAAE7D,WAAW,KAAK,MAblB;YAcRuC,SAAS,EACPlM,WAAW,GACP;cAAEmM,KAAK,EAAE;YAAT,CADO,GAEP;cAAEA,KAAK,EAAE;YAAT,CAjBE;YAmBRC,kBAAkB,EAChB,CAAC,CAACC,2DAAU,CAACC,GAAX,CAAe,0BAAf,CApBI;YAsBRC,QAAQ,EAAE;UAtBF,CAAV,CAZF,CADF;QAuCD;;QAED,IAAIpC,eAAe,IAAIzJ,IAAI,CAACmK,GAAL,CAASpE,UAAU,GAAGQ,KAAtB,IAA+B,CAAtD,EAAyD;UACvD,MAAMkG,QAAQ,GAAGlG,KAAK,KAAKR,UAAV,IAAwB,CAAC2D,UAA1C;UACA,MAAMzI,OAAO,GAAG;YACdC,CAAC,EAAElB,IAAI,CAACC,KAAL,CAAW6I,WAAW,GAAG/H,MAAzB,CADW;YAEdM,CAAC,EAAErB,IAAI,CAACC,KAAL,CAAWc,MAAX,CAFW;YAGdI,GAAG,EAAE,MAHS;YAId4L,IAAI,EAAElE,WAAW,GAAG,MAAH,GAAY,OAJf;YAKd,cAAc;UALA,CAAhB;UAQA,OACErI,2DAACgK,8CAAD,EAAS;YAACvD,GAAG,EAAE4D,IAAI,CAAC/K;UAAX,CAAT,EACEU;YACE+B,KAAK,EAAE;cACLC,OAAO,EAAEiK,QAAQ,GAAG,OAAH,GAAa;YADzB,CADT;YAIEpK,SAAS,EAAEuG,OAAO,CAAC6B,UAJrB;YAKElJ,GAAG,EAAED,8DAAQ,CAACuJ,IAAI,CAAC/K,GAAN,EAAWmB,OAAX,CALf;YAME0B,GAAG,EAAEkI,IAAI,CAACmC,OANZ;YAOE1K,OAAO,EAAE,KAAKoI;UAPhB,EADF,EAUElK,2DAAC8C,kEAAD,EAAW;YACTE,IAAI,EAAE,iBADG;YAETnB,SAAS,EAAEuG,OAAO,CAAC+B;UAFV,CAAX,CAVF,CADF;QAiBD;;QAED,OAAO,IAAP;MACD,CA3EA,CADH,CAHJ,EAmFGd,2BAA2B,IAC1BrJ,2DAACyM,+DAAD,EAAsB;QACpBC,MAAM,EAAE,KAAKhG,iBADO;QAEpBiG,MAAM,EAAE,KAAKpG,aAFO;QAGpBzH,WAAW,EAAEA,WAHO;QAIpB8N,eAAe,EAAErM;MAJG,CAAtB,CApFJ,CArEF,EAkKGgJ,YAAY,IACXvJ;QACE6B,SAAS,EAAEuG,OAAO,CAACyE,WADrB;QAEE9K,KAAK,EAAE;UACL+K,SAAS,EAAE3D,QAAQ,GAAG,QAAH,GAAc,OAD5B;UAEL4D,YAAY,EAAErD,kBAAkB,GAAG,EAAH,GAAQ;QAFnC;MAFT,GAOGP,QAAQ,IAAI,eAPf,EAQG6D,gEAAc,CAACpE,UAAD,CAAd,KACEA,UAAU,CAACqE,MAAX,IAAqBrE,UAAU,CAACsE,MADlC,KAEC,GAAGtE,UAAU,CAACqE,MAAX,IAAqB,EAAE,GACxBrE,UAAU,CAACqE,MAAX,IAAqBrE,UAAU,CAACsE,MAAhC,GAAyC,KAAzC,GAAiD,EACnD,GAAGtE,UAAU,CAACsE,MAAX,IAAqB,EAAE,EAZ9B,CAnKJ,EAkLGzD,aAAa,IACZzJ;QAAK6B,SAAS,EAAEuG,OAAO,CAAC+E;MAAxB,GACGH,gEAAc,CAACpE,UAAD,CAAd,IAA8BA,UAAU,CAACwE,OAAzC,IACCpN;QAAK+B,KAAK,EAAE;UAAEsL,WAAW,EAAE3D,kBAAkB,GAAG,EAAH,GAAQ;QAAzC;MAAZ,GACE1J,2DAAC8C,kEAAD,EAAW;QACTE,IAAI,EAAE,kCADG;QAETnB,SAAS,EAAEuG,OAAO,CAACkF;MAFV,CAAX,CADF,EAKEtN,mFAAa4I,UAAU,CAACwE,OAAxB,CALF,CAFJ,CAnLJ,EAgMGlE,UAAU,IACTlJ,2DAACuN,kDAAD,EAAS;QACP5I,MAAM,EAAEA,MADD;QAEPuF,YAAY,EAAE,KAAKA,YAFZ;QAGP5J,KAAK,EAAEA,KAHA;QAIPmL,MAAM,EAAE/B;MAJD,CAAT,CAjMJ,EAyME1J,2DAACwN,kDAAD,EAAM;QACJC,MAAM,EAAE3O,WADJ;QAEJ4O,cAAc,EAAE,KAAK/G,cAFjB;QAGJgH,WAAW,EAAE,KAHT;QAIJC,yBAAyB,EAAE,IAJvB;QAKJ7L,KAAK,EAAE;UACL8L,OAAO,EAAE/C,+CAAM,CAACgD,YADX;UAEL;UACAC,OAAO,EAAEjD,+CAAM,CAACkD;QAHX;MALH,CAAN,EAaEhO;QACE6B,SAAS,EAAEuG,OAAO,CAAC6F,UADrB;QAEEnM,OAAO,EAAE,KAAK6E;MAFhB,GAIE3G,2DAAC8C,kEAAD,EAAW;QACTE,IAAI,EAAE,6BADG;QAETnB,SAAS,EAAEuG,OAAO,CAAC8F;MAFV,CAAX,CAJF,CAbF,EAsBGlB,gEAAc,CAACpE,UAAD,CAAd,IACC5I,2DAACmO,mDAAD,EAAW;QACTvP,KAAK,EAAEgK,UADE;QAET7C,KAAK,EAAER,UAFE;QAGT6I,KAAK,EAAE5I,KAAK,CAACZ,MAHJ;QAIT9C,OAAO,EAAE,KAAKoI;MAJL,CAAX,CAvBJ,CAzMF,CADF;IA2OD,CAhPH,CADF;EAoPD;;AAjiB0E;AACpErG,8BAA+B;EACpCsB,OAAO,EAAE,IAD2B;EAEpCwD,gBAAgB,EAAE,CAFkB;EAGpCH,cAAc,EAAE,KAHoB;EAIpC6F,UAAU,EAAE,KAJwB;EAKpCtK,aAAa,EAAE,KALqB;EAMpCuE,WAAW,EAAE,IAAI,CANmB;EAOpCD,WAAW,EAAE;AAPuB,CAA/B;AAmiBF,MAAMiG,oBAAoB,GAAGC,gDAAW,CAACzD,+CAAD,CAAX,CAClCjH,cADkC,CAA7B,C;;;;;;;;;;;;AC1nBP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;AAeA,MAAM4I,qBAAN,SAAoC3M,mDAApC,CAAwD;EAwBtD6B,MAAM;IACJ,MAAM;MAAE+K,MAAF;MAAUC,MAAV;MAAkBvE;IAAlB,IAA8B,KAAKxH,KAAzC;IAEA,OACEZ,2DAACgK,8CAAD,EAAS,IAAT,EACEhK;MAAG8B,OAAO,EAAE4K,MAAZ;MAAoB8B,IAAI,EAAE;IAA1B,GACExO,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,4BADG;MAETnB,SAAS,EAAE,CAACuG,OAAO,CAACqG,KAAT,EAAgBrG,OAAO,CAACsG,SAAxB,EAAmC9O,IAAnC,CAAwC,GAAxC;IAFF,CAAX,CADF,CADF,EAOEI;MAAG8B,OAAO,EAAE6K,MAAZ;MAAoB6B,IAAI,EAAE;IAA1B,GACExO,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,4BADG;MAETnB,SAAS,EAAE,CAACuG,OAAO,CAACqG,KAAT,EAAgBrG,OAAO,CAACuG,UAAxB,EAAoC/O,IAApC,CAAyC,GAAzC;IAFF,CAAX,CADF,CAPF,CADF;EAgBD;;AA3CqD;;AAC/C6M,+BAAS;EACdgC,KAAK,EAAE,CAAC;IAAE7B,eAAF;IAAmB9N;EAAnB,CAAD,KAA4C;IACjD,MAAM8P,WAAW,GAAGC,wDAAS,CAACrP,IAAI,CAAC4G,IAAL,CAAUwG,eAAe,GAAG,IAA5B,CAAD,EAAoC,EAApC,EAAwC,GAAxC,CAA7B;IACA,MAAMkC,UAAU,GAAGF,WAAW,GAAG,CAAjC;IACA,MAAMG,SAAS,GAAGvP,IAAI,CAACC,KAAL,CAAW,CAACmN,eAAe,GAAGgC,WAAnB,IAAkC,CAA7C,CAAlB;IAEA,OAAO;MACLI,MAAM,EAAE,SADH;MAELhD,QAAQ,EAAElN,WAAW,GAAG,OAAH,GAAa,UAF7B;MAGLmQ,MAAM,EAAEnQ,WAAW,GAAG,IAAH,GAAU,CAHxB;MAILoJ,GAAG,EAAEpJ,WAAW,GAAG,kBAAH,GAAwBiQ,SAJnC;MAKLzO,KAAK,EAAExB,WAAW,GAAG,EAAH,GAAQgQ,UALrB;MAMLvO,MAAM,EAAEzB,WAAW,GAAG,EAAH,GAAQ8P;IANtB,CAAP;EAQD,CAda;EAedF,SAAS,EAAE;IACTQ,IAAI,EAAE,CAAC;MAAEpQ;IAAF,CAAD,KAA6BA,WAAW,GAAG,IAAH,GAAU;EAD/C,CAfG;EAkBd6P,UAAU,EAAE;IACVQ,KAAK,EAAE,CAAC;MAAErQ;IAAF,CAAD,KAA6BA,WAAW,GAAG,IAAH,GAAU;EAD/C;AAlBE,CAAT,C,CA6CT;;AACeyP,+GAAW,CAAC9B,qBAAqB,CAAC3B,MAAvB,CAAX,CACb2B,qBADa,CAAf,E;;;;;;;;;;;;AClEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;CACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;;AACA,IAAK2C,YAAL;;AAAA,WAAKA,YAAL,EAAiB;EACfA;EACAA;AACD,CAHD,EAAKA,YAAY,KAAZA,YAAY,MAAjB;;AAcM,SAAUpC,cAAV,CAAyB3C,IAAzB,EAAkC;EACtC,OAAOA,IAAI,CAACb,cAAL,CAAoB,KAApB,CAAP;AACD;AAOK,SAAUV,WAAV,CAAsBuB,IAAtB,EAA+B;EACnC,OAAOA,IAAI,CAACb,cAAL,CAAoB,MAApB,CAAP;AACD;AAmFD;AACA;;AACc,MAAO6F,OAAP,SAAuBvP,mDAAvB,CAAkD;EAAhEC;;IAOE,aAAe;MACbgG,KAAK,EAAE,CADM;MAEbjC,IAAI,EAAEsL,YAAY,CAACE,OAFN;MAGbC,YAAY,EAAE,yDAHD;MAIb/J,KAAK,EAAE;IAJM,CAAf;IAOA;;IACA,eAAU,IAAItB,+DAAJ,CAAiB;MACzBC,IAAI,EAAE,KAAKnD,KAAL,CAAW8C,IADQ;MAEzBM,WAAW,EAAE,CACX;QAAEpB,IAAI,EAAE,WAAR;QAAqBqB,IAAI,EAAE+K,YAAY,CAACE,OAAxC;QAAiDhL,EAAE,EAAE8K,YAAY,CAACI;MAAlE,CADW,EAEX;QAAExM,IAAI,EAAE,YAAR;QAAsBqB,IAAI,EAAE+K,YAAY,CAACI,KAAzC;QAAgDlL,EAAE,EAAE8K,YAAY,CAACE;MAAjE,CAFW,CAFY;MAMzB9K,OAAO,EAAE;QACPiL,WAAW,EAAE,MAAM,KAAKxO,QAAL,CAAc;UAAE6C,IAAI,EAAEsL,YAAY,CAACI;QAArB,CAAd,CADZ;QAEPE,YAAY,EAAE,MAAM,KAAKzO,QAAL,CAAc;UAAE6C,IAAI,EAAEsL,YAAY,CAACE;QAArB,CAAd;MAFb;IANgB,CAAjB,CAAV;IAqCA;;IACA,yBAAqBvJ,KAAD,IAAmB,KAAK9E,QAAL,CAAc;MAAE8E;IAAF,CAAd,CAAvC;IAEA;;;IACA,wBAAmB,MAAK;MACtB,IAAI,KAAKL,OAAL,CAAaC,GAAb,CAAiB,WAAjB,CAAJ,EAAmC;QACjC,KAAKD,OAAL,CAAaiK,SAAb;MACD;IACF,CAJD;IAMA;;;IACA,yBAAoB,MAAK;MACvB,IAAI,KAAKjK,OAAL,CAAaC,GAAb,CAAiB,YAAjB,CAAJ,EAAoC;QAClC,KAAKD,OAAL,CAAauI,UAAb;MACD;IACF,CAJD;IAMA;;;;;;;IAKA,sBAAkBlI,KAAD,IAAkB;MACjC,MAAM;QAAEC,UAAF;QAAcC,OAAd;QAAuBC;MAAvB,IAAsC,KAAKtF,KAAjD;;MACA,IAAIoF,UAAJ,EAAgB;QACd,OAAO,KAAP;MACD;;MAED,OAAOD,KAAK,KAAKE,OAAV,IAAqB,CAACF,KAAK,GAAGE,OAAT,IAAoBC,UAApB,KAAmC,CAA/D;IACD,CAPD;IASA;;;;;;IAIA,wBAAmB,MAAK;MACtB,MAAM0C,UAAU,GAAG,KAAK5H,KAAL,CAAWwE,KAAX,CAAiB,KAAKxE,KAAL,CAAW+E,KAA5B,CAAnB;MAEA,IAAI,CAACiH,cAAc,CAACpE,UAAD,CAAnB,EAAiC;MAEjC,MAAM2G,YAAY,GAAG5Q,mFAAoB,CACvCiK,UADuC,EAEvC,KAAKhI,KAAL,CAAW5B,SAF4B,EAGvC,KAAKgC,KAAL,CAAW8C,IAAX,KAAoBsL,YAAY,CAACI,KAHM,EAIvC,GAAG,KAAK5O,KAAL,CAAWgP,iBAAiB,IAAI,KAAKhP,KAAL,CAAWiP,gBAAgB,EAJvB,CAAzC;MAMA,KAAKC,OAAL,CAAa,KAAK9O,KAAL,CAAW+E,KAAxB;MACA,KAAK9E,QAAL,CAAc;QAAEsO;MAAF,CAAd;IACD,CAbD;IAeA;;;;;;;IAKA,uBAAmBQ,SAAD,IAAsB;MACtCC,8EAAiB,CAACC,UAAlB,CAA6B;QAC3BC,eAAe,EAAE;UACfC,SAAS,EACP3Q,IAAI,CAACmK,GAAL,CAASoG,SAAT,MAAwB,CAAxB,GACI,WAAWA,SAAS,GAAG,CAAZ,GAAgB,MAAhB,GAAyB,MAAM,QAD9C,GAEI;QAJS;MADU,CAA7B;IAQD,CATD;IAWA;;;;;;;IAKA,eAAWhK,KAAD,IAAkB;MAC1B9G,MAAM,CAACmR,SAAP,GAAmBnR,MAAM,CAACmR,SAAP,IAAoB,EAAvC;MACAnR,MAAM,CAACmR,SAAP,CAAiBC,IAAjB,CAAsB;QACpBnP,KAAK,EAAE,eADa;QAEpBoP,WAAW,EACT,KAAKtP,KAAL,CAAW8C,IAAX,KAAoBsL,YAAY,CAACI,KAAjC,GACI,GAAG,KAAK5O,KAAL,CAAW5B,SAAX,CAAqBO,MAAM,cADlC,GAEI,KAAKqB,KAAL,CAAW5B,SAAX,CAAqBO,MALP;QAMpBgR,YAAY,EAAEC,kBAAkB,CAAC,KAAK5P,KAAL,CAAW5B,SAAX,CAAqByR,QAAtB,CANZ;QAOpBC,WAAW,EAAE3K,KAAK,GAAG;MAPD,CAAtB;IASD,CAXD;EA8CD;EA9IC;;;EACA3E,iBAAiB;IACf,MAAMuP,aAAa,GAAG,EAAtB;IACA,IAAIC,WAAW,GAAG,CAAlB;;IACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKjQ,KAAL,CAAW+D,MAAX,CAAkBC,MAAtC,EAA8CiM,CAAC,EAA/C,EAAmD;MACjDF,aAAa,CAACN,IAAd,CAAmB,KAAKzP,KAAL,CAAW+D,MAAX,CAAkBkM,CAAlB,CAAnB;;MAEA,IAAI,KAAKC,cAAL,CAAoBD,CAApB,CAAJ,EAA4B;QAC1BF,aAAa,CAACN,IAAd,CAAmB;UACjBzF,IAAI,EAAE,SADW;UAEjBF,OAAO,EAAEkG,WAAW;QAFH,CAAnB;MAID;IACF;;IAED,KAAK3P,QAAL,CAAc;MAAEuE,KAAK,EAAEmL;IAAT,CAAd;EACD;EAED;;;EACAlP,kBAAkB,CAACsP,UAAD,EAAoBnK,SAApB,EAAoC;IACpD,IAAIA,SAAS,CAACb,KAAV,KAAoB,KAAK/E,KAAL,CAAW+E,KAAnC,EAA0C;MACxC,KAAKiL,eAAL,CAAqB,KAAKhQ,KAAL,CAAW+E,KAAX,GAAmBa,SAAS,CAACb,KAAlD;IACD;EACF;EAsFD;;;;;;EAIApE,MAAM;IACJ,IAAI,CAAC,KAAKX,KAAL,CAAWwE,KAAX,CAAiBZ,MAAtB,EAA8B;MAC5B,OAAO,IAAP;IACD;;IAED,MAAMqM,gBAAgB,GAAGvO,wDAAQ,CAACC,MAAT,CAAgB;MACvCC,OAAO,EAAE0L,oEAD8B;MAEvCzL,MAAM,EAAEqO,4DAAaA;IAFkB,CAAhB,CAAzB;IAKA,OACElR,2DAACgK,8CAAD,EAAS,IAAT,EACEhK,2DAACiR,gBAAD,EAAiB9R,kBACX,KAAKyB,KADM,EACD;MACd4E,KAAK,EAAE,KAAKxE,KAAL,CAAWwE,KADJ;MAEdD,UAAU,EAAE,KAAKvE,KAAL,CAAW+E,KAFT;MAGdb,aAAa,EAAE,KAAKiM,iBAHN;MAIdjK,aAAa,EAAE,KAAKkK,gBAJN;MAKdtS,WAAW,EAAE,KAAKkC,KAAL,CAAW8C,IAAX,KAAoBsL,YAAY,CAACI,KALhC;MAMdnJ,SAAS,EAAE,KAAKgL,gBANF;MAOd/K,UAAU,EAAE,KAAKgL;IAPH,CADC,CAAjB,CADF,EAWEtR,2DAACwC,uEAAD,EAAc;MACZlD,GAAG,EAAE,KAAK0B,KAAL,CAAWuO,YADJ;MAEZ1N,SAAS,EAAE;IAFC,CAAd,CAXF,CADF;EAkBD;;AAxK6D;AACvDwN,uBAA+B;EACpCrJ,UAAU,EAAE,KADwB;EAEpCC,OAAO,EAAE,CAF2B;EAGpCC,UAAU,EAAE;AAHwB,CAA/B,C;;;;;;;;;;;;ACrIT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AA8BM,MAAOsE,SAAP,SAAyB+G,+CAAzB,CAAgD;EAAtDxR;;IACE,aAAQ;MACNyR,MAAM,EAAE;IADF,CAAR;;IAgBA,YAAO,MAAK;MACV,KAAKvQ,QAAL,CAAc;QAAEuQ,MAAM,EAAE;MAAV,CAAd;IACD,CAFD;EA0DD;;EAtECpQ,iBAAiB;IACf,IAAI,KAAKR,KAAL,CAAW6J,KAAf,EAAsB;MACpB,KAAKtG,IAAL;IACD;EACF;;EAED1C,kBAAkB,CAACC,SAAD,EAAiB;IACjC,IAAI,CAACA,SAAS,CAAC+I,KAAX,IAAoB,KAAK7J,KAAL,CAAW6J,KAA/B,IAAwC,CAAC,KAAKzJ,KAAL,CAAWwQ,MAAxD,EAAgE;MAC9D,KAAKrN,IAAL;IACD;EACF;;EAMDsN,qBAAqB,CAACC,SAAD,EAAiB;IACpC,MAAMC,QAAQ,GAAGxS,MAAM,CAACyS,IAAP,CAAYF,SAAZ,CAAjB;IACA,OAAOC,QAAQ,CACZvH,GADI,CACA3D,GAAG,IAAG;MACT,MAAMoL,QAAQ,GAAG,KAAKjR,KAAL,CAAW6F,GAAX,CAAjB;MACA,MAAMqL,QAAQ,GAAGJ,SAAS,CAACjL,GAAD,CAA1B;;MACA,QAAQA,GAAR;QACE,KAAK,OAAL;UACE,OAAO,CAACoL,QAAD,IAAaC,QAApB;QAA6B;;QAC/B,KAAK,OAAL;QACA,KAAK,YAAL;QACA,KAAK,oBAAL;QACA,KAAK,UAAL;UACE,OAAOD,QAAQ,KAAKC,QAApB;;QACF,KAAK,OAAL;QACA,KAAK,OAAL;QACA,KAAK,WAAL;UACE,OAAOC,IAAI,CAACC,SAAL,CAAeH,QAAf,MAA6BE,IAAI,CAACC,SAAL,CAAeF,QAAf,CAApC;;QACF,KAAK,UAAL;QACA;UACE,IAAID,QAAQ,KAAKC,QAAjB,EAA2B;YACzB,OAAO,IAAP;UACD;;UACD,OAAO,KAAP;MAjBJ;IAmBD,CAvBI,EAwBJG,IAxBI,CAwBCC,YAAY,IAAI,CAAC,CAACA,YAxBnB,CAAP;EAyBD;;EAEDvQ,MAAM;IACJ,MAAMwQ,QAAQ,GAAG;MAAEC,GAAG,EAAE,KAAK,KAAKxR,KAAL,CAAWmF,KAAX,GAAmB,CAAC;IAAhC,CAAjB;IACA,MAAMwF,YAAY,GAAG,KAAK8G,SAAL,KAAmB,CAAxC;IACAlH,0DAAU,CAACmH,GAAX,CAAe,cAAf,EAA+B/G,YAA/B;IACA,MAAMgH,EAAE,GAAGvS,4CAAK,CAACwS,aAAN,CAAoB,KAApB,EAA2B;MACpC3Q,SAAS,EAAE,KAAKjB,KAAL,CAAWyK,QAAX,GAAsB,mBAAtB,GAA4C,eADnB;MAEpC,kBAAkB0G,IAAI,CAACC,SAAL,CAAeG,QAAf,CAFkB;MAGpC,aAAalT,MAAM,CAACwT;IAHgB,CAA3B,CAAX;IAKA,OACEzS;MAAK+B,KAAK,EAAE,KAAKnB,KAAL,CAAWmB;IAAvB,GACG,CAAC,KAAKnB,KAAL,CAAW0L,QAAZ,IACC;IACAtM;MAAM+B,KAAK,EAAE5C,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB0L,+CAAM,CAAC4H,MAAzB,EAAiC,KAAK9R,KAAL,CAAWoK,SAA5C;IAAb,GAAmE,eAAnE,CAHJ,EAOGuH,EAPH,CADF;EAWD;;EAEDF,SAAS;IACP,OAAOlH,0DAAU,CAACC,GAAX,CAAe,cAAf,KAAkC,CAAzC;EACD;;AA1EmD,C;;;;;;;;;;;;AChCtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAaM,MAAOmC,QAAP,SAAwBzN,mDAAxB,CAA4C;EAAlDC;;;IAKE,oBAAgBmB,KAAD,IAAwC;MACrD,MAAM6E,KAAK,GAAG7E,KAAK,CAACyR,aAAN,CAAoBC,YAApB,CAAiC,YAAjC,CAAd;;MACA,IAAI7M,KAAJ,EAAW;QACT,KAAKnF,KAAL,CAAWsJ,YAAX,CAAwBhJ,KAAxB,EAA+BqG,QAAQ,CAACxB,KAAD,EAAQ,EAAR,CAAvC;MACD;IACF,CALD;EAqED;;EA9DCpE,MAAM;IACJ,MAAMkR,YAAY,GAAG,GAArB;IACA,MAAMC,UAAU,GAAG,EAAnB;IACA,MAAMC,YAAY,GAAGlE,wDAAS,CAC5B,CAD4B,EAE5BrP,IAAI,CAACC,KAAL,CAAW,KAAKmB,KAAL,CAAWN,KAAX,GAAmBuS,YAA9B,CAF4B,EAG5B,CAH4B,CAA9B;IAKA,MAAMG,cAAc,GAClB,KAAKpS,KAAL,CAAWN,KAAX,GACAwS,UAAU,IAAIC,YAAY,GAAG,CAAnB,CADV,IAEC,KAAKnS,KAAL,CAAW6K,MAAX,GAAoB,IAAIqH,UAAxB,GAAqC,CAFtC,CADF;IAIA,MAAMG,SAAS,GAAGD,cAAc,GAAGD,YAAnC;IACA,MAAMG,OAAO,GAAG1T,IAAI,CAAC4G,IAAL,CAAU,KAAKxF,KAAL,CAAW+D,MAAX,CAAkBC,MAAlB,GAA2BmO,YAArC,CAAhB;IAEA,MAAMI,IAAI,GAAG,EAAb;;IAEA,KAAK,IAAItC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqC,OAApB,EAA6BrC,CAAC,EAA9B,EAAkC;MAChCsC,IAAI,CAAC9C,IAAL,CACE,KAAKzP,KAAL,CAAW+D,MAAX,CAAkByO,KAAlB,CACEvC,CAAC,GAAGkC,YADN,EAEElC,CAAC,GAAGkC,YAAJ,GAAmBA,YAFrB,CADF;IAMD;;IAED,OACE/S;MACE+B,KAAK,EAAE;QACLsL,WAAW,EAAE,KAAKzM,KAAL,CAAW6K,MAAX,GAAoB,EAApB,GAAyB,CADjC;QAELsB,YAAY,EAAE,KAAKnM,KAAL,CAAW6K,MAAX,GAAoB,EAApB,GAAyB;MAFlC;IADT,GAMG0H,IAAI,CAAC/I,GAAL,CAAS,CAACiJ,GAAD,EAAMC,QAAN,KACRtT;MACEyG,GAAG,EAAE,YAAY6M,QAAQ,EAD3B;MAEEvR,KAAK,EAAE;QAAEgI,YAAY,EAAEuJ,QAAQ,GAAGJ,OAAO,GAAG,CAArB,GAAyBJ,UAAzB,GAAsC;MAAtD;IAFT,GAIGO,GAAG,CAACjJ,GAAJ,CAAQ,CAACxL,KAAD,EAAQ2U,UAAR,KACPvT;MACEyG,GAAG,EAAE7H,KAAK,CAACU,GADb;MAEEyB,GAAG,EAAED,6DAAQ,CAAClC,KAAK,CAACU,GAAP,EAAY;QACvBoB,CAAC,EAAEuS,SADoB;QAEvBpS,CAAC,EAAEoS,SAFoB;QAGvBtS,GAAG,EAAE;MAHkB,CAAZ,CAFf;MAOEwB,GAAG,EAAEvD,KAAK,CAAC4N,OAPb;MAQE1K,OAAO,EAAE,KAAK0R,YARhB;MASEzR,KAAK,EAAE;QACLzB,KAAK,EAAE2S,SADF;QAEL1S,MAAM,EAAE0S,SAFH;QAGLQ,WAAW,EAAEF,UAAU,GAAGR,YAAY,GAAG,CAA5B,GAAgCD,UAAhC,GAA6C,CAHrD;QAIL9D,MAAM,EAAE;MAJH,CATT;MAcG,cACWsE,QAAQ,GAAGP,YAAX,GAA0BQ;IAfxC,EADD,CAJH,CADD,CANH,CADF;EAmCD;;AAzE+C;AACzChG,wBAA+B;EACpC5I,MAAM,EAAE;AAD4B,CAA/B,C;;;;;;;;;;;;AClBT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAsBM,MAAOuM,aAAP,SAA6BpR,mDAA7B,CAGL;EAHDC;;IAIE,aAAe;MAAE2T,WAAW,EAAE;IAAf,CAAf;;IAMA,oBAAe,MAAK;MAClBC,CAAC,CAAC,YAAY,KAAK/S,KAAL,CAAWgT,OAAO,kBAA/B,CAAD,CAAoDC,QAApD,CAA6D;QAC3DC,kBAAkB,EAAE,KADuC;QAE3DC,YAAY,EAAE,IAF6C;QAG3DC,SAAS,EAAE,IAHgD;QAI3DC,UAAU,EAAE,KAAKrT,KAAL,CAAWyF,SAJoC;QAK3D6N,SAAS,EAAE,KAAKC,aAL2C;QAM3DC,UAAU,EAAE,KAAKxT,KAAL,CAAW0F,UANoC;QAO3D+N,mBAAmB,EAAE,KAAKzT,KAAL,CAAW2E,UAP2B;QAQ3D+O,SAAS,EAAGvO,KAAD,IAAkB;UAC3B,KAAKnF,KAAL,CAAWsE,aAAX,CAAyBa,KAAzB;UACA,KAAKnF,KAAL,CAAWsG,aAAX;QACD,CAX0D;QAY3DqN,SAAS,EAAGxO,KAAD,IAAkB;UAC3B,KAAKnF,KAAL,CAAWsE,aAAX,CAAyBa,KAAzB;UACA,KAAKnF,KAAL,CAAWsG,aAAX;QACD,CAf0D;QAgB3DsN,UAAU,EAAGzO,KAAD,IAAkB;UAC5B,MAAMsE,IAAI,GAAG,KAAKzJ,KAAL,CAAW4E,KAAX,CAAiBO,KAAjB,CAAb;;UACA,IAAI+C,4DAAW,CAACuB,IAAD,CAAf,EAAuB;YACrB,MAAMoK,eAAe,GAAG/M,QAAQ,CAC7BgN,sBADqB,CACE,2BADF,EAErBrK,IAFqB,CAEhBA,IAAI,CAACK,OAFW,CAAxB;;YAIA,IAAI+J,eAAJ,EAAqB;cACnBE,gDAAQ,CAAChT,MAAT,CACE3B,2DAACwK,oDAAD,EAAU;gBACRC,KAAK,EAAE,IADC;gBAERE,EAAE,EAAE,GAAGN,IAAI,CAACO,IAAI,IAAI,KAAK5J,KAAL,CAAW0S,WAAW,EAFlC;gBAGR3N,KAAK,EAAEsE,IAAI,CAACK,OAHJ;gBAIRnC,UAAU,EAAE,KAAK3H,KAAL,CAAW2H,UAJf;gBAKRsC,KAAK,EAAE,CAAC,CAAC,GAAD,EAAM,EAAN,CAAD,EAAY,CAAC,GAAD,EAAM,GAAN,CAAZ,CALC;gBAMRK,kBAAkB,EAAE,IANZ;gBAORF,SAAS,EACP,KAAKpK,KAAL,CAAW9B,WAAX,GACI;kBAAEkN,QAAQ,EAAE,QAAZ;kBAAsBf,KAAK,EAAE;gBAA7B,CADJ,GAEI,EAVE;gBAYRI,QAAQ,EAAE;cAZF,CAAV,CADF,EAeEoJ,eAfF;cAiBA,KAAKxT,QAAL,CAAc;gBAAEyS,WAAW,EAAE,KAAK1S,KAAL,CAAW0S,WAAX,GAAyB;cAAxC,CAAd;YACD;UACF;QACF;MA5C0D,CAA7D;IA8CD,CA/CD;;IAiDA,qBAAgB,MAAK;MACnB,KAAK9S,KAAL,CAAWsG,aAAX;;MACA,IAAI,KAAKtG,KAAL,CAAW+D,MAAX,CAAkBC,MAAlB,GAA2B,CAA/B,EAAkC;QAChC+O,CAAC,CAAC,gBAAD,CAAD,CACGiB,MADH,GAEGC,GAFH,CAEO;UACH7I,QAAQ,EAAE,UADP;UAEH9D,GAAG,EAAE,kBAFF;UAGHgH,IAAI,EAAE;QAHH,CAFP,EAOG4F,QAPH,CAOY,qBAPZ;QAQAnB,CAAC,CAAC,gBAAD,CAAD,CACGiB,MADH,GAEGC,GAFH,CAEO;UACH7I,QAAQ,EAAE,UADP;UAEH9D,GAAG,EAAE,kBAFF;UAGHiH,KAAK,EAAE;QAHJ,CAFP,EAOG2F,QAPH,CAOY,qBAPZ;MAQD;;MAEDnB,CAAC,CAAC,iBAAD,CAAD,CACGiB,MADH,GAEGC,GAFH,CAEO;QACH7I,QAAQ,EAAE,UADP;QAEH+I,MAAM,EAAE,CAFL;QAGH9J,KAAK,EAAE,SAHJ;QAIH5I,OAAO,EAAE,MAJN;QAKH2S,UAAU,EACR,gEANC;QAOHC,UAAU,EAAE,IAAI,CAPb;QAQHC,QAAQ,EAAE,SARP;QASHpI,SAAS,EAAE;MATR,CAFP,EAaGgI,QAbH,CAaY,qBAbZ;MAeAnB,CAAC,CAAC,yCAAD,CAAD,CAA6CwB,MAA7C;IACD,CArCD;EA+GD;;EApKC/T,iBAAiB;IACfuS,CAAC,CAACjM,QAAD,CAAD,CAAY+C,KAAZ,CAAkB,KAAK2K,YAAvB;EACD;;EA0FDzT,MAAM;IACJ,MAAM;MAAEiS,OAAF;MAAWyB,WAAX;MAAwBC,UAAxB;MAAoCC;IAApC,IAAuD,KAAK3U,KAAlE;IAEA,MAAM4U,SAAS,GAA+B,EAA9C;;IACA,IAAID,cAAJ,EAAoB;MAClBA,cAAc,CACXE,KADH,CACS,QADT,EAEG7N,MAFH,CAEU8N,IAAI,IAAIA,IAAI,CAAC9Q,MAFvB,EAGGwF,GAHH,CAGOsL,IAAI,IAAG;QACV,MAAMC,EAAE,GAAGD,IAAI,CAACD,KAAL,CAAW,GAAX,CAAX;QACAD,SAAS,CAAC,QAAQG,EAAE,CAAC,CAAD,CAAF,CAAMC,WAAN,EAAmB,EAA5B,CAAT,GAA2CD,EAAE,CAAC,CAAD,CAAF,CAAME,SAAN,CACzC,CADyC,EAEzCF,EAAE,CAAC,CAAD,CAAF,CAAM/Q,MAAN,GAAe,CAF0B,CAA3C;MAID,CATH;IAUD;;IAED,OACE5E;MACE6B,SAAS,EAAC,8CADZ;MAC0D,mBACvC+R;IAFnB,GAIG,KAAKhT,KAAL,CAAW4E,KAAX,CAAiB4E,GAAjB,CAAqB,CAACC,IAAD,EAAOtE,KAAP,KAAgB;MACpC,IAAI+C,4DAAW,CAACuB,IAAD,CAAf,EAAuB;QACrB,OACErK;UACEyG,GAAG,EAAEV,KADP;UAEElE,SAAS,EAAE,WAAW+R,OAAO,IAAI7N,KAAK,GAAG,CAAR,GAAY,QAAZ,GAAuB,EAAE;QAF5D,GAIE/F;UAAG6B,SAAS,EAAC,gBAAb;UAA8B2M,IAAI,EAAE;QAApC,EAJF,CADF;MAQD;;MACD,OACExO;QACEyG,GAAG,EAAEV,KADP;QAEElE,SAAS,EAAE,WAAW+R,OAAO,UAAU7N,KAAK,GAAG,CAAC,IAC9CA,KAAK,GAAG,CAAR,GAAY,QAAZ,GAAuB,EACzB;MAJF,GAME/F;QACEwO,IAAI,EAAEnE,IAAI,CAAC/K,GADb;QAEEuC,SAAS,EAAC,gBAFZ;QAGE8I,EAAE,EAAEN,IAAI,CAACM,EAHX;QAIEuB,KAAK,EAAE,GAAG7B,IAAI,CAAC+C,OAAL,GAAe/C,IAAI,CAAC+C,OAApB,GAA8B,EAAE,GACxC/C,IAAI,CAAC6C,MAAL,GAAc7C,IAAI,CAAC6C,MAAnB,GAA4B,EAC9B;MANF,GAOMsI,SAPN,GASExV;QACE6B,SAAS,EAAE,qCACTwT,WAAW,GAAG,aAAH,GAAmB,EAChC,EAHF;QAGI,YACQvU,6DAAQ,CAACuJ,IAAI,CAAC/K,GAAN,EAAW;UAAEoB,CAAC,EAAEzB,MAAM,CAAC2K;QAAZ,CAAX,CAJpB;QAKEzH,GAAG,EAAEkI,IAAI,CAAC+C;MALZ,EATF,EAiBEpN;QAAK2K,EAAE,EAAC;MAAR,GACE3K;QAAK6B,SAAS,EAAC;MAAf,EADF,CAjBF,CANF,CADF;IA8BD,CAzCA,CAJH,EA8CGyT,UAAU,IACTtV;MAAY6B,SAAS,EAAC;IAAtB,uBACmByT,UADnB,CA/CJ,CADF;EAsDD;;AAtKF,C;;;;;;;;;;;;AC9BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;;AAeA,MAAMnH,UAAN,SAAyBrO,mDAAzB,CAA6C;EA0C3C6B,MAAM;IACJ,MAAM;MAAE/C,KAAF;MAASkD,OAAT;MAAkBiE,KAAlB;MAAyBqI,KAAzB;MAAgChG;IAAhC,IAA4C,KAAKxH,KAAvD;IAEA,MAAM;MAAEtB,GAAF;MAAO2N,MAAP;MAAeC,MAAf;MAAuBV,OAAvB;MAAgCY;IAAhC,IAA4CxO,KAAlD;IAEA,OACEoB;MAAK6B,SAAS,EAAEuG,OAAO,CAAC/E;IAAxB,GACErD,2DAACH,iEAAD,EAAW;MACTkB,GAAG,EAAEzB,GADI;MAET6C,GAAG,EAAEqK,OAFI;MAGT3K,SAAS,EAAEuG,OAAO,CAAChI,cAHV;MAIT0B,OAAO,EAAEA;IAJA,CAAX,CADF,EAOE9B;MAAK6B,SAAS,EAAEuG,OAAO,CAAC0N;IAAxB,GACE9V;MAAK6B,SAAS,EAAEuG,OAAO,CAAC2N;IAAxB,GACE/V;MAAK6B,SAAS,EAAE,CAACuG,OAAO,CAAC4N,SAAT,EAAoB5N,OAAO,CAAC6N,OAA5B,EAAqCrW,IAArC,CAA0C,GAA1C;IAAhB,GACGwO,KAAK,IAAIrI,KAAT,IAAkBqI,KAAK,GAAG,CAA1B,GAA8B,GAAGrI,KAAK,GAAG,CAAC,MAAMqI,KAAK,EAArD,GAA0D,GAD7D,CADF,EAIEpO;MAAG6B,SAAS,EAAE,CAACuG,OAAO,CAAC4N,SAAT,EAAoB5N,OAAO,CAAC8N,MAA5B,EAAoCtW,IAApC,CAAyC,GAAzC;IAAd,GACGqN,MADH,EAEGA,MAAM,IAAIC,MAAV,GAAmB,KAAnB,GAA2B,EAF9B,EAGGA,MAHH,CAJF,CADF,EAWElN;MAAG6B,SAAS,EAAE,CAACuG,OAAO,CAAC4N,SAAT,EAAoB5N,OAAO,CAACgF,OAA5B,EAAqCxN,IAArC,CAA0C,GAA1C;IAAd,GACGwN,OADH,CAXF,CAPF,CADF;EAyBD;;AAxE0C;;AACpCe,oBAAS;EACd9K,SAAS,EAAE;IACTrB,OAAO,EAAE,MADA;IAETmU,aAAa,EAAE,QAFN;IAGT5V,MAAM,EAAE;EAHC,CADG;EAMdH,cAAc,EAAE;IACdgW,eAAe,EAAE,eADH;IAEdC,QAAQ,EAAE,CAFI;IAGd9V,MAAM,EAAE,MAHM;IAId+V,SAAS,EAAE;EAJG,CANF;EAYdR,aAAa,EAAE;IACbzT,OAAO,EAAE;EADI,CAZD;EAed0T,sBAAsB,EAAE;IACtB/T,OAAO,EAAE,MADa;IAEtBmU,aAAa,EAAE,YAFO;IAGtBlU,cAAc,EAAE;EAHM,CAfV;EAoBd+T,SAAS,EAAE;IACT/K,KAAK,EAAE,SADE;IAET+J,UAAU,EAAE,6CAFH;IAGTlI,SAAS,EAAE,MAHF;IAITmI,UAAU,EAAE;EAJH,CApBG;EA0BdiB,MAAM,EAAE;IACNnM,YAAY,EAAE,EADR;IAENmL,QAAQ,EAAE,CAFJ;IAGNpI,SAAS,EAAE,OAHL;IAINyJ,aAAa,EAAE,WAJT;IAKNC,aAAa,EAAE;EALT,CA1BM;EAiCdP,OAAO,EAAE;IACPQ,UAAU,EAAE;EADL,CAjCK;EAoCdrJ,OAAO,EAAE;IACP8H,QAAQ,EAAE;EADH;AApCK,CAAT,C,CAyET;;AACe3G,+GAAW,CAACJ,UAAU,CAACrD,MAAZ,CAAX,CAAyCqD,UAAzC,CAAf,E;;;;;;;;;;;;AC7FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAuBA;;AACA,MAAM7C,gBAAN,SAA+BxL,mDAA/B,CAAmD;EAsDjD6B,MAAM;IACJ,MAAM;MACJuH,UADI;MAEJwC,gBAFI;MAGJE,WAHI;MAIJE,WAJI;MAKJC,WALI;MAMJR,YANI;MAOJC,QAPI;MAQJpD;IARI,IASF,KAAKxH,KATT;IAWA,OACEZ;MAAK6B,SAAS,EAAEuG,OAAO,CAAC/E;IAAxB,GACErD,wEACEA;MACE8B,OAAO,EAAE4J,gBADX;MAEE8C,IAAI,EAAE,GAFR;MAGE3M,SAAS,EAAE,CAACuG,OAAO,CAACsO,UAAT,EAAqBtO,OAAO,CAACuO,eAA7B,EAA8C/W,IAA9C,CAAmD,GAAnD;IAHb,GAKEI,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,6BADG;MAETnB,SAAS,EAAEuG,OAAO,CAACwO;IAFV,CAAX,CALF,EASE5W;MAAM6B,SAAS,EAAEuG,OAAO,CAACyO;IAAzB,GAAkC,SAAlC,CATF,CADF,EAYE7W;MACE8B,OAAO,EAAE8J,WADX;MAEE4C,IAAI,EAAE,GAFR;MAGE3M,SAAS,EAAE,CAACuG,OAAO,CAACsO,UAAT,EAAqBtO,OAAO,CAAC0O,UAA7B,EAAyClX,IAAzC,CAA8C,GAA9C;IAHb,GAKEI,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,wBADG;MAETnB,SAAS,EAAEuG,OAAO,CAACwO;IAFV,CAAX,CALF,EASE5W;MAAM6B,SAAS,EAAEuG,OAAO,CAACyO;IAAzB,GAAkC,MAAlC,CATF,CAZF,CADF,EAyBG,CAAC3N,UAAD,IACClJ;MAAK6B,SAAS,EAAEuG,OAAO,CAAC2O;IAAxB,GACE/W;MAAG8B,OAAO,EAAEgK,WAAZ;MAAyB0C,IAAI,EAAC;IAA9B,GACExO,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,wBADG;MAETnB,SAAS,EAAEuG,OAAO,CAACwO;IAFV,CAAX,CADF,CADF,EAOE5W;MAAM6B,SAAS,EAAEuG,OAAO,CAAC4O;IAAzB,GAAyC,GAAGzL,YAAY,GACtD,CAAC,IAAIC,QAAQ,EADf,CAPF,EASExL;MAAG8B,OAAO,EAAEiK,WAAZ;MAAyByC,IAAI,EAAC;IAA9B,GACExO,2DAAC8C,iEAAD,EAAW;MACTE,IAAI,EAAE,wBADG;MAETnB,SAAS,EAAEuG,OAAO,CAACwO;IAFV,CAAX,CADF,CATF,CA1BJ,CADF;EA8CD;;AAhHgD;;AAC1CtL,0BAAS;EACdjI,SAAS,EAAE,CAAC;IAAEoI;EAAF,CAAD,MAAwB;IACjCzJ,OAAO,EAAE,MADwB;IAEjCmU,aAAa,EAAE,KAFkB;IAGjClU,cAAc,EAAE,eAHiB;IAIjCgV,aAAa,EAAE,CAJkB;IAKjC5J,WAAW,EAAE5B,MAAM,GAAG,EAAH,GAAQ,CALM;IAMjCsB,YAAY,EAAEtB,MAAM,GAAG,EAAH,GAAQ;EANK,CAAxB,CADG;EASdiL,UAAU,EAAE;IACV1U,OAAO,EAAE,aADC;IAEVmU,aAAa,EAAE,KAFL;IAGVjU,UAAU,EAAE,QAHF;IAIVuR,WAAW,EAAE;EAJH,CATE;EAedoD,SAAS,EAAE;IACT7B,UAAU,EACR,8DAFO;IAGTE,QAAQ,EAAE,EAHD;IAITuB,UAAU,EAAE,MAJH;IAKTD,aAAa,EAAE,GALN;IAMTU,cAAc,EAAE,MANP;IAOTX,aAAa,EAAE,WAPN;IAQTY,UAAU,EAAE,CARH;IASTC,UAAU,EAAE;EATH,CAfG;EA0BdT,eAAe,EAAE;IACfU,OAAO,EAAE,CAAC;MAAEnO;IAAF,CAAD,KAA4BA,UAAU,GAAG,GAAH,GAAS;EADzC,CA1BH;EA6Bd4N,UAAU,EAAE;IACVO,OAAO,EAAE,CAAC;MAAEnO;IAAF,CAAD,KAA4BA,UAAU,GAAG,CAAH,GAAO;EAD5C,CA7BE;EAgCd0N,IAAI,EAAE;IACJtW,KAAK,EAAE,EADH;IAEJC,MAAM,EAAE;EAFJ,CAhCQ;EAoCdwW,kBAAkB,EAAE;IAClB/U,OAAO,EAAE,MADS;IAElBmU,aAAa,EAAE,KAFG;IAGlBjU,UAAU,EAAE;EAHM,CApCN;EAyCd8U,aAAa,EAAE;IACbhC,UAAU,EAAE,6CADC;IAEbE,QAAQ,EAAE,EAFG;IAGbuB,UAAU,EAAE,MAHC;IAIbD,aAAa,EAAE,GAJF;IAKbU,cAAc,EAAE,MALH;IAMbX,aAAa,EAAE,WANF;IAObY,UAAU,EAAE,CAPC;IAQb1D,WAAW,EAAE;EARA;AAzCD,CAAT,C,CAkHT;;AACelF,+GAAW,CAACjD,gBAAgB,CAACR,MAAlB,CAAX,CAA+CQ,gBAA/C,CAAf,E;;;;;;;;;;;;AC7IA;AAAA;AACe;EACbe,WAAW,EAAE;IACXL,QAAQ,EAAE,UADC;IAEX1J,MAAM,EAAE,MAFG;IAGX4F,GAAG,EAAE,CAHM;IAIXiH,KAAK,EAAE,CAJI;IAKX4F,MAAM,EAAE,CALG;IAMX7F,IAAI,EAAE,CANK;IAOX5O,KAAK,EAAE,OAPI;IAQXC,MAAM,EAAE;EARG,CADA;EAWbwK,qBAAqB,EAAE;IACrBiB,QAAQ,EAAE,OADW;IAErB9D,GAAG,EAAE,mBAFgB;IAGrBgH,IAAI,EAAE,mBAHe;IAIrBD,MAAM,EAAE;EAJa,CAXV;EAiBb3B,WAAW,EAAE;IACXgK,KAAK,EAAE,MADI;IAEXhX,KAAK,EAAE,EAFI;IAGXC,MAAM,EAAE,EAHG;IAIXkT,WAAW,EAAE,CAJF;IAKX8D,SAAS,EAAE,CAAC;MAAE9O;IAAF,CAAD,KACTA,WAAW,KAAK,oBAAhB,GAAuC,KAAvC,GAA+C;EANtC,CAjBA;EAyBboE,WAAW,EAAE;IACX0K,SAAS,EAAE,KADA;IAEXvV,OAAO,EAAE,OAFE;IAGXiJ,KAAK,EAAE,MAHI;IAIXsL,aAAa,EAAE,WAJJ;IAKXrB,QAAQ,EAAE,UALC;IAMXF,UAAU,EAAE,0CAND;IAOXwB,aAAa,EAAE,KAPJ;IAQXzM,YAAY,EAAE,KARH;IASX+C,SAAS,EAAE;EATA,CAzBA;EAoCbK,YAAY,EAAE,CAAC;IAAE1E;EAAF,CAAD,KAA2B;IACvC,MAAM+O,IAAI,GAAG;MACXtC,QAAQ,EAAE,MADC;MAEXD,UAAU,EAAE,MAFD;MAGXjT,OAAO,EAAE,OAHE;MAIXgT,UAAU,EAAE,0CAJD;MAKX/J,KAAK,EAAE,SALI;MAMXlB,YAAY,EAAE;IANH,CAAb;;IASA,IAAItB,WAAW,KAAK,oBAApB,EAA0C;MACxC,OAAOtJ,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBoY,IAAlB,EAAwB;QAC7BvM,KAAK,EAAE,MADsB;QAE7B+J,UAAU,EAAE,2CAFiB;QAG7BE,QAAQ,EAAE,MAHmB;QAI7BD,UAAU,EAAE,MAJiB;QAK7BlL,YAAY,EAAE,KALe;QAM7ByM,aAAa,EAAE;MANc,CAAxB,CAAP;IAQD;;IAED,IAAI/N,WAAW,KAAK,MAApB,EAA4B;MAC1B,OAAOtJ,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBoY,IAAlB,EAAwB;QAC7BpV,SAAS,EAAE,MADkB;QAE7B0H,QAAQ,EAAE;MAFmB,CAAxB,CAAP;IAID;;IAED,OAAO0N,IAAP;EACD,CAjEY;EAkEb1J,YAAY,EAAE;IACZ9L,OAAO,EAAE,MADG;IAEZC,cAAc,EAAE,QAFJ;IAGZC,UAAU,EAAE,QAHA;IAIZkU,eAAe,EAAE,kBAJL;IAKZnH,MAAM,EAAE,IALI;IAMZ5M,OAAO,EAAE,YANG;IAOZ2M,MAAM,EAAE;EAPI,CAlED;EA2EbhB,YAAY,EAAE;IACZhC,QAAQ,EAAE,UADE;IAEZ9D,GAAG,EAAE,CAFO;IAGZiH,KAAK,EAAE,CAHK;IAIZ4F,MAAM,EAAE,CAJI;IAKZ7F,IAAI,EAAE,CALM;IAMZD,MAAM,EAAE,IANI;IAOZjN,OAAO,EAAE,OAPG;IAQZ1B,KAAK,EAAE,MARK;IASZC,MAAM,EAAE,MATI;IAUZ6B,SAAS,EAAE,KAVC;IAWZqV,MAAM,EAAE,MAXI;IAYZC,YAAY,EAAE,CAZF;IAaZtB,eAAe,EAAE,SAbL;IAcZ/T,OAAO,EAAE,CAdG;IAeZsV,SAAS,EAAE,2BAfC;IAgBZ3I,MAAM,EAAE;EAhBI,CA3ED;EA6Fb0D,MAAM,EAAE;IACN1G,QAAQ,EAAE,UADJ;IAEN9D,GAAG,EAAE,OAFC;IAGN+M,UAAU,EAAE,MAHN;IAINC,QAAQ,EAAE,MAJJ;IAKNhG,IAAI,EAAE,CALA;IAMN5O,KAAK,EAAE,MAND;IAONwM,SAAS,EAAE;EAPL,CA7FK;EAsGb3C,UAAU,EAAE;IACV6E,MAAM,EAAE,SADE;IAEV4I,aAAa,EAAE,MAFL;IAGVtX,KAAK,EAAE,EAHG;IAIVC,MAAM,EAAE,EAJE;IAKVyL,QAAQ,EAAE,UALA;IAMViD,MAAM,EAAE,CANE;IAOV8F,MAAM,EAAE,CAPE;IAQV5F,KAAK,EAAE;EARG,CAtGC;EAgHblB,UAAU,EAAE;IACVjC,QAAQ,EAAE,OADA;IAEV9D,GAAG,EAAE,EAFK;IAGViH,KAAK,EAAE,EAHG;IAIVuI,YAAY,EAAE,KAJJ;IAKVG,OAAO,EAAE,MALC;IAMVC,WAAW,EAAE,CANH;IAOVxX,KAAK,EAAE,EAPG;IAQVC,MAAM,EAAE,EARE;IASV6V,eAAe,EAAE,OATP;IAUVlB,QAAQ,EAAE,EAVA;IAWVjK,KAAK,EAAE,MAXG;IAYV6B,SAAS,EAAE,QAZD;IAaVmI,UAAU,EAAE,EAbF;IAcV5S,OAAO,EAAE;EAdC,CAhHC;EAgIb6L,cAAc,EAAE;IACd5N,KAAK,EAAE,EADO;IAEdC,MAAM,EAAE,EAFM;IAGd4W,UAAU,EAAE;EAHE,CAhIH;EAqIblN,UAAU,EAAE;IACV+E,MAAM,EAAE;EADE,CArIC;EAwIb5C,OAAO,EAAE;IACPgK,eAAe,EAAE,SADV;IAEP7V,MAAM,EAAE;EAFD;AAxII,CAAf,E","file":"600c2d31fb7212f4b5a3.js","sourcesContent":["import { GalleryPhoto, GalleryAnalytics } from '../gallery/Gallery'\n\n/** TODO: genaralize into a page tracking capability for the Omniture Consumer class */\nexport function getPhotoAnalyticsUrl(\n photo: GalleryPhoto,\n analyticsParams: GalleryAnalytics,\n isModalView: boolean,\n baseUrl: string\n) {\n // todo: move analytics helpers to an importable location\n let analytics = window.addUserToOmnitureBeaconParameters(\n Object.assign({}, analyticsParams)\n )\n analytics = window.updateOmnitureBeaconParameter(\n analytics,\n 'prop1',\n `c1=${photo.url}`\n )\n if (isModalView) {\n analytics = window.updateOmnitureBeaconParameter(\n analytics,\n 'prop31',\n `${analyticsParams.prop31} Full Screen`\n )\n }\n\n return `${baseUrl}/${Math.floor(Math.random() * 100000)}?${Object.values(\n analytics\n ).join('&')}`\n}\n","import React, { PureComponent, SyntheticEvent, MouseEvent } from 'react'\nimport { ImgixOptions, imgixUrl } from '../utils/imgix'\n\ntype Props = {\n /** Source url for the image */\n src: string\n /** Alt-text for the image */\n alt: string\n /** Called when the image container is clicked */\n onClick?(e: MouseEvent): void\n /** Called when the image is loaded */\n onLoad?(event: SyntheticEvent): void\n /** Class name for the image container */\n className: string\n /** https://docs.imgix.com/apis/url/size/fit */\n fit:\n | 'clip'\n | 'crop'\n | 'clamp'\n | 'facearea'\n | 'fill'\n | 'fillmax'\n | 'max'\n | 'min'\n | 'scale'\n}\n\ntype State = {\n imageUrl: string\n isLoading: boolean\n}\n/**\n * Component for rendering a perfectly-sized image from imgix without knowing the dimensions of the container in advance.\n */\nexport class ImgixImage extends PureComponent {\n static defaultProps: Partial = {\n fit: 'clip'\n }\n imageContainer = React.createRef()\n state: State = {\n imageUrl: '',\n isLoading: false\n }\n componentDidMount() {\n this.updateImageUrl()\n window.addEventListener('resize', this.updateImageUrl)\n }\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateImageUrl)\n }\n componentDidUpdate(prevProps: Props) {\n if (this.props.src !== prevProps.src) {\n this.updateImageUrl()\n }\n }\n updateImageUrl = () => {\n if (this.imageContainer.current) {\n const {\n width,\n height\n } = this.imageContainer.current.getBoundingClientRect()\n if (width) {\n const options: Partial = {\n w: Math.floor(width),\n fit: this.props.fit\n }\n if (height) {\n options.h = Math.floor(height)\n }\n const imageUrl = imgixUrl(this.props.src, options)\n if (imageUrl !== this.state.imageUrl) {\n this.setState({ imageUrl, isLoading: true })\n }\n }\n }\n }\n onImageLoaded = (event: SyntheticEvent) => {\n this.setState({ isLoading: false })\n this.props.onLoad && this.props.onLoad(event)\n }\n render() {\n const { imageUrl } = this.state\n return (\n \n {imageUrl && (\n \n )}\n \n )\n }\n}\n","import React, { SFC } from 'react'\n\nexport const TrackingPixel: SFC<{ url: string; className: string }> = ({\n url,\n className\n}) => (\n {''}\n)\n","import React, { PureComponent, MouseEvent } from 'react'\nimport { Platform } from '../utils/platform'\n\ntype Props = {\n /** Filename of the icon */\n name: string\n /** Class name to apply */\n className?: string\n /** Called on icon click */\n onClick?(e: MouseEvent): void\n}\n\n/** The path to get icons from. */\nconst iconPath = Platform.select({\n desktop: '/static/img/icons/',\n mobile: '../img/'\n})\n\n/**\n * Component that displays SVG graphics.\n * Takes a filename and resolves default icon paths.\n */\nexport class VectorIcon extends PureComponent {\n render() {\n return (\n \n )\n }\n}\n","import React, { PureComponent } from 'react'\nimport { fromEvent, Subscription } from 'rxjs'\n\ntype Props = {\n children(width: number): JSX.Element\n}\n\ntype State = {\n width: number\n}\n\nexport class WidthProvider extends PureComponent {\n state = { width: 0 }\n\n container = React.createRef()\n\n resizeHandler: Subscription\n\n componentDidMount() {\n this.updateWidth()\n\n this.resizeHandler = fromEvent(window, 'resize').subscribe(this.updateWidth)\n }\n\n updateWidth = () => {\n if (this.container.current) {\n const { width } = this.container.current.getBoundingClientRect()\n this.setState({ width })\n }\n }\n\n render() {\n return (\n
\n {this.state.width && this.props.children(this.state.width)}\n
\n )\n }\n\n componentWillUnmount() {\n this.resizeHandler.unsubscribe()\n }\n}\n","import React, {\n PureComponent,\n Fragment,\n MouseEvent,\n SyntheticEvent,\n KeyboardEvent\n} from 'react'\nimport injectSheet from 'react-jss'\nimport { ClassNameMap } from '../utils/jss-types'\nimport Modal from 'react-modal'\nimport styles from './styles'\n// @ts-ignore\nimport StateMachine from 'javascript-state-machine'\nimport { fromEvent, Subscription } from 'rxjs'\nimport { throttleTime, filter } from 'rxjs/operators'\n\nimport { Logger } from '../utils/logger'\n\nimport { GridView } from './GridView'\nimport ModalImage from './ModalImage'\nimport { GalleryAd } from './GalleryAd'\nimport NavigationHeader from './NavigationHeader'\nimport DirectionalNavigation from './DirectionalNavigation'\nimport { VectorIcon } from '../components/VectorIcon'\nimport {\n Props as GalleryProps,\n CommonProps,\n isGalleryAd,\n isGalleryPhoto\n} from './Gallery'\nimport { imgixUrl } from '../utils/imgix'\nimport { multiClass } from '../utils'\nimport { WidthProvider } from '../components/WidthProvider'\nimport { GlobalData } from '../ads/GlobalData'\n\ndeclare global {\n interface Window {\n ads: {\n GlobalData: {\n initialAdRefreshComplete: boolean\n }\n }\n }\n}\n\nenum DesktopGalleryView {\n SLIDESHOW = 'slideshow',\n GRID = 'grid',\n THUMBNAIL = 'thumbnail'\n}\n\ntype Props = {\n /** Whether to use url hash navigation, allowing linking to specific slides in a gallery */\n useHash: boolean\n /** Whether the gallery should display as a thumbnail */\n thumbnailView: boolean\n /** Whether to display social sharing icons (currently unused as they were broken) */\n showSocial: boolean\n /** Whether to hide the gallery header navigation controls */\n hideNavigation: boolean\n /** Url to use for the thumbnail image, if enabled */\n thumbnailUrl: string\n /** Number of slides away at which to load an ad */\n adReadyThreshold: number\n /** The aspect ratio to enforce on the slide container */\n aspectRatio: number\n /** Whether to display gallery blur */\n galleryBlur: boolean\n /** Class name map for the component */\n classes: ClassNameMap\n}\n\ntype State = {\n /** The current view type of the gallery */\n view: DesktopGalleryView\n}\n\n/** Combined props needed to render a {@link DesktopGallery}. */\ntype DesktopGalleryProps = CommonProps & GalleryProps & Props\n\n/**\n * The desktop gallery component.\n * Inherits default and modal modes from the base gallery, and introduces thumbnail and grid view.\n * By default, enforces a 3/2 aspect ratio, containing the images inside.\n * Has keyboard navigation, which supports multiple galleries on a page, by keeping track of focus.\n */\nexport class DesktopGallery extends PureComponent {\n static defaultProps: Partial = {\n useHash: true,\n adReadyThreshold: 3,\n hideNavigation: false,\n showSocial: false,\n thumbnailView: false,\n aspectRatio: 3 / 2,\n galleryBlur: false\n }\n\n keyboardSubscription: Subscription\n\n scrollSubscription: Subscription\n\n state: State = {\n view: this.props.thumbnailView\n ? DesktopGalleryView.THUMBNAIL\n : DesktopGalleryView.SLIDESHOW\n }\n\n machine = new StateMachine({\n init: this.state.view,\n transitions: [\n {\n name: 'gridView',\n from: DesktopGalleryView.SLIDESHOW,\n to: DesktopGalleryView.GRID\n },\n {\n name: 'slideshowView',\n from: DesktopGalleryView.GRID,\n to: DesktopGalleryView.SLIDESHOW\n }\n ],\n methods: {\n onGridView: () => this.onGridView(),\n onSlideshowView: () => this.onSlideshowView()\n }\n })\n\n focusTarget = React.createRef()\n\n componentDidUpdate(prevProps: DesktopGalleryProps, prevState: State) {\n Logger.logComponentUpdate(prevProps, prevState, this.props, this.state)\n\n const slideChanged = prevProps.slideIndex !== this.props.slideIndex\n const enteredFullscreen = !prevProps.isModalView && this.props.isModalView\n const switchedGridState = prevState.view !== this.state.view // works because thumbnail view cannot be transitioned out of\n\n if (enteredFullscreen || (slideChanged && !switchedGridState)) {\n this.grabFocus()\n this.props.fireAnalytics()\n }\n }\n\n /** Set intial slide from has if needed, and set up event listeners. */\n componentDidMount() {\n if (this.props.useHash && window.location.hash) {\n const hash = window.location.hash.substr(1)\n\n if (hash === 'grid' && this.machine.can('gridView')) {\n this.machine.gridView()\n } else {\n const hashNum = parseInt(hash, 10)\n\n if (\n !isNaN(hashNum) &&\n hashNum >= 1 &&\n hashNum <= this.props.items.length\n ) {\n this.showImage(hashNum - 1)\n } else {\n window.history.replaceState(null, '', `#${this.props.slideIndex + 1}`)\n }\n }\n }\n\n this.keyboardSubscription = fromEvent(document, 'keyup')\n .pipe(\n filter(\n event =>\n // prevent keypresses from affecting all galleries on a page\n event.target === this.focusTarget.current &&\n // Prevent a useless render and analytics call on grid view\n !(\n this.state.view === DesktopGalleryView.GRID &&\n !this.props.isModalView\n ) &&\n // Prevent arrow keys changing inactive galleries\n !(\n this.state.view === DesktopGalleryView.THUMBNAIL &&\n !this.props.isModalView\n )\n )\n )\n .subscribe(this.onKeyPress)\n\n this.onScroll()\n this.scrollSubscription = fromEvent(window, 'scroll')\n .pipe(throttleTime(1000))\n .subscribe(this.onScroll)\n }\n\n /** Unsubscribes from event listeners. */\n componentWillUnmount() {\n this.keyboardSubscription.unsubscribe()\n this.scrollSubscription.unsubscribe()\n }\n\n /** Returns whether the gallery is within the current viewport. */\n componentInViewport() {\n if (!this.focusTarget.current) {\n return false\n }\n const { top } = this.focusTarget.current.getBoundingClientRect()\n\n return top >= 0 && top <= window.innerHeight\n }\n\n /** Grabs focus on scroll if gallery is in viewport and not a single image or thumbnail. */\n onScroll = () => {\n if (\n this.state.view !== DesktopGalleryView.THUMBNAIL &&\n this.props.photos.length > 1 &&\n this.componentInViewport()\n ) {\n this.grabFocus()\n }\n }\n\n /** Focuses the gallery. */\n grabFocus = () => {\n if (this.focusTarget.current) {\n this.focusTarget.current.focus()\n }\n }\n\n /** Shows the image at the specified index. */\n showImage = (nextIndex: number) => {\n this.props.onIndexChange(nextIndex)\n if (this.props.useHash) {\n window.history.replaceState(null, '', `#${nextIndex + 1}`)\n }\n }\n\n /** Shows the next image in the gallery. */\n showNextImage = (event: SyntheticEvent) => {\n if (event) {\n event.preventDefault()\n }\n const nextIndex =\n this.props.slideIndex + 1 < this.props.items.length\n ? this.props.slideIndex + 1\n : 0\n this.showImage(nextIndex)\n }\n\n /** Shows the previous image in the gallery. */\n showPreviousImage = (event: SyntheticEvent) => {\n if (event) {\n event.preventDefault()\n }\n const nextIndex =\n this.props.slideIndex - 1 >= 0\n ? this.props.slideIndex - 1\n : this.props.items.length - 1\n this.showImage(nextIndex)\n }\n\n /** Switches to slideshow view if possible. */\n requestSlideshowView = (event: SyntheticEvent) => {\n if (event) {\n event.preventDefault()\n }\n\n if (this.machine.can('slideshowView')) {\n this.machine.slideshowView()\n }\n }\n\n /** Called when slideshow view is entered. */\n onSlideshowView = () => {\n if (this.props.useHash) {\n window.history.replaceState(null, '', `#${this.props.slideIndex + 1}`)\n }\n\n this.setState({ view: DesktopGalleryView.SLIDESHOW })\n }\n\n /** Switches to grid view if possible. */\n requestGridView = (event: SyntheticEvent) => {\n if (event) {\n event.preventDefault()\n }\n\n if (this.machine.can('gridView')) {\n this.machine.gridView()\n }\n }\n\n /** Called when grid view is entered. */\n onGridView = () => {\n if (this.props.useHash) {\n window.history.replaceState(null, '', '#grid')\n }\n\n this.setState({ view: DesktopGalleryView.GRID })\n }\n\n /** Opens the fullscreen modal view. */\n enterFullscreen = (_event: SyntheticEvent, index?: number) => {\n if (typeof index === 'number') {\n const { disableAds, adStart, adInterval } = this.props\n\n const numAdsBefore = disableAds\n ? 0\n : Math.ceil((index - adStart) / adInterval)\n\n this.showImage(index + numAdsBefore)\n this.props.openModal()\n } else {\n this.props.openModal()\n }\n }\n\n /** Exits the fullscreen modal view. */\n exitFullscreen = () => {\n this.props.closeModal()\n\n if (this.state.view === DesktopGalleryView.GRID && this.props.useHash) {\n window.history.replaceState(null, '', '#grid')\n }\n }\n\n /** Grabs focus, opens modal or advances slide if already in modal view. */\n onImageClick = (event: MouseEvent, index?: number) => {\n if (event) {\n event.preventDefault()\n }\n\n this.grabFocus()\n\n if (this.props.isModalView) {\n this.showNextImage(event)\n } else {\n this.enterFullscreen(event, index)\n }\n }\n\n /** Handles keyboard events. */\n onKeyPress = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft':\n this.showPreviousImage(event)\n break\n case 'ArrowRight':\n this.showNextImage(event)\n break\n case 'Escape':\n this.exitFullscreen()\n break\n }\n }\n\n render() {\n const {\n items,\n photos,\n classes,\n galleryBlur,\n aspectRatio,\n slotString,\n hideNavigation,\n slideIndex,\n viewContext,\n isModalView,\n thumbnailUrl,\n adReadyThreshold\n } = this.props\n const { view } = this.state\n\n const activeItem = items[slideIndex]\n const activeItemIsAd = isGalleryAd(activeItem)\n const hasMultipleImages = photos.length > 1\n\n const isThumbnailView = view === DesktopGalleryView.THUMBNAIL\n const isSlideshowView = view === DesktopGalleryView.SLIDESHOW\n const isGridView = view === DesktopGalleryView.GRID\n const isHomeAd = activeItemIsAd && viewContext === 'home'\n\n const renderNavigationHeader =\n !hideNavigation && !isThumbnailView && hasMultipleImages\n const renderDirectionalNavigation =\n (isModalView || isSlideshowView) && hasMultipleImages\n const renderSlideshow = !isThumbnailView\n const renderCredit =\n isSlideshowView &&\n (activeItem.hasOwnProperty('caption') || activeItemIsAd)\n const renderCaption = isSlideshowView\n\n return (\n \n {width => {\n const height = width / aspectRatio\n const isFullWidthGallery = Math.abs(width - window.innerWidth) < 1\n\n return (\n
\n {/* Section front thumbnail view */}\n {isThumbnailView && (\n \n \n \n \n \n {/* Render ads for modal view */}\n {items.map((item, index) => {\n if (isGalleryAd(item)) {\n const isShowing = index === slideIndex && isModalView\n const isReady =\n Math.abs(slideIndex - index) <= adReadyThreshold\n return (\n \n )\n }\n\n return null\n })}\n
\n )}\n\n {/* Navigation Controls */}\n {renderNavigationHeader && (\n \n )}\n
\n {/* Slideshow View */}\n {renderSlideshow && (\n
\n {items.map((item, index) => {\n if (isGalleryAd(item)) {\n const isActive =\n index === slideIndex && (!isGridView || isModalView)\n return (\n \n \n
\n )\n }\n\n if (isSlideshowView && Math.abs(slideIndex - index) < 2) {\n const isActive = index === slideIndex && !isGridView\n const options = {\n w: Math.floor(aspectRatio * height),\n h: Math.floor(height),\n fit: 'fill',\n fill: galleryBlur ? 'blur' : 'solid',\n 'fill-color': 'e8e8e8'\n }\n\n return (\n \n \n \n \n )\n }\n\n return null\n })}\n
\n )}\n {/* Directional navigation for slideshow and modal views */}\n {renderDirectionalNavigation && (\n \n )}\n \n {/* Caption and Credit */}\n {renderCredit && (\n \n {isHomeAd && 'advertisement'}\n {isGalleryPhoto(activeItem) &&\n (activeItem.author || activeItem.credit) &&\n `${activeItem.author || ''}${\n activeItem.author && activeItem.credit ? ' – ' : ''\n }${activeItem.credit || ''}`}\n \n )}\n {renderCaption && (\n
\n {isGalleryPhoto(activeItem) && activeItem.caption && (\n
\n \n

Gallery: {activeItem.caption}

\n
\n )}\n
\n )}\n {/* Grid View */}\n {isGridView && (\n \n )}\n {/* Fullscreen Modal View */}\n \n \n \n \n {isGalleryPhoto(activeItem) && (\n \n )}\n \n \n )\n }}\n
\n )\n }\n}\n\nexport const StyledDesktopGallery = injectSheet(styles as object)(\n DesktopGallery\n)\n","import React, { PureComponent, Fragment, MouseEvent } from 'react'\nimport injectSheet from 'react-jss'\nimport { ClassNameMap } from '../utils/jss-types'\nimport { VectorIcon } from '../components/VectorIcon'\nimport { constrain } from '../utils'\n\ntype Props = {\n /** Called when previous button pressed */\n onPrev(e: MouseEvent): void\n /** Called when next button pressed */\n onNext(e: MouseEvent): void\n /** Whether to display the navigation for modal view */\n isModalView: boolean\n /** Height of the enclosing view */\n containerHeight: number\n /** Class name map for the component */\n classes: ClassNameMap\n}\n\nclass DirectionalNavigation extends PureComponent {\n static styles = {\n arrow: ({ containerHeight, isModalView }: Props) => {\n const arrowHeight = constrain(Math.ceil(containerHeight * 0.15), 64, 128)\n const arrowWidth = arrowHeight / 2\n const topOffset = Math.floor((containerHeight - arrowHeight) / 2)\n\n return {\n cursor: 'pointer',\n position: isModalView ? 'fixed' : 'absolute',\n zIndex: isModalView ? 9801 : 2,\n top: isModalView ? 'calc(45% - 48px)' : topOffset,\n width: isModalView ? 48 : arrowWidth,\n height: isModalView ? 96 : arrowHeight\n }\n },\n leftArrow: {\n left: ({ isModalView }: Props) => (isModalView ? '3%' : 8)\n },\n rightArrow: {\n right: ({ isModalView }: Props) => (isModalView ? '3%' : 8)\n }\n }\n\n render() {\n const { onPrev, onNext, classes } = this.props\n\n return (\n \n \n \n \n \n \n \n \n )\n }\n}\n\n// tslint:disable-next-line\nexport default injectSheet(DirectionalNavigation.styles as object)(\n DirectionalNavigation\n)\n","import React, { PureComponent, Fragment } from 'react'\n// @ts-ignore\nimport StateMachine from 'javascript-state-machine'\nimport { Platform } from '../utils/platform'\nimport { StyledDesktopGallery } from './DesktopGallery'\nimport { MobileGallery } from './MobileGallery'\nimport { getPhotoAnalyticsUrl } from '../analytics/track-photo'\nimport { TrackingPixel } from '../components/TrackingPixel'\nimport { StribAnalyticsHub } from '../analytics/StribAnalyticsHub'\n\ndeclare global {\n interface Window {\n addUserToOmnitureBeaconParameters(params: object): object\n updateOmnitureBeaconParameter(\n params: object,\n prop: string,\n value: string\n ): object\n }\n}\n\n/** The possible view states of a gallery. */\nenum GalleryViews {\n DEFAULT = 'default',\n MODAL = 'modal'\n}\n\nexport interface GalleryPhoto {\n id?: string\n url: string\n caption: string\n author: string\n credit: string\n altText: string\n}\n\nexport function isGalleryPhoto(item: any): item is GalleryPhoto {\n return item.hasOwnProperty('url')\n}\n\nexport interface GalleryAd {\n adId: string\n adIndex: number\n}\n\nexport function isGalleryAd(item: any): item is GalleryAd {\n return item.hasOwnProperty('adId')\n}\n\nexport interface GalleryAnalytics {\n pageName: string\n channel: string\n server: string\n prop3: string\n prop4: string\n prop5: string\n prop7: string\n prop12: string\n prop15: string\n prop16: string\n prop20: string\n prop24: string\n prop25: string\n prop31: string\n prop33: string\n prop46: string\n prop64: string\n eVar92: string\n}\n\nexport type Props = {\n /** The type of page the gallery is appearing on */\n viewContext:\n | 'home'\n | 'section'\n | 'content'\n | 'content-standalone'\n | 'obituary'\n /** The id of the story the gallerry is / is a part of */\n storyId: string\n /** Whether to disable advertising in the gallery */\n disableAds: boolean\n /** Index to insert the first ad after */\n adStart: number\n /** Interval at which to insert ads */\n adInterval: number\n /** Dart slot string for the ads */\n slotString: string\n /** Photo objects for the gallery */\n photos: GalleryPhoto[]\n /** Analytics values for the gallery */\n analytics: GalleryAnalytics\n /** Analytics base url */\n trackingBeaconUrl: string\n /** Analytics version for the tracking url */\n analyticsVersion: string\n}\n\ntype State = {\n /** The current slide of the gallery */\n index: number\n /** The current view state */\n view: GalleryViews\n /** The updated analytics url to call */\n analyticsUrl: string\n /** The gallery items: photos and ads */\n items: Array\n}\n\n/**\n * Props used by both desktop and mobile galleries.\n * Computed or housed in the common gallery component.\n */\nexport type CommonProps = {\n /** Mixed array of photos and ads */\n items: Array\n /** Current index of the gallery */\n slideIndex: number\n /** Callback for when the slide index has changed */\n onIndexChange(nextIndex: number): void\n /** Calls analyics */\n fireAnalytics(): void\n /** Whether the modal view is active */\n isModalView: boolean\n /** Callaback to open modal view */\n openModal(): void\n /** Callback to close modal view */\n closeModal(): void\n}\n\n/** Container for shared Gallery logic. */\n// tslint:disable-next-line\nexport default class Gallery extends PureComponent {\n static defaultProps: Partial = {\n disableAds: false,\n adStart: 3,\n adInterval: 5\n }\n\n state: State = {\n index: 0,\n view: GalleryViews.DEFAULT,\n analyticsUrl: 'https://apps.startribune.com/circulars/images/blank.gif',\n items: []\n }\n\n /** Manages transitions between view states */\n machine = new StateMachine({\n init: this.state.view,\n transitions: [\n { name: 'modalOpen', from: GalleryViews.DEFAULT, to: GalleryViews.MODAL },\n { name: 'modalClose', from: GalleryViews.MODAL, to: GalleryViews.DEFAULT }\n ],\n methods: {\n onModalOpen: () => this.setState({ view: GalleryViews.MODAL }),\n onModalClose: () => this.setState({ view: GalleryViews.DEFAULT })\n }\n })\n\n /** Compiles the gallery content, which can contain photos or ads. */\n componentDidMount() {\n const photosWithAds = []\n let adsInserted = 0\n for (let i = 0; i < this.props.photos.length; i++) {\n photosWithAds.push(this.props.photos[i])\n\n if (this.shouldRenderAd(i)) {\n photosWithAds.push({\n adId: `gallery`,\n adIndex: adsInserted++\n })\n }\n }\n\n this.setState({ items: photosWithAds })\n }\n\n /** Checks for index changes and fires an optimizely event. */\n componentDidUpdate(_prevProps: Props, prevState: State) {\n if (prevState.index !== this.state.index) {\n this.optimizelyEvent(this.state.index - prevState.index)\n }\n }\n\n /** Called by children to update the active index. */\n handleIndexChange = (index: number) => this.setState({ index })\n\n /** Called by children to open the modal / fullscreen view. */\n requestModalOpen = () => {\n if (this.machine.can('modalOpen')) {\n this.machine.modalOpen()\n }\n }\n\n /** Called by children to close the modal / fullscreen view. */\n requestModalClose = () => {\n if (this.machine.can('modalClose')) {\n this.machine.modalClose()\n }\n }\n\n /**\n * Determines whether an ad should be inserted after an index.\n *\n * @param {number} index - the leading gallery item index\n */\n shouldRenderAd = (index: number) => {\n const { disableAds, adStart, adInterval } = this.props\n if (disableAds) {\n return false\n }\n\n return index === adStart || (index - adStart) % adInterval === 0\n }\n\n /**\n * Called by children to fire an analytics call.\n * Generates a new analytics url and triggers a render, which calls the url.\n */\n trackActiveImage = () => {\n const activeItem = this.state.items[this.state.index]\n\n if (!isGalleryPhoto(activeItem)) return\n\n const analyticsUrl = getPhotoAnalyticsUrl(\n activeItem,\n this.props.analytics,\n this.state.view === GalleryViews.MODAL,\n `${this.props.trackingBeaconUrl}/${this.props.analyticsVersion}`\n )\n this.gaEvent(this.state.index)\n this.setState({ analyticsUrl })\n }\n\n /**\n * Fires an optimizely event based on which direction the user navigated.\n *\n * @param {number} indexDiff - the difference from the previous index to the current index\n */\n optimizelyEvent = (indexDiff: number) => {\n StribAnalyticsHub.trackEvent({\n optimizelyProps: {\n eventName:\n Math.abs(indexDiff) === 1\n ? `gallery_${indexDiff > 0 ? 'next' : 'prev'}_image`\n : 'gallery_different_image'\n }\n })\n }\n\n /**\n * Fires a Google Analytics event for a given index.\n *\n * @param {number} index - the current index\n */\n gaEvent = (index: number) => {\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({\n event: 'photo-gallery',\n galleryType:\n this.state.view === GalleryViews.MODAL\n ? `${this.props.analytics.prop31} Full Screen`\n : this.props.analytics.prop31,\n galleryTitle: decodeURIComponent(this.props.analytics.pageName),\n photoNumber: index + 1\n })\n }\n\n /**\n * Renders the correct gallery variant.\n * Passes member functions as child gallery props.\n */\n render() {\n if (!this.state.items.length) {\n return null\n }\n\n const GalleryComponent = Platform.select({\n desktop: StyledDesktopGallery,\n mobile: MobileGallery\n })\n\n return (\n \n \n \n \n )\n }\n}\n","import React, { Component } from 'react'\nimport styles from './styles'\nimport { GlobalData } from '../ads/GlobalData'\n\ntype Props = {\n /** Ad div ID */\n id: string\n /** Whether the enclosing component is ready to initialize the ad */\n ready: boolean\n /** Index of the ad in the gallery */\n index: number\n /** Dart slot string to use for the ad */\n slotString: string\n /** Eligible sizes for the ad */\n sizes: Array<[number, number]>\n /** Whether to immediately call an ad refresh for the slot */\n refreshSlotOnMount: boolean\n /** Raw style for the ad slot */\n style?: object\n /** Style for the ADVERTISEMENT label */\n slugStyle: object\n /** Whether to hide the ADVERTISEMENT label */\n hideSlug?: boolean\n /** Check if ad is Mobile or not */\n isMobile: boolean\n}\n\ntype State = {\n /** Whether the initialization command has been pushed to the command array */\n pushed: boolean\n}\n\nexport class GalleryAd extends Component {\n state = {\n pushed: false\n }\n\n componentDidMount() {\n if (this.props.ready) {\n this.init()\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!prevProps.ready && this.props.ready && !this.state.pushed) {\n this.init()\n }\n }\n\n init = () => {\n this.setState({ pushed: true })\n }\n\n shouldComponentUpdate(nextProps: Props): boolean {\n const propKeys = Object.keys(nextProps) as Array\n return propKeys\n .map(key => {\n const thisProp = this.props[key]\n const nextProp = nextProps[key]\n switch (key) {\n case 'ready':\n return !thisProp && nextProp // if ad has come into view, update\n case 'index':\n case 'slotString':\n case 'refreshSlotOnMount':\n case 'hideSlug':\n return thisProp !== nextProp\n case 'sizes':\n case 'style':\n case 'slugStyle':\n return JSON.stringify(thisProp) !== JSON.stringify(nextProp)\n case 'isMobile':\n default:\n if (thisProp !== nextProp) {\n return true\n }\n return false\n }\n })\n .some(updateNeeded => !!updateNeeded)\n }\n\n render() {\n const keyValue = { pos: `ig${this.props.index + 1}` }\n const currentIndex = this.lastIndex() + 1\n GlobalData.set('galleryIndex', currentIndex)\n const ad = React.createElement('div', {\n className: this.props.isMobile ? `htlad-mob-gallery` : `htlad-gallery`,\n 'data-targeting': JSON.stringify(keyValue),\n 'data-unit': window.dartSlotString\n })\n return (\n
\n {!this.props.hideSlug && (\n // @ts-ignore\n \n ADVERTISEMENT\n \n )}\n {ad}\n
\n )\n }\n\n lastIndex() {\n return GlobalData.get('galleryIndex') || 0\n }\n}\n","import React, { PureComponent, MouseEvent } from 'react'\n\nimport { GalleryPhoto } from './Gallery'\nimport { imgixUrl } from '../utils/imgix'\nimport { constrain } from '../utils'\n\ntype Props = {\n /** Photos to show in the grid */\n photos: GalleryPhoto[]\n /** Callabck for image click */\n onImageClick(e: MouseEvent, index: number): void\n /** Width of the gallery container in pixels */\n width: number\n /** Whether to pad the sides of the component */\n padded: boolean\n}\n\nexport class GridView extends PureComponent {\n static defaultProps: Partial = {\n photos: []\n }\n\n onPhotoClick = (event: MouseEvent) => {\n const index = event.currentTarget.getAttribute('data-index')\n if (index) {\n this.props.onImageClick(event, parseInt(index, 10))\n }\n }\n\n render() {\n const minImageSize = 165\n const marginSize = 10\n const imagesPerRow = constrain(\n 3,\n Math.floor(this.props.width / minImageSize),\n 5\n )\n const widthNoMargins =\n this.props.width -\n marginSize * (imagesPerRow - 1) -\n (this.props.padded ? 2 * marginSize : 0)\n const imageSize = widthNoMargins / imagesPerRow\n const numRows = Math.ceil(this.props.photos.length / imagesPerRow)\n\n const rows = []\n\n for (let i = 0; i < numRows; i++) {\n rows.push(\n this.props.photos.slice(\n i * imagesPerRow,\n i * imagesPerRow + imagesPerRow\n )\n )\n }\n\n return (\n \n {rows.map((row, rowIndex) => (\n \n {row.map((photo, photoIndex) => (\n \n ))}\n \n ))}\n \n )\n }\n}\n","import React, { PureComponent } from 'react'\nimport ReactDOM from 'react-dom'\n\nimport { GalleryAd } from './GalleryAd'\nimport { Props as GalleryProps, isGalleryAd, CommonProps } from './Gallery'\nimport { imgixUrl } from '../utils/imgix'\n\ndeclare global {\n interface JQuery {\n swipebox(options: object): JQuery\n }\n}\n\n/** Props specific to the mobile gallery */\ntype Props = {\n /** Whether to display the caption */\n showCaption: boolean\n /** Data attribute map for the gallery */\n dataAttributes?: string\n /** Title of the gallery to display */\n shareTitle?: string\n}\n\ntype State = {\n adsRendered: number\n}\n\nexport class MobileGallery extends PureComponent<\n GalleryProps & CommonProps & Props,\n State\n> {\n state: State = { adsRendered: 0 }\n\n componentDidMount() {\n $(document).ready(this.initSwipebox)\n }\n\n initSwipebox = () => {\n $(`.article-${this.props.storyId} .swipebox-react`).swipebox({\n removeBarsOnMobile: false,\n closeBySwipe: true,\n loopAtEnd: true,\n beforeOpen: this.props.openModal,\n afterOpen: this.onModalOpened,\n afterClose: this.props.closeModal,\n initialIndexOnArray: this.props.slideIndex,\n prevSlide: (index: number) => {\n this.props.onIndexChange(index)\n this.props.fireAnalytics()\n },\n nextSlide: (index: number) => {\n this.props.onIndexChange(index)\n this.props.fireAnalytics()\n },\n afterMedia: (index: number) => {\n const item = this.props.items[index]\n if (isGalleryAd(item)) {\n const inlineContainer = document\n .getElementsByClassName('swipebox-inline-container')\n .item(item.adIndex)\n\n if (inlineContainer) {\n ReactDOM.render(\n ,\n inlineContainer\n )\n this.setState({ adsRendered: this.state.adsRendered + 1 })\n }\n }\n }\n })\n }\n\n onModalOpened = () => {\n this.props.fireAnalytics()\n if (this.props.photos.length > 1) {\n $('#swipebox-prev')\n .detach()\n .css({\n position: 'absolute',\n top: 'calc(50% - 25px)',\n left: 0\n })\n .appendTo('#swipebox-container')\n $('#swipebox-next')\n .detach()\n .css({\n position: 'absolute',\n top: 'calc(50% - 25px)',\n right: 0\n })\n .appendTo('#swipebox-container')\n }\n\n $('#swipebox-title')\n .detach()\n .css({\n position: 'absolute',\n bottom: 0,\n color: '#ffffff',\n padding: '10px',\n fontFamily:\n '\"OpenSans-regular\",\"Helvetica Neue\",Arial,Helvetica,sans-serif',\n lineHeight: 4 / 3,\n fontSize: '0.75rem',\n textAlign: 'left'\n })\n .appendTo('#swipebox-container')\n\n $('#swipebox-bottom-bar, #swipebox-top-bar').remove()\n }\n\n render() {\n const { storyId, showCaption, shareTitle, dataAttributes } = this.props\n\n const dataProps: { [attr: string]: string } = {}\n if (dataAttributes) {\n dataAttributes\n .split(' data-')\n .filter(attr => attr.length)\n .map(attr => {\n const kv = attr.split('=')\n dataProps[`data-${kv[0].toLowerCase()}`] = kv[1].substring(\n 1,\n kv[1].length - 1\n )\n })\n }\n\n return (\n \n {this.props.items.map((item, index) => {\n if (isGalleryAd(item)) {\n return (\n 0 ? 'hidden' : ''}`}\n >\n \n \n )\n }\n return (\n 0 ? 'hidden' : ''\n }`}\n >\n \n \n\n \n )\n })}\n {shareTitle && (\n
\n Photo Gallery - {shareTitle}\n
\n )}\n \n )\n }\n}\n","import React, { PureComponent, MouseEvent } from 'react'\nimport injectSheet from 'react-jss'\nimport { ClassNameMap } from '../utils/jss-types'\nimport { ImgixImage } from '../components/ImgixImage'\nimport { GalleryPhoto } from './Gallery'\n\ntype Props = {\n photo: GalleryPhoto\n /** Called on image click */\n onClick?(e: MouseEvent): void\n /** Current gallery index */\n index?: number\n /** Total number of items in the gallery */\n total?: number\n /** Class name map for the component */\n classes: ClassNameMap\n}\n\nclass ModalImage extends PureComponent {\n static styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n imageContainer: {\n backgroundColor: 'rgb(17,17,17)',\n flexGrow: 1,\n height: '100%',\n minHeight: 200\n },\n infoContainer: {\n padding: '15px'\n },\n bylineCounterContainer: {\n display: 'flex',\n flexDirection: 'horizontal',\n justifyContent: 'space-between'\n },\n modalText: {\n color: '#e8e8e8',\n fontFamily: '\"Benton Sans\", Helvetica, Arial, sans-serif',\n textAlign: 'left',\n lineHeight: 1.3\n },\n byline: {\n marginBottom: 12,\n fontSize: 9,\n textAlign: 'right',\n textTransform: 'uppercase',\n letterSpacing: 0.5\n },\n counter: {\n fontWeight: 'bold'\n },\n caption: {\n fontSize: 12\n }\n }\n\n render() {\n const { photo, onClick, index, total, classes } = this.props\n\n const { url, author, credit, altText, caption } = photo\n\n return (\n
\n \n
\n
\n
\n {total && index && total > 1 ? `${index + 1} / ${total}` : ' '}\n
\n

\n {author}\n {author && credit ? ' – ' : ''}\n {credit}\n

\n
\n

\n {caption}\n

\n
\n
\n )\n }\n}\n// tslint:disable-next-line\nexport default injectSheet(ModalImage.styles as object)(ModalImage)\n","import React, { PureComponent, MouseEvent } from 'react'\nimport injectSheet from 'react-jss'\nimport { ClassNameMap } from '../utils/jss-types'\nimport { VectorIcon } from '../components/VectorIcon'\n\ntype Props = {\n /** Whether grid view is enabled */\n isGridView: boolean\n /** Called on slideshow icon click */\n onSlideshowClick(e: MouseEvent): void\n /** Called on grid icon click */\n onGridClick(e: MouseEvent): void\n /** Called on prev button click */\n onPrevClick(e: MouseEvent): void\n /** Called on next button click */\n onNextClick(e: MouseEvent): void\n /** The current gallery index */\n currentIndex: number\n /** The total number of gallery items */\n numItems: number\n /** Whether to pad the sides of the component */\n padded: boolean\n /** Class name map for the component */\n classes: ClassNameMap\n}\n\n/** Renders navigation controls for slideshow and grid views. */\nclass NavigationHeader extends PureComponent {\n static styles = {\n container: ({ padded }: Props) => ({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingBottom: 5,\n paddingLeft: padded ? 10 : 0,\n paddingRight: padded ? 10 : 0\n }),\n viewOption: {\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 8\n },\n viewLabel: {\n fontFamily:\n '\"Benton Sans Condensed Medium\", Helvetica, Arial, sans-serif',\n fontSize: 10,\n fontWeight: 'bold',\n letterSpacing: 0.5,\n textDecoration: 'none',\n textTransform: 'uppercase',\n marginLeft: 4,\n paddingTop: 2\n },\n slideshowOption: {\n opacity: ({ isGridView }: Props) => (isGridView ? 0.3 : 1)\n },\n gridOption: {\n opacity: ({ isGridView }: Props) => (isGridView ? 1 : 0.3)\n },\n icon: {\n width: 18,\n height: 18\n },\n navigationControls: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n nextPrevLabel: {\n fontFamily: '\"Benton Sans\", Helvetica, Arial, sans-serif',\n fontSize: 10,\n fontWeight: 'bold',\n letterSpacing: 0.5,\n textDecoration: 'none',\n textTransform: 'uppercase',\n marginLeft: 4,\n marginRight: 4\n }\n }\n\n render() {\n const {\n isGridView,\n onSlideshowClick,\n onGridClick,\n onPrevClick,\n onNextClick,\n currentIndex,\n numItems,\n classes\n } = this.props\n\n return (\n
\n
\n \n \n Gallery\n \n \n \n Grid\n \n
\n {!isGridView && (\n
\n \n \n \n {`${currentIndex +\n 1}/${numItems}`}\n \n \n \n
\n )}\n
\n )\n }\n}\n\n// tslint:disable-next-line\nexport default injectSheet(NavigationHeader.styles as object)(NavigationHeader)\n","import { Props } from './Gallery'\n\n// tslint:disable-next-line\nexport default {\n adContainer: {\n position: 'absolute',\n margin: 'auto',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n width: '300px',\n height: '250px'\n },\n fullscreenAdContainer: {\n position: 'fixed',\n top: 'calc(45% - 125px)',\n left: 'calc(50% - 150px)',\n zIndex: 2222\n },\n captionIcon: {\n float: 'left',\n width: 18,\n height: 18,\n marginRight: 6,\n marginTop: ({ viewContext }: Props) =>\n viewContext === 'content-standalone' ? '3px' : '-1px'\n },\n photoCredit: {\n marginTop: '5px',\n display: 'block',\n color: '#666',\n textTransform: 'uppercase',\n fontSize: '.65385em',\n fontFamily: '\"Benton Sans\",Helvetica,Arial,sans-serif',\n letterSpacing: '1px',\n marginBottom: '4px',\n textAlign: 'right'\n },\n photoCaption: ({ viewContext }: Props) => {\n const base = {\n fontSize: '12px',\n lineHeight: '17px',\n display: 'block',\n fontFamily: '\"Benton Sans\",Helvetica,Arial,sans-serif',\n color: '#646464',\n marginBottom: '16px'\n }\n\n if (viewContext === 'content-standalone') {\n return Object.assign({}, base, {\n color: '#222',\n fontFamily: '\"Poynter Serif RE\", Georgia, Times, serif',\n fontSize: '15px',\n lineHeight: '23px',\n marginBottom: '5px',\n letterSpacing: '-0.3px'\n })\n }\n\n if (viewContext === 'home') {\n return Object.assign({}, base, {\n maxHeight: '50px',\n overflow: 'hidden'\n })\n }\n\n return base\n },\n modalOverlay: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: 'rgba(0,0,0,0.85)',\n zIndex: 9800,\n padding: '4% 12% 10%',\n cursor: 'zoom-out'\n },\n modalContent: {\n position: 'relative',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: 9801,\n display: 'block',\n width: '100%',\n height: '100%',\n maxHeight: '90%',\n border: 'none',\n borderRadius: 0,\n backgroundColor: '#000000',\n padding: 0,\n boxShadow: '0 4px 8px rgba(0,0,0,0.6)',\n cursor: 'pointer'\n },\n adSlug: {\n position: 'absolute',\n top: '-16px',\n lineHeight: '16px',\n fontSize: '13px',\n left: 0,\n width: '100%',\n textAlign: 'center'\n },\n expandIcon: {\n cursor: 'zoom-in',\n pointerEvents: 'none',\n width: 20,\n height: 20,\n position: 'absolute',\n zIndex: 1,\n bottom: 8,\n right: 8\n },\n modalClose: {\n position: 'fixed',\n top: 30,\n right: 40,\n borderRadius: '50%',\n outline: 'none',\n borderWidth: 0,\n width: 30,\n height: 30,\n backgroundColor: 'white',\n fontSize: 30,\n color: '#222',\n textAlign: 'center',\n lineHeight: 35,\n padding: 0\n },\n modalCloseIcon: {\n width: 12,\n height: 12,\n marginLeft: 9\n },\n expandable: {\n cursor: 'zoom-in'\n },\n adSlide: {\n backgroundColor: '#e8e8e8',\n height: '100%'\n }\n}\n"],"sourceRoot":""}