Skip to content
Menu
Open World News Open World News
  • Privacy Policy
Open World News Open World News

Category: News

Andy Wingo: pre-initialization of garbage-collected webassembly heaps

Posted on March 10, 2023 by Michael G

Hey comrades, I just had an idea that I won’t be able to work on in the
next couple months and wanted to release it into the wild. They say if
you love your ideas, you should let them go and see if they come back to
you, right? In that spirit I abandon this idea to the woods.

Basically the idea is Wizer-like pre-initialization of WebAssembly
modules
, but for modules
that store their data on the GC-managed heap instead of just in linear
memory.

Say you have a WebAssembly module with GC
types
.
It might look like this:

(module
  (type $t0 (struct (ref eq)))
  (type $t1 (struct (ref $t0) i32))
  (type $t2 (array (mut (ref $t1))))
  ...
  (global $g0 (ref null eq)
    (ref.null eq))
  (global $g1 (ref $t1)
    (array.new_canon $t0 (i31.new (i32.const 42))))
  ...
  (function $f0 ...)
  ...)

You define some struct and array types, there are some global variables,
and some functions to actually do the work. (There are probably also
tables and other things but I am simplifying.)

If you consider the object graph of an instantiated module, you will
have some set of roots R that point to GC-managed objects. The live
objects in the heap are the roots and any object referenced by a live
object.

Let us assume a standalone WebAssembly module. In that case the set of
types T of all objects in the heap is closed: it can only be one of the
types $t0, $t1, and so on that are defined in the module. These
types have a partial order and can thus be sorted from most to least
specific. Let’s assume that this sort order is just the reverse of the
definition order, for now. Therefore we can write a general type
introspection function for any object in the graph:

(func $introspect (param $obj anyref)
  (block $t2 (ref $t2)
    (block $t1 (ref $t1)
      (block $t0 (ref $t0)
        (br_on_cast $t2 (local.get $obj))
        (br_on_cast $t1 (local.get $obj))
        (br_on_cast $t0 (local.get $obj))
        (unreachable))
      ;; Do $t0 things...
      (return))
    ;; Do $t1 things...
    (return))
  ;; Do $t2 things...
  (return))

In particular, given a WebAssembly module, we can generate a function to
trace edges in an object graph of its types. Using this, we can
identify all live objects, and what’s more, we can take a snapshot of
those objects:

(func $snapshot (result (ref (array (mut anyref))))
  ;; Start from roots, use introspect to find concrete types
  ;; and trace edges, use a worklist, return an array of
  ;; all live objects in topological sort order
  )

Having a heap snapshot is interesting for introspection purposes, but my
interest is in having fast start-up. Many programs have a kind of
“initialization” phase where they get the system up and running, and
only then proceed to actually work on the problem at hand. For example,
when you run python3 foo.py, Python will first spend some time parsing
and byte-compiling foo.py, importing the modules it uses and so on,
and then will actually run foo.py‘s code. Wizer lets you snapshot the
state of a module after initialization but before the real work begins,
which can save on startup time.

For a GC heap, we actually have similar possibilities, but the mechanism
is different. Instead of generating an array of all live objects, we
could generate a serialized state of the heap as bytecode, and another
function to read the bytecode and reload the heap:

(func $pickle (result (ref (array (mut i8))))
  ;; Return an array of bytecode which, when interpreted,
  ;; can reconstruct the object graph and set the roots
  )
(func $unpickle (param (ref (array (mut i8))))
  ;; Interpret the bytecode, building object graph in
  ;; topological order
  )

The unpickler is module-dependent: it will need one case to construct
each concrete type $tN in the module. Therefore the bytecode
grammar would be module-dependent too.

What you would get with a bytecode-based $pickle/$unpickle pair
would be the ability to serialize and reload heap state many times. But
for the pre-initialization case, probably that’s not precisely what you
want: you want to residualize a new WebAssembly module that, when
loaded, will rehydrate the heap. In that case you want a function like:

(func $make-init (result (ref (array (mut i8))))
  ;; Return an array of WebAssembly code which, when
  ;; added to the module as a function and invoked, 
  ;; can reconstruct the object graph and set the roots.
  )

