devxlogo

The Python 2.5 Goodie Bag: Language Enhancements and Modules

The Python 2.5 Goodie Bag: Language Enhancements and Modules

n my last article, “Drill-down on Three Major New Modules in Python 2.5 Standard Library,” I discussed how the ctypes, pysqlite, and ElementTree language modules can save you time and aggravation. In this, my third and final, article on the new 2.5 version of Python, I’ll go over some additional language enhancements and modules that each, individually, adds an important ingredient to some of the smaller subsets of the Python community. I will also cover performance improvements, porting your code from previous versions of Python, and some other odds and ends that will be important to anyone who is ready to adopt the latest release of Python.

Absolute and Relative Imports
To get started, I’ll run through some of the basics of Python language organization.

Python software is organized in modules (.py files) stored in packages. The modules may be pre-compiled (.pyc) or could be extension modules. Python packages are usually just directories that appear in sys.path. Sub-packages are sub-directories of a package directory (or other sub-package) that contain an __init__.py. If the __init__.py doesn’t exist then the sub-directory is ignored by Python’s import mechanism.

Python locates modules that you import by searching a list of directories (or zip files) stored in sys.path. This list is initialized with the directory of the running program, the contents of the PYTHONPATH environment variable, and a list of platform-dependent directories. Programs may modify sys.path at runtime to control the import behavior.

Prior to Python 2.5 imports were always relative to your sys.path. The algorithm was very simple:

When importing ‘aaa.a‘ scan through sys.path. Try to import aaa.a.py from each entry in sys.path.

There were two problems with this algorithm:

  1. Local modules might shadow library modules with identical names. This becomes more of a problem as the standard library grows.
  2. Modules inside nested packages had to use the full path to import modules from a sibling package or parent package.

Python 2.5 added a __future__ option to change the import behavior in order to address these problems. I created a little package and a couple of helper modules to demonstrate the import behavior in Python 2.5:

aaa (package) |-- __init__.py |-- a.py |-- aa.py

Here is the content of the modules:

__init__.py-----------print 'aaa/__init__ here'a.py----from __future__ import absolute_importprint 'aaa/a here'import aaaa.py-----print r'aaaaa here'

I “installed” the package by copying it to Lib/site-packages (the location of third-party Python packages).

In addition I created two modules in the site-packages directory.

import_test.py-----------print 'import_test here'import aaa.aaa.py-----print 'aa here'

Each module just prints its package (if in a package) and its name. It all starts with import_test.py that imports aaa.a. This results in the automatic import of aaa/__init__.py and then aaa/a.py. The latter, aaa/a.py, is the interesting piece. It uses the new absolute_import feature. It imports aa. A module named aa.py exists in the a.py‘s directory (aaa) and in the site-packages directory. Without absolute_import the local aa.py would have been imported (aaa/a.py), but the “absolute” aa.py in site-packages is imported instead. Here is the output of running import_test.py:

aaa/__init__ hereaaa/a hereaa here

If I comment out the __future__ line the local aaa/aa.py module will be imported from aaa.a.py:

aaa/__init__ hereaaa/a hereaaa/aa here

What if you want to import both the local aa and the absolute aa? Prior to Python 2.5 you would have had to play tricks and dynamically modify your sys.path (and hopefully remember to restore it afterwards). With Python 2.5 you can use the new dot notation:

aaa/a.py---------from __future__ import absolute_importprint r'aaa/a here'import aafrom . import aa

Output (of import_test.py):

import_test hereaaa/__init__ hereaaa/a hereaa hereaaa/aa here

The ‘.’ allows you to import from the current directory. Double dot? ‘..’ ?can be used to import from a parent package in a relative path notation.

There is one caveat. The relative import syntax works inside packages only. If you try to use it in a main module you will get the following exception:

ValueError: Attempted relative import in non-package

The ‘__index__’ Method
Slicing is an operation performed on sequences that allows you to extract a subset of the element. The syntax is: sequence[start:stop:step]. ‘start‘ is mandatory, ‘stop‘ defaults to the end of the sequence, and ‘step‘ defaults to 1. When you slice a sequence, Python starts from the start index and returns another sequence (same type as original) that contains all the elements between ‘start‘ and ‘stop‘ in increments of ‘step‘.

You can use a negative number to count from the end of the sequence too. The step may also be negative, but in this case the start index must be bigger than the stop index resulting in a reverse slice. This used to be the only way to reverse a sequence before the reversed() built-in function was introduced in Python 2.4 (yes, you get some history for the same price).

Now let’s break some bread and slice it too.

