PageSourceSearch

https://lifespan.io/wp-login.php

html lifespan.io collected 2026-10-02 04:58:24 UTC 35,649 bytes, 951 lines download raw bytes

1<!DOCTYPE html>
2	<html dir="ltr" lang="en-US" prefix="og: https://ogp.me/ns#">
3	<head>
4	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5	<title>Log In &lsaquo; Lifespan Research Institute &#8212; WordPress</title>
6	    <style type="text/css">
7        body #login h1 a, body.login h1 a {
8            width: 300px;
9            margin: auto !important;
10            height: 115px;
11            background: url("/wp-content/uploads/2020/09/lifespan-logo-2020-md.png") no-repeat !important;
12            background-size: 300px auto !important;
13        }
14    </style>
15<meta name='robots' content='max-image-preview:large, noindex, noarchive' />
16<script type="text/javascript">
17            window._nslDOMReady = (function () {
18                const executedCallbacks = new Set();
19            
20                return function (callback) {
21                    /**
22                    * Third parties might dispatch DOMContentLoaded events, so we need to ensure that we only run our callback once!
23                    */
24                    if (executedCallbacks.has(callback)) return;
25            
26                    const wrappedCallback = function () {
27                        if (executedCallbacks.has(callback)) return;
28                        executedCallbacks.add(callback);
29                        callback();
30                    };
31            
32                    if (document.readyState === "complete" || document.readyState === "interactive") {
33                        wrappedCallback();
34                    } else {
35                        document.addEventListener("DOMContentLoaded", wrappedCallback);
36                    }
37                };
38            })();
39        </script>
39<link rel='stylesheet' id='formidable-css' href='https://lifespan.io/wp-content/plugins/formidable/css/formidableforms.css?ver=9181346' type='text/css' media='all' />
40<link rel='stylesheet' id='dashicons-css' href='https://lifespan.io/wp-includes/css/dashicons.min.css?ver=6.9' type='text/css' media='all' />
41<link rel='stylesheet' id='buttons-css' href='https://lifespan.io/wp-includes/css/buttons.min.css?ver=6.9' type='text/css' media='all' />
42<link rel='stylesheet' id='forms-css' href='https://lifespan.io/wp-admin/css/forms.min.css?ver=6.9' type='text/css' media='all' />
43<link rel='stylesheet' id='l10n-css' href='https://lifespan.io/wp-admin/css/l10n.min.css?ver=6.9' type='text/css' media='all' />
44<link rel='stylesheet' id='login-css' href='https://lifespan.io/wp-admin/css/login.min.css?ver=6.9' type='text/css' media='all' />
45				<style type="text/css">�					#login h1 a {�						background-image: url("/wp-content/uploads/2014/06/[email protected]");�						margin: 0 0 0 8px;�						width: 500px;
46						height: 160px;
47						background-size: 500px 160px;
48					}�				</style>�				
49<style type="text/css">
50#login h1 a {
51	background-size: 260px auto!important;
52	width: 260px;
53	margin: auto!important;
54	height: 115px;
55}
56</style>	<meta name='referrer' content='strict-origin-when-cross-origin' />
57		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
58	<link rel="icon" href="https://lifespan.io/wp-content/uploads/2025/11/cropped-LRI_Square-32x32.webp" sizes="32x32" />
59<link rel="icon" href="https://lifespan.io/wp-content/uploads/2025/11/cropped-LRI_Square-192x192.webp" sizes="192x192" />
60<link rel="apple-touch-icon" href="https://lifespan.io/wp-content/uploads/2025/11/cropped-LRI_Square-180x180.webp" />
61<meta name="msapplication-TileImage" content="https://lifespan.io/wp-content/uploads/2025/11/cropped-LRI_Square-270x270.webp" />
62<style type="text/css">div.nsl-container[data-align="left"] {
63    text-align: left;
64}
65
66div.nsl-container[data-align="center"] {
67    text-align: center;
68}
69
70div.nsl-container[data-align="right"] {
71    text-align: right;
72}
73
74
75div.nsl-container div.nsl-container-buttons a[data-plugin="nsl"] {
76    text-decoration: none;
77    box-shadow: none;
78    border: 0;
79}
80
81div.nsl-container .nsl-container-buttons {
82    display: flex;
83    padding: 5px 0;
84}
85
86div.nsl-container.nsl-container-block .nsl-container-buttons {
87    display: inline-grid;
88    grid-template-columns: minmax(145px, auto);
89}
90
91div.nsl-container-block-fullwidth .nsl-container-buttons {
92    flex-flow: column;
93    align-items: center;
94}
95
96div.nsl-container-block-fullwidth .nsl-container-buttons a,
97div.nsl-container-block .nsl-container-buttons a {
98    flex: 1 1 auto;
99    display: block;
100    margin: 5px 0;
101    width: 100%;
102}
103
104div.nsl-container-inline {
105    margin: -5px;
106    text-align: left;
107}
108
109div.nsl-container-inline .nsl-container-buttons {
110    justify-content: center;
111    flex-wrap: wrap;
112}
113
114div.nsl-container-inline .nsl-container-buttons a {
115    margin: 5px;
116    display: inline-block;
117}
118
119div.nsl-container-grid .nsl-container-buttons {
120    flex-flow: row;
121    align-items: center;
122    flex-wrap: wrap;
123}
124
125div.nsl-container-grid .nsl-container-buttons a {
126    flex: 1 1 auto;
127    display: block;
128    margin: 5px;
129    max-width: 280px;
130    width: 100%;
131}
132
133@media only screen and (min-width: 650px) {
134    div.nsl-container-grid .nsl-container-buttons a {
135        width: auto;
136    }
137}
138
139div.nsl-container .nsl-button {
140    cursor: pointer;
141    vertical-align: top;
142    border-radius: 4px;
143}
144
145div.nsl-container .nsl-button-default {
146    color: #fff;
147    display: flex;
148}
149
150div.nsl-container .nsl-button-icon {
151    display: inline-block;
152}
153
154div.nsl-container .nsl-button-svg-container {
155    flex: 0 0 auto;
156    padding: 8px;
157    display: flex;
158    align-items: center;
159}
160
161div.nsl-container svg {
162    height: 24px;
163    width: 24px;
164    vertical-align: top;
165}
166
167div.nsl-container .nsl-button-default div.nsl-button-label-container {
168    margin: 0 24px 0 12px;
169    padding: 10px 0;
170    font-family: Helvetica, Arial, sans-serif;
171    font-size: 16px;
172    line-height: 20px;
173    letter-spacing: .25px;
174    overflow: hidden;
175    text-align: center;
176    text-overflow: clip;
177    white-space: nowrap;
178    flex: 1 1 auto;
179    -webkit-font-smoothing: antialiased;
180    -moz-osx-font-smoothing: grayscale;
181    text-transform: none;
182    display: inline-block;
183}
184
185div.nsl-container .nsl-button-google[data-skin="light"] {
186    box-shadow: inset 0 0 0 1px #747775;
187    color: #1f1f1f;
188}
189
190div.nsl-container .nsl-button-google[data-skin="dark"] {
191    box-shadow: inset 0 0 0 1px #8E918F;
192    color: #E3E3E3;
193}
194
195div.nsl-container .nsl-button-google[data-skin="neutral"] {
196    color: #1F1F1F;
197}
198
199div.nsl-container .nsl-button-google div.nsl-button-label-container {
200    font-family: "Roboto Medium", Roboto, Helvetica, Arial, sans-serif;
201}
202
203div.nsl-container .nsl-button-apple .nsl-button-svg-container {
204    padding: 0 6px;
205}
206
207div.nsl-container .nsl-button-apple .nsl-button-svg-container svg {
208    height: 40px;
209    width: auto;
210}
211
212div.nsl-container .nsl-button-apple[data-skin="light"] {
213    color: #000;
214    box-shadow: 0 0 0 1px #000;
215}
216
217div.nsl-container .nsl-button-facebook[data-skin="white"] {
218    color: #000;
219    box-shadow: inset 0 0 0 1px #000;
220}
221
222div.nsl-container .nsl-button-facebook[data-skin="light"] {
223    color: #1877F2;
224    box-shadow: inset 0 0 0 1px #1877F2;
225}
226
227div.nsl-container .nsl-button-spotify[data-skin="white"] {
228    color: #191414;
229    box-shadow: inset 0 0 0 1px #191414;
230}
231
232div.nsl-container .nsl-button-apple div.nsl-button-label-container {
233    font-size: 17px;
234    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
235}
236
237div.nsl-container .nsl-button-slack div.nsl-button-label-container {
238    font-size: 17px;
239    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
240}
241
242div.nsl-container .nsl-button-slack[data-skin="light"] {
243    color: #000000;
244    box-shadow: inset 0 0 0 1px #DDDDDD;
245}
246
247div.nsl-container .nsl-button-tiktok[data-skin="light"] {
248    color: #161823;
249    box-shadow: 0 0 0 1px rgba(22, 24, 35, 0.12);
250}
251
252
253div.nsl-container .nsl-button-kakao {
254    color: rgba(0, 0, 0, 0.85);
255}
256
257.nsl-clear {
258    clear: both;
259}
260
261.nsl-container {
262    clear: both;
263}
264
265.nsl-disabled-provider .nsl-button {
266    filter: grayscale(1);
267    opacity: 0.8;
268}
269
270/*Button align start*/
271
272div.nsl-container-inline[data-align="left"] .nsl-container-buttons {
273    justify-content: flex-start;
274}
275
276div.nsl-container-inline[data-align="center"] .nsl-container-buttons {
277    justify-content: center;
278}
279
280div.nsl-container-inline[data-align="right"] .nsl-container-buttons {
281    justify-content: flex-end;
282}
283
284
285div.nsl-container-grid[data-align="left"] .nsl-container-buttons {
286    justify-content: flex-start;
287}
288
289div.nsl-container-grid[data-align="center"] .nsl-container-buttons {
290    justify-content: center;
291}
292
293div.nsl-container-grid[data-align="right"] .nsl-container-buttons {
294    justify-content: flex-end;
295}
296
297div.nsl-container-grid[data-align="space-around"] .nsl-container-buttons {
298    justify-content: space-around;
299}
300
301div.nsl-container-grid[data-align="space-between"] .nsl-container-buttons {
302    justify-content: space-between;
303}
304
305/* Button align end*/
306
307/* Redirect */
308
309#nsl-redirect-overlay {
310    display: flex;
311    flex-direction: column;
312    justify-content: center;
313    align-items: center;
314    position: fixed;
315    z-index: 1000000;
316    left: 0;
317    top: 0;
318    width: 100%;
319    height: 100%;
320    backdrop-filter: blur(1px);
321    background-color: RGBA(0, 0, 0, .32);;
322}
323
324#nsl-redirect-overlay-container {
325    display: flex;
326    flex-direction: column;
327    justify-content: center;
328    align-items: center;
329    background-color: white;
330    padding: 30px;
331    border-radius: 10px;
332}
333
334#nsl-redirect-overlay-spinner {
335    content: '';
336    display: block;
337    margin: 20px;
338    border: 9px solid RGBA(0, 0, 0, .6);
339    border-top: 9px solid #fff;
340    border-radius: 50%;
341    box-shadow: inset 0 0 0 1px RGBA(0, 0, 0, .6), 0 0 0 1px RGBA(0, 0, 0, .6);
342    width: 40px;
343    height: 40px;
344    animation: nsl-loader-spin 2s linear infinite;
345}
346
347@keyframes nsl-loader-spin {
348    0% {
349        transform: rotate(0deg)
350    }
351    to {
352        transform: rotate(360deg)
353    }
354}
355
356#nsl-redirect-overlay-title {
357    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
358    font-size: 18px;
359    font-weight: bold;
360    color: #3C434A;
361}
362
363#nsl-redirect-overlay-text {
364    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
365    text-align: center;
366    font-size: 14px;
367    color: #3C434A;
368}
369
370/* Redirect END*/</style><style type="text/css">/* Notice fallback */
371#nsl-notices-fallback {
372    position: fixed;
373    right: 10px;
374    top: 10px;
375    z-index: 10000;
376}
377
378.admin-bar #nsl-notices-fallback {
379    top: 42px;
380}
381
382#nsl-notices-fallback > div {
383    position: relative;
384    background: #fff;
385    border-left: 4px solid #fff;
386    box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
387    margin: 5px 15px 2px;
388    padding: 1px 20px;
389}
390
391#nsl-notices-fallback > div.error {
392    display: block;
393    border-left-color: #dc3232;
394}
395
396#nsl-notices-fallback > div.updated {
397    display: block;
398    border-left-color: #46b450;
399}
400
401#nsl-notices-fallback p {
402    margin: .5em 0;
403    padding: 2px;
404}
405
406#nsl-notices-fallback > div:after {
407    position: absolute;
408    right: 5px;
409    top: 5px;
410    content: '\00d7';
411    display: block;
412    height: 16px;
413    width: 16px;
414    line-height: 16px;
415    text-align: center;
416    font-size: 20px;
417    cursor: pointer;
418}</style>	</head>
419	<body class="login no-js login-action-login wp-core-ui  locale-en-us">
420	
420<script type="text/javascript">
421/* <![CDATA[ */
422document.body.className = document.body.className.replace('no-js','js');
423/* ]]> */
424</script>
424
425
426				<h1 class="screen-reader-text">Log In</h1>
427			<div id="login">
428		<h1 role="presentation" class="wp-login-logo"><a href="https://lifespan.io">Lifespan Research Institute</a></h1>
429	
430		<form name="loginform" id="loginform" action="https://lifespan.io/wp-login.php" method="post">
431			<p>
432				<label for="user_login">Username or Email Address</label>
433				<input type="text" name="log" id="user_login" class="input" value="" size="20" autocapitalize="off" autocomplete="username" required="required" />
434			</p>
435
436			<div class="user-pass-wrap">
437				<label for="user_pass">Password</label>
438				<div class="wp-pwd">
439					<input type="password" name="pwd" id="user_pass" class="input password-input" value="" size="20" autocomplete="current-password" spellcheck="false" required="required" />
440					<button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="Show password">
441						<span class="dashicons dashicons-visibility" aria-hidden="true"></span>
442					</button>
443				</div>
444			</div>
445			<div id="nsl-custom-login-form-main"><div class="nsl-container nsl-container-block" data-align="left"><div class="nsl-container-buttons"><a href="https://lifespan.io/wp-login.php?loginSocial=facebook" rel="nofollow" aria-label="Continue with &lt;b&gt;Facebook&lt;/b&gt;" data-plugin="nsl" data-action="connect" data-provider="facebook" data-popupwidth="600" data-popupheight="679" data-e-disable-page-transition="1"><div class="nsl-button nsl-button-default nsl-button-facebook" data-skin="dark" style="background-color:#1877F2;"><div class="nsl-button-svg-container"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1365.3 1365.3" height="24" width="24"><path d="M1365.3 682.7A682.7 682.7 0 10576 1357V880H402.7V682.7H576V532.3c0-171.1 102-265.6 257.9-265.6 74.6 0 152.8 13.3 152.8 13.3v168h-86.1c-84.8 0-111.3 52.6-111.3 106.6v128h189.4L948.4 880h-159v477a682.8 682.8 0 00576-674.3" fill="#fff"/></svg></div><div class="nsl-button-label-container">Continue with <b>Facebook</b></div></div></a><a href="https://lifespan.io/wp-login.php?loginSocial=twitter" rel="nofollow" aria-label="Continue with &lt;b&gt;Twitter&lt;/b&gt;" data-plugin="nsl" data-action="connect" data-provider="twitter" data-popupwidth="600" data-popupheight="600" data-e-disable-page-transition="1"><div class="nsl-button nsl-button-default nsl-button-twitter" data-skin="x" style="background-color:#000000;"><div class="nsl-button-svg-container"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13.712 10.622 20.413 3h-1.587l-5.819 6.618L8.36 3H3l7.027 10.007L3 21h1.588l6.144-6.989L15.64 21H21l-7.288-10.378Zm-2.175 2.474-.712-.997L5.16 4.17H7.6l4.571 6.4.712.996 5.943 8.319h-2.439l-4.85-6.788Z" fill="#fff"/><defs><path fill="#fff" d="M0 0h24v24H0z"/></defs></svg></div><div class="nsl-button-label-container">Continue with <b>Twitter</b></div></div></a></div></div></div>
445<script type="text/javascript">
446    window._nslDOMReady(function () {
447        var container = document.getElementById('nsl-custom-login-form-main'),
448            form = document.querySelector('#loginform,#registerform,#front-login-form,#setupform');
449
450        if (!form) {
451            form = container.closest('form');
452            if (!form) {
453                form = container.parentNode;
454            }
455        }
456
457        var innerContainer = container.querySelector('.nsl-container');
458        if (innerContainer) {
459            innerContainer.classList.add('nsl-container-login-layout-below');
460            innerContainer.style.display = 'block';
461        }
462
463        var jetpackSSO = document.getElementById('jetpack-sso-wrap');
464        if (jetpackSSO) {
465            form = jetpackSSO;
466        } else {
467            if (form.parentNode.classList.contains('tml')) {
468                form = form.parentNode;
469            }
470        }
471
472        form.appendChild(container);
473
474    });
475</script>
475
476<style type="text/css">
477    #nsl-custom-login-form-main .nsl-container {
478        display: none;
479    }
480
481    #nsl-custom-login-form-main .nsl-container-login-layout-below {
482        clear: both;
483        padding: 20px 0 0;
484    }
485
486    .login form {
487        padding-bottom: 20px;
488    }
489
490    #nsl-custom-login-form-jetpack-sso .nsl-container-login-layout-below {
491        clear: both;
492        padding: 0 0 20px;
493    }
494</style>			<p class="forgetmenot"><input name="rememberme" type="checkbox" id="rememberme" value="forever"  /> <label for="rememberme">Remember Me</label></p>
495			<p class="submit">
496				<input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="Log In" />
497									<input type="hidden" name="redirect_to" value="https://lifespan.io/wp-admin/" />
498									<input type="hidden" name="testcookie" value="1" />
499			</p>
500		</form>
501
502					<p id="nav">
503				<a class="wp-login-register" href="https://lifespan.io/wp-login.php?action=register">Register</a> | <a class="wp-login-lost-password" href="https://lifespan.io/reset-password/">Lost your password?</a>			</p>
504			
504<script type="text/javascript">
505/* <![CDATA[ */
506function wp_attempt_focus() {setTimeout( function() {try {d = document.getElementById( "user_login" );d.focus(); d.select();} catch( er ) {}}, 200);}
507wp_attempt_focus();
508if ( typeof wpOnload === 'function' ) { wpOnload() }
509/* ]]> */
510</script>
510
511		<p id="backtoblog">
512			<a href="https://lifespan.io/">&larr; Go to Lifespan Research Institute</a>		</p>
513			</div>
514		
515	
515<script type="text/javascript" src="https://lifespan.io/wp-includes/js/clipboard.min.js?ver=2.0.11" id="clipboard-js"></script>
vendor: 1 bytes, line 515
515
516<script type="text/javascript" src="https://lifespan.io/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 516
516
517<script type="text/javascript" src="https://lifespan.io/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
vendor: 1 bytes, line 517
517
518<script type="text/javascript" id="zxcvbn-async-js-extra">
519/* <![CDATA[ */
520var _zxcvbnSettings = {"src":"https://lifespan.io/wp-includes/js/zxcvbn.min.js"};
521//# sourceURL=zxcvbn-async-js-extra
522/* ]]> */
523</script>
vendor: 1 bytes, line 523
523
524<script type="text/javascript" src="https://lifespan.io/wp-includes/js/zxcvbn-async.min.js?ver=1.0" id="zxcvbn-async-js"></script>
vendor: 1 bytes, line 524
524
525<script type="text/javascript" src="https://lifespan.io/wp-includes/js/dist/hooks.min.js?ver=dd5603f07f9220ed27f1" id="wp-hooks-js"></script>
vendor: 1 bytes, line 525
525
526<script type="text/javascript" src="https://lifespan.io/wp-includes/js/dist/i18n.min.js?ver=c26c3dc7bed366793375" id="wp-i18n-js"></script>
vendor: 1 bytes, line 526
526
527<script type="text/javascript" id="wp-i18n-js-after">
528/* <![CDATA[ */
529wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
530//# sourceURL=wp-i18n-js-after
531/* ]]> */
532</script>
vendor: 1 bytes, line 532
532
533<script type="text/javascript" id="password-strength-meter-js-extra">
534/* <![CDATA[ */
535var pwsL10n = {"unknown":"Password strength unknown","short":"Very weak","bad":"Weak","good":"Medium","strong":"Strong","mismatch":"Mismatch"};
536//# sourceURL=password-strength-meter-js-extra
537/* ]]> */
538</script>
vendor: 1 bytes, line 538
538
539<script type="text/javascript" src="https://lifespan.io/wp-admin/js/password-strength-meter.min.js?ver=6.9" id="password-strength-meter-js"></script>
vendor: 1 bytes, line 539
539
540<script src='https://lifespan.io/wp-content/plugins/event-tickets/common/build/js/underscore-before.js'></script>
vendor: 1 bytes, line 540
540
541<script type="text/javascript" src="https://lifespan.io/wp-includes/js/underscore.min.js?ver=1.13.7" id="underscore-js"></script>
vendor: 1 bytes, line 541
541
542<script src='https://lifespan.io/wp-content/plugins/event-tickets/common/build/js/underscore-after.js'></script>
vendor: 1 bytes, line 542
542
543<script type="text/javascript" id="wp-util-js-extra">
544/* <![CDATA[ */
545var _wpUtilSettings = {"ajax":{"url":"/wp-admin/admin-ajax.php"}};
546//# sourceURL=wp-util-js-extra
547/* ]]> */
548</script>
vendor: 1 bytes, line 548
548
549<script type="text/javascript" src="https://lifespan.io/wp-includes/js/wp-util.min.js?ver=6.9" id="wp-util-js"></script>
vendor: 1 bytes, line 549
549
550<script type="text/javascript" src="https://lifespan.io/wp-includes/js/dist/dom-ready.min.js?ver=f77871ff7694fffea381" id="wp-dom-ready-js"></script>
vendor: 1 bytes, line 550
550
551<script type="text/javascript" src="https://lifespan.io/wp-includes/js/dist/a11y.min.js?ver=cb460b4676c94bd228ed" id="wp-a11y-js"></script>
vendor: 1 bytes, line 551
551
552<script type="text/javascript" id="user-profile-js-extra">
553/* <![CDATA[ */
554var userProfileL10n = {"user_id":"0","nonce":"0bfe360d3b"};
555//# sourceURL=user-profile-js-extra
556/* ]]> */
557</script>
vendor: 1 bytes, line 557
557
558<script type="text/javascript" src="https://lifespan.io/wp-admin/js/user-profile.min.js?ver=6.9" id="user-profile-js"></script>
vendor: 1 bytes, line 558
558
559<script type="text/javascript">(function (undefined) {let scriptOptions={"_localizedStrings":{"redirect_overlay_title":"Hold On","redirect_overlay_text":"You are being redirected to another page,<br>it may take a few seconds.","webview_notification_text":"The selected provider doesn't support embedded browsers!"},"_targetWindow":"prefer-popup","_redirectOverlay":"overlay-with-spinner-and-message","_unsupportedWebviewBehavior":""};
560/**
561 * Used when Cross-Origin-Opener-Policy blocked the access to the opener. We can't have a reference of the opened windows, so we should attempt to refresh only the windows that has opened popups.
562 */
563window._nslHasOpenedPopup = false;
564window._nslWebViewNoticeElement = null;
565
566window.NSLPopup = function (url, title, w, h) {
567
568    /**
569     * Cross-Origin-Opener-Policy blocked the access to the opener
570     */
571    if (typeof BroadcastChannel === "function") {
572        const _nslLoginBroadCastChannel = new BroadcastChannel('nsl_login_broadcast_channel');
573        _nslLoginBroadCastChannel.onmessage = (event) => {
574            if (window?._nslHasOpenedPopup && event.data?.action === 'redirect') {
575                window._nslHasOpenedPopup = false;
576
577                const url = event.data?.href;
578                _nslLoginBroadCastChannel.close();
579                if (typeof window.nslRedirect === 'function') {
580                    window.nslRedirect(url);
581                } else {
582                    window.opener.location = url;
583                }
584            }
585        };
586    }
587
588    const userAgent = navigator.userAgent,
589        mobile = function () {
590            return /\b(iPhone|iP[ao]d)/.test(userAgent) ||
591                /\b(iP[ao]d)/.test(userAgent) ||
592                /Android/i.test(userAgent) ||
593                /Mobile/i.test(userAgent);
594        },
595        screenX = window.screenX !== undefined ? window.screenX : window.screenLeft,
596        screenY = window.screenY !== undefined ? window.screenY : window.screenTop,
597        outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
598        outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
599        targetWidth = mobile() ? null : w,
600        targetHeight = mobile() ? null : h,
601        left = parseInt(screenX + (outerWidth - targetWidth) / 2, 10),
602        right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10),
603        features = [];
604    if (targetWidth !== null) {
605        features.push('width=' + targetWidth);
606    }
607    if (targetHeight !== null) {
608        features.push('height=' + targetHeight);
609    }
610    features.push('left=' + left);
611    features.push('top=' + right);
612    features.push('scrollbars=1');
613
614    const newWindow = window.open(url, title, features.join(','));
615
616    if (window.focus) {
617        newWindow.focus();
618    }
619
620    window._nslHasOpenedPopup = true;
621
622    return newWindow;
623};
624
625let isWebView = null;
626
627function checkWebView() {
628    if (isWebView === null) {
629        function _detectOS(ua) {
630            if (/Android/.test(ua)) {
631                return "Android";
632            } else if (/iPhone|iPad|iPod/.test(ua)) {
633                return "iOS";
634            } else if (/Windows/.test(ua)) {
635                return "Windows";
636            } else if (/Mac OS X/.test(ua)) {
637                return "Mac";
638            } else if (/CrOS/.test(ua)) {
639                return "Chrome OS";
640            } else if (/Firefox/.test(ua)) {
641                return "Firefox OS";
642            }
643            return "";
644        }
645
646        function _detectBrowser(ua) {
647            let android = /Android/.test(ua);
648
649            if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) {
650                return "Opera";
651            } else if (/CriOS/.test(ua)) {
652                return "Chrome for iOS";
653            } else if (/Edge/.test(ua)) {
654                return "Edge";
655            } else if (android && /Silk\//.test(ua)) {
656                return "Silk";
657            } else if (/Chrome/.test(ua)) {
658                return "Chrome";
659            } else if (/Firefox/.test(ua)) {
660                return "Firefox";
661            } else if (android) {
662                return "AOSP";
663            } else if (/MSIE|Trident/.test(ua)) {
664                return "IE";
665            } else if (/Safari\//.test(ua)) {
666                return "Safari";
667            }
667 else if (/AppleWebKit/.test(ua)) {
668                return "WebKit";
669            }
670            return "";
671        }
672
673        function _detectBrowserVersion(ua, browser) {
674            if (browser === "Opera") {
675                return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") :
676                    / OPR/.test(ua) ? _getVersion(ua, " OPR/") :
677                        _getVersion(ua, " OPT/");
678            } else if (browser === "Chrome for iOS") {
679                return _getVersion(ua, "CriOS/");
680            } else if (browser === "Edge") {
681                return _getVersion(ua, "Edge/");
682            } else if (browser === "Chrome") {
683                return _getVersion(ua, "Chrome/");
684            } else if (browser === "Firefox") {
685                return _getVersion(ua, "Firefox/");
686            } else if (browser === "Silk") {
687                return _getVersion(ua, "Silk/");
688            } else if (browser === "AOSP") {
689                return _getVersion(ua, "Version/");
690            } else if (browser === "IE") {
691                return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") :
692                    /MSIE/.test(ua) ? _getVersion(ua, "MSIE ")
693                        :
694                        _getVersion(ua, "rv:");
695            } else if (browser === "Safari") {
696                return _getVersion(ua, "Version/");
697            } else if (browser === "WebKit") {
698                return _getVersion(ua, "WebKit/");
699            }
700            return "0.0.0";
701        }
702
703        function _getVersion(ua, token) {
704            try {
705                return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]);
706            } catch (o_O) {
707            }
708            return "0.0.0";
709        }
710
711        function _normalizeSemverString(version) {
712            const ary = version.split(/[\._]/);
713            return (parseInt(ary[0], 10) || 0) + "." +
714                (parseInt(ary[1], 10) || 0) + "." +
715                (parseInt(ary[2], 10) || 0);
716        }
717
718        function _isWebView(ua, os, browser, version, options) {
719            switch (os + browser) {
720                case "iOSSafari":
721                    return false;
722                case "iOSWebKit":
723                    return _isWebView_iOS(options);
724                case "AndroidAOSP":
725                    return false;
726                case "AndroidChrome":
727                    return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options);
728            }
729            return false;
730        }
731
732        function _isWebView_iOS(options) {
733            const document = (window["document"] || {});
734
735            if ("WEB_VIEW" in options) {
736                return options["WEB_VIEW"];
737            }
738            return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false);
739        }
740
741        function _isWebView_Android(options) {
742            if ("WEB_VIEW" in options) {
743                return options["WEB_VIEW"];
744            }
745            return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false);
746        }
747
748        const options = {},
749            nav = window.navigator || {},
750            ua = nav.userAgent || "",
751            os = _detectOS(ua),
752            browser = _detectBrowser(ua),
753            browserVersion = _detectBrowserVersion(ua, browser);
754
755        isWebView = _isWebView(ua, os, browser, browserVersion, options);
756    }
757
758    return isWebView;
759}
760
761function isAllowedWebViewForUserAgent(provider) {
762    const facebookAllowedWebViews = [
763        'Instagram',
764        'FBAV',
765        'FBAN'
766    ];
767    let whitelist = [];
768
769    if (provider && provider === 'facebook') {
770        whitelist = facebookAllowedWebViews;
771    }
772
773    const nav = window.navigator || {},
774        ua = nav.userAgent || "";
775
776    if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) {
777        return true;
778    }
779
780    return false;
781}
782
783function disableButtonInWebView(providerButtonElement) {
784    if (providerButtonElement) {
785        providerButtonElement.classList.add('nsl-disabled-provider');
786        providerButtonElement.setAttribute('href', '#');
787
788        providerButtonElement.addEventListener('pointerdown', (e) => {
789            const closeNotice = function () {
790                if (window._nslWebViewNoticeElement) {
791                    window._nslWebViewNoticeElement.remove();
792                    window._nslWebViewNoticeElement = null;
793                }
794            };
795
796            closeNotice();
797
798            window._nslWebViewNoticeElement = document.createElement('div');
799            window._nslWebViewNoticeElement.id = "nsl-notices-fallback";
800            window._nslWebViewNoticeElement.role = 'alert';
801            window._nslWebViewNoticeElement.ariaLive = 'assertive';
802            window._nslWebViewNoticeElement.ariaAtomic = 'true';
803
804            window._nslWebViewNoticeElement.addEventListener('pointerdown', closeNotice);
805
806            window._nslWebViewNoticeElement.addEventListener('keydown', function (e) {
807                if (e.key === 'Enter') {
808                    e.preventDefault();
809                    closeNotice();
810                }
811            });
812            const webviewNoticeHTML = '<div class="error"><p>' + scriptOptions._localizedStrings.webview_notification_text + '</p></div>';
813
814            window._nslWebViewNoticeElement.insertAdjacentHTML("afterbegin", webviewNoticeHTML);
815            document.body.appendChild(window._nslWebViewNoticeElement);
816        });
817    }
818
819}
820
821window._nslDOMReady(function () {
822
823    window.nslRedirect = function (url) {
824        if (scriptOptions._redirectOverlay) {
825            const overlay = document.createElement('div');
826            overlay.id = "nsl-redirect-overlay";
827            let overlayHTML = '';
828            const overlayContainer = "<div id='nsl-redirect-overlay-container'>",
829                overlayContainerClose = "</div>",
830                overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>",
831                overlayTitle = "<p id='nsl-redirect-overlay-title'>" + scriptOptions._localizedStrings.redirect_overlay_title + "</p>",
832                overlayText = "<p id='nsl-redirect-overlay-text'>" + scriptOptions._localizedStrings.redirect_overlay_text + "</p>";
833
834            switch (scriptOptions._redirectOverlay) {
835                case "overlay-only":
836                    break;
837                case "overlay-with-spinner":
838                    overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose;
839                    break;
840                default:
841                    overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose;
842                    break;
843            }
844
845            overlay.insertAdjacentHTML("afterbegin", overlayHTML);
846            document.body.appendChild(overlay);
847        }
848
849        window.location = url;
850    };
851
852    let targetWindow = scriptOptions._targetWindow || 'prefer-popup',
853        lastPopup = false;
854
855
856    document.addEventListener('click', function (e) {
857        if (e.target) {
858            const buttonLinkElement = e.target.closest('a[data-plugin="nsl"][data-action="connect"]') || e.target.closest('a[data-plugin="nsl"][data-action="link"]');
859            if (buttonLinkElement) {
860                if (lastPopup && !lastPopup.closed) {
861                    e.preventDefault();
862                    lastPopup.focus();
863                } else {
864
865                    let href = buttonLinkElement.href,
866                        success = false;
867                    if (href.indexOf('?') !== -1) {
868                        href += '&';
869                    } else {
870                        href += '?';
871                    }
872
873                    const redirectTo = buttonLinkElement.dataset.redirect;
874                    if (redirectTo === 'current') {
875                        href += 'redirect=' + encodeURIComponent(window.location.href) + '&';
876                    } else if (redirectTo && redirectTo !== '') {
877                        href += 'redirect=' + encodeURIComponent(redirectTo) + '&';
878                    }
879
880                    if (targetWindow !== 'prefer-same-window' && checkWebView()) {
881                        targetWindow = 'prefer-same-window';
882                    }
883
884                    if (targetWindow === 'prefer-popup') {
885                        lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', buttonLinkElement.dataset.popupwidth, buttonLinkElement.dataset.popupheight);
886                        if (lastPopup) {
887                            success = true;
888                            e.preventDefault();
889                        }
890                    } else if (targetWindow === 'prefer-new-tab') {
891                        const newTab = window.open(href + 'display=popup', '_blank');
892                        if (newTab) {
893                            if (window.focus) {
894                                newTab.focus();
895                            }
896                            success = true;
897                            window._nslHasOpenedPopup = true;
898                            e.preventDefault();
899                        }
900                    }
901
902                    if (!success) {
903                        window.location = href;
904                        e.preventDefault();
905                    }
906                }
907            }
908        }
909    });
910
911    let buttonCountChanged = false;
912
913    const googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]');
914    if (googleLoginButtons.length && checkWebView()) {
915        googleLoginButtons.forEach(function (googleLoginButton) {
916            if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') {
917                disableButtonInWebView(googleLoginButton);
918            } else {
919                googleLoginButton.remove();
920                buttonCountChanged = true;
921            }
922        });
923    }
924
925    const facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]');
926    if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) {
927        facebookLoginButtons.forEach(function (facebookLoginButton) {
928            if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') {
929                disableButtonInWebView(facebookLoginButton);
930            } else {
931                facebookLoginButton.remove();
932                buttonCountChanged = true;
933            }
934        });
935    }
936
937    const separators = document.querySelectorAll('div.nsl-separator');
938    if (buttonCountChanged && separators.length) {
939        separators.forEach(function (separator) {
940            const separatorParentNode = separator.parentNode;
941            if (separatorParentNode) {
942                const separatorButtonContainer = separatorParentNode.querySelector('div.nsl-container-buttons');
943                if (separatorButtonContainer && !separatorButtonContainer.hasChildNodes()) {
944                    separator.remove();
945                }
946            }
947        })
948    }
949});})();</script>
949	</body>
950	</html>
951	

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.