Then you would use binary tools to add that newly generated function to
the module.

In short, there is a space open for a tool which takes a WebAssembly+GC
module M and produces M’, a module which contains a $make-init
function. Then you use a WebAssembly+GC host to load the module and
call the $make-init function, resulting in a WebAssembly function
$init which you then patch in to the original M to make M”, which is
M pre-initialized for a given task.

Optimizations

Some of the object graph is constant; for example, an instance of a
struct type that has no mutable fields. These objects don’t have to
be created in the init function; they can be declared as new constant
global variables, which an engine may be able to initialize more
efficiently.

The pre-initialized module will still have an initialization phase in
which it builds the heap. This is a constant function and it would be
nice to avoid it. Some WebAssembly hosts will be able to run
pre-initialization and then snapshot the GC heap using lower-level facilities (copy-on-write mappings, pointer compression and relocatable cages, pre-initialization on an internal level…). This would potentially decrease latency and may allow for cross-instance memory sharing.

Limitations

There are five preconditions to be able to pickle and unpickle the GC
heap:
1. The set of concrete types in a module must be closed.
2. The roots of the GC graph must be enumerable.
3. The object-graph edges from each live object must be enumerable.
4. To prevent cycles, we have to know when an object has been visited:
objects must have identity.
5. We must be able to create each type in a module.

I think there are three limitations to this pre-initialization idea in
practice.

One is externref; these values come from the host and are by
definition not introspectable by WebAssembly. Let’s keep the
closed-world assumption and consider the case where the set of external
reference types is closed also. In that case if a module allows for
external references, we can perhaps make its pickling routines call out
to the host to (2) provide any external roots (3) identify edges on
externref values (4) compare externref values for identity and (5)
indicate some imported functions which can be called to re-create
exernal objects.

Another limitation is funcref. In practice in the current state of
WebAssembly and GC, you will only have a funcref which is created by
ref.func, and which (3) therefore has no edges and (5) can be
re-created by ref.func. However neither WebAssembly nor the JS API
has no way of knowing which function index corresponds to a given
funcref. Including function references in the graph would therefore
require some sort of host-specific API. Relatedly, function references
are not comparable for equality (func is not a subtype of eq), which
is a little annoying but not so bad considering that function references
can’t participate in a cycle. Perhaps a solution though would be to
assume (!) that the host representation of a funcref is constant: the
JavaScript (e.g.) representations of (ref.func 0) and (ref.func 0)
are the same value (in terms of ===). Then you could compare a given
function reference against a set of known values to determine its index.
Note, when function references are expanded to include closures, we will
have more problems in this area.

Finally, there is the question of roots. Given a module, we can
generate a function to read the values of all reference-typed globals
and of all entries in all tables. What we can’t get at are any
references from the stack, so our object graph may be incomplete.
Perhaps this is not a problem though, because when we unpickle the graph
we won’t be able to re-create the stack anyway.

OK, that’s my idea. Have at it, hackers!

VPN trust requires free software

Posted on March 10, 2023 by Michael G

VPNs have become popular and are often touted as a tool to improve privacy.
While this is sometimes true, it is important to tread carefully when
choosing an VPN. A good place to start is looking at which VPN providers
meet the
requirements
for running a trustworthy VPN service. A trustworthy VPNs must be free
software, that is non-negotiable. First, inspection is required in order
trust software. Having the source is the only way to see all the things the
software is doing. F-Droid reviews the apps that we ship on this website,
which lets us spot potential issues and anti-features. And we are happy to
hear that reputable VPN providers make the effort to get their apps on
f-droid.org to build trust with their users. From there, Reproducible
Builds
provides a strong link
between the source code and the actual app binaries that run on the device.

The best VPNs are the ones that use free software both for the client app,
and for running the services. Indeed all OpenVPN, Shadowsocks, and
WireGuard VPNs are based on free software since those standards are defined
by free software projects. F-Droid looks into this as part of the reviews,
and marks apps with relevant Anti-Features, like the Non-Free Network
Services
mark if the
server side is not free software. And there are a number of free software
projects that make it a lot easier to setup and run a VPN or proxy
services. Here are some that are on f-droid.org:

  • Bitmask is a
    generic client for the LEAP VPN setup which powers
    Calyx VPN, Riseup
    VPN
    , and more.
  • eduVPN is a VPN client for
    Let’s Connect VPN setup which powers
    eduVPN.
  • OpenVPN for Android is
    a generic OpenVPN client for any VPN provider that offers it.
  • Outline is an
    offering designed to let anyone run their own VPN based on Shadowsocks.
  • WireGuard is a
    generic WireGuard client for any provider
    that offers it.