# prepare a list called bread with 10 integers bread = range(1,11)print bread# plain sliceprint bread[1:10:2]# slice using negative indicesprint bread[-9:-7]# old way of reversing a sequenceprint bread[::-1]

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10][2, 4, 6, 8, 10][2, 3][10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

The indices for start, stop, and step used to be integers or long integers only. This is fine for almost everybody. Why would you want to index into a collection using a different type? You wouldn’t. After all, the meaning of an index is a specific location inside the sequence, and locations are always integers. However, NumPy, which is the leading Python scientific computing package, requires it. NumPy is a Python extension that provides a lightning fast multi-dimensional array and various functions, linear algebra operations, and transformations to act on it.

I can hear you thinking: “What’s the big deal about arrays? Didn’t we have them back in the day in BASIC for the Dragon32?”. Well, you didn’t have THAT kind of array. Multi-dimensional arrays (tensors) are a crucial building block for many scientific computations. NumPy is a very important and influential package that single-handedly made Python a great success in the scientific community. As evidence of its importance, NumPy is slated for inclusion in the standard Python library at some point.

NumPy uses its own data types (remember the ctypes data types?) to represent integers with higher fidelity than Python’s native int and long. These types were not usable for slicing, which is very common in NumPy. The most viable solution was to allow arbitrary types to be used as slicing indices if they define an __index__ method whose return value is int or long. In the following code I defined a few classes with __index__ methods that I use to dice and slice a poor ‘bread.’

class One(object):    def __index__(self):        return 1class Two(object):    def __index__(self):        return 2class Ten(object):    def __index__(self):        return 10print bread[One():Ten():Two()]one = One()two = Two()ten = Ten()print x[one:ten:two]

Output:

[2, 4, 6, 8, 10][2, 4, 6, 8, 10]

My Name Is __missing__, dict.__missing__
The dict __missing__ method is a neat addition to the arsenal of useful tools. It addresses a common problem of returning a default value from a failed lookup on a dictionary.

Suppose your program needs to store securely the code names of British secret agents. You are aware of course that these code names all start with double zero and end with a positive integer. After careful analysis of the problem domain you decide to use a 100×100 sparse matrix (a matrix that contains mostly zeros) to store the code names. Your input is a list of tuples. The first and second elements are the row and column (two-dimensional index), and the third element is the integer that follows the mandatory ’00’. You can represent such a matrix using a plain (non-sparse) dictionary:

sparse_matrix = {}for row in range(100):          for col in range(100):                    sparse_matrix[(row,col)] = 0                     for i in (5,4,8), (88, 33, 7), (99,99,9):          sparse_matrix[i[:2]] = i[2]            print '%d%d%d %s' % (sparse_matrix[(1,1)],                     sparse_matrix[(14,61)],                     sparse_matrix[(88,33)],                     'licensed to kill')

Output:

007 licensed to kill

That works, but it’s not very smart or sparse. A huge dictionary of 10,000 entries is required to identify just three agents?and it takes a while to initialize this huge array with zeros. A much better solution is to keep just the non-zero elements. The problem is what to do when someone accesses a zero entry (missing from the dictionary). The dictionary throws a KeyError exception:

Traceback (most recent call last):  File "/Users/gsayfan/Documents/docs/Publications/DevX/Python 2.5 - Fresh from the Oven/part_3.py", line 57, in     print '%d%d%d %s' % (sparse_matrix[(1,1)],KeyError: (1, 1)

There were several cumbersome solutions prior to Python 2.5. All of them required the caller to handle the missing value. One way was to wrap every access to the dictionary in a try-except block; another way was to use the get() method and pass in a default value to return; and the last way was to use the setdefault() method, which is similar to get() but also sets the default value in the dictionary for posterity.

x = {1:1, 2:2, 3:3}# This is just uglytry:    print x[0]except KeyError:    print 8# This just gets the default value without modifying the dictprint x.get(0, 8)print 'x has %d entries' % len(x)# This actually adds the entry 0:8 to the dictprint x.setdefault(0, 8)print 'x has %d entries' % len(x)

Output:

88x has 3 entries8x has 4 entries

In Python 2.5 there is an elegant way to handle this situation. The dict type has a new hook function called __missing__. It is called whenever you try to access a missing key. The default implementation is to raise the infamous KeyError exception, but you can subclass dict and override the __missing__ method in your subclass to do whatever you want. This is much better because the caller is not responsible for handling default values. Sometimes the returned value should be based on dynamic calculation and the caller doesn’t even know what the proper default value is. Note the dict size remains the same even when accessing non-existing elements.

class SparseDict(dict):    def __missing__(self, key):        return 0sparse_matrix = SparseDict()for i in (5,4,3), (88, 33, 7), (99,99,99):    sparse_matrix[i[:2]] = i[2]print '%d%d%d %s' % (sparse_matrix[(1,1)],                     sparse_matrix[(14,61)],                     sparse_matrix[(88,33)],                     'licensed to kill')print len(sparse_matrix)print sparse_matrix

Output:

007 licensed to kill3{(88, 33): 7, (5, 4): 3, (99, 99): 99}

This solution is elegant and allows full flexibility (you even have the requested key to base your return value on, if you want it). Nonetheless, it feels a little intrusive to write a subclass for every dictionary with a default, especially if you have multiple dictionaries with different defaults. Have no fear. Python 2.5 comes with a default dict, which is almost as flexible as implementing __missing__ yourself.

The default dict lives in the collections package, and it accept a default_factory callable in its constructor. Whenever a non-existing key is accessed, the default_factory will be invoked to produce the proper value. Don’t worry, you don’t need to start writing factory classes or functions now. Most of Python’s types are also factory functions and in most cases this is exactly what you want. For example, Python’s int is a factory function that returns 0 when invoked without arguments. This is exactly what we need for our sparse matrix. Note that accessing non-existing entries sets them in the dictionary just like calling setdefault().

import collectionssparse_matrix = collections.defaultdict(int)for i in (5,4,3), (88, 33, 7), (99,99,99):    sparse_matrix[i[:2]] = i[2]print '%d%d%d %s' % (sparse_matrix[(1,1)],                     sparse_matrix[(14,61)],                     sparse_matrix[(88,33)],                     'licensed to kill')print len(sparse_matrix)print sparse_matrix

Output:

007 licensed to kill5defaultdict(, {(88, 33): 7, (5, 4): 3, (99, 99): 99, (14, 61): 0, (1, 1): 0})

More Modules

hashlib
Hashlib is a new module that provides various secure hash algorithms. The supported algorithms (always available) are: MD5, SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512. Other algorithms may be present and you can try to instantiate them. Secure hash algorithms are used for protocols and standards such as SSH, SSL, PGP, TLS, and S/MIME.

Hashlib has a uniform simple interface for all the algorithms and it’s very easy to use. You create a hash object. You call the update() method one or more times to add text. Finally you call the digest() or hexdigest() methods to get the hash value.

import hashlibx = hashlib.sha256()x.update('Yeah, ')x.update('it ')x.update('works!!!')d1 = x.digest()print x.hexdigest()x = hashlib.sha256()x.update('Yeah, it works!!!')d2 = x.digest()print x.hexdigest()assert d1 == d2x = hashlib.sha224()x.update('Yeah, it works!!!')print x.hexdigest()x = hashlib.sha1()x.update('Yeah, it works!!!')print x.hexdigest()x = hashlib.md5()x.update('Yeah, it works!!!')print x.hexdigest()

Output:

d17380061dff0857ad21450c1206feceb3ada7196b8ef8109fb8b460761241b4d17380061dff0857ad21450c1206feceb3ada7196b8ef8109fb8b460761241b43bb9c0cbc9edb898f5eeefad262d1bafa9edf84bf63c2020ca33dab098f74ddd62bcecfa3a63df80f97d6933aedefc1792928a72f3bb2c4069300dcb64492ea0

You can call the update() method with one big string or multiple times with consecutive sub-strings. If the sub-strings add up to the big string you will get the same hash value (from the same algorithm). The hash values differ in the number of bits they return: md5 returns 128 bits, sha-1 returns 160 bits, and the sha-xxx algorithms return xxx bits respectively.

The digest() method returns a raw buffer of bytes that might contain non-printable characters, so I just used the result for comparison. The hexdigest() method returns a stringified hexadecimal representation of the digest value that you may safely print.

If OpenSSL is installed hashlib will bind to it dynamically, and then additional algorithms may be available. You need to use the new() method to access additional algorithms, if present, and pass the algorithm name to new.

Hashlib deprecates the md5 and sha1 modules. These modules were available in earlier versions, and the new hashlib borrows their simple interface. The modules are still available as a backward compatibility gesture, but they actually use hashlib under the covers.

wsgiref
WSGI stands for the Web Server Gateway Interface. It is a standard interface for web servers, web applications, and middleware. The idea is that web applications that comply with WSGI will able to utilize lots of WSGI-compliant middleware components (e.g. authentication, session, compression) and deploy to any WSGI-compliant web server. The WSGI specification is not aimed at the web application developer, but at the web framework developer.

Some history … Python has an enormous number of web frameworks. The (speculative) reason is that it is so easy to write a web framework in Python that people preferred to roll their own than to use an existing one. Existing frameworks were often incomplete, not well documented, and targeted at the specific needs of some other developer. There is an ongoing debate in the community whether this proliferation is beneficial.

In the last year, this debate grew more intense as Ruby on Rails blazed new trails and the Python community got nervous. By comparison to Rails, Python’s babel tower of web frameworks looked like a bad idea. There were various proposals to unify web frameworks or to pick one web framework.

In the end, two web frameworks emerged as de facto leaders: DJango and TurboGears. (It is debatable whether these are really the leading Python web frameworks, but they are definitely the only two with a book.)

Editor’s Note: The author is a co-author of the TurboGears book, but he does not earn royalties.

Back to WSGI, the fragmentation of the Python web framework scene worried a few people including Philip J. Eby. Eby, a serious mover and shaker in the Python community, is known for his PEAK initiative, which was supposed to provide a pythonic J2EE. Somewhere along the way PEAK started to split and spin off important standalone projects and other ideas such as generic functions and setuptools. Eby decided to do something about the web framework situation and wrote Python Enhancement Proposal (PEP)-333, “Python Web Server Gateway Interface” v1.0 and followed up with a reference implementation called (you guessed it) wsgiref.

The core of wsgiref is so simple that you can write a fully functioning web application in a few lines of code (I’ll provide it soon) that you can effortlessly deploy on any WSGI-compliant server with any WSGI middleware. Before I start showcasing wsgiref, I want to stress that you SHOULD NOT develop web applications from scratch. It is very simple and possible, but there is no need. There are lots of excellent Python web frameworks out there and they all support WSGI, so go ahead and use them for real projects.

Now I’ll get down to writing some code. A WSGI web application is callable (i.e. a function, a class constructor, or any object with a __call__ method). That’s it. You pass this callable to a WSGI-compliant server and that’s your deployment. WSGI is based on HTTP’s request-response model. Whenever a request comes in the server will recognize your application as callable and pass two arguments: the environment and the start_response callable. In your code you can query the environment that contains the request’s path (URL), the HTTP headers’ query parameters, and other relevant data. You call the start_response callable and pass the response headers and status; then you return the response body as a list of strings. It’s really simple.

I’m a very creative guy, so when I thought about a cool web application a “Quote of the Day” immediately jumped to mind. I carefully Googled it to make sure no one thought about it before me, and I was immediately rewarded with 134,000,000 results :-). Being strong-willed I decided to keep going with the original plan. My QOTD web application is highly sophisticated and chockfull of buzzwords. It has a dynamic back-end web service that aggregates an RSS feed from another web application (http://brainyquote.com), parses the RSS using ElementTree, extracts the quotes of the day, and stores the quotes in a lightning fast in-memory database (a simple Python list). When a request comes in the QOTD web application selects a random quote, formats it in the following format: once said… and returns it to the caller. The full code consists of 10 lines of code + three lines of import statements.

I start by importing all the necessary modules. The quotes list is initialized to the empty list. The qotd_app function is the actual web application callable (yes, three lines of code). It gets a random quote from the quotes “database” (the quotes list will already be populated by the time qotd_app is called for the first time). It calls start_response with the ok status and a content type HTTP header of text/html. Finally, it returns the body of the response, which is the quote itself wrapped in a minimal HTML markup.

The code after the function definition is the main initialization code. It downloads the QOTD RSS feed using urllib2.urlopen. It proceeds to parse it using ElementTree.XML and finds all the elements in the feed called . The relevant information in each item is the famous person and her/his quote text. These are the </span> and <span class="pf"><description></span> sub-elements of <span class="pf"><item></span>. It formats the quote into the ‘once said…’ format and appends it to the quotes list. The next thing is to start the WSGI-compliant server and pass it the <span class="pf">qotd_app</span> function. The server will listen on port 8888.</p><p>To test it save the code to a Python file and run it, then browse with your favorite browser to http://localhost:8888 and check out the pearls of wisdom it will emit. Every refresh will bring a new random quote from the list. The code is shown in <a href="javascript:showSupportItem('listing1');">Listing 1</a>.</p><p>WSGI web applications are cool but not really useful in professional applications. Besides WSGI web applications there are two other pieces to WSGI: web servers and middleware. You probably don’t want to write a new web server, but if you are serious about WSGI you’d do well to investigate the WSGI middleware path. These are components that sit between the web application and web server. You can compose them freely and, because they all expose the same callable API, you can wrap any web application with multiple WSGI middleware.</p><p><strong>Optimizations and Internal Changes</strong><br />Python is not the fastest language out there. Most of the time it’s fast enough. If you need more performance you can write performance critical code in C or C++ extensions and call it from Python. Nevertheless, sometimes you will wish Python was a little faster so you can develop more applications in pure Python. Your wish is the Python developers command. Python 2.5 introduces multiple performance enhancements.</p><p><em>Py_ssize_t as index</em><br />Python used to store various counts in a variable of the C type int. This is a 32-bit type, which meant that lists or tuples couldn’t have more than 2,147,483,647 bits. On 32-bit systems you couldn’t fit more than that in the entire 32-bit addressable memory. On 64-bit systems you have much more addressable memory, so this number isn’t so big anymore.</p><p>Python 2.5 uses the 64-bit Py_ssoze_t typedef for indices and counts, which allows you to fully utilize the memory of 64-bit systems. This change affects mostly C extension writers. Read <a href='http://www.python.org/dev/peps/pep-0353/' target='_blank'>PEP- 353</a> if you want all the gory details.</p><p><strong>Memory Functions</strong><br />Python as a runtime virtual machine does a lot of memory management on behalf of your code. Small objects are allocated in 256KB arenas. When you allocate a small object of any size the memory will either be allocated from an existing arena with available space or from a new 256KB arena.. This arrangement allows you to amortize the cost of frequent memory allocations at the cost of inconsistent allocation time. This is a reasonable tradeoff for a language like Python. Nevertheless, Python 2.4 never released empty arenas. Thus, if, in the beginning of your program, you allocated lots of small objects and then your program switched to a state that used a small number of objects, all the arenas that were allocated initially just sat there and hogged memory. Python 2.5 addresses this issue: Empty arenas are de-allocated and the memory is returned to the operating system.</p><p>This change resulted in different types of memory functions in the Python C API. Prior to Python 2.5 the various memory function families were all reduced to the system malloc. Now, some functions use obmalloc and some use the plain malloc. This means that it is important to free memory using the correct function. This should concern only extension writers.</p><p><strong>The Need for Speed Sprint</strong><br />The <a href='http://wiki.python.org/moin/NeedForSpeed/Successes' target='_blank'>NeedForSpeed sprint</a> it was a privately sponsored event that took place from May 21 to 28, 2006, in Reykjavik, Iceland. Several prominent Python hackers were flown in and spent a week improving Python’s performance. The results were integrated into Python 2.5. The major successes were significant improvements to repeated function calls (by caching the associated frame object), huge gains in string performance and string to int conversions, reduced interpreter startup time, and faster exceptions. The event produced several orders of magnitude performance improvements!</p><table align="center" width="95%" border="1" cellpadding="3" style="font-family: Verdana, Arial, Helvetica, Sans-Serif; font-size: x-small; color: red; background: white"><tr><td>Author’s Note: The order of magnitude improvements apply to Psyco only; Psyco is a dynamic just-in-time compiler. Psyco is not part of standard Python and it doesn’t work on Mac, so the orders of magnitude performance improvements should refer to Psyco only.</td></tr></table><p><strong>Metadata for Python packages</strong><br />The only chink in Python’s armor is its relatively weak support for installation, deployment, and updates of large systems with many dependencies. It might not be important for the typical utility or administration script, but Python is used more and more for developing large-scale systems. The distutils module is the official way of creating and distributing Python packages. It is based on a set up script that can create source and binary distributions, including metadata, for different platforms. Until Python 2.5 it lacked any notion of dependency between packages.</p><p>Python 2.5 added a few metadata fields (based on PEP-314): ‘requires’, ‘obsoletes,’ and ‘download_url’. Python also has an online repository for packages called the <a href='http://cheeseshop.python.org/pypi' target='_blank'>cheeseshop</a> , which contains an index of downloadable packages. Unfortunately, it seems the new metadata fields don’t really solve the dependency issues because there is no semantics attached to these fields and no tool support.</p><p>Python’s salvation may be the <a href='http://peak.telecommunity.com/DevCenter/setuptools' target='_blank'>setuptools project</a> , again by the prolific Philip J. Eby. This project aims to enhance the distutils module and be compatible with it. It is the de facto standard for distributing and installing Python packages. It is at version 0.6c3 and quite usable, but it’s not perfect yet.</p><p><strong>Balance and Traction</strong><br />Python 2.5 is a mostly backward compatible and balanced release. It introduced multiple language enhancements, several new and improved modules in the standard library, and lots of performance enhancements. Best of all, it created healthy traction and innovation without disrupting its growing user base.</p><p>Python is well poised to target larger and more complicated systems, while preserving its essential simplicity and the friendliness that attracted so many developers in the first place.</p><p></div></div><div class="elementor-element elementor-element-2298440 elementor-widget elementor-widget-image" data-id="2298440" data-element_type="widget" data-widget_type="image.default"><div class="elementor-widget-container"> <img width="150" height="68" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-thumbnail size-thumbnail wp-image-24484 ewww_webp" alt="devxblackblue" sizes="(max-width: 150px) 100vw, 150px" data-src-img="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png" data-src-webp="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png.webp" data-srcset-webp="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png.webp 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png.webp 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png.webp 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png.webp 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png.webp 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png.webp 2000w" data-srcset-img="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png 2000w" data-eio="j" /><noscript><img width="150" height="68" src="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png" class="attachment-thumbnail size-thumbnail wp-image-24484" alt="devxblackblue" srcset="https://www.devx.com/wp-content/uploads/DevX-1-150x68.png 150w, https://www.devx.com/wp-content/uploads/DevX-1-300x135.png 300w, https://www.devx.com/wp-content/uploads/DevX-1-1024x461.png 1024w, https://www.devx.com/wp-content/uploads/DevX-1-768x346.png 768w, https://www.devx.com/wp-content/uploads/DevX-1-1536x691.png 1536w, https://www.devx.com/wp-content/uploads/DevX-1.png 2000w" sizes="(max-width: 150px) 100vw, 150px" /></noscript></div></div><div class="elementor-element elementor-element-b24b1f0 elementor-widget elementor-widget-heading" data-id="b24b1f0" data-element_type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-default">About Our Editorial Process</h2></div></div><div class="elementor-element elementor-element-bf49e8d elementor-widget elementor-widget-text-editor" data-id="bf49e8d" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style><p>At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.</p><p>See our full <a href="https://www.devx.com/publication-guidelines/">editorial policy</a>.</p></div></div><div class="elementor-element elementor-element-0f1a6bf elementor-widget elementor-widget-heading" data-id="0f1a6bf" data-element_type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><h2 class="elementor-heading-title elementor-size-default">About Our Journalist</h2></div></div><div class="elementor-element elementor-element-4b5870b elementor-author-box--link-yes elementor-author-box--align-left elementor-author-box--name-yes elementor-author-box--biography-yes elementor-widget elementor-widget-author-box" data-id="4b5870b" data-element_type="widget" data-widget_type="author-box.default"><div class="elementor-widget-container"><div class="elementor-author-box"><div class="elementor-author-box__text"> <a href="https://www.devx.com/author/devx-admin/"><h3 class="elementor-author-box__name"> Charlie Frank</h3> </a><div class="elementor-author-box__bio"> Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.</div> <a class="elementor-author-box__button elementor-button elementor-size-xs" href="https://www.devx.com/author/devx-admin/"> View Author </a></div></div></div></div></div></div></div></section><div class="elementor-element elementor-element-fe66bf1 elementor-hidden-desktop elementor-hidden-tablet elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts" data-id="fe66bf1" data-element_type="widget" data-settings="{"classic_columns":"3","classic_columns_tablet":"2","classic_columns_mobile":"1","classic_row_gap":{"unit":"px","size":35,"sizes":[]},"classic_row_gap_tablet":{"unit":"px","size":"","sizes":[]},"classic_row_gap_mobile":{"unit":"px","size":"","sizes":[]}}" data-widget_type="posts.classic"><div class="elementor-widget-container"><link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-posts.min.css"><div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid"><article class="elementor-post elementor-grid-item post-47811 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/google-maps-enhances-search-for-ev-charging-stations/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47810 ewww_webp" alt=""Charging Stations Search"" data-src-img="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg" class="attachment-full size-full wp-image-47810" alt=""Charging Stations Search"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/google-maps-enhances-search-for-ev-charging-stations/" > Google Maps enhances search for EV charging stations </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article><article class="elementor-post elementor-grid-item post-47803 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/upcoming-social-security-payments-scheduled-by-birth-dates/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47802 ewww_webp" alt=""Payment Schedule"" data-src-img="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg" class="attachment-full size-full wp-image-47802" alt=""Payment Schedule"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/upcoming-social-security-payments-scheduled-by-birth-dates/" > Upcoming social security payments scheduled by birth dates </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article><article class="elementor-post elementor-grid-item post-47801 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/retirees-to-receive-double-social-security-payments-soon/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47800 ewww_webp" alt=""Double Payments"" data-src-img="https://www.devx.com/wp-content/uploads/Double-Payments.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Double-Payments.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Double-Payments.jpg" class="attachment-full size-full wp-image-47800" alt=""Double Payments"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/retirees-to-receive-double-social-security-payments-soon/" > Retirees to receive double Social Security payments soon </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article><article class="elementor-post elementor-grid-item post-47805 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47804 ewww_webp" alt=""Senior Security Adjustment"" data-src-img="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" class="attachment-full size-full wp-image-47804" alt=""Senior Security Adjustment"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > Proposed Act Aims to Adjust Social Security for Seniors </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article><article class="elementor-post elementor-grid-item post-47797 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47796 ewww_webp" alt=""Stability Holds"" data-src-img="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" class="attachment-full size-full wp-image-47796" alt=""Stability Holds"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > USD/JPY stability holds amidst market ambiguities </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article><article class="elementor-post elementor-grid-item post-47799 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="attachment-full size-full wp-image-47798 ewww_webp" alt=""Silver Demand Surge"" data-src-img="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" class="attachment-full size-full wp-image-47798" alt=""Silver Demand Surge"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > Silver prices surge amid increasing demand </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span></div></div></article></div></div></div><div class="elementor-element elementor-element-39bd7056 elementor-grid-1 elementor-posts--thumbnail-left elementor-hidden-mobile elementor-grid-tablet-2 elementor-grid-mobile-1 load-more-align-center elementor-widget elementor-widget-posts" data-id="39bd7056" data-element_type="widget" data-settings="{"classic_columns":"1","classic_row_gap":{"unit":"px","size":0,"sizes":[]},"pagination_type":"load_more_on_click","classic_columns_tablet":"2","classic_columns_mobile":"1","classic_row_gap_tablet":{"unit":"px","size":"","sizes":[]},"classic_row_gap_mobile":{"unit":"px","size":"","sizes":[]},"load_more_spinner":{"value":"fas fa-spinner","library":"fa-solid"}}" data-widget_type="posts.classic"><div class="elementor-widget-container"><div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid"><article class="elementor-post elementor-grid-item post-47811 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/google-maps-enhances-search-for-ev-charging-stations/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47810 ewww_webp" alt=""Charging Stations Search"" data-src-img="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Charging-Stations-Search.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47810" alt=""Charging Stations Search"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/google-maps-enhances-search-for-ev-charging-stations/" > Google Maps enhances search for EV charging stations </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 1:28 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47803 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/upcoming-social-security-payments-scheduled-by-birth-dates/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47802 ewww_webp" alt=""Payment Schedule"" data-src-img="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Payment-Schedule.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47802" alt=""Payment Schedule"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/upcoming-social-security-payments-scheduled-by-birth-dates/" > Upcoming social security payments scheduled by birth dates </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 1:07 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47801 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/retirees-to-receive-double-social-security-payments-soon/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47800 ewww_webp" alt=""Double Payments"" data-src-img="https://www.devx.com/wp-content/uploads/Double-Payments.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Double-Payments.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Double-Payments.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47800" alt=""Double Payments"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/retirees-to-receive-double-social-security-payments-soon/" > Retirees to receive double Social Security payments soon </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 11:59 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47805 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47804 ewww_webp" alt=""Senior Security Adjustment"" data-src-img="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Senior-Security-Adjustment.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47804" alt=""Senior Security Adjustment"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/proposed-act-aims-to-adjust-social-security-for-seniors/" > Proposed Act Aims to Adjust Social Security for Seniors </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 8:33 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47797 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47796 ewww_webp" alt=""Stability Holds"" data-src-img="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stability-Holds.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47796" alt=""Stability Holds"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/usd-jpy-stability-holds-amidst-market-ambiguities/" > USD/JPY stability holds amidst market ambiguities </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 8:27 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47799 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47798 ewww_webp" alt=""Silver Demand Surge"" data-src-img="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Silver-Demand-Surge.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47798" alt=""Silver Demand Surge"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/silver-prices-surge-amid-increasing-demand/" > Silver prices surge amid increasing demand </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 19, 2024 </span> <span class="elementor-post-time"> 7:52 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47825 post type-post status-publish format-standard has-post-thumbnail hentry category-entrepreneurship"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" ><div class="elementor-post__thumbnail"><img width="940" height="788" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47829 ewww_webp" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" data-src-img="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg.webp" data-eio="j" /><noscript><img width="940" height="788" src="https://www.devx.com/wp-content/uploads/Is-an-Online-Job-in-Bookkeeping-the-Ideal-Side-Gig-for-Remote-Workers.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47829" alt="Is an Online Job in Bookkeeping the Ideal Side Gig for Remote Workers" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/entrepreneurship/is-online-bookkeeping-the-ideal-side-gig-for-remote-workers/" > Is Online Bookkeeping the Ideal Side Gig for Remote Workers? </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Kyle Lewis </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 2:49 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47707 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-treasury-yields tag-u-s-dollar tag-ukraine"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47706 ewww_webp" alt=""Stock Stability"" data-src-img="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Stock-Stability.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47706" alt=""Stock Stability"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/global-stock-stability-amid-rising-us-interest-rates/" > Global stock stability amid rising US interest rates </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:44 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47718 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-dell-technologies tag-open-standard-risc-v tag-puneet-kumar tag-rivos-inc tag-walden-catalyst"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47716 ewww_webp" alt=""AI Chip Launch"" data-src-img="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/AI-Chip-Launch.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47716" alt=""AI Chip Launch"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rivos-inc-raises-250-million-pre-launch-for-ai-chips/" > Rivos Inc. raises $250 million pre-launch for AI chips </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:19 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47703 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-bitcoin tag-casey-rodarmor tag-goldman-sachs tag-mainnet tag-x-layer"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/goldman-sachs-advises-caution-in-predicting-bitcoin-prices/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47702 ewww_webp" alt="Bitcoin Caution" data-src-img="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Bitcoin-Caution.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47702" alt="Bitcoin Caution" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/goldman-sachs-advises-caution-in-predicting-bitcoin-prices/" > Goldman Sachs advises caution in predicting Bitcoin prices </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:14 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47711 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-cost-of-living-adjustment tag-social-security-benefits"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/predicted-rise-in-social-security-benefits-amid-inflation/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47710 ewww_webp" alt="Inflation Predicted Rise" data-src-img="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Inflation-Predicted-Rise.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47710" alt="Inflation Predicted Rise" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/predicted-rise-in-social-security-benefits-amid-inflation/" > Predicted rise in social security benefits amid inflation </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 1:09 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47705 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-asian-trading tag-federal-reserve tag-gold-prices tag-sanctions-on-russia"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/gold-prices-dip-amid-assertive-fiscal-comments/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47704 ewww_webp" alt="Assertive Gold Dip" data-src-img="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Assertive-Gold-Dip.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47704" alt="Assertive Gold Dip" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/gold-prices-dip-amid-assertive-fiscal-comments/" > Gold prices dip amid assertive fiscal comments </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:46 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47720 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/vorlon-raises-15-7m-to-strengthen-api-security/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47719 ewww_webp" alt=""Vorlon API Security"" data-src-img="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Vorlon-API-Security.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47719" alt=""Vorlon API Security"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/vorlon-raises-15-7m-to-strengthen-api-security/" > Vorlon raises $15.7M to strengthen API security </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:28 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47709 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-aprils-final-social-security tag-social-security-payments"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/last-april-social-security-disbursement-approaching/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47708 ewww_webp" alt="April Disbursement" data-src-img="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/April-Disbursement.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47708" alt="April Disbursement" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/last-april-social-security-disbursement-approaching/" > Last April social security disbursement approaching </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 11:16 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47715 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-founders-fund tag-napoleon-ta tag-rippling tag-silicon-valley-bank"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rippling-to-pursue-substantial-funding-round/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47714 ewww_webp" alt="Rippling Pursuit" data-src-img="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Rippling-Pursuit.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47714" alt="Rippling Pursuit" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rippling-to-pursue-substantial-funding-round/" > Rippling to pursue substantial funding round </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 8:33 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47713 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-justin-simpson tag-o-j-simpson"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/simpsons-lawyer-battles-to-protect-estate-from-goldmans/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47712 ewww_webp" alt=""Lawyer Estate Battle"" data-src-img="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Lawyer-Estate-Battle.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47712" alt=""Lawyer Estate Battle"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/simpsons-lawyer-battles-to-protect-estate-from-goldmans/" > Simpson’s lawyer battles to protect estate from Goldmans </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 18, 2024 </span> <span class="elementor-post-time"> 8:31 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47658 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-retirement-payments"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/aprils-social-security-retirement-payments-underway/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47657 ewww_webp" alt="April's Retirement" data-src-img="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Aprils-Retirement.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47657" alt="April's Retirement" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/aprils-social-security-retirement-payments-underway/" > April’s Social Security retirement payments underway </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:54 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47667 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-ev-chargers tag-rivian"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/rivian-develops-software-to-rank-ev-chargers/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47666 ewww_webp" alt=""EV Charger Ranking"" data-src-img="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/EV-Charger-Ranking.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47666" alt=""EV Charger Ranking"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/rivian-develops-software-to-rank-ev-chargers/" > Rivian develops software to rank EV chargers </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:50 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47660 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-goldman-family tag-o-j-simpson"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/simpsons-will-leaves-goldman-family-uncompensated/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47659 ewww_webp" alt="Simpson's Uncompensated Will" data-src-img="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Simpsons-Uncompensated-Will.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47659" alt="Simpson's Uncompensated Will" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/simpsons-will-leaves-goldman-family-uncompensated/" > Simpson’s will leaves Goldman family uncompensated </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> April Isaacs </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 5:26 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47664 post type-post status-publish format-standard has-post-thumbnail hentry category-news tag-framework tag-nirav-patel"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/framework-grapples-with-software-sustainability-issues/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47663 ewww_webp" alt=""Sustainability Framework"" data-src-img="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Sustainability-Framework.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47663" alt=""Sustainability Framework"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/framework-grapples-with-software-sustainability-issues/" > Framework grapples with software sustainability issues </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 3:44 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47652 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/surprising-economic-growth-attributed-to-chinas-robust-exports-and-domestic-demand/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47651 ewww_webp" alt="Robust Export Growth" data-src-img="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Robust-Export-Growth.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47651" alt="Robust Export Growth" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/surprising-economic-growth-attributed-to-chinas-robust-exports-and-domestic-demand/" > Surprising economic growth attributed to China’s robust exports and domestic demand </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 3:04 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47656 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/cobol-at-65-still-a-powerhouse-in-the-tech-industry/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47655 ewww_webp" alt=""COBOL Powerhouse"" data-src-img="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/COBOL-Powerhouse.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47655" alt=""COBOL Powerhouse"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/cobol-at-65-still-a-powerhouse-in-the-tech-industry/" > COBOL at 65: still a powerhouse in the tech industry </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Cameron Wiggins </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 1:59 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47654 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/californias-minimum-wage-hike-worries-restaurateurs/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47653 ewww_webp" alt=""Wage Hike Worries"" data-src-img="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Wage-Hike-Worries.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47653" alt=""Wage Hike Worries"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/californias-minimum-wage-hike-worries-restaurateurs/" > California’s minimum wage hike worries restaurateurs </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Noah Nguyen </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 1:05 PM </span></div></div></article><article class="elementor-post elementor-grid-item post-47669 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/irs-introduces-user-friendly-free-tax-software-direct-file/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47668 ewww_webp" alt=""Direct File"" data-src-img="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/Direct-File-2.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47668" alt=""Direct File"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/irs-introduces-user-friendly-free-tax-software-direct-file/" > IRS introduces user-friendly, free tax software ‘Direct File’ </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Johannah Lopez </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 11:10 AM </span></div></div></article><article class="elementor-post elementor-grid-item post-47662 post type-post status-publish format-standard has-post-thumbnail hentry category-news"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/news/social-security-cola-rise-expects-to-strain-retirees-finances/" ><div class="elementor-post__thumbnail"><img width="1792" height="1024" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-47661 ewww_webp" alt=""COLA Strain"" data-src-img="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg.webp" data-eio="j" /><noscript><img width="1792" height="1024" src="https://www.devx.com/wp-content/uploads/COLA-Strain.jpg" class="elementor-animation-grow attachment-full size-full wp-image-47661" alt=""COLA Strain"" /></noscript></div> </a><div class="elementor-post__text"><h3 class="elementor-post__title"> <a href="https://www.devx.com/news/social-security-cola-rise-expects-to-strain-retirees-finances/" > Social Security COLA rise expects to strain retirees’ finances </a></h3><div class="elementor-post__meta-data"> <span class="elementor-post-author"> Rashan Dixon </span> <span class="elementor-post-date"> April 17, 2024 </span> <span class="elementor-post-time"> 7:11 AM </span></div></div></article></div> <span class="e-load-more-spinner"> <i aria-hidden="true" class="fas fa-spinner"></i> </span><div class="e-load-more-anchor" data-page="1" data-max-page="792" data-next-page="https://www.devx.com/open-source-zone/33480/2/"></div><div class="elementor-button-wrapper"> <a href="#" class="elementor-button-link elementor-button elementor-animation-grow" role="button"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Show More</span> </span> </a></div><div class="e-load-more-message"></div></div></div></div></div><div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-270dc71" data-id="270dc71" data-element_type="column"><div class="elementor-widget-wrap"></div></div><div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-8905b95 elementor-hidden-tablet" data-id="8905b95" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-2f83f51 elementor-widget elementor-widget-html" data-id="2f83f51" data-element_type="widget" data-widget_type="html.default"><div class="elementor-widget-container"> <ins style="display: block; width: 100%" class="direqt-embed" data-bot-id="660c2a84041d59991d8be45b" data-story-id="auto" data-gtm="true" data-layout="overlay" ></ins></div></div></div></div></div></section></div></div><footer data-elementor-type="footer" data-elementor-id="23300" class="elementor elementor-23300 elementor-location-footer"><div class="elementor-section-wrap"><footer class="elementor-section elementor-top-section elementor-element elementor-element-1588a538 elementor-section-height-min-height elementor-section-content-middle elementor-section-full_width elementor-section-height-default elementor-section-items-middle" data-id="1588a538" data-element_type="section" data-settings="{"background_background":"classic"}"><div class="elementor-container elementor-column-gap-no"><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-9d2a788" data-id="9d2a788" data-element_type="column"><div class="elementor-widget-wrap"></div></div><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-2e0ce949" data-id="2e0ce949" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-4f9ec08 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="4f9ec08" data-element_type="widget" data-widget_type="divider.default"><div class="elementor-widget-container"><style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-block-end:0;flex-grow:1;border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider--element-align-start .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-start .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-start .elementor-divider__element{margin-inline-start:0}.elementor-widget-divider--element-align-end .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-end .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-end .elementor-divider__element{margin-inline-end:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-block-start:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}</style><div class="elementor-divider"> <span class="elementor-divider-separator"> </span></div></div></div><section class="elementor-section elementor-inner-section elementor-element elementor-element-73a9986 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="73a9986" data-element_type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7f08930" data-id="7f08930" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-269b367 elementor-nav-menu__align-right elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="269b367" data-element_type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<i class=\"fas fa-caret-down\"><\/i>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"><div class="elementor-widget-container"><nav class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"><ul id="menu-1-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item">Home</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item">Advertise</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item">About</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46262"><a href="https://www.devx.com/publication-guidelines/" class="elementor-item">Editorial Guidelines</a></li></ul></nav><div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span></div><nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"><ul id="menu-2-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item" tabindex="-1">Home</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item" tabindex="-1">Advertise</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item" tabindex="-1">About</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46262"><a href="https://www.devx.com/publication-guidelines/" class="elementor-item" tabindex="-1">Editorial Guidelines</a></li></ul></nav></div></div></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-21928d3" data-id="21928d3" data-element_type="column"><div class="elementor-widget-wrap"></div></div><div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-869862d" data-id="869862d" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-5d5f4dc5 e-grid-align-left elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="5d5f4dc5" data-element_type="widget" data-widget_type="social-icons.default"><div class="elementor-widget-container"><style>/*! elementor - v3.20.0 - 10-04-2024 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em));height:calc(var(--icon-size, 25px) + 2 * var(--icon-padding, .5em))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:inline-flex;background-color:#69727d;align-items:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#69727d}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin,.elementor-social-icon-linkedin-in{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-threads{background-color:#000}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-x-twitter{background-color:#000}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{border-radius:50%}</style><div class="elementor-social-icons-wrapper elementor-grid"> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-5c0ce3c" href="https://www.linkedin.com/company/devx" target="_blank"> <span class="elementor-screen-only">Linkedin</span> <i class="fab fa-linkedin"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-828f132" href="https://twitter.com/DevX_Com" target="_blank"> <span class="elementor-screen-only">Twitter</span> <i class="fab fa-twitter"></i> </a> </span></div></div></div></div></div></div></section><section class="elementor-section elementor-inner-section elementor-element elementor-element-e509954 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="e509954" data-element_type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-f77ca98" data-id="f77ca98" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-c500cdf elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="c500cdf" data-element_type="widget" data-widget_type="divider.default"><div class="elementor-widget-container"><div class="elementor-divider"> <span class="elementor-divider-separator"> </span></div></div></div><div class="elementor-element elementor-element-fbeb59f elementor-nav-menu__align-center elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="fbeb59f" data-element_type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<i class=\"fas fa-caret-down\"><\/i>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"><div class="elementor-widget-container"><nav class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"><ul id="menu-1-fbeb59f" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27045"><a href="https://www.devx.com/a-terms/" class="elementor-item">A</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27044"><a href="https://www.devx.com/b-terms/" class="elementor-item">B</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27043"><a href="https://www.devx.com/c-terms/" class="elementor-item">C</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27152"><a href="https://www.devx.com/d-terms/" class="elementor-item">D</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27153"><a href="https://www.devx.com/e-terms/" class="elementor-item">E</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27154"><a href="https://www.devx.com/f-terms/" class="elementor-item">F</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27155"><a href="https://www.devx.com/g-terms/" class="elementor-item">G</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27156"><a href="https://www.devx.com/h-terms/" class="elementor-item">H</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27157"><a href="https://www.devx.com/i-terms/" class="elementor-item">I</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27158"><a href="https://www.devx.com/j-terms/" class="elementor-item">J</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27159"><a href="https://www.devx.com/k-terms/" class="elementor-item">K</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27137"><a href="https://www.devx.com/l-terms/" class="elementor-item">L</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27151"><a href="https://www.devx.com/m-terms/" class="elementor-item">M</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27150"><a href="https://www.devx.com/n-terms/" class="elementor-item">N</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27149"><a href="https://www.devx.com/o-terms/" class="elementor-item">O</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27148"><a href="https://www.devx.com/p-terms/" class="elementor-item">P</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27147"><a href="https://www.devx.com/q-terms/" class="elementor-item">Q</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27146"><a href="https://www.devx.com/r-terms/" class="elementor-item">R</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27145"><a href="https://www.devx.com/s-terms/" class="elementor-item">S</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27144"><a href="https://www.devx.com/t-terms/" class="elementor-item">T</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27143"><a href="https://www.devx.com/u-terms/" class="elementor-item">U</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27142"><a href="https://www.devx.com/v-terms/" class="elementor-item">V</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27141"><a href="https://www.devx.com/w-terms/" class="elementor-item">W</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27140"><a href="https://www.devx.com/x-terms/" class="elementor-item">X</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27139"><a href="https://www.devx.com/y-terms/" class="elementor-item">Y</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27138"><a href="https://www.devx.com/z-terms/" class="elementor-item">Z</a></li></ul></nav><div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span></div><nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"><ul id="menu-2-fbeb59f" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27045"><a href="https://www.devx.com/a-terms/" class="elementor-item" tabindex="-1">A</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27044"><a href="https://www.devx.com/b-terms/" class="elementor-item" tabindex="-1">B</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27043"><a href="https://www.devx.com/c-terms/" class="elementor-item" tabindex="-1">C</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27152"><a href="https://www.devx.com/d-terms/" class="elementor-item" tabindex="-1">D</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27153"><a href="https://www.devx.com/e-terms/" class="elementor-item" tabindex="-1">E</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27154"><a href="https://www.devx.com/f-terms/" class="elementor-item" tabindex="-1">F</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27155"><a href="https://www.devx.com/g-terms/" class="elementor-item" tabindex="-1">G</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27156"><a href="https://www.devx.com/h-terms/" class="elementor-item" tabindex="-1">H</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27157"><a href="https://www.devx.com/i-terms/" class="elementor-item" tabindex="-1">I</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27158"><a href="https://www.devx.com/j-terms/" class="elementor-item" tabindex="-1">J</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27159"><a href="https://www.devx.com/k-terms/" class="elementor-item" tabindex="-1">K</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27137"><a href="https://www.devx.com/l-terms/" class="elementor-item" tabindex="-1">L</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27151"><a href="https://www.devx.com/m-terms/" class="elementor-item" tabindex="-1">M</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27150"><a href="https://www.devx.com/n-terms/" class="elementor-item" tabindex="-1">N</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27149"><a href="https://www.devx.com/o-terms/" class="elementor-item" tabindex="-1">O</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27148"><a href="https://www.devx.com/p-terms/" class="elementor-item" tabindex="-1">P</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27147"><a href="https://www.devx.com/q-terms/" class="elementor-item" tabindex="-1">Q</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27146"><a href="https://www.devx.com/r-terms/" class="elementor-item" tabindex="-1">R</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27145"><a href="https://www.devx.com/s-terms/" class="elementor-item" tabindex="-1">S</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27144"><a href="https://www.devx.com/t-terms/" class="elementor-item" tabindex="-1">T</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27143"><a href="https://www.devx.com/u-terms/" class="elementor-item" tabindex="-1">U</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27142"><a href="https://www.devx.com/v-terms/" class="elementor-item" tabindex="-1">V</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27141"><a href="https://www.devx.com/w-terms/" class="elementor-item" tabindex="-1">W</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27140"><a href="https://www.devx.com/x-terms/" class="elementor-item" tabindex="-1">X</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27139"><a href="https://www.devx.com/y-terms/" class="elementor-item" tabindex="-1">Y</a></li><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27138"><a href="https://www.devx.com/z-terms/" class="elementor-item" tabindex="-1">Z</a></li></ul></nav></div></div><div class="elementor-element elementor-element-6963de5 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="6963de5" data-element_type="widget" data-widget_type="divider.default"><div class="elementor-widget-container"><div class="elementor-divider"> <span class="elementor-divider-separator"> </span></div></div></div></div></div></div></section></div></div><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-c5e10d2" data-id="c5e10d2" data-element_type="column"><div class="elementor-widget-wrap"></div></div></div></footer><section class="elementor-section elementor-top-section elementor-element elementor-element-a4f01a6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a4f01a6" data-element_type="section"><div class="elementor-container elementor-column-gap-default"><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-a1bc5b1" data-id="a1bc5b1" data-element_type="column"><div class="elementor-widget-wrap"></div></div><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-e4f110b" data-id="e4f110b" data-element_type="column"><div class="elementor-widget-wrap elementor-element-populated"><div class="elementor-element elementor-element-4a914653 elementor-widget elementor-widget-heading" data-id="4a914653" data-element_type="widget" data-widget_type="heading.default"><div class="elementor-widget-container"><p class="elementor-heading-title elementor-size-default">©2024 Copyright DevX - All Rights Reserved. Registration or use of this site constitutes acceptance of our Terms of Service and Privacy Policy.</p></div></div><div class="elementor-element elementor-element-d2cf216 elementor-widget elementor-widget-text-editor" data-id="d2cf216" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p><strong><a href="https://www.devx.com/sitemap/">Sitemap</a> — </strong><strong><a href="https://www.devx.com/privacy-policy/">Privacy Policy</a></strong></p></div></div></div></div><div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-1daca18" data-id="1daca18" data-element_type="column"><div class="elementor-widget-wrap"></div></div></div></section></div></footer> <script defer src="data:text/javascript;base64,CnNldEludGVydmFsKCgpID0+IHsKICAgIGNvbnN0IGVsZW1lbnRvclBhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPSJlbGVtZW50b3IiXScpCiAgICBjb25zdCBhZFRocml2ZUxvYWRlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCdhZHRocml2ZS1kZXZpY2UtcGhvbmUnKSAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5jbGFzc0xpc3QuY29udGFpbnMoJ2FkdGhyaXZlLWRldmljZS10YWJsZXQnKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLmNsYXNzTGlzdC5jb250YWlucygnYWR0aHJpdmUtZGV2aWNlLWRlc2t0b3AnKQogICAgaWYgKCFhZFRocml2ZUxvYWRlZCkgewogICAgICAgIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBBZFRocml2ZS4uLicpCiAgICAgICAgcmV0dXJuCiAgICB9CiAgICBpZiAoZWxlbWVudG9yUGFnZSkgewogICAgICAgIGNvbnN0IGFkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5hZHRocml2ZS1hZCBpZnJhbWUiKTsKICAgICAgICAgICAgYWRzLmZvckVhY2goYWQgPT4gewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhZC53aWR0aCAhPT0gInVuZGVmaW5lZCIgJiYgYWQud2lkdGggIT09ICIxIikgewogICAgICAgICAgICAgICAgICAgIGFkLnN0eWxlLndpZHRoID0gYWQud2lkdGggKyAicHgiOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KfSwgNTApOwo="></script> <script data-no-optimize='1' data-cfasync='false' id='cls-insertion-3708fac'>'use strict';(function(){function v(c,b){function a(){this.constructor=c}if("function"!==typeof b&&null!==b)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");N(c,b);c.prototype=null===b?Object.create(b):(a.prototype=b.prototype,new a)}function S(c,b){var a={},d;for(d in c)Object.prototype.hasOwnProperty.call(c,d)&&0>b.indexOf(d)&&(a[d]=c[d]);if(null!=c&&"function"===typeof Object.getOwnPropertySymbols){var e=0;for(d=Object.getOwnPropertySymbols(c);e<d.length;e++)0> b.indexOf(d[e])&&Object.prototype.propertyIsEnumerable.call(c,d[e])&&(a[d[e]]=c[d[e]])}return a}function I(c,b,a,d){var e=arguments.length,f=3>e?b:null===d?d=Object.getOwnPropertyDescriptor(b,a):d,g;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)f=Reflect.decorate(c,b,a,d);else for(var h=c.length-1;0<=h;h--)if(g=c[h])f=(3>e?g(f):3<e?g(b,a,f):g(b,a))||f;return 3<e&&f&&Object.defineProperty(b,a,f),f}function B(c,b){if("object"===typeof Reflect&&"function"===typeof Reflect.metadata)return Reflect.metadata(c, b)}function L(c){var b="function"===typeof Symbol&&Symbol.iterator,a=b&&c[b],d=0;if(a)return a.call(c);if(c&&"number"===typeof c.length)return{next:function(){c&&d>=c.length&&(c=void 0);return{value:c&&c[d++],done:!c}}};throw new TypeError(b?"Object is not iterable.":"Symbol.iterator is not defined.");}function r(c,b){var a="function"===typeof Symbol&&c[Symbol.iterator];if(!a)return c;c=a.call(c);var d,e=[];try{for(;(void 0===b||0<b--)&&!(d=c.next()).done;)e.push(d.value)}catch(g){var f={error:g}}finally{try{d&& !d.done&&(a=c["return"])&&a.call(c)}finally{if(f)throw f.error;}}return e}function w(c,b,a){if(a||2===arguments.length)for(var d=0,e=b.length,f;d<e;d++)!f&&d in b||(f||(f=Array.prototype.slice.call(b,0,d)),f[d]=b[d]);return c.concat(f||Array.prototype.slice.call(b))}function T(c,b){void 0===b&&(b={});b=b.insertAt;if(c&&"undefined"!==typeof document){var a=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css";"top"===b?a.firstChild?a.insertBefore(d, a.firstChild):a.appendChild(d):a.appendChild(d);d.styleSheet?d.styleSheet.cssText=c:d.appendChild(document.createTextNode(c))}}window.adthriveCLS.buildDate="2024-04-19";var N=function(c,b){N=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,d){a.__proto__=d}||function(a,d){for(var e in d)Object.prototype.hasOwnProperty.call(d,e)&&(a[e]=d[e])};return N(c,b)},y=function(){y=Object.assign||function(c){for(var b,a=1,d=arguments.length;a<d;a++){b=arguments[a];for(var e in b)Object.prototype.hasOwnProperty.call(b, e)&&(c[e]=b[e])}return c};return y.apply(this,arguments)};"function"===typeof SuppressedError?SuppressedError:function(c,b,a){a=Error(a);return a.name="SuppressedError",a.error=c,a.suppressed=b,a};var q=new (function(){function c(){}c.prototype.info=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.info,b,a],r(d),!1))};c.prototype.warn=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.warn, b,a],r(d),!1))};c.prototype.error=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];this.call.apply(this,w([console.error,b,a],r(d),!1));this.sendErrorLogToCommandQueue.apply(this,w([b,a],r(d),!1))};c.prototype.event=function(b,a){for(var d,e=2;e<arguments.length;e++);"debug"===(null===(d=window.adthriveCLS)||void 0===d?void 0:d.bucket)&&this.info(b,a)};c.prototype.sendErrorLogToCommandQueue=function(b,a){for(var d=[],e=2;e<arguments.length;e++)d[e-2]=arguments[e];window.adthrive= window.adthrive||{};window.adthrive.cmd=window.adthrive.cmd||[];window.adthrive.cmd.push(function(){void 0!==window.adthrive.logError&&"function"===typeof window.adthrive.logError&&window.adthrive.logError(b,a,d)})};c.prototype.call=function(b,a,d){for(var e=[],f=3;f<arguments.length;f++)e[f-3]=arguments[f];f=["%c".concat(a,"::").concat(d," ")];var g=["color: #999; font-weight: bold;"];0<e.length&&"string"===typeof e[0]&&f.push(e.shift());g.push.apply(g,w([],r(e),!1));try{Function.prototype.apply.call(b, console,w([f.join("")],r(g),!1))}catch(h){console.error(h)}};return c}()),u=function(c,b){return null==c||c!==c?b:c},na=function(c){var b=c.clientWidth;getComputedStyle&&(c=getComputedStyle(c,null),b-=parseFloat(c.paddingLeft||"0")+parseFloat(c.paddingRight||"0"));return b},oa=function(c){var b=c.offsetHeight,a=c.offsetWidth,d=c.getBoundingClientRect(),e=document.body,f=document.documentElement;c=Math.round(d.top+(window.pageYOffset||f.scrollTop||e.scrollTop)-(f.clientTop||e.clientTop||0));d=Math.round(d.left+ (window.pageXOffset||f.scrollLeft||e.scrollLeft)-(f.clientLeft||e.clientLeft||0));return{top:c,left:d,bottom:c+b,right:d+a,width:a,height:b}},E=function(){var c=navigator.userAgent,b=/Tablet|iPad|Playbook|Nook|webOS|Kindle|Android (?!.*Mobile).*Safari|CrOS/i.test(c);return/Mobi|iP(hone|od)|Opera Mini/i.test(c)&&!b},pa=function(c){void 0===c&&(c=document);return(c===document?document.body:c).getBoundingClientRect().top},qa=function(c){return c.includes(",")?c.split(","):[c]},ra=function(c){void 0=== c&&(c=document);c=c.querySelectorAll("article");return 0===c.length?null:(c=Array.from(c).reduce(function(b,a){return a.offsetHeight>b.offsetHeight?a:b}))&&c.offsetHeight>1.5*window.innerHeight?c:null},sa=function(c,b,a){void 0===a&&(a=document);var d=ra(a),e=d?[d]:[],f=[];c.forEach(function(h){var k=Array.from(a.querySelectorAll(h.elementSelector)).slice(0,h.skip);qa(h.elementSelector).forEach(function(l){var p=a.querySelectorAll(l);l=function(t){var n=p[t];if(b.map.some(function(x){return x.el.isEqualNode(n)}))return"continue"; (t=n&&n.parentElement)&&t!==document.body?e.push(t):e.push(n);-1===k.indexOf(n)&&f.push({dynamicAd:h,element:n})};for(var m=0;m<p.length;m++)l(m)})});var g=pa(a);c=f.sort(function(h,k){return h.element.getBoundingClientRect().top-g-(k.element.getBoundingClientRect().top-g)});return[e,c]},ta=function(c,b,a){void 0===a&&(a=document);b=r(sa(c,b,a),2);c=b[0];b=b[1];if(0===c.length)throw Error("No Main Content Elements Found");return[Array.from(c).reduce(function(d,e){return e.offsetHeight>d.offsetHeight? e:d})||document.body,b]},z;(function(c){c.amznbid="amznbid";c.amzniid="amzniid";c.amznp="amznp";c.amznsz="amznsz"})(z||(z={}));var D;(function(c){c.ThirtyThreeAcross="33across";c.Adform="adform";c.AidemServer="aidem_ss";c.AppNexus="appnexus";c.AmazonTAM="amazon";c.AmazonUAM="AmazonUAM";c.Colossus="colossus";c.ColossusServer="col_ss";c.Conversant="conversant";c.Concert="concert";c.Criteo="criteo";c.GumGum="gumgum";c.ImproveDigital="improvedigital";c.ImproveDigitalServer="improve_ss";c.IndexExchange= "ix";c.Kargo="kargo";c.KargoServer="krgo_ss";c.MediaGrid="grid";c.MediaGridVideo="gridvid";c.Nativo="nativo";c.OpenX="openx";c.Ogury="ogury";c.OpenXServer="opnx_ss";c.Ozone="ozone";c.Pubmatic="pubmatic";c.PubmaticServer="pubm_ss";c.ResetDigital="resetdigital";c.Roundel="roundel";c.Rtbhouse="rtbhouse";c.Rubicon="rubicon";c.RubiconServer="rubi_ss";c.Sharethrough="sharethrough";c.Teads="teads";c.Triplelift="triplelift";c.TripleliftServer="tripl_ss";c.TTD="ttd";c.Undertone="undertone";c.UndertoneServer= "under_ss";c.Unruly="unruly";c.YahooSSP="yahoossp";c.YahooSSPServer="yah_ss";c.Verizon="verizon";c.Yieldmo="yieldmo"})(D||(D={}));var U;(function(c){c.Prebid="prebid";c.GAM="gam";c.Amazon="amazon";c.Marmalade="marmalade";c.Floors="floors";c.CMP="cmp";c.Optable="optable"})(U||(U={}));var V;(function(c){c.cm="cm";c.fbrap="fbrap";c.rapml="rapml"})(V||(V={}));var W;(function(c){c.lazy="lazy";c.raptive="raptive";c.refresh="refresh";c.session="session";c.crossDomain="crossdomain";c.highSequence="highsequence"; c.lazyBidPool="lazyBidPool"})(W||(W={}));var X;(function(c){c.lazy="l";c.raptive="rapml";c.refresh="r";c.session="s";c.crossdomain="c";c.highsequence="hs";c.lazyBidPool="lbp"})(X||(X={}));var Y;(function(c){c.Version="Version";c.SharingNotice="SharingNotice";c.SaleOptOutNotice="SaleOptOutNotice";c.SharingOptOutNotice="SharingOptOutNotice";c.TargetedAdvertisingOptOutNotice="TargetedAdvertisingOptOutNotice";c.SensitiveDataProcessingOptOutNotice="SensitiveDataProcessingOptOutNotice";c.SensitiveDataLimitUseNotice= "SensitiveDataLimitUseNotice";c.SaleOptOut="SaleOptOut";c.SharingOptOut="SharingOptOut";c.TargetedAdvertisingOptOut="TargetedAdvertisingOptOut";c.SensitiveDataProcessing="SensitiveDataProcessing";c.KnownChildSensitiveDataConsents="KnownChildSensitiveDataConsents";c.PersonalDataConsents="PersonalDataConsents";c.MspaCoveredTransaction="MspaCoveredTransaction";c.MspaOptOutOptionMode="MspaOptOutOptionMode";c.MspaServiceProviderMode="MspaServiceProviderMode";c.SubSectionType="SubsectionType";c.Gpc="Gpc"})(Y|| (Y={}));var Z;(function(c){c[c.NA=0]="NA";c[c.OptedOut=1]="OptedOut";c[c.OptedIn=2]="OptedIn"})(Z||(Z={}));var C;(function(c){c.AdDensity="addensity";c.AdLayout="adlayout";c.FooterCloseButton="footerclose";c.Interstitial="interstitial";c.RemoveVideoTitleWrapper="removevideotitlewrapper";c.StickyOutstream="stickyoutstream";c.StickyOutstreamOnStickyPlayer="sospp";c.VideoAdvancePlaylistRelatedPlayer="videoadvanceplaylistrp";c.MobileStickyPlayerPosition="mspp"})(C||(C={}));var J;(function(c){c.Desktop= "desktop";c.Mobile="mobile"})(J||(J={}));var G;(function(c){c.Video_Collapse_Autoplay_SoundOff="Video_Collapse_Autoplay_SoundOff";c.Video_Individual_Autoplay_SOff="Video_Individual_Autoplay_SOff";c.Video_Coll_SOff_Smartphone="Video_Coll_SOff_Smartphone";c.Video_In_Post_ClicktoPlay_SoundOn="Video_In-Post_ClicktoPlay_SoundOn"})(G||(G={}));var aa;(aa||(aa={})).None="none";var ba;(function(c){c.Default="default";c.AZ_Animals="5daf495ed42c8605cfc74b0b";c.Natashas_Kitchen="55bccc97303edab84afd77e2";c.RecipeTin_Eats= "55cb7e3b4bc841bd0c4ea577";c.Sallys_Baking_Recipes="566aefa94856897050ee7303";c.Spend_With_Pennies="541917f5a90318f9194874cf"})(ba||(ba={}));var ua=function(c,b){var a=c.adDensityEnabled;c=c.adDensityLayout.pageOverrides.find(function(d){return!!document.querySelector(d.pageSelector)&&(d[b].onePerViewport||"number"===typeof d[b].adDensity)});return a?!c:!0};z=function(){function c(){this._timeOrigin=0}c.prototype.resetTimeOrigin=function(){this._timeOrigin=window.performance.now()};c.prototype.now= function(){try{return Math.round(window.performance.now()-this._timeOrigin)}catch(b){return 0}};return c}();window.adthrive.windowPerformance=window.adthrive.windowPerformance||new z;z=window.adthrive.windowPerformance;var O=z.now.bind(z),va=function(c){void 0===c&&(c=window.location.search);var b=0===c.indexOf("?")?1:0;return c.slice(b).split("&").reduce(function(a,d){d=r(d.split("="),2);a.set(d[0],d[1]);return a},new Map)},ca=function(c){try{return{valid:!0,elements:document.querySelectorAll(c)}}catch(b){return y({valid:!1}, b)}},da=function(c){return""===c?{valid:!0}:ca(c)},wa=function(c){var b=c.reduce(function(a,d){return d.weight?d.weight+a:a},0);return 0<c.length&&c.every(function(a){var d=a.value;a=a.weight;return!(void 0===d||null===d||"number"===typeof d&&isNaN(d)||!a)})&&100===b},xa=["siteId","siteName","adOptions","breakpoints","adUnits"],ya=function(c){var b={},a=va().get(c);if(a)try{var d=decodeURIComponent(a);b=JSON.parse(d);q.event("ExperimentOverridesUtil","getExperimentOverrides",c,b)}catch(e){}return b}, za=function(c){function b(a){var d=c.call(this)||this;d._featureRollouts=a.enabled?a.siteAds.featureRollouts||{}:{};return d}v(b,c);return b}(function(){function c(){this._featureRollouts={}}Object.defineProperty(c.prototype,"siteFeatureRollouts",{get:function(){return this._featureRollouts},enumerable:!1,configurable:!0});c.prototype.isRolloutEnabled=function(b){return this._featureRollouts&&this._featureRollouts[b]?this._featureRollouts[b].enabled:!1};return c}()),ea=function(){function c(){this._clsGlobalData= window.adthriveCLS}Object.defineProperty(c.prototype,"enabled",{get:function(){var b;if(b=!!this._clsGlobalData&&!!this._clsGlobalData.siteAds)a:{b=this._clsGlobalData.siteAds;var a=void 0;void 0===a&&(a=xa);if(b){for(var d=0;d<a.length;d++)if(!b[a[d]]){b=!1;break a}b=!0}else b=!1}return b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"error",{get:function(){return!(!this._clsGlobalData||!this._clsGlobalData.error)},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype, "siteAds",{get:function(){return this._clsGlobalData.siteAds},set:function(b){this._clsGlobalData.siteAds=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"disableAds",{get:function(){return this._clsGlobalData.disableAds},set:function(b){this._clsGlobalData.disableAds=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"enabledLocations",{get:function(){return this._clsGlobalData.enabledLocations},set:function(b){this._clsGlobalData.enabledLocations=b},enumerable:!1, configurable:!0});Object.defineProperty(c.prototype,"injectedFromPlugin",{get:function(){return this._clsGlobalData.injectedFromPlugin},set:function(b){this._clsGlobalData.injectedFromPlugin=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"injectedFromSiteAds",{get:function(){return this._clsGlobalData.injectedFromSiteAds},set:function(b){this._clsGlobalData.injectedFromSiteAds=b},enumerable:!1,configurable:!0});c.prototype.overwriteInjectedSlots=function(b){this._clsGlobalData.injectedSlots= b};c.prototype.setInjectedSlots=function(b){this._clsGlobalData.injectedSlots=this._clsGlobalData.injectedSlots||[];this._clsGlobalData.injectedSlots.push(b)};Object.defineProperty(c.prototype,"injectedSlots",{get:function(){return this._clsGlobalData.injectedSlots},enumerable:!1,configurable:!0});c.prototype.setInjectedVideoSlots=function(b){this._clsGlobalData.injectedVideoSlots=this._clsGlobalData.injectedVideoSlots||[];this._clsGlobalData.injectedVideoSlots.push(b)};Object.defineProperty(c.prototype, "injectedVideoSlots",{get:function(){return this._clsGlobalData.injectedVideoSlots},enumerable:!1,configurable:!0});c.prototype.setInjectedScripts=function(b){this._clsGlobalData.injectedScripts=this._clsGlobalData.injectedScripts||[];this._clsGlobalData.injectedScripts.push(b)};Object.defineProperty(c.prototype,"getInjectedScripts",{get:function(){return this._clsGlobalData.injectedScripts},enumerable:!1,configurable:!0});c.prototype.setExperiment=function(b,a,d){void 0===d&&(d=!1);this._clsGlobalData.experiments= this._clsGlobalData.experiments||{};this._clsGlobalData.siteExperiments=this._clsGlobalData.siteExperiments||{};(d?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments)[b]=a};c.prototype.getExperiment=function(b,a){void 0===a&&(a=!1);return(a=a?this._clsGlobalData.siteExperiments:this._clsGlobalData.experiments)&&a[b]};c.prototype.setWeightedChoiceExperiment=function(b,a,d){void 0===d&&(d=!1);this._clsGlobalData.experimentsWeightedChoice=this._clsGlobalData.experimentsWeightedChoice|| {};this._clsGlobalData.siteExperimentsWeightedChoice=this._clsGlobalData.siteExperimentsWeightedChoice||{};(d?this._clsGlobalData.siteExperimentsWeightedChoice:this._clsGlobalData.experimentsWeightedChoice)[b]=a};c.prototype.getWeightedChoiceExperiment=function(b,a){var d,e;void 0===a&&(a=!1);return(a=a?null===(d=this._clsGlobalData)||void 0===d?void 0:d.siteExperimentsWeightedChoice:null===(e=this._clsGlobalData)||void 0===e?void 0:e.experimentsWeightedChoice)&&a[b]};Object.defineProperty(c.prototype, "branch",{get:function(){return this._clsGlobalData.branch},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"bucket",{get:function(){return this._clsGlobalData.bucket},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"videoDisabledFromPlugin",{get:function(){return this._clsGlobalData.videoDisabledFromPlugin},set:function(b){this._clsGlobalData.videoDisabledFromPlugin=b},enumerable:!1,configurable:!0});Object.defineProperty(c.prototype,"targetDensityLog",{get:function(){return this._clsGlobalData.targetDensityLog}, set:function(b){this._clsGlobalData.targetDensityLog=b},enumerable:!1,configurable:!0});c.prototype.shouldHalveIOSDensity=function(){var b=new za(this),a=void 0;void 0===a&&(a=navigator.userAgent);return/iP(hone|od|ad)/i.test(a)&&b.isRolloutEnabled("iOS-Resolution")};c.prototype.getTargetDensity=function(b){return this.shouldHalveIOSDensity()?b/2:b};Object.defineProperty(c.prototype,"removeVideoTitleWrapper",{get:function(){return this._clsGlobalData.siteAds.adOptions.removeVideoTitleWrapper},enumerable:!1, configurable:!0});return c}(),Aa=function(){function c(){}c.getScrollTop=function(){return(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0)};c.getScrollBottom=function(){return this.getScrollTop()+(document.documentElement.clientHeight||0)};c.shufflePlaylist=function(b){for(var a=b.length,d,e;0!==a;)e=Math.floor(Math.random()*b.length),--a,d=b[a],b[a]=b[e],b[e]=d;return b};c.isMobileLandscape=function(){return window.matchMedia("(orientation: landscape) and (max-height: 480px)").matches}; c.playerViewable=function(b){b=b.getBoundingClientRect();return this.isMobileLandscape()?window.innerHeight>b.top+b.height/2&&0<b.top+b.height/2:window.innerHeight>b.top+b.height/2};c.createQueryString=function(b){return Object.keys(b).map(function(a){return"".concat(a,"=").concat(b[a])}).join("&")};c.createEncodedQueryString=function(b){return Object.keys(b).map(function(a){return"".concat(a,"=").concat(encodeURIComponent(b[a]))}).join("&")};c.setMobileLocation=function(b){b=b||"bottom-right";"top-left"=== b?b="adthrive-collapse-top-left":"top-right"===b?b="adthrive-collapse-top-right":"bottom-left"===b?b="adthrive-collapse-bottom-left":"bottom-right"===b?b="adthrive-collapse-bottom-right":"top-center"===b&&(b=E()?"adthrive-collapse-top-center":"adthrive-collapse-bottom-right");return b};c.addMaxResolutionQueryParam=function(b){var a=E()?"320":"1280";a="max_resolution=".concat(a);var d=r(String(b).split("?"),2);b=d[0];a=(d=d[1])?d+"&".concat(a):a;return"".concat(b,"?").concat(a)};return c}(),Ba=function(){return function(c){this._clsOptions= c;this.removeVideoTitleWrapper=u(this._clsOptions.siteAds.adOptions.removeVideoTitleWrapper,!1);c=this._clsOptions.siteAds.videoPlayers;this.footerSelector=u(c&&c.footerSelector,"");this.players=u(c&&c.players.map(function(b){b.mobileLocation=Aa.setMobileLocation(b.mobileLocation);return b}),[]);this.relatedSettings=c&&c.contextual}}(),Ca=function(){return function(c){this.relatedPlayerAdded=this.playlistPlayerAdded=this.mobileStickyPlayerOnPage=!1;this.footerSelector="";this.removeVideoTitleWrapper= !1;this.videoAdOptions=new Ba(c);this.players=this.videoAdOptions.players;this.relatedSettings=this.videoAdOptions.relatedSettings;this.removeVideoTitleWrapper=this.videoAdOptions.removeVideoTitleWrapper;this.footerSelector=this.videoAdOptions.footerSelector}}();D=function(){return function(){}}();var H=function(c){function b(a){var d=c.call(this)||this;d._probability=a;return d}v(b,c);b.prototype.get=function(){if(0>this._probability||1<this._probability)throw Error("Invalid probability: ".concat(this._probability)); return Math.random()<this._probability};return b}(D);z=function(){function c(){this._clsOptions=new ea;this.shouldUseCoreExperimentsConfig=!1}c.prototype.setExperimentKey=function(b){void 0===b&&(b=!1);this._clsOptions.setExperiment(this.abgroup,this.result,b)};return c}();var Da=function(c){function b(){var a=c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key="RemoveLargeSize";a.abgroup="smhd100";a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype, "result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(.1)).get()};return b}(z),fa=function(c,b,a,d,e,f){c=Math.round(f-e);b=[];e=[];b.push("(",a.map(function(){return"%o"}).join(", "),")");e.push.apply(e,w([],r(a),!1));void 0!==d&&(b.push(" => %o"),e.push(d));b.push(" %c(".concat(c,"ms)"));e.push("color: #999;")},ha=function(c,b,a){var d=void 0!==a.get?a.get:a.value;return function(){for(var e=[],f=0;f<arguments.length;f++)e[f]=arguments[f]; try{var g=O(),h=d.apply(this,e);if(h instanceof Promise)return h.then(function(l){var p=O();fa(c,b,e,l,g,p);return Promise.resolve(l)}).catch(function(l){l.logged||(q.error(c,b,l),l.logged=!0);throw l;});var k=O();fa(c,b,e,h,g,k);return h}catch(l){throw l.logged||(q.error(c,b,l),l.logged=!0),l;}}},P=function(c,b){void 0===b&&(b=!1);return function(a){var d,e=Object.getOwnPropertyNames(a.prototype).filter(function(m){return b||0!==m.indexOf("_")}).map(function(m){return[m,Object.getOwnPropertyDescriptor(a.prototype, m)]});try{for(var f=L(e),g=f.next();!g.done;g=f.next()){var h=r(g.value,2),k=h[0],l=h[1];void 0!==l&&"function"===typeof l.value?a.prototype[k]=ha(c,k,l):void 0!==l&&void 0!==l.get&&"function"===typeof l.get&&Object.defineProperty(a.prototype,k,y(y({},l),{get:ha(c,k,l)}))}}catch(m){var p={error:m}}finally{try{g&&!g.done&&(d=f.return)&&d.call(f)}finally{if(p)throw p.error;}}}},Ea=function(c){function b(a){var d=c.call(this)||this;d._result=!1;d.key="ParallaxAdsExperiment";d.abgroup="parallax";d._choices= [{choice:!0},{choice:!1}];d.weight=.5;E()&&a.largeFormatsMobile&&(d._result=d.run(),d.setExperimentKey());return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(this.weight)).get()};return b=I([P("ParallaxAdsExperiment"),B("design:paramtypes",[Object])],b)}(z),Fa=function(c){function b(){var a=c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key="mrsf";a.abgroup="mrsf"; E()&&(a._result=a.run(),a.setExperimentKey());return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(1)).get()};return b}(z),Ga=[[728,90],[300,250],[300,600],[320,50],[970,250],[160,600],[300,1050],[336,280],[970,90],[300,50],[320,100],[468,60],[250,250],[120,240],[1,1],[300,300],[552,334],[300,420],[728,250],[320,300],[300,390]],Ha=[[300,600],[160,600]],Ia=new Map([["Footer",1],["Header", 2],["Sidebar",3],["Content",4],["Recipe",5],["Sidebar_sticky",6],["Below Post",7]]),Ja=function(c){return Ga.filter(function(b){b=r(b,2);var a=b[0],d=b[1];return c.some(function(e){e=r(e,2);var f=e[1];return a===e[0]&&d===f})})},Ka=function(c,b,a,d,e){b=r(b,2);var f=b[0],g=b[1],h=c.location;b=c.sequence;return"Footer"===h?!("phone"===a&&320===f&&100===g):"Header"===h?!(100<g&&d.result):"Recipe"===h?!(e.result&&"phone"===a&&(300===f&&390===g||320===f&&300===g)):"Sidebar"===h?(a=c.adSizes.some(function(k){return 300>= r(k,2)[1]}),(d=300<g)&&!a?!0:9===b?!0:b&&5>=b?d?c.sticky:!0:!d):!0},La=function(c,b){var a=c.location;c=c.sticky;if("Recipe"===a&&b){var d=b.recipeMobile;b=b.recipeDesktop;if(E()&&(null===d||void 0===d?0:d.enabled)||!E()&&(null===b||void 0===b?0:b.enabled))return!0}return"Footer"===a||c},Ma=function(c,b){var a=b.adUnits,d=b.adTypes?(new Ea(b.adTypes)).result:!1,e=new Da,f=new Fa;return a.filter(function(g){return void 0!==g.dynamic&&g.dynamic.enabled}).map(function(g){var h=g.location.replace(/\s+/g, "_"),k="Sidebar"===h?0:2;return{auctionPriority:Ia.get(h)||8,location:h,sequence:u(g.sequence,1),sizes:Ja(g.adSizes).filter(function(l){return Ka(g,l,c,e,f)}).concat(d&&"Content"===g.location?Ha:[]),devices:g.devices,pageSelector:u(g.dynamic.pageSelector,"").trim(),elementSelector:u(g.dynamic.elementSelector,"").trim(),position:u(g.dynamic.position,"beforebegin"),max:Math.floor(u(g.dynamic.max,0)),spacing:u(g.dynamic.spacing,0),skip:Math.floor(u(g.dynamic.skip,0)),every:Math.max(Math.floor(u(g.dynamic.every, 1)),1),classNames:g.dynamic.classNames||[],sticky:La(g,b.adOptions.stickyContainerConfig),stickyOverlapSelector:u(g.stickyOverlapSelector,"").trim(),autosize:g.autosize,special:u(g.targeting,[]).filter(function(l){return"special"===l.key}).reduce(function(l,p){return l.concat.apply(l,w([],r(p.value),!1))},[]),lazy:u(g.dynamic.lazy,!1),lazyMax:u(g.dynamic.lazyMax,k),lazyMaxDefaulted:0===g.dynamic.lazyMax?!1:!g.dynamic.lazyMax,name:g.name}})},ia=function(c,b){var a=na(b),d=c.sticky&&"Sidebar"===c.location; return c.sizes.filter(function(e){var f=d?e[1]<=window.innerHeight-100:!0;return(c.autosize?e[0]<=a||320>=e[0]:!0)&&f})},Na=function(){return function(c){this.clsOptions=c;this.enabledLocations=["Below_Post","Content","Recipe","Sidebar"]}}(),Oa=function(c){var b=document.body;c="adthrive-device-".concat(c);if(!b.classList.contains(c))try{b.classList.add(c)}catch(a){q.error("BodyDeviceClassComponent","init",{message:a.message}),b="classList"in document.createElement("_"),q.error("BodyDeviceClassComponent", "init.support",{support:b})}},Q=function(c){return"adthrive-".concat(c.location.replace("_","-").toLowerCase())},ja=function(c){return"".concat(Q(c),"-").concat(c.sequence)},Pa=function(c){return T('\n .adthrive-device-phone .adthrive-sticky-content {\n height: 450px !important;\n margin-bottom: 100px !important;\n }\n .adthrive-content.adthrive-sticky {\n position: -webkit-sticky;\n position: sticky !important;\n top: 42px !important;\n margin-top: 42px !important;\n }\n .adthrive-content.adthrive-sticky:after {\n content: "\u2014 Advertisement. Scroll down to continue. \u2014";\n font-size: 10pt;\n margin-top: 5px;\n margin-bottom: 5px;\n display:block;\n color: #888;\n }\n .adthrive-sticky-container {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n min-height:'.concat(c? c:400,"px !important;\n margin: 10px 0 10px 0;\n background-color: #FAFAFA;\n padding-bottom:0px;\n }\n "))},ka=function(c){return c.some(function(b){return null!==document.querySelector(b)})},Qa=function(c){function b(){var a=c.call(this)||this;a._result=!1;a._choices=[{choice:!0},{choice:!1}];a.key="RemoveRecipeCap";a.abgroup="rrc";a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0}); b.prototype.run=function(){return(new H(1)).get()};return b}(z),R=function(c){function b(a,d){void 0===a&&(a=[]);var e=c.call(this)||this;e._choices=a;e._default=d;return e}v(b,c);b.fromArray=function(a,d){return new b(a.map(function(e){e=r(e,2);return{choice:e[0],weight:e[1]}}),d)};b.prototype.addChoice=function(a,d){this._choices.push({choice:a,weight:d})};b.prototype.get=function(){var a,d=100*Math.random(),e=0;try{for(var f=L(this._choices),g=f.next();!g.done;g=f.next()){var h=g.value,k=h.choice; e+=h.weight;if(e>=d)return k}}catch(p){var l={error:p}}finally{try{g&&!g.done&&(a=f.return)&&a.call(f)}finally{if(l)throw l.error;}}return this._default};Object.defineProperty(b.prototype,"totalWeight",{get:function(){return this._choices.reduce(function(a,d){return a+d.weight},0)},enumerable:!1,configurable:!0});return b}(D),Ra=function(c){for(var b=5381,a=c.length;a;)b=33*b^c.charCodeAt(--a);return b>>>0},M=new (function(){function c(){var b=this;this.name="StorageHandler";this.disable=!1;this.removeLocalStorageValue= function(a){window.localStorage.removeItem("adthrive_".concat(a.toLowerCase()))};this.getLocalStorageValue=function(a,d,e,f,g){void 0===d&&(d=!0);void 0===e&&(e=!0);if(b.disable)return null;try{var h=window.localStorage.getItem("".concat(d?"adthrive_":"").concat(e?a.toLowerCase():a));if(h){var k=JSON.parse(h),l=void 0!==f&&Date.now()-k.created>=f;if(k&&!l)return g&&b.setLocalStorageValue(a,k.value,d),k.value}}catch(p){}return null};this.setLocalStorageValue=function(a,d,e){void 0===e&&(e=!0);try{e= e?"adthrive_":"";var f={value:d,created:Date.now()};window.localStorage.setItem("".concat(e).concat(a.toLowerCase()),JSON.stringify(f))}catch(g){}};this.isValidABGroupLocalStorageValue=function(a){return void 0!==a&&null!==a&&!("number"===typeof a&&isNaN(a))};this.getOrSetLocalStorageValue=function(a,d,e,f,g,h,k){void 0===f&&(f=!0);void 0===g&&(g=!0);void 0===k&&(k=!0);e=b.getLocalStorageValue(a,k,f,e,g);if(null!==e)return e;d=d();b.setLocalStorageValue(a,d,k);h&&h(d);return d};this.getOrSetABGroupLocalStorageValue= function(a,d,e,f,g){var h;void 0===f&&(f=!0);e=b.getLocalStorageValue("abgroup",!0,!0,e,f);if(null!==e&&(f=e[a],b.isValidABGroupLocalStorageValue(f)))return f;d=d();a=y(y({},e),(h={},h[a]=d,h));b.setLocalStorageValue("abgroup",a);g&&g();return d}}c.prototype.init=function(){};return c}()),la=function(){return function(c,b,a){var d=a.value;d&&(a.value=function(){for(var e=this,f=[],g=0;g<arguments.length;g++)f[g]=arguments[g];g=Array.isArray(this._choices)?Ra(JSON.stringify(this._choices)).toString(16): null;var h=this._expConfigABGroup?this._expConfigABGroup:this.abgroup;h=h?h.toLowerCase():this.key?this.key.toLowerCase():"";g=g?"".concat(h,"_").concat(g):h;g=this.localStoragePrefix?"".concat(this.localStoragePrefix,"-").concat(g):g;h=M.getLocalStorageValue("branch");!1===(h&&h.enabled)&&M.removeLocalStorageValue(g);return M.getOrSetABGroupLocalStorageValue(g,function(){return d.apply(e,f)},864E5)})}};D=function(c){function b(){var a=c.apply(this,w([],r(arguments),!1))||this;a._resultValidator= function(){return!0};return a}v(b,c);b.prototype._isValidResult=function(a){var d=this;return c.prototype._isValidResult.call(this,a,function(){return d._resultValidator(a)||"control"===a})};b.prototype.run=function(){if(!this.enabled)return q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","No experiment config found. Defaulting to control."),"control";if(!this._mappedChoices||0===this._mappedChoices.length)return q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","No experiment variants found. Defaulting to control."), "control";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a;q.error("CLSWeightedChoiceSiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to control.");return"control"};return b}(function(){function c(){}Object.defineProperty(c.prototype,"enabled",{get:function(){return void 0!==this.experimentConfig},enumerable:!1,configurable:!0});c.prototype._isValidResult=function(b,a){void 0===a&&(a=function(){return!0});return a()&&M.isValidABGroupLocalStorageValue(b)}; return c}());var ma=function(){function c(b){var a=this,d,e;this.siteExperiments=[];this._clsOptions=b;this._device=E()?"mobile":"desktop";this.siteExperiments=null!==(e=null===(d=this._clsOptions.siteAds.siteExperiments)||void 0===d?void 0:d.filter(function(f){var g=f.key;var h=a._device;if(f){var k=!!f.enabled,l=null==f.dateStart||Date.now()>=f.dateStart,p=null==f.dateEnd||Date.now()<=f.dateEnd,m=null===f.selector||""!==f.selector&&!!document.querySelector(f.selector),t="mobile"===f.platform&&"mobile"=== h;h="desktop"===f.platform&&"desktop"===h;t=null===f.platform||"all"===f.platform||t||h;(h="bernoulliTrial"===f.experimentType?1===f.variants.length:wa(f.variants))||q.error("SiteTest","validateSiteExperiment","experiment presented invalid choices for key:",f.key,f.variants);f=k&&l&&p&&m&&t&&h}else f=!1;a:switch(k=a._clsOptions.siteAds,g){case C.AdDensity:var n=ua(k,a._device);break a;case C.StickyOutstream:var x,A;n=(g=null===(A=null===(x=null===(n=k.videoPlayers)||void 0===n?void 0:n.partners)|| void 0===x?void 0:x.stickyOutstream)||void 0===A?void 0:A.blockedPageSelectors)?!document.querySelector(g):!0;break a;case C.Interstitial:n=(n=k.adOptions.interstitialBlockedPageSelectors)?!document.querySelector(n):!0;break a;default:n=!0}return f&&n}))&&void 0!==e?e:[]}c.prototype.getSiteExperimentByKey=function(b){var a=this.siteExperiments.filter(function(f){return f.key.toLowerCase()===b.toLowerCase()})[0],d=ya("at_site_features"),e=typeof((null===a||void 0===a?0:a.variants[1])?null===a||void 0=== a?void 0:a.variants[1].value:null===a||void 0===a?void 0:a.variants[0].value)===typeof d[b];a&&d[b]&&e&&(a.variants=[{displayName:"test",value:d[b],weight:100,id:0}]);return a};return c}(),Sa=function(c){function b(a){var d=c.call(this)||this;d._choices=[];d._mappedChoices=[];d._result="";d._resultValidator=function(e){return"string"===typeof e};d.key=C.AdLayout;d.abgroup=C.AdLayout;d._clsSiteExperiments=new ma(a);d.experimentConfig=d._clsSiteExperiments.getSiteExperimentByKey(d.key);d.enabled&&d.experimentConfig&& (d._choices=d.experimentConfig.variants,d._mappedChoices=d._mapChoices(),d._result=d.run(),a.setWeightedChoiceExperiment(d.abgroup,d._result,!0));return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){if(!this.enabled)return q.error("CLSAdLayoutSiteExperiment","run","() => %o","No experiment config found. Defaulting to empty class name."),"";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a; q.error("CLSAdLayoutSiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to empty class name.");return""};b.prototype._mapChoices=function(){return this._choices.map(function(a){return{weight:a.weight,choice:a.value}})};I([la(),B("design:type",Function),B("design:paramtypes",[]),B("design:returntype",void 0)],b.prototype,"run",null);return b}(D),Ta=function(c){function b(a){var d=c.call(this)||this;d._choices=[];d._mappedChoices=[];d._result="control";d._resultValidator= function(e){return"number"===typeof e};d.key=C.AdDensity;d.abgroup=C.AdDensity;d._clsSiteExperiments=new ma(a);d.experimentConfig=d._clsSiteExperiments.getSiteExperimentByKey(d.key);d.enabled&&d.experimentConfig&&(d._choices=d.experimentConfig.variants,d._mappedChoices=d._mapChoices(),d._result=d.run(),a.setWeightedChoiceExperiment(d.abgroup,d._result,!0));return d}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run= function(){if(!this.enabled)return q.error("CLSTargetAdDensitySiteExperiment","run","() => %o","No experiment config found. Defaulting to control."),"control";var a=(new R(this._mappedChoices)).get();if(this._isValidResult(a))return a;q.error("CLSTargetAdDensitySiteExperiment","run","() => %o","Invalid result from experiment choices. Defaulting to control.");return"control"};b.prototype._mapChoices=function(){return this._choices.map(function(a){var d=a.value;return{weight:a.weight,choice:"number"=== typeof d?(d||0)/100:"control"}})};I([la(),B("design:type",Function),B("design:paramtypes",[]),B("design:returntype",void 0)],b.prototype,"run",null);return b}(D),Ua=function(c){function b(){var a=c.call(this)||this;a._result=!1;a.abgroup="scae";a.key="StickyContainerAds";a._choices=[{choice:!0},{choice:!1}];a.weight=.99;a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run= function(){return(new H(this.weight)).get()};return b=I([P("StickyContainerAdsExperiment"),B("design:paramtypes",[])],b)}(z),Va=function(c){function b(){var a=c.call(this)||this;a._result=!1;a.abgroup="scre";a.key="StickyContainerRecipe";a._choices=[{choice:!0},{choice:!1}];a.weight=.99;a._result=a.run();a.setExperimentKey();return a}v(b,c);Object.defineProperty(b.prototype,"result",{get:function(){return this._result},enumerable:!1,configurable:!0});b.prototype.run=function(){return(new H(this.weight)).get()}; return b=I([P("StickyContainerRecipeExperiment"),B("design:paramtypes",[])],b)}(z),Ya=function(){function c(b,a){this._clsOptions=b;this._adInjectionMap=a;this._mainContentHeight=this._recipeCount=0;this._mainContentDiv=null;this._totalAvailableElements=[];this._minDivHeight=250;this._densityDevice=J.Desktop;this._pubLog={onePerViewport:!1,targetDensity:0,targetDensityUnits:0,combinedMax:0};this._densityMax=.99;this._smallerIncrementAttempts=0;this._absoluteMinimumSpacingByDevice=250;this._usedAbsoluteMinimum= !1;this._infPageEndOffset=0;this.locationMaxLazySequence=new Map([["Recipe",5]]);this.locationToMinHeight={Below_Post:"250px",Content:"250px",Recipe:"250px",Sidebar:"250px"};a=this._clsOptions.siteAds.breakpoints;var d=a.tablet;var e=window.innerWidth;a=e>=a.desktop?"desktop":e>=d?"tablet":"phone";this._device=a;this._config=new Na(b);this._clsOptions.enabledLocations=this._config.enabledLocations;this._clsTargetAdDensitySiteExperiment=this._clsOptions.siteAds.siteExperiments?new Ta(this._clsOptions): null;this._stickyContainerAdsExperiment=new Ua;this._stickyContainerRecipeExperiment=new Va;this._removeRecipeCapExperiment=new Qa}c.prototype.start=function(){var b=this,a,d,e,f;try{Oa(this._device);var g=new Sa(this._clsOptions);if(g.enabled){var h=g.result,k=h.startsWith(".")?h.substring(1):h;if(/^[-_a-zA-Z]+[-_a-zA-Z0-9]*$/.test(k))try{document.body.classList.add(k)}catch(m){q.error("ClsDynamicAdsInjector","start","Uncaught CSS Class error: ".concat(m))}else q.error("ClsDynamicAdsInjector","start", "Invalid class name: ".concat(k))}var l=Ma(this._device,this._clsOptions.siteAds).filter(function(m){return b._locationEnabled(m)}).filter(function(m){return m.devices.includes(b._device)}).filter(function(m){return 0===m.pageSelector.length||null!==document.querySelector(m.pageSelector)}),p=this.inject(l);(null===(d=null===(a=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===a?void 0:a.content)||void 0===d?0:d.enabled)&&this._stickyContainerAdsExperiment.result&&!ka(this._clsOptions.siteAds.adOptions.stickyContainerConfig.blockedSelectors|| [])&&Pa(null===(f=null===(e=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===e?void 0:e.content)||void 0===f?void 0:f.minHeight);p.forEach(function(m){return b._clsOptions.setInjectedSlots(m)})}catch(m){q.error("ClsDynamicAdsInjector","start",m)}};c.prototype.inject=function(b,a){void 0===a&&(a=document);this._densityDevice="desktop"===this._device?J.Desktop:J.Mobile;this._overrideDefaultAdDensitySettingsWithSiteExperiment();var d=this._clsOptions.siteAds,e=u(d.adDensityEnabled, !0),f=d.adDensityLayout&&e;d=b.filter(function(g){return f?"Content"!==g.location:g});b=b.filter(function(g){return f?"Content"===g.location:null});return w(w([],r(d.length?this._injectNonDensitySlots(d,a):[]),!1),r(b.length?this._injectDensitySlots(b,a):[]),!1)};c.prototype._injectNonDensitySlots=function(b,a){var d,e=this,f,g,h;void 0===a&&(a=document);var k=[],l=[];this._stickyContainerRecipeExperiment.result&&b.some(function(n){return"Recipe"===n.location&&n.sticky})&&!ka((null===(f=this._clsOptions.siteAds.adOptions.stickyContainerConfig)|| void 0===f?void 0:f.blockedSelectors)||[])&&(f=this._clsOptions.siteAds.adOptions.stickyContainerConfig,f="phone"===this._device?null===(g=null===f||void 0===f?void 0:f.recipeMobile)||void 0===g?void 0:g.minHeight:null===(h=null===f||void 0===f?void 0:f.recipeDesktop)||void 0===h?void 0:h.minHeight,T("\n .adthrive-recipe.adthrive-sticky {\n position: -webkit-sticky;\n position: sticky !important;\n top: 42px !important;\n margin-top: 42px !important;\n }\n .adthrive-recipe-sticky-container {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n min-height:".concat(f? f:400,"px !important;\n margin: 10px 0 10px 0;\n background-color: #FAFAFA;\n padding-bottom:0px;\n }\n ")));try{for(var p=L(b),m=p.next();!m.done;m=p.next())this._insertNonDensityAds(m.value,k,l,a)}catch(n){var t={error:n}}finally{try{m&&!m.done&&(d=p.return)&&d.call(p)}finally{if(t)throw t.error;}}l.forEach(function(n){n.element.style.minHeight=e.locationToMinHeight[n.location]});return k};c.prototype._injectDensitySlots=function(b,a){void 0===a&&(a=document);try{this._calculateMainContentHeightAndAllElements(b, a)}catch(h){return[]}var d=this._getDensitySettings(b,a);b=d.onePerViewport;var e=d.targetAll,f=d.targetDensityUnits,g=d.combinedMax;d=d.numberOfUnits;this._absoluteMinimumSpacingByDevice=b?window.innerHeight:this._absoluteMinimumSpacingByDevice;if(!d)return[];this._adInjectionMap.filterUsed();this._findElementsForAds(d,b,e,g,f,a);return this._insertAds()};c.prototype._overrideDefaultAdDensitySettingsWithSiteExperiment=function(){var b;if(null===(b=this._clsTargetAdDensitySiteExperiment)||void 0=== b?0:b.enabled)b=this._clsTargetAdDensitySiteExperiment.result,"number"===typeof b&&(this._clsOptions.siteAds.adDensityEnabled=!0,this._clsOptions.siteAds.adDensityLayout[this._densityDevice].adDensity=b)};c.prototype._getDensitySettings=function(b,a){void 0===a&&(a=document);var d=this._clsOptions.siteAds.adDensityLayout,e=this._determineOverrides(d.pageOverrides);e=e.length?e[0]:d[this._densityDevice];d=this._clsOptions.getTargetDensity(e.adDensity);e=e.onePerViewport;var f=this._shouldTargetAllEligible(d), g=this._getTargetDensityUnits(d,f);b=this._getCombinedMax(b,a);a=Math.min.apply(Math,w([],r(w([this._totalAvailableElements.length,g],r(0<b?[b]:[]),!1)),!1));this._pubLog={onePerViewport:e,targetDensity:d,targetDensityUnits:g,combinedMax:b};return{onePerViewport:e,targetAll:f,targetDensityUnits:g,combinedMax:b,numberOfUnits:a}};c.prototype._determineOverrides=function(b){var a=this;return b.filter(function(d){var e=da(d.pageSelector);return""===d.pageSelector||e.elements&&e.elements.length}).map(function(d){return d[a._densityDevice]})}; c.prototype._shouldTargetAllEligible=function(b){return b===this._densityMax};c.prototype._getTargetDensityUnits=function(b,a){return a?this._totalAvailableElements.length:Math.floor(b*this._mainContentHeight/(1-b)/this._minDivHeight)-this._recipeCount};c.prototype._getCombinedMax=function(b,a){void 0===a&&(a=document);return u(b.filter(function(d){try{var e=a.querySelector(d.elementSelector)}catch(f){}return e}).map(function(d){return Number(d.max)+Number(d.lazyMaxDefaulted?0:d.lazyMax)}).sort(function(d, e){return e-d})[0],0)};c.prototype._elementLargerThanMainContent=function(b){return b.offsetHeight>=this._mainContentHeight&&1<this._totalAvailableElements.length};c.prototype._elementDisplayNone=function(b){var a=window.getComputedStyle(b,null).display;return a&&"none"===a||"none"===b.style.display};c.prototype._isBelowMaxes=function(b,a){return this._adInjectionMap.map.length<b&&this._adInjectionMap.map.length<a};c.prototype._findElementsForAds=function(b,a,d,e,f,g){var h=this;void 0===g&&(g=document); this._clsOptions.targetDensityLog={onePerViewport:a,combinedMax:e,targetDensityUnits:f,targetDensityPercentage:this._pubLog.targetDensity,mainContentHeight:this._mainContentHeight,recipeCount:this._recipeCount,numberOfEls:this._totalAvailableElements.length};var k=function(l){var p;try{for(var m=L(h._totalAvailableElements),t=m.next();!t.done;t=m.next()){var n=t.value,x=n.dynamicAd,A=n.element;h._logDensityInfo(A,x.elementSelector,l);if(!(!d&&h._elementLargerThanMainContent(A)||h._elementDisplayNone(A)))if(h._isBelowMaxes(e, f))h._checkElementSpacing({dynamicAd:x,element:A,insertEvery:l,targetAll:d,target:g});else break}}catch(K){var F={error:K}}finally{try{t&&!t.done&&(p=m.return)&&p.call(m)}finally{if(F)throw F.error;}}!h._usedAbsoluteMinimum&&5>h._smallerIncrementAttempts&&(++h._smallerIncrementAttempts,k(h._getSmallerIncrement(l)))};b=this._getInsertEvery(b,a,f);k(b)};c.prototype._getSmallerIncrement=function(b){b*=.6;b<=this._absoluteMinimumSpacingByDevice&&(b=this._absoluteMinimumSpacingByDevice,this._usedAbsoluteMinimum= !0);return b};c.prototype._insertNonDensityAds=function(b,a,d,e){void 0===e&&(e=document);var f=0,g=0,h=0;0<b.spacing&&(g=f=window.innerHeight*b.spacing);for(var k=this._repeatDynamicAds(b),l=this.getElements(b.elementSelector,e),p=function(n){if(h+1>k.length)return"break";var x=l[n];if(0<f){n=oa(x).bottom;if(n<=g)return"continue";g=n+f}n=k[h];var A="".concat(n.location,"_").concat(n.sequence);a.some(function(Wa){return Wa.name===A})&&(h+=1);var F=m.getDynamicElementId(n),K=Q(b),Xa=ja(b);K=w(["Sidebar"=== b.location&&b.sticky&&b.sequence&&5>=b.sequence?"adthrive-sticky-sidebar":"",m._stickyContainerRecipeExperiment.result&&"Recipe"===b.location&&b.sticky?"adthrive-recipe-sticky-container":"",K,Xa],r(b.classNames),!1);if(x=m.addAd(x,F,b.position,K))F=ia(n,x),F.length&&(a.push({clsDynamicAd:b,dynamicAd:n,element:x,sizes:F,name:A,infinite:e!==document}),d.push({location:n.location,element:x}),"Recipe"===b.location&&++m._recipeCount,h+=1)},m=this,t=b.skip;t<l.length&&"break"!==p(t);t+=b.every);};c.prototype._insertAds= function(){var b=this,a=[];this._adInjectionMap.filterUsed();this._adInjectionMap.map.forEach(function(d,e){var f=d.el,g=d.dynamicAd;d=d.target;e=Number(g.sequence)+e;var h=g.max;h=g.lazy&&e>h;g.sequence=e;g.lazy=h;if(f=b._addContentAd(f,g,d))g.used=!0,a.push(f)});return a};c.prototype._getInsertEvery=function(b,a,d){this._moreAvailableElementsThanUnitsToInject(d,b)?(this._usedAbsoluteMinimum=!1,b=this._useWiderSpacing(d,b)):(this._usedAbsoluteMinimum=!0,b=this._useSmallestSpacing(a));return a&&window.innerHeight> b?window.innerHeight:b};c.prototype._useWiderSpacing=function(b,a){return this._mainContentHeight/Math.min(b,a)};c.prototype._useSmallestSpacing=function(b){return b&&window.innerHeight>this._absoluteMinimumSpacingByDevice?window.innerHeight:this._absoluteMinimumSpacingByDevice};c.prototype._moreAvailableElementsThanUnitsToInject=function(b,a){return this._totalAvailableElements.length>b||this._totalAvailableElements.length>a};c.prototype._logDensityInfo=function(b,a,d){b=this._pubLog;b.onePerViewport; b.targetDensity;b.combinedMax};c.prototype._checkElementSpacing=function(b){var a=b.dynamicAd,d=b.element,e=b.insertEvery,f=b.targetAll;b=b.target;b=void 0===b?document:b;(this._isFirstAdInjected()||this._hasProperSpacing(d,a,f,e))&&this._markSpotForContentAd(d,y({},a),b)};c.prototype._isFirstAdInjected=function(){return!this._adInjectionMap.map.length};c.prototype._markSpotForContentAd=function(b,a,d){void 0===d&&(d=document);this._adInjectionMap.add(b,this._getElementCoords(b,"beforebegin"===a.position|| "afterbegin"===a.position),a,d);this._adInjectionMap.sort()};c.prototype._hasProperSpacing=function(b,a,d,e){var f="beforebegin"===a.position||"afterbegin"===a.position;a="beforeend"===a.position||"afterbegin"===a.position;d=d||this._isElementFarEnoughFromOtherAdElements(b,e,f);f=a||this._isElementNotInRow(b,f);b=-1===b.id.indexOf("AdThrive_".concat("Below_Post"));return d&&f&&b};c.prototype._isElementFarEnoughFromOtherAdElements=function(b,a,d){b=this._getElementCoords(b,d);var e=!1;for(d=0;d<this._adInjectionMap.map.length&& !(e=this._adInjectionMap.map[d+1]&&this._adInjectionMap.map[d+1].coords,e=b-a>this._adInjectionMap.map[d].coords&&(!e||b+a<e));d++);return e};c.prototype._isElementNotInRow=function(b,a){var d=b.previousElementSibling,e=b.nextElementSibling;return(a=a?!d&&e||d&&b.tagName!==d.tagName?e:d:e)&&0===b.getBoundingClientRect().height?!0:a?b.getBoundingClientRect().top!==a.getBoundingClientRect().top:!0};c.prototype._calculateMainContentHeightAndAllElements=function(b,a){void 0===a&&(a=document);b=r(ta(b, this._adInjectionMap,a),2);a=b[1];this._mainContentDiv=b[0];this._totalAvailableElements=a;b=this._mainContentDiv;a=void 0;void 0===a&&(a="div #comments, section .comments");this._mainContentHeight=(a=b.querySelector(a))?b.offsetHeight-a.offsetHeight:b.offsetHeight};c.prototype._getElementCoords=function(b,a){void 0===a&&(a=!1);b=b.getBoundingClientRect();return(a?b.top:b.bottom)+window.scrollY};c.prototype._addContentAd=function(b,a,d){var e,f;void 0===d&&(d=document);var g=null,h=Q(a),k=ja(a),l= (null===(f=null===(e=this._clsOptions.siteAds.adOptions.stickyContainerConfig)||void 0===e?void 0:e.content)||void 0===f?0:f.enabled)&&this._stickyContainerAdsExperiment.result?"adthrive-sticky-container":"";if(b=this.addAd(b,this.getDynamicElementId(a),a.position,w([l,h,k],r(a.classNames),!1)))e=ia(a,b),e.length&&(b.style.minHeight=this.locationToMinHeight[a.location],g="".concat(a.location,"_").concat(a.sequence),g={clsDynamicAd:a,dynamicAd:a,element:b,sizes:e,name:g,infinite:d!==document});return g}; c.prototype.getDynamicElementId=function(b){return"".concat("AdThrive","_").concat(b.location,"_").concat(b.sequence,"_").concat(this._device)};c.prototype.getElements=function(b,a){void 0===a&&(a=document);return a.querySelectorAll(b)};c.prototype.addAd=function(b,a,d,e){void 0===e&&(e=[]);document.getElementById(a)||(e='<div id="'.concat(a,'" class="adthrive-ad ').concat(e.join(" "),'"></div>'),b.insertAdjacentHTML(d,e));return document.getElementById(a)};c.prototype._repeatDynamicAds=function(b){var a= [],d=this._removeRecipeCapExperiment.result&&"Recipe"===b.location?99:this.locationMaxLazySequence.get(b.location),e=b.lazy?u(d,0):0;d=b.max;var f=b.lazyMax;e=Math.max(d,0===e&&b.lazy?d+f:Math.min(Math.max(e-b.sequence+1,0),d+f));for(f=0;f<e;f++){var g=Number(b.sequence)+f,h=b.lazy&&f>=d;a.push(y(y({},b),{sequence:g,lazy:h}))}return a};c.prototype._locationEnabled=function(b){b=this._clsOptions.enabledLocations.includes(b.location);var a=this._clsOptions.disableAds&&this._clsOptions.disableAds.all|| document.body.classList.contains("adthrive-disable-all"),d=!document.body.classList.contains("adthrive-disable-content")&&!this._clsOptions.disableAds.reasons.has("content_plugin");return b&&!a&&d};return c}(),Za=function(c){function b(a,d){var e=c.call(this,a,"ClsVideoInsertion")||this;e._videoConfig=a;e._clsOptions=d;e._IN_POST_SELECTOR=".adthrive-video-player";e._WRAPPER_BAR_HEIGHT=36;e._playersAddedFromPlugin=[];d.removeVideoTitleWrapper&&(e._WRAPPER_BAR_HEIGHT=0);return e}v(b,c);b.prototype.init= function(){this._initializePlayers()};b.prototype._wrapJWPlayerWithCLS=function(a,d,e){void 0===e&&(e=0);return a.parentNode?(d=this._createGenericCLSWrapper(.5625*a.offsetWidth,d,e),a.parentNode.insertBefore(d,a),d.appendChild(a),d):null};b.prototype._createGenericCLSWrapper=function(a,d,e){var f=document.createElement("div");f.id="cls-video-container-".concat(d);f.className="adthrive";f.style.minHeight="".concat(a+e,"px");return f};b.prototype._getTitleHeight=function(a){a.innerText="Title";a.style.visibility= "hidden";document.body.appendChild(a);var d=window.getComputedStyle(a),e=parseInt(d.height,10),f=parseInt(d.marginTop,10);d=parseInt(d.marginBottom,10);document.body.removeChild(a);return Math.min(e+d+f,50)};b.prototype._initializePlayers=function(){var a=document.querySelectorAll(this._IN_POST_SELECTOR);a.length&&this._initializeRelatedPlayers(a);this._shouldRunAutoplayPlayers()&&this._determineAutoplayPlayers()};b.prototype._createStationaryRelatedPlayer=function(a,d,e){var f="mobile"===this._device? [400,225]:[640,360],g=G.Video_In_Post_ClicktoPlay_SoundOn;d&&a.mediaId&&(e="".concat(a.mediaId,"_").concat(e),d=this._wrapJWPlayerWithCLS(d,e),this._playersAddedFromPlugin.push(a.mediaId),d&&this._clsOptions.setInjectedVideoSlots({playerId:a.playerId,playerName:g,playerSize:f,element:d,type:"stationaryRelated"}))};b.prototype._createStickyRelatedPlayer=function(a,d){var e="mobile"===this._device?[400,225]:[640,360],f=G.Video_Individual_Autoplay_SOff;this._stickyRelatedOnPage=!0;this._videoConfig.mobileStickyPlayerOnPage= "mobile"===this._device;if(d&&a.position&&a.mediaId){var g=document.createElement("div");d.insertAdjacentElement(a.position,g);d=document.createElement("h3");d.style.margin="10px 0";d=this._getTitleHeight(d);d=this._wrapJWPlayerWithCLS(g,a.mediaId,this._WRAPPER_BAR_HEIGHT+d);this._playersAddedFromPlugin.push(a.mediaId);d&&this._clsOptions.setInjectedVideoSlots({playlistId:a.playlistId,playerId:a.playerId,playerSize:e,playerName:f,element:g,type:"stickyRelated"})}};b.prototype._createPlaylistPlayer= function(a,d){var e=a.playlistId,f="mobile"===this._device?G.Video_Coll_SOff_Smartphone:G.Video_Collapse_Autoplay_SoundOff,g="mobile"===this._device?[400,225]:[640,360];this._videoConfig.mobileStickyPlayerOnPage=!0;var h=document.createElement("div");d.insertAdjacentElement(a.position,h);d=this._wrapJWPlayerWithCLS(h,e,this._WRAPPER_BAR_HEIGHT);this._playersAddedFromPlugin.push("playlist-".concat(e));d&&this._clsOptions.setInjectedVideoSlots({playlistId:a.playlistId,playerId:a.playerId,playerSize:g, playerName:f,element:h,type:"stickyPlaylist"})};b.prototype._isVideoAllowedOnPage=function(){var a=this._clsOptions.disableAds;if(a&&a.video){var d="";a.reasons.has("video_tag")?d="video tag":a.reasons.has("video_plugin")?d="video plugin":a.reasons.has("video_page")&&(d="command queue");q.error(d?"ClsVideoInsertionMigrated":"ClsVideoInsertion","isVideoAllowedOnPage",Error("DBP: Disabled by publisher via ".concat(d||"other")));return!1}return this._clsOptions.videoDisabledFromPlugin?!1:!0};return b}(function(c){function b(a, d){var e=c.call(this)||this;e._videoConfig=a;e._component=d;e._stickyRelatedOnPage=!1;e._relatedMediaIds=[];a=void 0;void 0===a&&(a=navigator.userAgent);a=/Windows NT|Macintosh/i.test(a);e._device=a?"desktop":"mobile";e._potentialPlayerMap=e.setPotentialPlayersMap();return e}v(b,c);b.prototype.setPotentialPlayersMap=function(){var a=this._videoConfig.players||[],d=this._filterPlayerMap();a=a.filter(function(e){return"stationaryRelated"===e.type&&e.enabled});d.stationaryRelated=a;return this._potentialPlayerMap= d};b.prototype._filterPlayerMap=function(){var a=this,d=this._videoConfig.players,e={stickyRelated:[],stickyPlaylist:[],stationaryRelated:[]};return d&&d.length?d.filter(function(f){var g;return null===(g=f.devices)||void 0===g?void 0:g.includes(a._device)}).reduce(function(f,g){f[g.type]||(q.event(a._component,"constructor","Unknown Video Player Type detected",g.type),f[g.type]=[]);g.enabled&&f[g.type].push(g);return f},e):e};b.prototype._checkPlayerSelectorOnPage=function(a){var d=this;a=this._potentialPlayerMap[a].map(function(e){return{player:e, playerElement:d._getPlacementElement(e)}});return a.length?a[0]:{player:null,playerElement:null}};b.prototype._getOverrideElement=function(a,d,e){a&&d?(e=document.createElement("div"),d.insertAdjacentElement(a.position,e)):(d=this._checkPlayerSelectorOnPage("stickyPlaylist"),a=d.player,d=d.playerElement,a&&d&&(e=document.createElement("div"),d.insertAdjacentElement(a.position,e)));return e};b.prototype._shouldOverrideElement=function(a){a=a.getAttribute("override-embed");return"true"===a||"false"=== a?"true"===a:this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.overrideEmbedLocation:!1};b.prototype._checkPageSelector=function(a,d,e){void 0===e&&(e=[]);return a&&d&&0===e.length?("/"!==window.location.pathname&&q.event("VideoUtils","getPlacementElement",Error("PSNF: ".concat(a," does not exist on the page"))),!1):!0};b.prototype._getElementSelector=function(a,d,e){if(d&&d.length>e)return d[e];q.event("VideoUtils","getPlacementElement",Error("ESNF: ".concat(a," does not exist on the page"))); return null};b.prototype._getPlacementElement=function(a){var d=a.pageSelector,e=a.elementSelector;a=a.skip;var f=da(d),g=f.valid,h=f.elements;f=S(f,["valid","elements"]);var k=ca(e),l=k.valid,p=k.elements;k=S(k,["valid","elements"]);return""===d||g?l?this._checkPageSelector(d,g,h)?this._getElementSelector(e,p,a)||null:null:(q.error("VideoUtils","getPlacementElement",Error("".concat(e," is not a valid selector")),k),null):(q.error("VideoUtils","getPlacementElement",Error("".concat(d," is not a valid selector")), f),null)};b.prototype._getEmbeddedPlayerType=function(a){(a=a.getAttribute("data-player-type"))&&"default"!==a||(a=this._videoConfig.relatedSettings?this._videoConfig.relatedSettings.defaultPlayerType:"static");this._stickyRelatedOnPage&&(a="static");return a};b.prototype._getMediaId=function(a){return(a=a.getAttribute("data-video-id"))?(this._relatedMediaIds.push(a),a):!1};b.prototype._createRelatedPlayer=function(a,d,e,f){"collapse"===d?this._createCollapsePlayer(a,e):"static"===d&&this._createStaticPlayer(a, e,f)};b.prototype._createCollapsePlayer=function(a,d){var e=this._checkPlayerSelectorOnPage("stickyRelated"),f=e.player;e=e.playerElement;var g=f?f:this._potentialPlayerMap.stationaryRelated[0];g&&g.playerId?(this._shouldOverrideElement(d)&&(d=this._getOverrideElement(f,e,d)),d=document.querySelector("#cls-video-container-".concat(a," > div"))||d,this._createStickyRelatedPlayer(y(y({},g),{mediaId:a}),d)):q.error(this._component,"_createCollapsePlayer","No video player found")};b.prototype._createStaticPlayer= function(a,d,e){this._potentialPlayerMap.stationaryRelated.length&&this._potentialPlayerMap.stationaryRelated[0].playerId?this._createStationaryRelatedPlayer(y(y({},this._potentialPlayerMap.stationaryRelated[0]),{mediaId:a}),d,e):q.error(this._component,"_createStaticPlayer","No video player found")};b.prototype._shouldRunAutoplayPlayers=function(){return this._isVideoAllowedOnPage()&&(this._potentialPlayerMap.stickyRelated.length||this._potentialPlayerMap.stickyPlaylist.length)?!0:!1};b.prototype._determineAutoplayPlayers= function(){var a=this._component,d="VideoManagerComponent"===a,e=this._config;if(this._stickyRelatedOnPage)q.event(a,"stickyRelatedOnPage",d&&{device:e&&e.context.device,isDesktop:this._device}||{});else{var f=this._checkPlayerSelectorOnPage("stickyPlaylist"),g=f.player;f=f.playerElement;g&&g.playerId&&g.playlistId&&f?this._createPlaylistPlayer(g,f):q.event(a,"noStickyPlaylist",d&&{vendor:"none",device:e&&e.context.device,isDesktop:this._device}||{})}};b.prototype._initializeRelatedPlayers=function(a){for(var d= new Map,e=0;e<a.length;e++){var f=a[e],g=f.offsetParent,h=this._getEmbeddedPlayerType(f),k=this._getMediaId(f);g&&k&&(g=(d.get(k)||0)+1,d.set(k,g),this._createRelatedPlayer(k,h,f,g))}};return b}(function(){function c(){}Object.defineProperty(c.prototype,"enabled",{get:function(){return!0},enumerable:!1,configurable:!0});return c}())),$a=function(c){function b(){return null!==c&&c.apply(this,arguments)||this}v(b,c);return b}(function(){function c(){this._map=[]}c.prototype.add=function(b,a,d,e){void 0=== e&&(e=document);this._map.push({el:b,coords:a,dynamicAd:d,target:e})};Object.defineProperty(c.prototype,"map",{get:function(){return this._map},enumerable:!1,configurable:!0});c.prototype.sort=function(){this._map.sort(function(b,a){return b.coords-a.coords})};c.prototype.filterUsed=function(){this._map=this._map.filter(function(b){return!b.dynamicAd.used})};c.prototype.reset=function(){this._map=[]};return c}());try{(function(){var c=new ea;c&&c.enabled&&((new Ya(c,new $a)).start(),(new Za(new Ca(c), c)).init())})()}catch(c){q.error("CLS","pluginsertion-iife",c),window.adthriveCLS&&(window.adthriveCLS.injectedFromPlugin=!1)}})()</script><script data-no-optimize="1" data-cfasync="false">(function () {var clsElements = document.querySelectorAll("script[id^='cls-']"); window.adthriveCLS && clsElements && clsElements.length === 0 ? window.adthriveCLS.injectedFromPlugin = false : ""; })();</script><link rel='stylesheet' id='e-animations-css' href='https://www.devx.com/wp-content/plugins/elementor/assets/lib/animations/animations.min.css?ver=3.20.4' type='text/css' media='all' /> <script defer id="wpil-frontend-script-js-extra" src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgd3BpbEZyb250ZW5kID0geyJhamF4VXJsIjoiXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJwb3N0SWQiOiIxMTYxNCIsInBvc3RUeXBlIjoicG9zdCIsIm9wZW5JbnRlcm5hbEluTmV3VGFiIjoiMCIsIm9wZW5FeHRlcm5hbEluTmV3VGFiIjoiMCIsImRpc2FibGVDbGlja3MiOiIwIiwib3BlbkxpbmtzV2l0aEpTIjoiMCIsInRyYWNrQWxsRWxlbWVudENsaWNrcyI6IjAiLCJjbGlja3NJMThuIjp7ImltYWdlTm9UZXh0IjoiSW1hZ2UgaW4gbGluazogTm8gVGV4dCIsImltYWdlVGV4dCI6IkltYWdlIFRpdGxlOiAiLCJub1RleHQiOiJObyBBbmNob3IgVGV4dCBGb3VuZCJ9fTsKLyogXV0+ICovCg=="></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/link-whisper-premium/js/frontend.min.js?ver=1712228365" id="wpil-frontend-script-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/themes/devxnew/assets/js/hello-frontend.min.js?ver=1.0.0" id="hello-theme-frontend-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.0.1" id="smartmenus-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.12.3" id="elementor-pro-webpack-runtime-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.20.4" id="elementor-webpack-runtime-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.20.4" id="elementor-frontend-modules-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill-inert.min.js?ver=3.1.2" id="wp-polyfill-inert-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.14.0" id="regenerator-runtime-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/hooks.min.js?ver=2810c76e705dd1a53b18" id="wp-hooks-js"></script> <script type="text/javascript" src="https://www.devx.com/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script defer id="wp-i18n-js-after" src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp3cC5pMThuLnNldExvY2FsZURhdGEoIHsgJ3RleHQgZGlyZWN0aW9uXHUwMDA0bHRyJzogWyAnbHRyJyBdIH0gKTsKLyogXV0+ICovCg=="></script> <script defer id="elementor-pro-frontend-js-before" src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgRWxlbWVudG9yUHJvRnJvbnRlbmRDb25maWcgPSB7ImFqYXh1cmwiOiJodHRwczpcL1wvd3d3LmRldnguY29tXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6ImM2OTA5ZWNlYzQiLCJ1cmxzIjp7ImFzc2V0cyI6Imh0dHBzOlwvXC93d3cuZGV2eC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2VsZW1lbnRvci1wcm9cL2Fzc2V0c1wvIiwicmVzdCI6Imh0dHBzOlwvXC93d3cuZGV2eC5jb21cL3dwLWpzb25cLyJ9LCJzaGFyZUJ1dHRvbnNOZXR3b3JrcyI6eyJmYWNlYm9vayI6eyJ0aXRsZSI6IkZhY2Vib29rIiwiaGFzX2NvdW50ZXIiOnRydWV9LCJ0d2l0dGVyIjp7InRpdGxlIjoiVHdpdHRlciJ9LCJsaW5rZWRpbiI6eyJ0aXRsZSI6IkxpbmtlZEluIiwiaGFzX2NvdW50ZXIiOnRydWV9LCJwaW50ZXJlc3QiOnsidGl0bGUiOiJQaW50ZXJlc3QiLCJoYXNfY291bnRlciI6dHJ1ZX0sInJlZGRpdCI6eyJ0aXRsZSI6IlJlZGRpdCIsImhhc19jb3VudGVyIjp0cnVlfSwidmsiOnsidGl0bGUiOiJWSyIsImhhc19jb3VudGVyIjp0cnVlfSwib2Rub2tsYXNzbmlraSI6eyJ0aXRsZSI6Ik9LIiwiaGFzX2NvdW50ZXIiOnRydWV9LCJ0dW1ibHIiOnsidGl0bGUiOiJUdW1ibHIifSwiZGlnZyI6eyJ0aXRsZSI6IkRpZ2cifSwic2t5cGUiOnsidGl0bGUiOiJTa3lwZSJ9LCJzdHVtYmxldXBvbiI6eyJ0aXRsZSI6IlN0dW1ibGVVcG9uIiwiaGFzX2NvdW50ZXIiOnRydWV9LCJtaXgiOnsidGl0bGUiOiJNaXgifSwidGVsZWdyYW0iOnsidGl0bGUiOiJUZWxlZ3JhbSJ9LCJwb2NrZXQiOnsidGl0bGUiOiJQb2NrZXQiLCJoYXNfY291bnRlciI6dHJ1ZX0sInhpbmciOnsidGl0bGUiOiJYSU5HIiwiaGFzX2NvdW50ZXIiOnRydWV9LCJ3aGF0c2FwcCI6eyJ0aXRsZSI6IldoYXRzQXBwIn0sImVtYWlsIjp7InRpdGxlIjoiRW1haWwifSwicHJpbnQiOnsidGl0bGUiOiJQcmludCJ9fSwiZmFjZWJvb2tfc2RrIjp7ImxhbmciOiJlbl9VUyIsImFwcF9pZCI6IiJ9LCJsb3R0aWUiOnsiZGVmYXVsdEFuaW1hdGlvblVybCI6Imh0dHBzOlwvXC93d3cuZGV2eC5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2VsZW1lbnRvci1wcm9cL21vZHVsZXNcL2xvdHRpZVwvYXNzZXRzXC9hbmltYXRpb25zXC9kZWZhdWx0Lmpzb24ifX07Ci8qIF1dPiAqLwo="></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.12.3" id="elementor-pro-frontend-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/lib/waypoints/waypoints.min.js?ver=4.0.2" id="elementor-waypoints-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.2" id="jquery-ui-core-js"></script> <script defer id="elementor-frontend-js-before" src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgZWxlbWVudG9yRnJvbnRlbmRDb25maWcgPSB7ImVudmlyb25tZW50TW9kZSI6eyJlZGl0IjpmYWxzZSwid3BQcmV2aWV3IjpmYWxzZSwiaXNTY3JpcHREZWJ1ZyI6ZmFsc2V9LCJpMThuIjp7InNoYXJlT25GYWNlYm9vayI6IlNoYXJlIG9uIEZhY2Vib29rIiwic2hhcmVPblR3aXR0ZXIiOiJTaGFyZSBvbiBUd2l0dGVyIiwicGluSXQiOiJQaW4gaXQiLCJkb3dubG9hZCI6IkRvd25sb2FkIiwiZG93bmxvYWRJbWFnZSI6IkRvd25sb2FkIGltYWdlIiwiZnVsbHNjcmVlbiI6IkZ1bGxzY3JlZW4iLCJ6b29tIjoiWm9vbSIsInNoYXJlIjoiU2hhcmUiLCJwbGF5VmlkZW8iOiJQbGF5IFZpZGVvIiwicHJldmlvdXMiOiJQcmV2aW91cyIsIm5leHQiOiJOZXh0IiwiY2xvc2UiOiJDbG9zZSIsImExMXlDYXJvdXNlbFdyYXBwZXJBcmlhTGFiZWwiOiJDYXJvdXNlbCB8IEhvcml6b250YWwgc2Nyb2xsaW5nOiBBcnJvdyBMZWZ0ICYgUmlnaHQiLCJhMTF5Q2Fyb3VzZWxQcmV2U2xpZGVNZXNzYWdlIjoiUHJldmlvdXMgc2xpZGUiLCJhMTF5Q2Fyb3VzZWxOZXh0U2xpZGVNZXNzYWdlIjoiTmV4dCBzbGlkZSIsImExMXlDYXJvdXNlbEZpcnN0U2xpZGVNZXNzYWdlIjoiVGhpcyBpcyB0aGUgZmlyc3Qgc2xpZGUiLCJhMTF5Q2Fyb3VzZWxMYXN0U2xpZGVNZXNzYWdlIjoiVGhpcyBpcyB0aGUgbGFzdCBzbGlkZSIsImExMXlDYXJvdXNlbFBhZ2luYXRpb25CdWxsZXRNZXNzYWdlIjoiR28gdG8gc2xpZGUifSwiaXNfcnRsIjpmYWxzZSwiYnJlYWtwb2ludHMiOnsieHMiOjAsInNtIjo0ODAsIm1kIjo3NjgsImxnIjoxMDI1LCJ4bCI6MTQ0MCwieHhsIjoxNjAwfSwicmVzcG9uc2l2ZSI6eyJicmVha3BvaW50cyI6eyJtb2JpbGUiOnsibGFiZWwiOiJNb2JpbGUgUG9ydHJhaXQiLCJ2YWx1ZSI6NzY3LCJkZWZhdWx0X3ZhbHVlIjo3NjcsImRpcmVjdGlvbiI6Im1heCIsImlzX2VuYWJsZWQiOnRydWV9LCJtb2JpbGVfZXh0cmEiOnsibGFiZWwiOiJNb2JpbGUgTGFuZHNjYXBlIiwidmFsdWUiOjg4MCwiZGVmYXVsdF92YWx1ZSI6ODgwLCJkaXJlY3Rpb24iOiJtYXgiLCJpc19lbmFibGVkIjpmYWxzZX0sInRhYmxldCI6eyJsYWJlbCI6IlRhYmxldCBQb3J0cmFpdCIsInZhbHVlIjoxMDI0LCJkZWZhdWx0X3ZhbHVlIjoxMDI0LCJkaXJlY3Rpb24iOiJtYXgiLCJpc19lbmFibGVkIjp0cnVlfSwidGFibGV0X2V4dHJhIjp7ImxhYmVsIjoiVGFibGV0IExhbmRzY2FwZSIsInZhbHVlIjoxMjAwLCJkZWZhdWx0X3ZhbHVlIjoxMjAwLCJkaXJlY3Rpb24iOiJtYXgiLCJpc19lbmFibGVkIjpmYWxzZX0sImxhcHRvcCI6eyJsYWJlbCI6IkxhcHRvcCIsInZhbHVlIjoxMzY2LCJkZWZhdWx0X3ZhbHVlIjoxMzY2LCJkaXJlY3Rpb24iOiJtYXgiLCJpc19lbmFibGVkIjpmYWxzZX0sIndpZGVzY3JlZW4iOnsibGFiZWwiOiJXaWRlc2NyZWVuIiwidmFsdWUiOjI0MDAsImRlZmF1bHRfdmFsdWUiOjI0MDAsImRpcmVjdGlvbiI6Im1pbiIsImlzX2VuYWJsZWQiOmZhbHNlfX19LCJ2ZXJzaW9uIjoiMy4yMC40IiwiaXNfc3RhdGljIjpmYWxzZSwiZXhwZXJpbWVudGFsRmVhdHVyZXMiOnsiZV9vcHRpbWl6ZWRfYXNzZXRzX2xvYWRpbmciOnRydWUsImVfb3B0aW1pemVkX2Nzc19sb2FkaW5nIjp0cnVlLCJhZGRpdGlvbmFsX2N1c3RvbV9icmVha3BvaW50cyI6dHJ1ZSwiZV9zd2lwZXJfbGF0ZXN0Ijp0cnVlLCJ0aGVtZV9idWlsZGVyX3YyIjp0cnVlLCJoZWxsby10aGVtZS1oZWFkZXItZm9vdGVyIjp0cnVlLCJibG9ja19lZGl0b3JfYXNzZXRzX29wdGltaXplIjp0cnVlLCJhaS1sYXlvdXQiOnRydWUsImxhbmRpbmctcGFnZXMiOnRydWUsImVfaW1hZ2VfbG9hZGluZ19vcHRpbWl6YXRpb24iOnRydWUsInBhZ2UtdHJhbnNpdGlvbnMiOnRydWUsIm5vdGVzIjp0cnVlLCJsb29wIjp0cnVlLCJmb3JtLXN1Ym1pc3Npb25zIjp0cnVlLCJlX3Njcm9sbF9zbmFwIjp0cnVlfSwidXJscyI6eyJhc3NldHMiOiJodHRwczpcL1wvd3d3LmRldnguY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9lbGVtZW50b3JcL2Fzc2V0c1wvIn0sInN3aXBlckNsYXNzIjoic3dpcGVyIiwic2V0dGluZ3MiOnsicGFnZSI6W10sImVkaXRvclByZWZlcmVuY2VzIjpbXX0sImtpdCI6eyJib2R5X2JhY2tncm91bmRfYmFja2dyb3VuZCI6ImNsYXNzaWMiLCJhY3RpdmVfYnJlYWtwb2ludHMiOlsidmlld3BvcnRfbW9iaWxlIiwidmlld3BvcnRfdGFibGV0Il0sImdsb2JhbF9pbWFnZV9saWdodGJveCI6InllcyIsImxpZ2h0Ym94X2VuYWJsZV9jb3VudGVyIjoieWVzIiwibGlnaHRib3hfZW5hYmxlX2Z1bGxzY3JlZW4iOiJ5ZXMiLCJsaWdodGJveF9lbmFibGVfem9vbSI6InllcyIsImxpZ2h0Ym94X2VuYWJsZV9zaGFyZSI6InllcyIsImxpZ2h0Ym94X3RpdGxlX3NyYyI6InRpdGxlIiwibGlnaHRib3hfZGVzY3JpcHRpb25fc3JjIjoiZGVzY3JpcHRpb24iLCJoZWxsb19oZWFkZXJfbG9nb190eXBlIjoibG9nbyIsImhlbGxvX2hlYWRlcl9tZW51X2xheW91dCI6Imhvcml6b250YWwiLCJoZWxsb19mb290ZXJfbG9nb190eXBlIjoibG9nbyJ9LCJwb3N0Ijp7ImlkIjoxMTYxNCwidGl0bGUiOiJUaGUlMjBQeXRob24lMjAyLjUlMjBHb29kaWUlMjBCYWclM0ElMjBMYW5ndWFnZSUyMEVuaGFuY2VtZW50cyUyMGFuZCUyME1vZHVsZXMlMjAtJTIwRGV2WCIsImV4Y2VycHQiOiIiLCJmZWF0dXJlZEltYWdlIjoiaHR0cHM6XC9cL3d3dy5kZXZ4LmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyMlwvMDJcL3RodW1ibmFpbC5qcGcifX07Ci8qIF1dPiAqLwo="></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.20.4" id="elementor-frontend-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.12.3" id="pro-elements-handlers-js"></script> <script defer type="text/javascript" src="https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=3.12.3" id="e-sticky-js"></script> <script defer src="data:text/javascript;base64,IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiOyFmdW5jdGlvbihlKXtpZigtMT09PWUuY29va2llLmluZGV4T2YoIl9fYWRibG9ja2VyIikpe2UuY29va2llPSJfX2FkYmxvY2tlcj07IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ7IHBhdGg9LyI7dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0O3Qub3BlbigiR0VUIiwiaHR0cHM6Ly9hZHMuYWR0aHJpdmUuY29tL2FiZC9hYmQuanMiLCEwKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKFhNTEh0dHBSZXF1ZXN0LkRPTkU9PT10LnJlYWR5U3RhdGUpaWYoMjAwPT09dC5zdGF0dXMpe3ZhciBhPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5pbm5lckhUTUw9dC5yZXNwb25zZVRleHQsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGEpfWVsc2V7dmFyIG49bmV3IERhdGU7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzNlNSksZS5jb29raWU9Il9fYWRibG9ja2VyPXRydWU7IGV4cGlyZXM9IituLnRvVVRDU3RyaW5nKCkrIjsgcGF0aD0vIn19LHQuc2VuZCgpfX0oZG9jdW1lbnQpfSgpOwo="></script><script defer src="data:text/javascript;base64,IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlO2U9ZG9jdW1lbnQsZnVuY3Rpb24oKXt2YXIgdCxuO2Z1bmN0aW9uIHIoKXt2YXIgdD1lLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Quc3JjPSJodHRwczovL2NhZmVtZWRpYS1jb20udmlkZW9wbGF5ZXJodWIuY29tL2dhbGxlcnlwbGF5ZXIuanMiLGUuaGVhZC5hcHBlbmRDaGlsZCh0KX1mdW5jdGlvbiBhKCl7dmFyIHQ9ZS5jb29raWUubWF0Y2goIihefFteO10rKVxccypfX2FkYmxvY2tlclxccyo9XFxzKihbXjtdKykiKTtyZXR1cm4gdCYmdC5wb3AoKX1mdW5jdGlvbiBjKCl7Y2xlYXJJbnRlcnZhbChuKX1yZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBlOyJ0cnVlIj09PSh0PWEoKSk/cigpOihlPTAsbj1zZXRJbnRlcnZhbCgoZnVuY3Rpb24oKXsxMDAhPT1lJiYiZmFsc2UiIT09dHx8YygpLCJ0cnVlIj09PXQmJihyKCksYygpKSx0PWEoKSxlKyt9KSw1MCkpfX19KCkuaW5pdCgpfSgpOwo="></script> </body></html> <!-- Dynamic page generated in 1.771 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2024-04-19 13:49:52 --> <!-- Compression = gzip -->