PageSourceSearch

https://southbankresearch.com/login

html southbankresearch.com collected 2026-09-24 21:27:55 UTC 89,237 bytes, 2,136 lines download raw bytes

1<!doctype html>
2<html lang="en-GB" class="no-js">
3
4<head>
5	<meta charset="UTF-8">
6	<title>
7		Login - Southbank Investment Research	</title>
8
9	<!-- OneTrust Cookies Consent Notice start for www.southbankresearch.com -->
10	
10<script type="text/javascript" src="https://cdn.cookielaw.org/consent/85c65451-9e9c-4ed2-8d91-d671c0b4d81c/OtAutoBlock.js" ></script>
10
11	
11<script src="https://cdn.cookielaw.org/consent/85c65451-9e9c-4ed2-8d91-d671c0b4d81c/otSDKStub.js"  type="text/javascript" charset="UTF-8" data-domain-script="85c65451-9e9c-4ed2-8d91-d671c0b4d81c" ></script>
11
12	
12<script type="text/javascript">
13window.dataLayer = window.dataLayer || [];
14function gtag(){dataLayer.push(arguments);}
15
16gtag('consent', 'default', {
17	'ad_storage': 'denied',
18	'ad_user_data': 'denied',
19	'ad_personalization': 'denied',
20	'analytics_storage': 'denied',
21	'functionality_storage': 'denied',
22	'personalization_storage': 'denied',
23	'security_storage': 'granted',
24	'wait_for_update': 500
25});
26
27function OptanonWrapper() {
28	function groupActive(groups, id) {
29		return groups.indexOf(',' + id + ',') > -1;
30	}
31
32	function updateGoogleConsent() {
33		var groups = typeof OnetrustActiveGroups === 'string' ? OnetrustActiveGroups : '';
34		var acceptAll = groupActive(groups, 'C0004');
35
36		gtag('consent', 'update', {
37			'analytics_storage': acceptAll || groupActive(groups, 'C0001') ? 'granted' : 'denied',
38			'functionality_storage': acceptAll || groupActive(groups, 'C0002') ? 'granted' : 'denied',
39			'ad_storage': acceptAll || groupActive(groups, 'C0003') ? 'granted' : 'denied',
40			'ad_user_data': acceptAll || groupActive(groups, 'C0003') ? 'granted' : 'denied',
41			'ad_personalization': acceptAll || groupActive(groups, 'C0003') ? 'granted' : 'denied',
42			'personalization_storage': acceptAll || groupActive(groups, 'C0003') ? 'granted' : 'denied'
43		});
44	}
45
46	updateGoogleConsent();
47
48	if (typeof OneTrust !== 'undefined') {
49		OneTrust.OnConsentChanged(updateGoogleConsent);
50	}
51}
52</script>
52
53	<!-- OneTrust Cookies Consent Notice end for www.southbankresearch.com -->
54
55	<!-- Google Tag Manager -->
56	
56<script>
57		(function (w, d, s, l, i) {
58			w[l] = w[l] || [];
59			w[l].push({
60				'gtm.start': new Date().getTime(),
61				event: 'gtm.js'
62			});
63			var f = d.getElementsByTagName(s)[3],
64				j = d.createElement(s),
65				dl = l != 'dataLayer' ? '&l=' + l : '';
66			j.async = true;
67			j.src =
68				'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
69			f.parentNode.insertBefore(j, f);
70		})(window, document, 'script', 'dataLayer', 'GTM-KJ5QV3Z');
71
72	</script>
72
73	<!-- End Google Tag Manager -->
74
75	<link href="//www.google-analytics.com" rel="dns-prefetch">
76	<link href="https://www.southbankresearch.com/wp-content/themes/southbankresearch/img/icons/favicon.ico" rel="shortcut icon">
77	<link href="https://www.southbankresearch.com/wp-content/themes/southbankresearch/img/icons/touch.png" rel="apple-touch-icon-precomposed">
78
79	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
80	<meta name="viewport" content="width=device-width, initial-scale=1.0">
81
82	<!-- Display meta dscription for MWR if not a publication page - individual meta descriptions for publications are added to the parent page -->
83		<meta name="description" content="">
84	
85		
85<script type="text/javascript">
86		var ajaxurl = 'https://www.southbankresearch.com/wp-admin/admin-ajax.php';
87	</script>
87
88<meta name='robots' content='noindex, nofollow' />
89
90	<!-- This site is optimized with the Yoast SEO plugin v28.1 - https://yoast.com/product/yoast-seo-wordpress/ -->
91	<meta property="og:locale" content="en_GB" />
92	<meta property="og:type" content="article" />
93	<meta property="og:title" content="Login - Southbank Investment Research" />
94	<meta property="og:url" content="https://www.southbankresearch.com/login/" />
95	<meta property="og:site_name" content="Southbank Investment Research" />
96	<meta property="og:image" content="https://www.southbankresearch.com/wp-content/uploads/sites/9/2018/06/southbank-research-facebook-OG.jpg" />
97	<meta property="og:image:width" content="900" />
98	<meta property="og:image:height" content="473" />
99	<meta property="og:image:type" content="image/jpeg" />
100	<meta name="twitter:card" content="summary_large_image" />
101	
101<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.southbankresearch.com\/login\/","url":"https:\/\/www.southbankresearch.com\/login\/","name":"Login - Southbank Investment Research","isPartOf":{"@id":"https:\/\/www.southbankresearch.com\/#website"},"datePublished":"2026-08-17T12:30:29+00:00","breadcrumb":{"@id":"https:\/\/www.southbankresearch.com\/login\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.southbankresearch.com\/login\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.southbankresearch.com\/login\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.southbankresearch.com\/"},{"@type":"ListItem","position":2,"name":"Login"}]},{"@type":"WebSite","@id":"https:\/\/www.southbankresearch.com\/#website","url":"https:\/\/www.southbankresearch.com\/","name":"Southbank Investment Research","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.southbankresearch.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"}]}</script>
101
102	<!-- / Yoast SEO plugin. -->
103
104
105<link rel='dns-prefetch' href='//www.southbankresearch.com' />
106<link rel='dns-prefetch' href='//cdnjs.cloudflare.com' />
107<link rel='dns-prefetch' href='//www.google.com' />
108<link rel='dns-prefetch' href='//fonts.googleapis.com' />
109<link rel='dns-prefetch' href='//use.fontawesome.com' />
110<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.southbankresearch.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.southbankresearch.com%2Flogin%2F" />
111<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.southbankresearch.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.southbankresearch.com%2Flogin%2F&#038;format=xml" />
112<style id="wp-emoji-styles-inline-css">
113
114	img.wp-smiley, img.emoji {
115		display: inline !important;
116		border: none !important;
117		box-shadow: none !important;
118		height: 1em !important;
119		width: 1em !important;
120		margin: 0 0.07em !important;
121		vertical-align: -0.1em !important;
122		background: none !important;
123		padding: 0 !important;
124	}
125/*# sourceURL=wp-emoji-styles-inline-css */
126</style>
127<style id="wp-block-library-inline-css">
128/**
129 * Colors
130 */
131/**
132 * Typography
133 */
134/**
135 * SCSS Variables.
136 *
137 * Please use variables from this sheet to ensure consistency across the UI.
138 * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
139 * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
140 */
141/**
142 * Fonts & basic variables.
143 */
144/**
145 * Typography
146 */
147/**
148 * Grid System.
149 * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
150 */
151/**
152 * Radius scale.
153 */
154/**
155 * Elevation scale.
156 */
157/**
158 * Dimensions.
159 */
160/**
161 * Mobile specific styles
162 */
163/**
164 * Editor styles.
165 */
166/**
167 * Block & Editor UI.
168 */
169/**
170 * Block paddings.
171 */
172/**
173 * React Native specific.
174 * These variables do not appear to be used anywhere else.
175 */
176/**
177 * Breakpoints & Media Queries
178 */
179/**
180*  Converts a hex value into the rgb equivalent.
181*
182* @param {string} hex - the hexadecimal value to convert
183* @return {string} comma separated rgb values
184*/
185/**
186 * Long content fade mixin
187 *
188 * Creates a fading overlay to signify that the content is longer
189 * than the space allows.
190 */
191/**
192 * Breakpoint mixins
193 */
194/**
195 * Focus styles.
196 */
197/**
198 * Standard focus rings for the WordPress Design System.
199 *
200 * Apply `outset-ring__focus` inside the relevant pseudo-class at the call site,
201 * e.g. `&:focus { @include outset-ring__focus(); }`.
202 */
203/**
204 * Applies editor left position to the selector passed as argument
205 */
206/**
207 * Styles that are reused verbatim in a few places
208 */
209/**
210 * Allows users to opt-out of animations via OS-level preferences.
211 */
212/**
213 * Reset default styles for JavaScript UI based pages.
214 * This is a WP-admin agnostic reset
215 */
216/**
217 * Reset the WP Admin page styles for Gutenberg-like pages.
218 */
219/**
220 * Creates a checkerboard pattern background to indicate transparency.
221 * @param {String} $size - The size of the squares in the checkerboard pattern. Default is 12px.
222 */
223:root {
224  --wp-block-synced-color: #7a00df;
225  --wp-block-synced-color--rgb: 122, 0, 223;
226  --wp-bound-block-color: var(--wp-block-synced-color);
227  --wp-editor-canvas-background: #ddd;
228  --wp-admin-theme-color: #007cba;
229  --wp-admin-theme-color--rgb: 0, 124, 186;
230  --wp-admin-theme-color-darker-10: rgb(0, 107, 160.5);
231  --wp-admin-theme-color-darker-10--rgb: 0, 107, 160.5;
232  --wp-admin-theme-color-darker-20: #005a87;
233  --wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
234  --wp-admin-border-width-focus: 2px;
235}
236@media (min-resolution: 192dpi) {
237  :root {
238    --wp-admin-border-width-focus: 1.5px;
239  }
240}
241
242/**
243 * Element styles.
244 */
245.wp-element-button {
246  cursor: pointer;
247}
248
249:root .has-very-light-gray-background-color {
250  background-color: #eee;
251}
252:root .has-very-dark-gray-background-color {
253  background-color: #313131;
254}
255:root .has-very-light-gray-color {
256  color: #eee;
257}
258:root .has-very-dark-gray-color {
259  color: #313131;
260}
261:root {
262  /* stylelint-disable @stylistic/function-comma-space-after -- We can not use spacing because of WP multi site kses rule. */
263}
264:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background {
265  background: linear-gradient(135deg, rgb(0, 208, 132) 0%, rgb(6, 147, 227) 100%);
266}
267:root .has-purple-crush-gradient-background {
268  background: linear-gradient(135deg, rgb(52, 226, 228) 0%, rgb(71, 33, 251) 50%, rgb(171, 29, 254) 100%);
269}
270:root .has-hazy-dawn-gradient-background {
271  background: linear-gradient(135deg, rgb(250, 172, 168) 0%, rgb(218, 208, 236) 100%);
272}
273:root .has-subdued-olive-gradient-background {
274  background: linear-gradient(135deg, rgb(250, 250, 225) 0%, rgb(103, 166, 113) 100%);
275}
276:root .has-atomic-cream-gradient-background {
277  background: linear-gradient(135deg, rgb(253, 215, 154) 0%, rgb(0, 74, 89) 100%);
278}
279:root .has-nightshade-gradient-background {
280  background: linear-gradient(135deg, rgb(51, 9, 104) 0%, rgb(49, 205, 207) 100%);
281}
282:root .has-midnight-gradient-background {
283  background: linear-gradient(135deg, rgb(2, 3, 129) 0%, rgb(40, 116, 252) 100%);
284}
285:root {
286  /* stylelint-enable @stylistic/function-comma-space-after */
287  --wp--preset--font-size--normal: 16px;
288  --wp--preset--font-size--huge: 42px;
289}
290
291.has-regular-font-size {
292  font-size: 1em;
293}
294
295.has-larger-font-size {
296  font-size: 2.625em;
297}
298
299.has-normal-font-size {
300  font-size: var(--wp--preset--font-size--normal);
301}
302
303.has-huge-font-size {
304  font-size: var(--wp--preset--font-size--huge);
305}
306
307:root .has-text-align-center {
308  text-align: center;
309}
310
311:root .has-text-align-left {
312  /*rtl:ignore*/
313  text-align: left;
314}
315
316:root .has-text-align-right {
317  /*rtl:ignore*/
318  text-align: right;
319}
320
321.has-fit-text {
322  white-space: nowrap !important;
323}
324
325#end-resizable-editor-section {
326  display: none;
327}
328
329.aligncenter {
330  clear: both;
331}
332
333.items-justified-left {
334  justify-content: flex-start;
335}
336
337.items-justified-center {
338  justify-content: center;
339}
340
341.items-justified-right {
342  justify-content: flex-end;
343}
344
345.items-justified-space-between {
346  justify-content: space-between;
347}
348
349.screen-reader-text {
350  border: 0;
351  clip-path: inset(50%);
352  height: 1px;
353  margin: -1px;
354  overflow: hidden;
355  padding: 0;
356  position: absolute;
357  width: 1px;
358  word-wrap: normal !important;
359  word-break: normal !important;
360}
361
362.screen-reader-text:focus {
363  background-color: #ddd;
364  clip-path: none;
365  color: #444;
366  display: block;
367  font-size: 1em;
368  height: auto;
369  left: 5px;
370  line-height: normal;
371  padding: 15px 23px 14px;
372  text-decoration: none;
373  top: 5px;
374  width: auto;
375  z-index: 100000;
376}
377
378/**
379 * The following provide a simple means of applying a default border style when
380 * a user first makes a selection in the border block support panel.
381 * This prevents issues such as where the user could set a border width
382 * and see no border due there being no border style set.
383 *
384 * This is intended to be removed once intelligent defaults can be set while
385 * making border selections via the block support.
386 *
387 * See: https://github.com/WordPress/gutenberg/pull/33743
388 */
389html :where(.has-border-color) {
390  border-style: solid;
391}
392
393html :where([style^=border-color],
394[style*=";border-color"],
395[style*="; border-color"]) {
396  border-style: solid;
397}
398
399html :where([style^=border-top-color],
400[style*=";border-top-color"],
401[style*="; border-top-color"]) {
402  border-top-style: solid;
403}
404
405html :where([style^=border-right-color],
406[style*=";border-right-color"],
407[style*="; border-right-color"]) {
408  /*rtl:ignore*/
409  border-right-style: solid;
410}
411
412html :where([style^=border-bottom-color],
413[style*=";border-bottom-color"],
414[style*="; border-bottom-color"]) {
415  border-bottom-style: solid;
416}
417
418html :where([style^=border-left-color],
419[style*=";border-left-color"],
420[style*="; border-left-color"]) {
421  /*rtl:ignore*/
422  border-left-style: solid;
423}
424
425html :where([style^=border-width],
426[style*=";border-width"],
427[style*="; border-width"]) {
428  border-style: solid;
429}
430
431html :where([style^=border-top-width],
432[style*=";border-top-width"],
433[style*="; border-top-width"]) {
434  border-top-style: solid;
435}
436
437html :where([style^=border-right-width],
438[style*=";border-right-width"],
439[style*="; border-right-width"]) {
440  /*rtl:ignore*/
441  border-right-style: solid;
442}
443
444html :where([style^=border-bottom-width],
445[style*=";border-bottom-width"],
446[style*="; border-bottom-width"]) {
447  border-bottom-style: solid;
448}
449
450html :where([style^=border-left-width],
451[style*=";border-left-width"],
452[style*="; border-left-width"]) {
453  /*rtl:ignore*/
454  border-left-style: solid;
455}
456
457/**
458 * Provide baseline responsiveness for images.
459 */
460html :where(img[class*=wp-image-]) {
461  height: auto;
462  max-width: 100%;
463}
464
465/**
466 * Reset user agent styles for figure element margins.
467 */
468:where(figure) {
469  margin: 0 0 1em 0;
470}
471
472html :where(.is-position-sticky) {
473  --wp-admin--admin-bar--position-offset: var(--wp-admin--admin-bar--height, 0px);
474}
475
476@media screen and (max-width: 600px) {
477  html :where(.is-position-sticky) {
478    --wp-admin--admin-bar--position-offset: 0px;
479  }
480}
481
482/*# sourceURL=/wp-includes/css/dist/block-library/common.css */
483</style>
484<style id="classic-theme-styles-inline-css">
485/**
486 * These rules are needed for backwards compatibility.
487 * They should match the button element rules in the base theme.json file.
488 */
489.wp-block-button__link {
490	color: #ffffff;
491	background-color: #32373c;
492	border-radius: 9999px; /* 100% causes an oval, but any explicit but really high value retains the pill shape. */
493
494	/* This needs a low specificity so it won't override the rules from the button element if defined in theme.json. */
495	box-shadow: none;
496	text-decoration: none;
497
498	/* The extra 2px are added to size solids the same as the outline versions.*/
499	padding: calc(0.667em + 2px) calc(1.333em + 2px);
500
501	font-size: 1.125em;
502}
503
504.wp-block-file__button {
505	background: #32373c;
506	color: #ffffff;
507	text-decoration: none;
508}
509
510/*# sourceURL=/wp-includes/css/classic-themes.css */
511</style>
512
513<style id="global-styles-inline-css">
514:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
5140) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
514.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
515/*# sourceURL=global-styles-inline-css */
516</style>
517
518<link rel='stylesheet' id='moneyweekresearch-dfp-css' href='https://www.southbankresearch.com/wp-content/plugins/MoneyWeekResearch-DFP/public/css/moneyweekresearch-dfp-public.css' media='all' />
519<link rel='stylesheet' id='bbp-default-css' href='https://www.southbankresearch.com/wp-content/plugins/bbpress/templates/default/css/bbpress.css' media='all' />
520<link rel='stylesheet' id='bootstrap-columns-css' href='https://www.southbankresearch.com/wp-content/plugins/bootstrap-columns/public/css/bootstrap-columns-public.css' media='all' />
521<link rel='stylesheet' id='sbr_videos_css-css' href='https://www.southbankresearch.com/wp-content/plugins/sbr-videos/css/style.css' media='all' />
522<link rel='stylesheet' id='ppress-frontend-css' href='https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/css/frontend.css' media='all' />
523<link rel='stylesheet' id='ppress-flatpickr-css' href='https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/flatpickr/flatpickr.min.css' media='all' />
524<link rel='stylesheet' id='ppress-select2-css' href='https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/select2/select2.min.css' media='all' />
525<link rel='stylesheet' id='middleware-authentication/plugin.phpstyles_remodal-css' href='https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/css/remodal.css' media='all' />
526<link rel='stylesheet' id='mw_auth_frontend-css' href='https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/css/frontend.css' media='all' />
527<link rel='stylesheet' id='normalize-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/normalize.css' media='all' />
528<link rel='stylesheet' id='globalHeader-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/global-header.css' media='all' />
529<link rel='stylesheet' id='bootstrap-use-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/bootstrap.min.css' media='all' />
530<link rel='stylesheet' id='moneyweekresearch-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/style.css' media='all' />
531<link rel='stylesheet' id='print-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/print.css' media='print' />
532<link rel='stylesheet' id='googlefont-css' href='https://fonts.googleapis.com/css?family=Oxygen' media='all' />
533<link rel='stylesheet' id='fontawesome-css' href='https://use.fontawesome.com/releases/v5.5.0/css/all.css' media='all' />
534<link rel='stylesheet' id='jasny-mobile-menu-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/jasny-bootstrap.min.css' media='all' />
535<script id="jquery-core-js" src="https://www.southbankresearch.com/wp-includes/js/jquery/jquery.js"></script>
vendor: 1 bytes, line 535
535
536<script id="jquery-migrate-js" src="https://www.southbankresearch.com/wp-includes/js/jquery/jquery-migrate.js"></script>
vendor: 1 bytes, line 536
536
537<script id="moneyweekresearch-dfp-js" src="https://www.southbankresearch.com/wp-content/plugins/MoneyWeekResearch-DFP/public/js/moneyweekresearch-dfp-public.js"></script>
vendor: 1 bytes, line 537
537
538<script id="moneyweekresearch-dfpbootstrap-trigger-js-extra">
539var bt = {"exclude_segments":["fsr_fleet_street_letter"]};
540//# sourceURL=moneyweekresearch-dfpbootstrap-trigger-js-extra
541</script>
vendor: 1 bytes, line 541
541
542<script id="moneyweekresearch-dfpbootstrap-trigger-js" src="https://www.southbankresearch.com/wp-content/plugins/MoneyWeekResearch-DFP/public/js/bootstrap-trigger.js"></script>
vendor: 1 bytes, line 542
542
543<script id="bootstrap-columns-js" src="https://www.southbankresearch.com/wp-content/plugins/bootstrap-columns/public/js/bootstrap-columns-public.js"></script>
vendor: 1 bytes, line 543
543
544<script id="sbr_videos_js-js-extra">
545var videopopup = {"ajaxurl":"https://www.southbankresearch.com/wp-admin/admin-ajax.php","videoid":""};
546//# sourceURL=sbr_videos_js-js-extra
547</script>
vendor: 1 bytes, line 547
547
548<script id="sbr_videos_js-js" src="https://www.southbankresearch.com/wp-content/plugins/sbr-videos/js/videopopup.js"></script>
vendor: 1 bytes, line 548
548
549<script id="ppress-flatpickr-js" src="https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/flatpickr/flatpickr.min.js"></script>
vendor: 1 bytes, line 549
549
550<script id="ppress-select2-js" src="https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/select2/select2.min.js"></script>
vendor: 1 bytes, line 550
550
551<script id="middleware-authentication/plugin.php_remodal-js" src="https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/js/remodal.js"></script>
vendor: 1 bytes, line 551
551
552<script id="localized_frontend_data-js-extra">
553var localized_frontend_data = {"mw_ajax_url":"https://www.southbankresearch.com/wp-admin/admin-ajax.php","txt_log_name_validation":"Please enter your email address","txt_twilio_number_invalid":"The phone number you have entered is invalid","txt_sms_consent_error":"Consent is required, please tick the checkbox","txt_log_pwd_validation":"Please enter your password","txt_reset_email_required":"Please enter your email address","txt_reset_email_valid":"Please enter a valid email address","txt_forgot_name_required":"Please enter your email address","txt_forgot_name_valid":"Please enter a valid email address","txt_pwd_change_name_validation":"Please enter your username","txt_pwd_change_newpass_validation":"Please enter your new password","txt_pwd_change_newpass_confirm":"Please confirm your new password","txt_pwd_change_newpass_confirm_equal":"The passwords do not match"};
554//# sourceURL=localized_frontend_data-js-extra
555</script>
vendor: 1 bytes, line 555
555
556<script id="localized_frontend_data-js" src="https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/js/frontend-localized.js"></script>
vendor: 1 bytes, line 556
556
557<script id="mw_auth_validate-js" src="https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/js/jquery.validate.min.js"></script>
vendor: 1 bytes, line 557
557
558<script id="mw_phone_mask-js" src="https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/js/jquery.inputmask.bundle.min.js"></script>
vendor: 1 bytes, line 558
558
559<script id="mw_auth_frontend-js" src="https://www.southbankresearch.com/wp-content/plugins/middleware-authentication/js/frontend.js"></script>
vendor: 1 bytes, line 559
559
560<script id="conditionizr-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/lib/conditionizr-4.3.0.min.js"></script>
vendor: 1 bytes, line 560
560
561<script id="modernizr-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/lib/modernizr-2.7.1.min.js"></script>
vendor: 1 bytes, line 561
561
562<script id="bootstrap-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/lib/bootstrap.min.js"></script>
vendor: 1 bytes, line 562
562
563<script id="respond-js" src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
vendor: 1 bytes, line 563
563
564<script type = "text/javascript">googletag.cmd.push(function() {googletag.pubads().setTargeting("sitecode","");});</script>
564<link
565        rel="stylesheet"
566        href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/css/intlTelInput.css"
567/>
568<script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/intlTelInput.min.js"></script>
568
569<style>
570    #tfs-mw-sms-phone {
571        padding: 10px 10px 10px 50px;
572    }
573    #tfs-mw-sms-phone, .btn {
574        padding-top: 6px;
575        padding-bottom: 6px;
576        border: 1px solid #ccc;
577        border-radius: 4px;
578    }
579
580    .btn {
581        color: #ffffff;
582        background-color: #428BCA;
583        border-color: #357EBD;
584        font-size: 14px;
585        outline: none;
586        cursor: pointer;
587        padding-left: 12px;
588        padding-right: 12px;
589    }
590
591    .btn:focus, .btn:hover {
592        background-color: #3276B1;
593        border-color: #285E8E;
594    }
595
596    .btn:active {
597        box-shadow: inset 0 3px 5px rgba(0,0,0,.125);
598    }
599
600    .alert {
601        padding: 15px;
602        margin-top: 10px;
603        border: 1px solid transparent;
604        border-radius: 4px;
605    }
606
607    .alert-info {
608        border-color: #bce8f1;
609        color: #31708f;
610        background-color: #d9edf7;
611    }
612
613    .alert-error {
614        color: #a94442;
615        background-color: #f2dede;
616        border-color: #ebccd1;
617    }
618
619</style>
620		
620<script type="text/javascript">
621		  (function(l,e,a,p) {
622		    window.UserLeap = function(){U._queue.push(arguments)}
623		    var U = window.UserLeap;U.appId = a;U._queue = [];
624		    a=l.createElement('script');
625		    a.async=1;a.src=e+'?id='+U.appId;
626		    p=l.getElementsByTagName('script')[3];
627		    p.parentNode.insertBefore(a, p);
628		  })(document, 'https://cdn.userleap.com/shim.js', '2ZtlQcSrgA');
629		</script>
629
630	<link rel="icon" href="https://www.southbankresearch.com/wp-content/uploads/sites/9/2019/12/cropped-favicon-32x32.png" sizes="32x32" />
631<link rel="icon" href="https://www.southbankresearch.com/wp-content/uploads/sites/9/2019/12/cropped-favicon-192x192.png" sizes="192x192" />
632<link rel="apple-touch-icon" href="https://www.southbankresearch.com/wp-content/uploads/sites/9/2019/12/cropped-favicon-180x180.png" />
633<meta name="msapplication-TileImage" content="https://www.southbankresearch.com/wp-content/uploads/sites/9/2019/12/cropped-favicon-270x270.png" />
634<script type = "text/javascript">googletag.cmd.push(function() {googletag.enableServices();});</script>
634
635	
635<script>
636		// conditionizr.com
637		// configure environment tests
638		conditionizr.config({
639			assets: 'https://www.southbankresearch.com/wp-content/themes/southbankresearch',
640			tests: {}
641		});
642
643	</script>
643
644
645
646<link rel='stylesheet' id='bootstrap-toggle-css' href='https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/bootstrap-toggle.min.css' media='all' />
647<style id="core-block-supports-inline-css">
648/**
649 * Core styles: block-supports
650 */
651
652/*# sourceURL=core-block-supports-inline-css */
653</style>
654<link rel='stylesheet' id='lytics-css-css' href='https://www.southbankresearch.com/wp-content/plugins/lytics/css/style.min.css' media='all' />
655
656</head>
657
658<body  class="wp-singular page-template page-template-page-login page-template-page-login-php page page-id-427394 page-parent wp-theme-southbankresearch login logged-out">
659<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 659-660
659
660<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
660GTM-KJ5QV3Z
vendor: 83 bytes, lines 660-661
660"
661height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
662<!-- End Google Tag Manager (noscript) -->
663
664	<section id="footerFix">
665
666		<!-- header -->
667		<header class="header clear" role="banner">
668			<nav class="navbar navbar-default navbar-fixed-top">
669
670				<!--Global Header-->
671
672				<section class="global_header">
673					<span></span>
674					<div id="ul_strip"></div>
675					<div class="container">
676						<ul>
677							<li><a href="https://investorsdaily.co.uk/" target="_blank">Investor's Daily</a>
678						</ul>
679						<p><i class="fa fa-phone-square" aria-hidden="true"></i> 0203 966 4580</p>					</div>
680				</section>
681
682				<!--end Global Header-->
683
684				<div class="container">
685
686					<div class="navbar-header">
687
688						<div id="mobileMenu">
689							<ul id="menu-mobile-logged-out" class="menu"><li id="menu-item-434070" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-434070"><a href="https://www.southbankresearch.com/about-us/">About Us</a></li>
690<li id="menu-item-434072" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-434072"><a href="https://www.southbankresearch.com/editors/">Editors</a></li>
691<li id="menu-item-476109" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-476109"><a href="https://www.southbankresearch.com/testimonials/">Testimonials</a></li>
692<li id="menu-item-543731" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-543731"><a href="/help-guide/">Contact</a></li>
693<li class="menu-item login-button" id="login-button-mobile"><a href="/login" title="login">Login</li></a></ul>						</div>
694
695						<span id="navToggle"></span>
696
697						
698						<a href="/" class="siteLogo"></a>
699
700						<!-- Display h1 tag if not a publication page - individual h1 tags are added to the publication pages for SEO -->
701													<h1>Welcome to Southbank Investment Research</h1>
702											</div>
703				
704					
705					
706					<div id="desktop-navbar" class="">
707
708						<ul id="menu-primary" class="nav navbar-nav desktop-nav "><li id="menu-item-430363" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-430363"><a title="About us" href="https://www.southbankresearch.com/about-us/">About us</a></li>
709<li id="menu-item-427629" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-427629"><a title="Editors" href="https://www.southbankresearch.com/editors/">Editors</a></li>
710<li id="menu-item-476110" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-476110"><a title="Testimonials" href="https://www.southbankresearch.com/testimonials/">Testimonials</a></li>
711<li id="menu-item-431884" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-431884"><a title="Contact" href="https://www.southbankresearch.com/help-guide/">Contact</a></li>
712<li class="menu-item login-button" id="login-button-desktop"><a href="/login" title="login">Login</li></a></ul>
713						
714					</div>
715
716				<!--/.navbar-collapse -->
717				</div>
718
719			</nav>
720
721		</header>
722		<!-- /header -->
723
724		<!-- Add a notice to the header if CF snippet is set -->
725			<div class="container">
726		<div class="row">
727						<div class="col-md-12">
728									<div class="login-container tfs-mw-wrapper-block">
729						<div id="tfs-mw-wrapper-block-title">
730							<h2>Login</h2>
731						</div>
732						            
732<script>
733            window.sbrLoginExperimentConfig = {"trackView":true,"loginVariant":"secure"};
734            window.dataLayer = window.dataLayer || [];
735                        window.dataLayer.push({"event":"login_experiment_view","login_variant":"secure","login_method_shown":"secure_link"});
736                    </script>
736
737        <p>Access your subscriber account and publications below.</p>
738                    <div id="secure-login-form" class="secure-login-form">
739                <!--
740	It is highly recommended that you *copy* this file to your theme folder.
741	Styles should be moved to your main stylesheet.
742	Leave this template in the /theme/ folder of the plugin for future reference
743
744	#Version: 2.0
745-->
746
747<div>
748                <div class="">
749                <div class="tfs-mw-wrapper-block-messages">
750                                            <p class="tfs-mw-wrapper-block-subtitle">Enter your email address below and secure link will be sent to you.</p>
751                                        </div>
752            </div>
753                            <form name="secure_link_form" id="secure-link-form" action="?secure=link" method="post">
754            <input type="hidden" name="mode" value="p">
755
756            <div class="tfs-mw-wrapper-block-messages">
757                            </div>
758                            <div class="user-email">
759                                            <label for="user_email">Email</label>
760                        
761                    <input type="email"
762                        name="user_email"
763                        id="user_email"
764                        class="mw-user-email-input input "
765                        value=""
766                        size="20"
767                        placeholder="Enter your email"
768                        required="required"/>
769                </div>
770                                <div class="tfs-mw-wrapper-block-magic-link">
771                    <a href="#" class="mw-secure-link-button mw-forgot-password-button tfs-mw-wrapper-block-magic-link-button">
772                        Send Secure Login Link                    </a>
773                </div>
774                            <p style="font-size: 16px; color: #666; margin: 10px 0px 0px 0px;text-align: center;">(*check spam folder as well)</p>
775            <input type="hidden" id="mw_passwordless_nonce" name="mw_passwordless_nonce" value="efd7a7daa8" /><input type="hidden" name="_wp_http_referer" value="/login" />        </form>
776        
777</div>
778            </div>
779            <div class="tfs-mw-wrapper-block-divider">or</div>
780            <p class="text-center password-login-toggle-wrap">
781                <a href="#" class="password-login-toggle" id="secure-login-toggle" aria-expanded="false" aria-controls="password-login-form">Login with email and password</a>
782            </p>
783            <div id="password-login-form" class="password-login-form" hidden>
784                <form method="post" action="https://www.southbankresearch.com/wp-login.php" class="wp-user-form" novalidate="novalidate">
785                    <div class="username login-input-height-large">
786	<label for="user_login">Email</label>
787	<input type="text" class="form-control" name="log" value="" size="20" id="user_login" tabindex="11" placeholder="Enter your email" required="required" aria-required="true" />
788</div>
789<div class="password login-input-height-large">
790	<label for="user_pass">Password</label>
791	<div class="mw-password-field-masking-container">
792		<input type="password" class="form-control" name="pwd" value="" size="20" id="user_pass" tabindex="12" placeholder="Enter your password" required="required" aria-required="true" />
793					<span class="mw-password-field-masking mw-password-unmask" data-masking-input-id="user_pass"></span>
794			</div>
795</div>
796<div class="lost-password"><a href="/lost-password">Forgot your password?</a></div>
797<div class="login_fields">
798			<input type="hidden" name="redirect_to" value="/login" />	<input type="hidden" name="user-cookie" value="1" />
799</div>                    <div class="tfs-mw-wrapper-block-magic-link">
800                        <input type="submit" class="tfs-mw-wrapper-block-magic-link-button user-submit" name="user-submit" value="Log In to My Account" tabindex="14"/>
801                    </div>
802                </form>
803            </div>
804                
804<script>
805            (function () {
806                var toggle = document.getElementById('secure-login-toggle');
807                var passwordForm = document.getElementById('password-login-form');
808                var secureForm = document.getElementById('secure-login-form');
809                var defaultVariant = 'secure';
810                var secureLinkFirst = true;
811                var focusPasswordForm = false;
812                var loginSubmitting = false;
813
814                var isLoginFormValid = function (form) {
815                    if (typeof jQuery === 'undefined' || !form) {
816                        return true;
817                    }
818
819                    var $form = jQuery(form);
820                    if (!$form.length || !$form.hasClass('wp-user-form')) {
821                        return true;
822                    }
823
824                    var validator = $form.data('validator');
825                    if (!validator) {
826                        return true;
827                    }
828
829                    return $form.valid();
830                };
831
832                var lockLoginSubmission = function () {
833                    if (loginSubmitting) {
834                        return false;
835                    }
836
837                    loginSubmitting = true;
838
839                    document.querySelectorAll('.password-login-form .user-submit').forEach(function (button) {
840                        button.disabled = true;
841                    });
842
843                    document.querySelectorAll('#secure-link-form .mw-secure-link-button, #secure-link-form .mw-forgot-password-button').forEach(function (button) {
844                        button.setAttribute('aria-disabled', 'true');
845                        button.classList.add('is-submitting');
846                        button.style.pointerEvents = 'none';
847                    });
848
849                    if (toggle) {
850                        toggle.setAttribute('aria-disabled', 'true');
851                        toggle.classList.add('is-submitting');
852                        toggle.style.pointerEvents = 'none';
853                    }
854
855                    return true;
856                };
857
858                var handleSecureLinkButtonClick = function (e) {
859                    if (loginSubmitting) {
860                        e.preventDefault();
861                        e.stopImmediatePropagation();
862                        return;
863                    }
864
865                    if (typeof jQuery === 'undefined' || !secureLinkForm) {
866                        return;
867                    }
868
869                    var $form = jQuery(secureLinkForm);
870                    if (!$form.length || !$form.valid()) {
871                        return;
872                    }
873
874                    lockLoginSubmission();
875                };
876
877                var handleLoginFormSubmit = function (e) {
878                    if (loginSubmitting) {
879                        e.preventDefault();
880                        e.stopImmediatePropagation();
881                        return;
882                    }
883
884                    if (!isLoginFormValid(e.target)) {
885                        return;
886                    }
887
888                    lockLoginSubmission();
889                };
890
891                document.querySelectorAll('.password-login-form .wp-user-form').forEach(function (form) {
892                    form.addEventListener('submit', handleLoginFormSubmit, true);
893                });
894
895                var secureLinkForm = document.getElementById('secure-link-form');
896                if (secureLinkForm) {
897                    secureLinkForm.addEventListener('submit', handleLoginFormSubmit, true);
898
899                    secureLinkForm.querySelectorAll('.mw-secure-link-button, .mw-forgot-password-button').forEach(function (button) {
900                        button.addEventListener('click', handleSecureLinkButtonClick, true);
901                    });
902                }
903
904                var isValidEmail = function (value) {
905                    return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
906                };
907
908                var getSecureLinkEmailMessages = function () {
909                    var defaults = {
910                        required: 'Please enter your email address',
911                        email: 'Please enter a valid email address'
912                    };
913
914                    if (typeof localized_frontend_data === 'undefined') {
915                        return defaults;
916                    }
917
918                    return {
919                        required: localized_frontend_data.txt_reset_email_required || defaults.required,
920                        email: localized_frontend_data.txt_reset_email_valid || defaults.email
921                    };
922                };
923
924                var showPasswordEmailValidationError = function (message) {
925                    var passwordEmailField = document.getElementById('user_login');
926
927                    if (!passwordEmailField) {
928                        return;
929                    }
930
931                    if (typeof jQuery !== 'undefined') {
932                        var $passwordForm = jQuery(passwordEmailField).closest('.wp-user-form');
933                        var validator = $passwordForm.data('validator');
934
935                        if (validator) {
936                            validator.showErrors({ log: message });
937                            passwordEmailField.focus();
938                            return;
939                        }
940                    }
941
942                    var usernameContainer = passwordEmailField.closest('.username');
943
944                    if (!usernameContainer) {
945                        passwordEmailField.focus();
946                        return;
947                    }
948
949                    passwordEmailField.classList.add('error');
950                    passwordEmailField.setAttribute('aria-invalid', 'true');
951
952                    var errorId = 'log-error';
953                    var errorLabel = document.getElementById(errorId);
954
955                    if (!errorLabel) {
956                        errorLabel = document.createElement('label');
957                        errorLabel.id = errorId;
958                        errorLabel.className = 'error';
959                        errorLabel.setAttribute('for', 'user_login');
960                        passwordEmailField.insertAdjacentElement('afterend', errorLabel);
961                    }
962
963                    errorLabel.textContent = message;
964                    passwordEmailField.focus();
965                };
966
967                var submitSecureLinkWithPasswordEmail = function () {
968                    if (loginSubmitting) {
969                        return;
970                    }
971
972                    var passwordEmailField = document.getElementById('user_login');
973                    var secureEmailField = document.getElementById('user_email');
974                    var secureLinkForm = document.getElementById('secure-link-form');
975
976                    if (!passwordEmailField || !secureEmailField || !secureLinkForm) {
977                        return;
978                    }
979
980                    var email = passwordEmailField.value.trim();
981                    var emailMessages = getSecureLinkEmailMessages();
982
983                    if (!email) {
984                        showPasswordEmailValidationError(emailMessages.required);
985                        return;
986                    }
987
988                    if (!isValidEmail(email)) {
989                        showPasswordEmailValidationError(emailMessages.email);
990                        return;
991                    }
992
993                    secureEmailField.value = email;
994
995                    if (!lockLoginSubmission()) {
996                        return;
997                    }
998
999                    secureLinkForm.submit();
1000                };
1001
1002                toggle.addEventListener('click', function (e) {
1003                    e.preventDefault();
1004
1005                    if (loginSubmitting) {
1006                        return;
1007                    }
1008
1009                    // Secure-first layouts (setting or A/B) reveal the password form.
1010                    // Password-first A/B submits a secure link using the email already entered.
1011                    if (defaultVariant === 'secure' || secureLinkFirst) {
1012                        passwordForm.hidden = !passwordForm.hidden;
1013                        toggle.setAttribute('aria-expanded', passwordForm.hidden ? 'false' : 'true');
1014                        if (!passwordForm.hidden) {
1015                            var passwordEmailField = document.getElementById('user_login');
1016                            if (passwordEmailField) {
1017                                passwordEmailField.focus();
1018                            }
1019                        }
1020                    } else {
1021                        submitSecureLinkWithPasswordEmail();
1022                    }
1023                });
1024
1025                var focusVisibleEmailField = function () {
1026                    var emailField = !passwordForm.hidden
1027                        ? document.getElementById('user_login')
1028                        : document.getElementById('user_email');
1029
1030                    if (emailField) {
1031                        emailField.focus();
1032                    }
1033                };
1034
1035                if (focusPasswordForm) {
1036                    passwordForm.hidden = false;
1037                    passwordForm.scrollIntoView({ behavior: 'smooth', block: 'start' });
1038
1039                    var passwordEmailField = document.getElementById('user_login');
1040                    if (passwordEmailField) {
1041                        passwordEmailField.focus();
1042                    }
1043                } else {
1044                    focusVisibleEmailField();
1045                }
1046            })();
1047        </script>
1047
1048    					</div>
1049							</div>
1050		</div>
1051	</div>
1052</section><!--end .footerFix-->
1053<section id="footerWrap">
1054    <div class="container">
1055        <span id="showFooter">Show Sitemap</span>  
1056    </div>
1057
1058    <section id="footer_content">
1059
1060        <div class="container">
1061
1062            <div class="col-md-4">
1063
1064                <strong>PUBLICATIONS</strong>
1065                <div class="publicationList">
1066                    <ul>
1067	                    <li><a href="https://www.southbankresearch.com/secure/altuchers-early-stage-crypto-investor/">Altucher's Early-Stage Crypto Investor</a></li><li><a href="https://www.southbankresearch.com/secure/altuchers-inner-circle/">Altucher's Inner Circle</a></li><li><a href="https://www.southbankresearch.com/secure/altucher-pro-uk/">Altucher's Investment Network Pro UK</a></li><li><a href="https://www.southbankresearch.com/secure/altuchers-investment-network-uk/">Altucher's Investment Network UK</a></li><li><a href="https://www.southbankresearch.com/secure/altuchers-true-alpha-uk/">Altucher's True Alpha UK</a></li><li><a href="https://www.southbankresearch.com/secure/the-situation-report-uk/">Jim Rickards Situation Report UK</a></li><li><a href="https://www.southbankresearch.com/secure/strategic-intelligence-pro-uk/">Jim Rickards Strategic Intelligence Pro UK</a></li><li><a href="https://www.southbankresearch.com/secure/strategic-intelligence-uk/">Jim Rickards Strategic Intelligence UK</a></li><li><a href="https://www.southbankresearch.com/secure/unrestricted-clearance/">Unrestricted Clearance</a></li><li><a href="https://www.southbankresearch.com/secure/microcap-millionaire-uk/">Microcap Millionaire UK</a></li><li><a href="https://www.southbankresearch.com/secure/crypto-profits-extreme/">Hyperion</a></li><li><a href="https://www.southbankresearch.com/secure/exponential-energy-fortunes-private-reserve/">Real Wealth Insider UK</a></li><li><a href="https://www.southbankresearch.com/southbank-sunday-brunch/">Southbank Sunday Brunch</a></li><li><a href="https://www.southbankresearch.com/secure/the-fleet-street-letter/">The Fleet Street Letter</a></li>                    </ul>
1068                </div>
1069
1070            </div>
1071
1072            <div class="col-md-2">
1073
1074                <strong>USEFUL LINKS</strong>
1075
1076                                <ul class="usefulLinks">
1077                    <li id="menu-item-433801" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-433801"><a href="https://www.southbankresearch.com/editors/">Meet the Editors</a></li>
1078<li id="menu-item-433798" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-433798"><a href="https://www.southbankresearch.com/about-us/">About Us</a></li>
1079<li id="menu-item-433799" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-433799"><a href="https://www.southbankresearch.com/contactus/">Contact</a></li>
1080                </ul>
1081                
1082                
1083
1084            </div>
1085
1086            <div class="col-md-6">
1087
1088                <strong>SOUTHBANK INVESTMENT RESEARCH</strong>
1089
1090                <p>You don’t need more information to be a better, more profitable investor. You need better research. Here you’ll find investment ideas and strategies from some of Britain’s most experienced investors produced specifically for investors like you. Learn more about independent stock market research and advice from one of the UK’s oldest financial publishers.</p>
1091
1092            </div>
1093
1094        </div>
1095
1096
1097
1098    </section>
1099
1100    <!-- include footer -->
1101    <!-- footer -->
1102<footer class="footer" role="contentinfo">
1103    <div class = "container">
1104        <div class = "row">
1105            <div class = "col-md-12">
1106                <div class = "footer-padding">
1107                                        <!-- Display the general footer -->
1108                    <p>Registered in England Company No 9539630. VAT No GB629 7287 94. Registered Office: Basement, 95 Southwark Street, London SE1 0HX.</p>
1109
1110<p>Southbank Investment Research Limited is authorised and regulated by the Financial Conduct Authority. FCA No 706697 <a href="https://register.fca.org.uk/" alt="Link to Financial Conduct Authority">https://register.fca.org.uk/</a></p><p>&copy; 2026 Southbank Investment Research Ltd.</p>
1111                </div>
1112            </div>
1113        </div>
1114        <div class="row">
1115            <ul id="footNav">
1116                <!-- Display the footer links -->
1117                <li><a href="/terms-and-conditions/">Terms and Conditions</a></li>
1118<li><a href="/privacy-policy/">Privacy Policy</a></li>
1119<li><a href="/cookie-policy/">Cookie Policy</a></li>
1120<li><a href="/complaints/">Complaints Procedure</a></li>            </ul>
1121        </div>
1122    </div>
1123</footer>
1124<!-- /footer -->
1125        
1125<script type="speculationrules">
1126{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/9/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/southbankresearch/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1127</script>
1127
1128	<section id="SID_post_preview_ol">
1129
1130		<section id="SID_post_preview_wrap">
1131
1132			<div id="postFunctionsWrap">
1133
1134				<ul id="postFunctions">
1135
1136					<li>
1137						<a href="#" id="savePost" class="saveforlater"><span>Save</span><i class="fa fa-download" aria-hidden="true"></i></a>
1138					</li>
1139
1140					<li>
1141						<a href="#" id="printPost" onclick="PrintElem('#SID_post_preview')">
1142							<span>Print</span>
1143							<i class="fa fa-print" aria-hidden="true"></i>
1144						</a>
1145					</li>
1146
1147					<div style="clear:both;"></div>
1148
1149					    
1149<script>
1150      function PrintElem(elem)
1151      {
1152        var content = $(elem).html();
1153        content = content.replace(/loading="lazy"/g, '');
1154
1155        Popup(content);
1156      }
1157
1158      var logo_url = '';
1159      function Popup(data)
1160      {
1161      	var post_id;
1162      	// Add logo to single issue print pages
1163      	if ( $('.singleIssue').attr('data-id') !== undefined) {
1164      		if ( $('.singleIssue').data('id') !== '' ) {
1165      			post_id = $('.singleIssue').attr('data-id');
1166      		}
1167      	}
1168
1169      	if ( post_id && navigator.userAgent.indexOf("Chrome") != -1 ) {
1170	      	$.ajax({
1171				type: 'POST',
1172				url: ajaxurl,
1173				data: {
1174					'post_id': post_id,
1175					'content': data,
1176					'action': 'get_publication_image_ajax'
1177				}, success: function (result) {
1178
1179					if ( result.length >= 1 ) {
1180						data = result + data;
1181					}
1182					open_popup(data);
1183				},
1184				error: function () {
1185					open_popup(data);
1186				}
1187			});
1188	     } else {
1189	     	open_popup(data);
1190	     }
1191      }
1192
1193      function open_popup(data) {
1194
1195      	var mywindow = window.open('','','left=0,top=0,width=950,height=600,toolbar=0,scrollbars=0,status=0,addressbar=0');
1196        var cssLinkTag = '<link rel="stylesheet" id="print-css" href="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/css/print.css?ver=3.11.22" media="print">';
1197        mywindow.document.write('<html><head><title>Southbank Research</title>');
1198        mywindow.document.write('<meta charset="utf-8" />');
1199        mywindow.document.write(cssLinkTag);
1200        mywindow.document.write('</head><body >');
1201        mywindow.document.write(data);
1202        mywindow.document.write('</body></html>');
1203        mywindow.document.close(); // necessary for IE >= 10
1204
1205        var mediaQueryList = mywindow.matchMedia('print');
1206        mediaQueryList.addEventListener('change', function(mql) {
1207          if (!mql.matches) {
1208            mywindow.close()
1209          }
1210        });
1211
1212        mywindow.onload = function() { // wait until all resources loaded
1213          mywindow.focus(); // necessary for IE >= 10
1214          mywindow.print();  // change window to mywindow
1215        };
1216
1217        return true;
1218      }
1219    </script>
1219
1220    
1221				</ul>
1222
1223			</div>
1224
1225			<section id="SID_post_preview">
1226
1227				<section>
1228
1229					<span id="close_post_preview"><i class="fa fa-times" aria-hidden="true"></i></span>
1230
1231					<span id="loader"><i class="fa fa-spinner fa-pulse"></i></span>
1232
1233					<article id="SID_post_content"></article>
1234
1235				</section>
1236
1237			</section>
1238
1239		</section>
1240
1241		<section id="previewFooter">
1242
1243			<!-- footer -->
1244<footer class="footer" role="contentinfo">
1245    <div class = "container">
1246        <div class = "row">
1247            <div class = "col-md-12">
1248                <div class = "footer-padding">
1249                                        <!-- Display the general footer -->
1250                    <p>Registered in England Company No 9539630. VAT No GB629 7287 94. Registered Office: Basement, 95 Southwark Street, London SE1 0HX.</p>
1251
1252<p>Southbank Investment Research Limited is authorised and regulated by the Financial Conduct Authority. FCA No 706697 <a href="https://register.fca.org.uk/" alt="Link to Financial Conduct Authority">https://register.fca.org.uk/</a></p><p>&copy; 2026 Southbank Investment Research Ltd.</p>
1253                </div>
1254            </div>
1255        </div>
1256        <div class="row">
1257            <ul id="footNav">
1258                <!-- Display the footer links -->
1259                <li><a href="/terms-and-conditions/">Terms and Conditions</a></li>
1260<li><a href="/privacy-policy/">Privacy Policy</a></li>
1261<li><a href="/cookie-policy/">Cookie Policy</a></li>
1262<li><a href="/complaints/">Complaints Procedure</a></li>            </ul>
1263        </div>
1264    </div>
1265</footer>
1266<!-- /footer -->
1267			<div style="clear:both;"></div>
1268
1269		</section>
1270
1271	</section>
1272	
1272<script id="carl-js" src="https://www.southbankresearch.com/wp-content/plugins/MoneyWeekResearch-DFP/public/js/carl.js"></script>
vendor: 1 bytes, line 1272
1272
1273<script id="carl-email-subscribe-js-extra">
1274var ajax_object = {"ajaxurl":"https://www.southbankresearch.com/wp-admin/admin-ajax.php","listcode":"","external_subscriptions":"wp7b4dd57ed557072258bb3d10022d7205"};
1275//# sourceURL=carl-email-subscribe-js-extra
1276</script>
vendor: 1 bytes, line 1276
1276
1277<script id="carl-email-subscribe-js" src="https://www.southbankresearch.com/wp-content/plugins/MoneyWeekResearch-DFP/public/js/emailsubscribe.js"></script>
vendor: 1 bytes, line 1277
1277
1278<script id="ppress-frontend-script-js-extra">
1279var pp_ajax_form = {"ajaxurl":"https://www.southbankresearch.com/wp-admin/admin-ajax.php","confirm_delete":"Are you sure?","deleting_text":"Deleting...","deleting_error":"An error occurred. Please try again.","nonce":"bf346e24f5","disable_ajax_form":"false","is_checkout":"0","is_checkout_tax_enabled":"0","is_checkout_autoscroll_enabled":"true"};
1280//# sourceURL=ppress-frontend-script-js-extra
1281</script>
vendor: 1 bytes, line 1281
1281
1282<script id="ppress-frontend-script-js" src="https://www.southbankresearch.com/wp-content/plugins/wp-user-avatar/assets/js/frontend.min.js"></script>
vendor: 1 bytes, line 1282
1282
1283<script id="rocket-browser-checker-js-after">
1284class RocketBrowserCompatibilityChecker {
1285
1286	constructor( options ) {
1287		this.passiveSupported = false;
1288
1289		this._checkPassiveOption( this );
1290		this.options = this.passiveSupported ? options : false;
1291	}
1292
1293	/**
1294	 * Initializes browser check for addEventListener passive option.
1295	 *
1296	 * @link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
1297	 * @private
1298	 *
1299	 * @param self Instance of this object.
1300	 * @returns {boolean}
1301	 */
1302	_checkPassiveOption( self ) {
1303		try {
1304			const options = {
1305				// This function will be called when the browser attempts to access the passive property.
1306				get passive() {
1307					self.passiveSupported = true;
1308					return false;
1309				}
1310			};
1311
1312			window.addEventListener( 'test', null, options );
1313			window.removeEventListener( 'test', null, options );
1314		} catch ( err ) {
1315			self.passiveSupported = false;
1316		}
1317	}
1318
1319	/**
1320	 * Checks if the browser supports requestIdleCallback and cancelIdleCallback. If no, shims its behavior with a polyfills.
1321	 *
1322	 * @link @link https://developers.google.com/web/updates/2015/08/using-requestidlecallback
1323	 */
1324	initRequestIdleCallback() {
1325		if ( ! 'requestIdleCallback' in window ) {
1326			window.requestIdleCallback = ( cb ) => {
1327				const start = Date.now();
1328				return setTimeout( () => {
1329					cb( {
1330						didTimeout: false,
1331						timeRemaining: function timeRemaining() {
1332							return Math.max( 0, 50 - ( Date.now() - start ) );
1333						}
1334					} );
1335				}, 1 );
1336			};
1337		}
1338
1339		if ( ! 'cancelIdleCallback' in window ) {
1340			window.cancelIdleCallback = ( id ) => clearTimeout( id );
1341		}
1342	}
1343
1344	/**
1345	 * Detects if data saver mode is on.
1346	 *
1347	 * @link https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/save-data/#detecting_the_save-data_setting
1348	 *
1349	 * @returns {boolean|boolean}
1350	 */
1351	isDataSaverModeOn() {
1352		return (
1353			'connection' in navigator
1354			&&
1355			true === navigator.connection.saveData
1356		);
1357	}
1358
1359	/**
1360	 * Checks if the browser supports link prefetch.
1361	 *
1362	 * @returns {boolean|boolean}
1363	 */
1364	supportsLinkPrefetch() {
1365		const elem = document.createElement( 'link' );
1366		return (
1367			elem.relList
1368			&&
1369			elem.relList.supports
1370			&&
1371			elem.relList.supports( 'prefetch' )
1372			&&
1373			window.IntersectionObserver
1374			&&
1375			'isIntersecting' in IntersectionObserverEntry.prototype
1376		);
1377	}
1378
1379	isSlowConnection() {
1380		return (
1381			'connection' in navigator
1382			&&
1383			'effectiveType' in navigator.connection
1384			&&
1385			(
1386				'2g' === navigator.connection.effectiveType
1387				||
1388				'slow-2g' === navigator.connection.effectiveType
1389			)
1390		)
1391	}
1392}
1393
1394//# sourceURL=rocket-browser-checker-js-after
1395</script>
vendor: 1 bytes, line 1395
1395
1396<script id="rocket-preload-links-js-extra">
1397var RocketPreloadLinksConfig = {"excludeUris":"/secure/my-southbank/mysubscriptions/|/secure/my-southbank/messagecentre/recent/|/secure/my-southbank/messagecentre/saved/|/secure/my-southbank/help/|/secure/my-southbank/help/update-password/|/secure/my-southbank/help/update-account/|/secure/my-southbank/help/update-email/|/secure/my-southbank/help/email-trouble/|/secure/my-southbank/help/cancel-subscription/|/secure/my-southbank/help/contact-editor/|/secure/my-southbank/help/dp-complaint/|/secure/my-southbank/help/cs-order-update/|/secure/my-southbank/help/cs-refund-update/|/secure/my-southbank/help/cs-complaint/|/secure/my-southbank/help/cs-other-query/|/secure/my-southbank/previousorders/|/login/|/lost-password/|/help-guide/|/(?:.+/)?feed(?:/(?:.+/?)?)?$|/(?:.+/)?embed/|/(index.php/)?(.*)wp-json(/.*|$)|/refer/|/go/|/recommend/|/recommends/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https://www.southbankresearch.com","onHoverDelay":"100","rateThrottle":"3"};
1398//# sourceURL=rocket-preload-links-js-extra
1399</script>
vendor: 1 bytes, line 1399
1399
1400<script id="rocket-preload-links-js-after">
1401class RocketPreloadLinks {
1402
1403	constructor( browser, config ) {
1404		this.browser = browser;
1405		this.config  = config;
1406		this.options = this.browser.options;
1407
1408		this.prefetched = new Set;
1409		this.eventTime  = null;
1410		this.threshold  = 1111;
1411		this.numOnHover = 0;
1412	}
1413
1414	/**
1415	 * Initializes the handler.
1416	 */
1417	init() {
1418		if (
1419			! this.browser.supportsLinkPrefetch()
1420			||
1421			this.browser.isDataSaverModeOn()
1422			||
1423			this.browser.isSlowConnection()
1424		) {
1425			return;
1426		}
1427
1428		this.regex = {
1429			excludeUris: RegExp( this.config.excludeUris, 'i' ),
1430			images: RegExp( '.(' + this.config.imageExt + ')$', 'i' ),
1431			fileExt: RegExp( '.(' + this.config.fileExt + ')$', 'i' )
1432		};
1433
1434		this._initListeners( this );
1435	}
1436
1437	/**
1438	 * Initializes the event listeners.
1439	 *
1440	 * @private
1441	 *
1442	 * @param self instance of this object, used for binding "this" to the listeners.
1443	 */
1444	_initListeners( self ) {
1445		// Setting onHoverDelay to -1 disables the "on-hover" feature.
1446		if ( this.config.onHoverDelay > -1 ) {
1447			document.addEventListener( 'mouseover', self.listener.bind( self ), self.listenerOptions );
1448		}
1449
1450		document.addEventListener( 'mousedown', self.listener.bind( self ), self.listenerOptions );
1451		document.addEventListener( 'touchstart', self.listener.bind( self ), self.listenerOptions );
1452	}
1453
1454	/**
1455	 * Event listener. Processes when near or on a valid <a> hyperlink.
1456	 *
1457	 * @param Event event Event instance.
1458	 */
1459	listener( event ) {
1460		const linkElem = event.target.closest( 'a' );
1461		const url      = this._prepareUrl( linkElem );
1462		if ( null === url ) {
1463			return;
1464		}
1465
1466		switch ( event.type ) {
1467			case 'mousedown':
1468			case 'touchstart':
1469				this._addPrefetchLink( url );
1470				break;
1471			case 'mouseover':
1472				this._earlyPrefetch( linkElem, url, 'mouseout' );
1473		}
1474	}
1475
1476	/**
1477	 *
1478	 * @private
1479	 *
1480	 * @param Element|null linkElem
1481	 * @param object url
1482	 * @param string resetEvent
1483	 */
1484	_earlyPrefetch( linkElem, url, resetEvent ) {
1485		const doPrefetch = () => {
1486			falseTrigger = null;
1487
1488			// Start the rate throttle: 1 sec timeout.
1489			if ( 0 === this.numOnHover ) {
1490				setTimeout( () => this.numOnHover = 0, 1000 );
1491			}
1492			// Bail out when exceeding the rate throttle.
1493			else if ( this.numOnHover > this.config.rateThrottle ) {
1494				return;
1495			}
1496
1497			this.numOnHover++;
1498			this._addPrefetchLink( url );
1499		};
1500
1501		// Delay to avoid false triggers for hover/touch/tap.
1502		let falseTrigger = setTimeout( doPrefetch, this.config.onHoverDelay );
1503
1504		// On reset event, reset the false trigger timer.
1505		const reset = () => {
1506			linkElem.removeEventListener( resetEvent, reset, { passive: true } );
1507			if ( null === falseTrigger ) {
1508				return;
1509			}
1510
1511			clearTimeout( falseTrigger );
1512			falseTrigger = null;
1513		};
1514		linkElem.addEventListener( resetEvent, reset, { passive: true } );
1515	}
1516
1517	/**
1518	 * Adds a <link rel="prefetch" href="<url>"> for the given URL.
1519	 *
1520	 * @param string url The Given URL to prefetch.
1521	 */
1522	_addPrefetchLink( url ) {
1523		this.prefetched.add( url.href );
1524
1525		return new Promise( ( resolve, reject ) => {
1526			const elem   = document.createElement( 'link' );
1527			elem.rel     = 'prefetch';
1528			elem.href    = url.href;
1529			elem.onload  = resolve;
1530			elem.onerror = reject;
1531
1532			document.head.appendChild( elem );
1533		} ).catch(() => {
1534			// ignore and continue.
1535		});
1536	}
1537
1538	/**
1539	 * Prepares the target link's URL.
1540	 *
1541	 * @private
1542	 *
1543	 * @param Element|null linkElem Instance of the link element.
1544	 * @returns {null|*}
1545	 */
1546	_prepareUrl( linkElem ) {
1547		if (
1548			null === linkElem
1549			||
1550			typeof linkElem !== 'object'
1551			||
1552			! 'href' in linkElem
1553			||
1554			// Link prefetching only works on http/https protocol.
1555			[ 'http:', 'https:' ].indexOf( linkElem.protocol ) === -1
1556		) {
1557			return null;
1558		}
1559
1560		const origin   = linkElem.href.substring( 0, this.config.siteUrl.length );
1561		const pathname = this._getPathname( linkElem.href, origin );
1562		const url      = {
1563			original: linkElem.href,
1564			protocol: linkElem.protocol,
1565			origin: origin,
1566			pathname: pathname,
1567			href: origin + pathname
1568		};
1569
1570		return this._isLinkOk( url ) ? url : null;
1571	}
1572
1573	/**
1574	 * Gets the URL's pathname. Note: ensures the pathname matches the permalink structure.
1575	 *
1576	 * @private
1577	 *
1578	 * @param object url Instance of the URL.
1579	 * @param string origin The target link href's origin.
1580	 * @returns {string}
1581	 */
1582	_getPathname( url, origin ) {
1583		let pathname = origin
1584			? url.substring( this.config.siteUrl.length )
1585			: url;
1586
1587		if ( ! pathname.startsWith( '/' ) ) {
1588			pathname = '/' + pathname;
1589		}
1590
1591		if ( this._shouldAddTrailingSlash( pathname ) ) {
1592			return pathname + '/';
1593		}
1594
1595		return pathname;
1596	}
1597
1598	_shouldAddTrailingSlash( pathname ) {
1599		return (
1600			this.config.usesTrailingSlash
1601			&&
1602			! pathname.endsWith( '/' )
1603			&&
1604			! this.regex.fileExt.test( pathname )
1605		);
1606	}
1607
1608	/**
1609	 * Checks if the given link element is okay to process.
1610	 *
1611	 * @private
1612	 *
1613	 * @param object url URL parts object.
1614	 *
1615	 * @returns {boolean}
1616	 */
1617	_isLinkOk( url ) {
1618		if ( null === url || typeof url !== 'object' ) {
1619			return false;
1620		}
1621
1622		return (
1623			! this.prefetched.has( url.href )
1624			&&
1625			url.origin === this.config.siteUrl // is an internal document.
1626			&&
1627			url.href.indexOf( '?' ) === -1 // not a query string.
1628			&&
1629			url.href.indexOf( '#' ) === -1 // not an anchor.
1630			&&
1631			! this.regex.excludeUris.test( url.href ) // not excluded.
1632			&&
1633			! this.regex.images.test( url.href ) // not an image.
1634		);
1635	}
1636
1637	/**
1638	 * Named static constructor to encapsulate how to create the object.
1639	 */
1640	static run() {
1641		// Bail out if the configuration not passed from the server.
1642		if ( typeof RocketPreloadLinksConfig === 'undefined' ) {
1643			return;
1644		}
1645
1646		const browser  = new RocketBrowserCompatibilityChecker( {
1647			capture: true,
1648			passive: true
1649		} );
1650		const instance = new RocketPreloadLinks( browser, RocketPreloadLinksConfig );
1651		instance.init();
1652	}
1653}
1654
1655RocketPreloadLinks.run();
1656
1657//# sourceURL=rocket-preload-links-js-after
1658</script>
vendor: 1 bytes, line 1658
1658
1659<script id="cookie-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/cookie.js"></script>
vendor: 1 bytes, line 1659
1659
1660<script id="jasny-mobile-menu-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/lib/jasny-bootstrap.min.js"></script>
vendor: 1 bytes, line 1660
1660
1661<script id="savevideoforlater-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/videocenter.js"></script>
vendor: 1 bytes, line 1661
1661
1662<script id="scroll-forever-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/scrollForever.min.js"></script>
vendor: 1 bytes, line 1662
1662
1663<script id="tcc-openchatlink-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/TCC/onOpenChatLink.js"></script>
vendor: 1 bytes, line 1663
1663
1664<script id="tcc-config-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/TCC/Config.js"></script>
vendor: 1 bytes, line 1664
1664
1665<script id="generic-js-extra">
1666var generic_object = {"widgetclass":".cfsnip-widget","pubcode":"","isloggedin":"false","hasaccess":"false"};
1667var generic_script = {"subscribedToPub":"false"};
1668//# sourceURL=generic-js-extra
1669</script>
vendor: 1 bytes, line 1669
1669
1670<script id="generic-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/scripts.js"></script>
vendor: 1 bytes, line 1670
1670
1671<script id="custom-data-tables-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/portfolio-tracker-theme/assets/js/custom.dataTables.js"></script>
vendor: 1 bytes, line 1671
1671
1672<script id="leadgen-protection-js-js-extra">
1673var LFVars = {"ajaxUrl":"/wp-admin/admin-ajax.php","ajax_nonce":"15e0378a4b","siteKey":"6LcW10IrAAAAABq18lRtYk_ZJZGRIUb39wIsMTvV"};
1674//# sourceURL=leadgen-protection-js-js-extra
1675</script>
vendor: 1 bytes, line 1675
1675
1676<script id="leadgen-protection-js-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/leadgen-protection.js"></script>
vendor: 125 bytes, lines 1676-1677
1676
1677<script id="recaptcha-js" src="https://www.google.com/recaptcha/api.js?onload=initRecaptcha&#038;render=explicit"></script>
1678<script id="sbr-login-form-validation-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/login-form-validation.js"></script>
vendor: 1 bytes, line 1678
1678
1679<script id="sbr-login-experiment-tracking-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/login-experiment-tracking.js"></script>
vendor: 1 bytes, line 1679
1679
1680<script id="bootstrap-toggle-js" src="https://www.southbankresearch.com/wp-content/themes/southbankresearch/assets/js/lib/bootstrap-toggle.min.js"></script>
vendor: 1 bytes, line 1680
1680
1681<script id="wp-emoji-settings" type="application/json">
1682{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"wpemoji":"https://www.southbankresearch.com/wp-includes/js/wp-emoji.js","twemoji":"https://www.southbankresearch.com/wp-includes/js/twemoji.js"}}
1683</script>
vendor: 1 bytes, line 1683
1683
1684<script type="module">
1685/**
1686 * @output wp-includes/js/wp-emoji-loader.js
1687 */
1688
1689/* eslint-env es6 */
1690
1691// Note: This is loaded as a script module, so there is no need for an IIFE to prevent pollution of the global scope.
1692
1693/**
1694 * Emoji Settings as exported in PHP via _print_emoji_detection_script().
1695 * @typedef WPEmojiSettings
1696 * @type {object}
1697 * @property {?object} source
1698 * @property {?string} source.concatemoji
1699 * @property {?string} source.twemoji
1700 * @property {?string} source.wpemoji
1701 */
1702
1703const selector = 'script#wp-emoji-settings';
1704const script = document.querySelector( selector );
1705if ( ! ( script instanceof HTMLScriptElement ) ) {
1706	throw new Error( `Element missing: ${ selector }`);
1707}
1708const settings = /** @type {WPEmojiSettings} */ ( JSON.parse( script.text ) );
1709
1710// For compatibility with other scripts that read from this global, in particular wp-includes/js/wp-emoji.js (source file: js/_enqueues/wp/emoji.js).
1711window._wpemojiSettings = settings;
1712
1713/**
1714 * Support tests.
1715 * @typedef SupportTests
1716 * @type {object}
1717 * @property {?boolean} flag
1718 * @property {?boolean} emoji
1719 */
1720
1721const sessionStorageKey = 'wpEmojiSettingsSupports';
1722const tests = [ 'flag', 'emoji' ];
1723
1724/**
1725 * Checks whether the browser supports offloading to a Worker.
1726 *
1727 * @since 6.3.0
1728 *
1729 * @private
1730 *
1731 * @returns {boolean}
1732 */
1733function supportsWorkerOffloading() {
1734	return (
1735		typeof Worker !== 'undefined' &&
1736		typeof OffscreenCanvas !== 'undefined' &&
1737		typeof URL !== 'undefined' &&
1738		URL.createObjectURL &&
1739		typeof Blob !== 'undefined'
1740	);
1741}
1742
1743/**
1744 * @typedef SessionSupportTests
1745 * @type {object}
1746 * @property {number} timestamp
1747 * @property {SupportTests} supportTests
1748 */
1749
1750/**
1751 * Get support tests from session.
1752 *
1753 * @since 6.3.0
1754 *
1755 * @private
1756 *
1757 * @returns {?SupportTests} Support tests, or null if not set or older than 1 week.
1758 */
1759function getSessionSupportTests() {
1760	try {
1761		/** @type {SessionSupportTests} */
1762		const item = JSON.parse(
1763			sessionStorage.getItem( sessionStorageKey )
1764		);
1765		if (
1766			typeof item === 'object' &&
1767			typeof item.timestamp === 'number' &&
1768			new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds.
1769			typeof item.supportTests === 'object'
1770		) {
1771			return item.supportTests;
1772		}
1773	} catch ( e ) {}
1774	return null;
1775}
1776
1777/**
1778 * Persist the supports in session storage.
1779 *
1780 * @since 6.3.0
1781 *
1782 * @private
1783 *
1784 * @param {SupportTests} supportTests Support tests.
1785 */
1786function setSessionSupportTests( supportTests ) {
1787	try {
1788		/** @type {SessionSupportTests} */
1789		const item = {
1790			supportTests: supportTests,
1791			timestamp: new Date().valueOf()
1792		};
1793
1794		sessionStorage.setItem(
1795			sessionStorageKey,
1796			JSON.stringify( item )
1797		);
1798	} catch ( e ) {}
1799}
1800
1801/**
1802 * Checks if two sets of Emoji characters render the same visually.
1803 *
1804 * This is used to determine if the browser is rendering an emoji with multiple data points
1805 * correctly. set1 is the emoji in the correct form, using a zero-width joiner. set2 is the emoji
1806 * in the incorrect form, using a zero-width space. If the two sets render the same, then the browser
1807 * does not support the emoji correctly.
1808 *
1809 * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
1810 * scope. Everything must be passed by parameters.
1811 *
1812 * @since 4.9.0
1813 *
1814 * @private
1815 *
1816 * @param {CanvasRenderingContext2D} context 2D Context.
1817 * @param {string} set1 Set of Emoji to test.
1818 * @param {string} set2 Set of Emoji to test.
1819 *
1820 * @return {boolean} True if the two sets render the same.
1821 */
1822function emojiSetsRenderIdentically( context, set1, set2 ) {
1823	// Cleanup from previous test.
1824	context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
1825	context.fillText( set1, 0, 0 );
1826	const rendered1 = new Uint32Array(
1827		context.getImageData(
1828			0,
1829			0,
1830			context.canvas.width,
1831			context.canvas.height
1832		).data
1833	);
1834
1835	// Cleanup from previous test.
1836	context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
1837	context.fillText( set2, 0, 0 );
1838	const rendered2 = new Uint32Array(
1839		context.getImageData(
1840			0,
1841			0,
1842			context.canvas.width,
1843			context.canvas.height
1844		).data
1845	);
1846
1847	return rendered1.every( ( rendered2Data, index ) => {
1848		return rendered2Data === rendered2[ index ];
1849	} );
1850}
1851
1852/**
1853 * Checks if the center point of a single emoji is empty.
1854 *
1855 * This is used to determine if the browser is rendering an emoji with a single data point
1856 * correctly. The center point of an incorrectly rendered emoji will be empty. A correctly
1857 * rendered emoji will have a non-zero value at the center point.
1858 *
1859 * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
1860 * scope. Everything must be passed by parameters.
1861 *
1862 * @since 6.8.2
1863 *
1864 * @private
1865 *
1866 * @param {CanvasRenderingContext2D} context 2D Context.
1867 * @param {string} emoji Emoji to test.
1868 *
1869 * @return {boolean} True if the center point is empty.
1870 */
1871function emojiRendersEmptyCenterPoint( context, emoji ) {
1872	// Cleanup from previous test.
1873	context.clearRect( 0, 0, context.canvas.width, context.canvas.height );
1874	context.fillText( emoji, 0, 0 );
1875
1876	// Test if the center point (16, 16) is empty (0,0,0,0).
1877	const centerPoint = context.getImageData(16, 16, 1, 1);
1878	for ( let i = 0; i < centerPoint.data.length; i++ ) {
1879		if ( centerPoint.data[ i ] !== 0 ) {
1880			// Stop checking the moment it's known not to be empty.
1881			return false;
1882		}
1883	}
1884
1885	return true;
1886}
1887
1888/**
1889 * Determines if the browser properly renders Emoji that Twemoji can supplement.
1890 *
1891 * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
1892 * scope. Everything must be passed by parameters.
1893 *
1894 * @since 4.2.0
1895 *
1896 * @private
1897 *
1898 * @param {CanvasRenderingContext2D} context 2D Context.
1899 * @param {string} type Whether to test for support of "flag" or "emoji".
1900 * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
1901 * @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification.
1902 *
1903 * @return {boolean} True if the browser can render emoji, false if it cannot.
1904 */
1905function browserSupportsEmoji( context, type, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) {
1906	let isIdentical;
1907
1908	switch ( type ) {
1909		case 'flag':
1910			/*
1911			 * Test for Transgender flag compatibility. Added in Unicode 13.
1912			 *
1913			 * To test for support, we try to render it, and compare the rendering to how it would look if
1914			 * the browser doesn't render it correctly (white flag emoji + transgender symbol).
1915			 */
1916			isIdentical = emojiSetsRenderIdentically(
1917				context,
1918				'\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence
1919				'\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space
1920			);
1921
1922			if ( isIdentical ) {
1923				return false;
1924			}
1925
1926			/*
1927			 * Test for Sark flag compatibility. This is the least supported of the letter locale flags,
1928			 * so gives us an easy test for full support.
1929			 *
1930			 * To test for support, we try to render it, and compare the rendering to how it would look if
1931			 * the browser doesn't render it correctly ([C] + [Q]).
1932			 */
1933			isIdentical = emojiSetsRenderIdentically(
1934				context,
1935				'\uD83C\uDDE8\uD83C\uDDF6', // as the sequence of two code points
1936				'\uD83C\uDDE8\u200B\uD83C\uDDF6' // as the two code points separated by a zero-width space
1937			);
1938
1939			if ( isIdentical ) {
1940				return false;
1941			}
1942
1943			/*
1944			 * Test for English flag compatibility. England is a country in the United Kingdom, it
1945			 * does not have a two letter locale code but rather a five letter sub-division code.
1946			 *
1947			 * To test for support, we try to render it, and compare the rendering to how it would look if
1948			 * the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]).
1949			 */
1950			isIdentical = emojiSetsRenderIdentically(
1951				context,
1952				// as the flag sequence
1953				'\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F',
1954				// with each code point separated by a zero-width space
1955				'\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F'
1956			);
1957
1958			return ! isIdentical;
1959		case 'emoji':
1960			/*
1961			 * Is there a large, hairy, humanoid mythical creature living in the browser?
1962			 *
1963			 * To test for Emoji 17.0 support, try to render a new emoji: Hairy Creature.
1964			 *
1965			 * The hairy creature emoji is a single code point emoji. Testing for browser
1966			 * support required testing the center point of the emoji to see if it is empty.
1967			 *
1968			 * 0xD83E 0x1FAC8 (\uD83E\u1FAC8) == 🫈 Hairy creature.
1969			 *
1970			 * When updating this test, please ensure that the emoji is either a single code point
1971			 * or switch to using the emojiSetsRenderIdentically function and testing with a zero-width
1972			 * joiner vs a zero-width space.
1973			 */
1974			const notSupported = emojiRendersEmptyCenterPoint( context, '\uD83E\u1FAC8' );
1975			return ! notSupported;
1976	}
1977
1978	return false;
1979}
1980
1981/**
1982 * Checks emoji support tests.
1983 *
1984 * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing
1985 * scope. Everything must be passed by parameters.
1986 *
1987 * @since 6.3.0
1988 *
1989 * @private
1990 *
1991 * @param {string[]} tests Tests.
1992 * @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification.
1993 * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification.
1994 * @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification.
1995 *
1996 * @return {SupportTests} Support tests.
1997 */
1998function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) {
1999	let canvas;
2000	if (
2001		typeof WorkerGlobalScope !== 'undefined' &&
2002		self instanceof WorkerGlobalScope
2003	) {
2004		canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement.
2005	} else {
2006		canvas = document.createElement( 'canvas' );
2007	}
2008
2009	const context = canvas.getContext( '2d', { willReadFrequently: true } );
2010
2011	/*
2012	 * Chrome on OS X added native emoji rendering in M41. Unfortunately,
2013	 * it doesn't work when the font is bolder than 500 weight. So, we
2014	 * check for bold rendering support to avoid invisible emoji in Chrome.
2015	 */
2016	context.textBaseline = 'top';
2017	context.font = '600 32px Arial';
2018
2019	const supports = {};
2020	tests.forEach( ( test ) => {
2021		supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint );
2022	} );
2023	return supports;
2024}
2025
2026/**
2027 * Adds a script to the head of the document.
2028 *
2029 * @ignore
2030 *
2031 * @since 4.2.0
2032 *
2033 * @param {string} src The url where the script is located.
2034 *
2035 * @return {void}
2036 */
2037function addScript( src ) {
2038	const script = document.createElement( 'script' );
2039	script.src = src;
2040	script.defer = true;
2041	document.head.appendChild( script );
2042}
2043
2044settings.supports = {
2045	everything: true,
2046	everythingExceptFlag: true
2047};
2048
2049// Obtain the emoji support from the browser, asynchronously when possible.
2050new Promise( ( resolve ) => {
2051	let supportTests = getSessionSupportTests();
2052	if ( supportTests ) {
2053		resolve( supportTests );
2054		return;
2055	}
2056
2057	if ( supportsWorkerOffloading() ) {
2058		try {
2059			// Note that the functions are being passed as arguments due to minification.
2060			const workerScript =
2061				'postMessage(' +
2062				testEmojiSupports.toString() +
2063				'(' +
2064				[
2065					JSON.stringify( tests ),
2066					browserSupportsEmoji.toString(),
2067					emojiSetsRenderIdentically.toString(),
2068					emojiRendersEmptyCenterPoint.toString()
2069				].join( ',' ) +
2070				'));';
2071			const blob = new Blob( [ workerScript ], {
2072				type: 'text/javascript'
2073			} );
2074			const worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } );
2075			worker.onmessage = ( event ) => {
2076				supportTests = event.data;
2077				setSessionSupportTests( supportTests );
2078				worker.terminate();
2079				resolve( supportTests );
2080			};
2081			return;
2082		} catch ( e ) {}
2083	}
2084
2085	supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint );
2086	setSessionSupportTests( supportTests );
2087	resolve( supportTests );
2088} )
2089	// Once the browser emoji support has been obtained from the session, finalize the settings.
2090	.then( ( supportTests ) => {
2091		/*
2092		 * Tests the browser support for flag emojis and other emojis, and adjusts the
2093		 * support settings accordingly.
2094		 */
2095		for ( const test in supportTests ) {
2096			settings.supports[ test ] = supportTests[ test ];
2097
2098			settings.supports.everything =
2099				settings.supports.everything && settings.supports[ test ];
2100
2101			if ( 'flag' !== test ) {
2102				settings.supports.everythingExceptFlag =
2103					settings.supports.everythingExceptFlag &&
2104					settings.supports[ test ];
2105			}
2106		}
2107
2108		settings.supports.everythingExceptFlag =
2109			settings.supports.everythingExceptFlag &&
2110			! settings.supports.flag;
2111
2112		// When the browser can not render everything we need to load a polyfill.
2113		if ( ! settings.supports.everything ) {
2114			const src = settings.source || {};
2115
2116			if ( src.concatemoji ) {
2117				addScript( src.concatemoji );
2118			} else if ( src.wpemoji && src.twemoji ) {
2119				addScript( src.twemoji );
2120				addScript( src.wpemoji );
2121			}
2122		}
2123	} );
2124//# sourceURL=https://www.southbankresearch.com/wp-includes/js/wp-emoji-loader.js
2125</script>
2125
2126        
2127</section>
2128
2129	        	
2130    
2131    <!-- <a id="f9chat1" role="button" href="#" class="btn btn-primary" title onclick="onOpenChatLink()"></a> -->
2132    
2133	</body>
2134</html>
2135
2136<!-- Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com -->

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.