So far, none of the VPN providers have taken the plunge into fully
supporting reproducible builds. There is some progress: some of the releases
of WireGuard,
Tailscale, and
Mysterium VPN
have been reproduced on our verification server. But these apps are not
setup for the full reproducible publishing setup, which confirms that the
f-droid.org version matches the upstream developer’s version exactly, then
publishes with the upstream signature. The F-Droid community is helping
more and more apps achieve reproducible builds, which VPN app will be the
first?

There are also a number of apps that are dedicated to a given provider.
Although there are generic clients available, there are good reasons for a
free software provider to ship a custom app. First, it can make
configuration dead simple. Calyx VPN and Riseup VPN have no accounts at
all, so just install the app, and turn on the VPN. Second, it allows the
provider to include multiple methods of connecting and automatically switch
between them, depending on what works best. We decide which apps to include
based on what is best for the users. A VPN client that offers no additional
functionality and just serves as a rebrand of an existing client does not
serve users well. In order for an app from a specific provider to be
included, it must provide real value to our users. Here is a list of some
related examples:

  • IVPN
  • Lavabit Encrypted
    Proxy
  • Mullvad VPN
  • Mysterium VPN
  • ProtonVPN
  • Purism Librem Tunnel

We also get lots of direct messages asking us to include various proprietary
VPN apps, or promote various VPN services for a fee. That is of course a
non-starter. The first step is free software.

Recap/Summary of the Digital Market Act workshop in Brussels

Posted on March 10, 2023 by Michael G
Recap/Summary of the Digital Market Act workshop in Brussels

This Monday, I was in Brussels to attend a stakeholder workshop for the Digital Market…

Daura e Tarjuma e Quran – Shuja Uddin Sheikh – 9th March 2023 – ARY Qtv

Posted on March 9, 2023 by Michael G
Daura e Tarjuma e Quran – Host: Shuja Uddin Sheikh

1st Time In Electronic Media’s History Complete Translation & Tafseer Of Quran Kareem.

#ShujaUddinSheikh #DauraeTarjumaeQuran #ARYQtv

Subscribe Here: https://bit.ly/3dh3Yj1

Official Facebook: https://www.facebook.com/ARYQTV/
Official Website: https://aryqtv.tv/
Watch ARY Qtv Live: http://live.aryqtv.tv/
Programs Schedule: https://aryqtv.tv/schedule/
Islamic Information: https://bit.ly/2MfIF4P
Android App: https://bit.ly/33wgto4

“Parem os barcos”: Governo britânico quer travar imigração no Reino Unido

Posted on March 9, 2023 by Michael G
Oposição e organizações humanitárias acusam o executivo de Rishi Sunak de querer violar o direito internacional ao comprometer a garantia de direitos humanos a migrantes.

Life Sentence Prisoner Hussain Escaped From Cherlapally Open Air Jail | Hyderabad | V6 News

Posted on March 9, 2023 by Michael G
చర్ల పల్లి జైలు నుంచి ఖైదీ పరార్ | V6 News

రేపే విచారణ
తర్వాత అరెస్టేనా?

• MLC Kavitha – ED …

మందు దందాతో
తెలంగాణకేం సంబంధం?

• Opposition Leader…

ఏయ్ ఆగవయ్య..మంత్రి గుస్సా

• Minister Errabell…

తల్లీ కోసం పిల్లల తండ్లాట

• Forest Officials …

Watch LIVE Stream :

• V6 News LIVE | Te…
► Subscribe to V6 News :

/ v6newstelugu
► Subscribe to V6 Life :

/ v6life
► Follow Us On Dailymotion : https://www.dailymotion.com/v6newstelugu
► Like us on Facebook : http://www.facebook.com/V6News.tv
► Follow us on Instagram : https://www.instagram.com/v6newstelugu/
► Follow us on Twitter : https://twitter.com/V6News
► Visit Website : http://www.v6velugu.com/
► Join Us On Telegram : https://t.me/V6NewsTelugu
Watch V6 Programs Here
►Teenmaar : https://rb.gy/qn91pg
►Trending Videos : https://rb.gy/f6i0x2
►Top News : https://rb.gy/wqjeun
►HD Playlist : https://rb.gy/veit87
►Innerview : https://rb.gy/83izwa
►Medaram Jatara : https://rb.gy/mn4tu7
►Chandravva : https://rb.gy/nja3cl
►Spotlight : https://rb.gy/4lfm9s
►Dhoom Thadaka : https://rb.gy/hvytxl
►V6 Songs : https://rb.gy/68n90s
►Life Mates : https://rb.gy/itvwfa

Capacity development for underrepresented communities: 10 lessons learnt

Posted on March 9, 2023 by Michael G
This is a list of 10 lessons learnt from the Capacity development for underrepresented communities (CDUC) project, which aimed to get underrepresented communities in the Wikimedia movement….

ImageX: International Women’s Day: An interview with the team

Posted on March 9, 2023 by Michael G
International Women’s Day: An interview with the team
amanda
Wed, 03/08/2023 – 17:46

This year’s IWD’s theme is #EmbraceEquity. This should remind everyone everywhere about the importance of creating a genuinely inclusive society, challenging gender stereotypes, and calling out biases. 

In the ImageX team, we are wholeheartedly aligned with these values and committed to fostering a truly equitable workplace. Even though tech is seen as a male-dominated industry, the Women of ImageX are key drivers behind the success of our organization. In celebration of this year’s day, we’re showcasing some of our team who are leaders in their areas; Mahya Golabi [design], Carol Pettirossi [development], Alla Petrovska [operations], and Kylie Aldridge-Ogden [delivery].  These four women are just a small snapshot of the awesome talent we are fortunate to work alongside everyday at ImageX, with each and every one of our women leading the way in their roles within a male dominated industry. 

Getting acquainted: roles and backgrounds

To start, the team shared their roles and how they ended up where they are today:

ImageX: International Women’s Day: An interview with the team

Carol, Software Architect: “I’m a female Drupal Architect that has been working in the Tech industry for 14 years. I started creating websites back in the day of blogs.

I studied programming in high school which gave me the opportunity to start my tech career before getting a university degree. I love working with sites and platforms, building the best experience for users so they can find information and perform tasks digitally whenever possible.”

Alla Petrovska

Alla, HR & Operations Manager (Ukraine): “ I’ve been with the organization for 6 years already and being an explorer in my soul with a love to connect the right people with each other and make things work, I find ImageX the perfect match for me. It is a place with a multicultural team distributed over the globe where diversity is well represented.”

Kylie Aldridge-Ogden Kylie, Senior Portfolio Director Not-For-Profit: “My passion lives in working with non-profits. I have served on a few Non-Profit boards throughout my career, spending seven years as Director at large for a national non-profit. At ImageX, I oversee the execution of all Project and Support Agreements within the vertical.”
Mahya Golabi Mahya, Lead Designer: “I started with ImageX as a UI designer back in 2018. At that point, the design team only consisted of another designer and me, and there were only a handful of female employees here at ImageX, it’s incredible how that has evolved as we’ve grown.”

Talking about the meaning of IWD

We then asked the team why International Women’s Day is important to them.

Alla: “This day has a long history focusing on gender equity and women’s rights, and it will always hold the spirit of change and freedom for me. This is a day to celebrate women’s achievements — past and current, and empower future generations to stand for their beliefs.

Mahya: “As an immigrant, I believe, recognizing and celebrating the contributions of immigrant women to society can help promote inclusion and reduce stereotypes and prejudices. It can also provide a platform for immigrant women to share their experiences and advocate for their rights.

I think Women’s Day serves as a reminder that women, regardless of their background, deserve equal rights and opportunities.”

The importance of diversity in the workplace

We were curious to know what the group thinks about diversity in the workplace, especially as it’s one of the intrinsic values of our international team.

Kylie: “There has been a significant amount of research done that shows that workplaces function and perform better when there is diversity. The quality of work is higher, there is more engagement among employees, and also more efficiency. It’s effectively just good business.”

 

Carol: “Women, as well as other underrepresented groups, bring diverse skill sets, viewpoints, and experiences to the workplace. Different cultures and experiences are proven to help businesses function better and also improve their processes. Each employee has their individual strengths and potential. Valuing the differences of others is what ultimately brings us all together and can be the secret to a successful, thriving workplace and a fair work culture.”

Mahya: “As a creative person, in my view, diversity brings in creativity and innovation: When people from different backgrounds and with different experiences work together, they bring different perspectives and ideas to the table. This can lead to more creative and innovative solutions to problems.”

Sharing their role models

Many women have a role model who inspires and drives them toward greatness. So who are the role models for the women of ImageX? 

Kylie: “From a professional standpoint, Sheryl Sandberg, the COO of Meta is one role model. I was introduced to her through her book, Lean In, which was recommended to me by a former male boss. Sheryl has a belief that echoes mine — if you’re going to have a family, make sure there is equity in the household. Another role model of mine is Heather Reisman, the CEO of Indigo. She was the first major female CEO in Canada and as an avid reader, I always kept an eye on her work. From a personal standpoint, my role model is my mother. I’ve always had a working mother and as a daughter, that is an amazing thing to witness.”

Mahya: “My mother is a strong entrepreneur who started as a teacher and now owns and directs three schools. She has shown me how to be an independent, strong woman when you are confident, resilient, and self-sufficient.”

Carol: “It would also be my mom. She is a symbol of resilience to me. She had a difficult upbringing and had to stop studying early. However, she overcame the difficulties and after I was born she decided to restart studying and become a nurse. She does night shifts at the hospital but she always enjoyed her job and taught me how important it is to love what you do.”

Alla: “My role model is all Ukrainian women: on the front line of the battlefield, or cultural, political, and social front lines — they all are fighting now for democracy, equity, freedom, and protection of human rights.”

Advice to women at the beginning of their career

It can be challenging to start a path in a new professional field, especially as a woman. How can women grow professionally and fight gender stereotypes in the workplace? 

Carol: “Don’t give up when people say it’s a male field. It is a male dominant field but you are part of the change!  Don’t give up or change your career path based on societal biases that we hear, if you like development, focus on that! Do what you like and not what others think you’d be best at as a woman.”

Alla: “Listen to yourself and seek a role model or mentor. If you fail, learn from it – it is your opportunity to grow, don’t skip reflecting on it, as most likely you’ll fail over the same thing again in the future; have a plan…and a back-up plan.”

Kylie: “Never feel guilty to ask for what you need. While the pay gap is narrowing, more often than not, women who don’t get pay rises that mirror their male peers because they don’t ask for it. Make sure you advocate for yourself. Also, don’t internalize the labels and tropes that women are given in the workplace. For instance, “women are bossy while men are bold” or “women are emotional, men are direct”. We don’t need those, they’re not for us.”

Empowering other women in the workplace

Women can empower other women, lift them up, and help them grow. Together, they can be an invincible force. The women of ImageX have shared some useful ways they look toto empower other women in the workplace: 

Mahya: “I think we can look to provide opportunities for others in leadership and mentorship as well as the training and development. It’s important to celebrate the successes of those around us, and create a supportive culture.”

Carol: “Providing mentorship and training to develop junior women into senior and leadership roles. Making sure that they are heard and have a seat at the table.  Making sure that there is an open communication mechanism for women to report on situations that they feel undervalued or not heard.”

Alla: “Be yourself, accept and respect others individuality; speak openly (everyone has their own strong and weak sides — be open about them); treat everyone fairly; be approachable, offer help and be ready to back up; don’t be afraid of speaking about the failures; celebrate wins together!”

Dinner with three inspirational women

Asking everyone to choose three inspirational women, dead or alive, that they would have dinner with was one of our favourite talking points. 

Kylie: “I couldn’t narrow it down to 3 so I have four:

1. Mary Wollstonecraft — She was the leader of the suffrage movement in England. She was fighting to make women people under the law. She was one of the pioneers that laid the groundwork for where we are today;

2 & 3. Gloria Steinem & Ruth Bader Ginsberg — Two feminist icons who have done more for gender equity and advocacy than anyone else. We wouldn’t have half the rights we have now without these two women. They worked together and were longtime allies, you can’t have one without the other.

4. Michelle Obama — Who wouldn’t want to have lunch with her? She built herself a platform and never took it for granted. She comes across as so humble and down to earth, and yet has this huge and beautiful platform that she uses for positive change.”

Carol: “1. Gloria Maria: She was a black Brazilian journalist that always talked about women being empowered. She represented the black community and had racism and feminism in her agenda. She also traveled around the world reporting different cultures. Can you imagine how wonderful a chat would be with her?

2. Susie Wolff: She is the Director of Formula 1 Academy and a former racing driver. She is now responsible for nurturing female talents in the sport. In such a male dominant field, it would be great to have dinner with her and learn how she deals with the challenges on a daily basis. 

3. Helena Rizzo: She is one of the best chefs in the world and the only Brazilian female chef leading a restaurant awarded with a Michelin star. Gastronomy is another field dominated by men and she excels in it. She is also involved in many charity and feminist initiatives.”

How organizations can #EmbraceEquity

The ultimate question that wrapped up our conversation was related to the IWD 2023’s #EmbraceEquity campaign theme. How do the team feel that organizations can create a culture which supports equity? 

Kylie:  “I read a 2022 study from PwC on Global Workforce Hopes and Fears. The largest workplace cultural contribution to equity that can be done is for a workplace to offer flexibility of schedule. One of the things that ImageX has done well is not only offer that but stand by it — giving their employees a flexible schedule and keep pushing equity forward. At ImageX, we do it without gender labels or bias, so that nobody is penalized.”

Mahya: “In my opinion it should be two areas:

1. Promoting transparency 

2. Identify biases in the organization and address them”

Alla: “Organizations can create a culture of equity by embracing it from the top — ensuring equal support and opportunities during the recruitment process; giving equal access to development opportunities upon employment; nurturing a strong sense of belonging to the workplace where differences are celebrated.”

Carol: “Providing an open communication culture where women in any position can admit to past failures and vulnerabilities without being judged. This culture paves the way for other women to have confidence that women in leadership are not super powerful. It helps everyone to understand that you can be yourself, you can fail, you can have feelings. An empowered woman doesn’t mean a Flawless and Perfect woman.”

And That’s a Wrap!

We are very grateful to Kylie, Mahya, Alla, and Carol for this wonderful conversation. Hopefully, their insights and answers resonate and shed light on gender equity, diversity, and the need to empower talented women in male dominated industries.

Wishing everyone a Happy International Women’s Day! 

/sites/default/files/styles/original/public/2023-03/pexels-hasan-albari-1141678%20%281%29.jpg.webp?itok=_BM3l2ya
Blog Category
ImageX

Feature as an event
Off

IsGated
0

IsDownloadable
0

ImageX Updates
News

Shrine testing in Rspec

Posted on March 9, 2023 by Michael G
https://raghu-bhupatiraju.dev/shrine-testing-in-rspec-f33ff7f03497

Converting incoming emails on the fly with OpenSMTPD filters

Posted on March 9, 2023 by Michael G

Wladimir Palant
has written an
article
on use of
OpenSMTPD
filters, and
provided code
under an MIT license for those who may wish to utilize
the techniques described therein.

  • Previous
  • 1
  • …
  • 611
  • 612
  • 613
  • 614
  • 615
  • 616
  • 617
  • …
  • 821
  • Next

Recent Posts

  • SmartEsq has launched an AI-powered MFN Election tool
  • Open Source email Clients
  • When and how to use benchmarking
  • How Plotly AI revolutionizes the dashboard development process
  • [TUT] LoRa & LoRaWAN – MikroTik wAP LR8 kit mit The Things Network verbinden [4K | DE]

Categories

  • Android
  • Linux
  • News
  • Open Source
©2025 Open World News | Powered by Superb Themes
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
Cookie SettingsAccept All
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
CookieDurationDescription
cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytics
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Others
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
SAVE & ACCEPT