Giter VIP home page Giter VIP logo

rawaccel's Introduction

Raw Accel

Raw Accel is a Windows 10 & Windows 11 x86-64 driver which allows for the acceleration of mouse input in the raw input stream. It started as a replacement for InterAccel and has been extended with more acceleration types, charts, and other features.

Anti-Cheat Friendly

Releases of the Raw Accel driver are signed and run in system space. Raw Accel only modifies mouse input by a constant set of formulas, and adds a one-second delay when changing settings in order to mitigate its abuse.

Getting Help

For an overview of everything Raw Accel has to offer, please see the guide. For questions, see the FAQ first.

Development

Development of Raw Accel is ongoing at https://github.com/a1xd/rawaccel. Bug reports and pull requests are always welcome. Join our Discord server if you want to stay updated with releases or say hello.

External Websites

The latest version of Raw Accel is always hosted here on github. There is no other site or mirror where you can be sure get official versions of Raw Accel.
Raw Accel is not affiliated with any external websites, such as rawaccel.net or rawaccel.com. If Raw Accel ever were to be affiliated with an external site, it would be mentioned here on github first.

Credits

simon - Driver & Acceleration Logic
_m00se_ - GUI, Gain features, Acceleration types
Sidiouth - Primary tester and sounding board
TauntyArmordillo - Originator of the alternate curve ideas (Natural and Motivity types)
Kovaak - Brought us together

rawaccel's People

Contributors

a1xd avatar aroidzap avatar dependabot[bot] avatar fu5ha avatar jacobpalecki avatar kleborgn avatar nutzzz avatar sidiouth avatar singhmi4 avatar strazto avatar tatsujinichi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rawaccel's Issues

Mouse freezing up for one second, repeatedly

So I know that the driver is built to freeze up for 1000ms on changes. The thing is, some amount of time after launching the program...it starts doing it about every ten seconds. It might be a day before it happens, it might be ten minutes, but without fail, it starts doing it over and over. I've tried:

  • Disabling running it on startup and doing it manually
  • Turning it off entirely and using no accel for several days to see if it's an unrelated problem
  • Hitting "Apply" to reapply settings

No dice. Anyone else had this issue or a fix for it?

Permanently messed up my microphone driver

Started using this out of a recommendation, was really good and improved my aim a lot. Go to talk to my teammates and they complain about my mic, never had something like this happen before. I go to check Audacity and see it clipping a lot! Maxed out volume! I turn the microphone level all the way down and you can hear a static sound develop. I decide to uninstall the driver and restart my computer; still there! I'm looking for a new driver right now, I love this system and it really helped my aim but I want to not have a bad microphone at the same time.

Feature: Minimize on start

Can we get an option to have it minimize on start? I set it up to auto start with windows, and it would be really awesome if it minimized on start, or better yet, minimized to the system tray on start. Thanks, love raw accel.

Add "Profile" feature

Hi all,

Would love to if you guys can add feature to be able to save profiles so i can switch it when i switch games. would love to use this feature in many kind of games. not just one type of game. might be applications for that matter.

OR
maybe a feature to select the JSON Settings files instead of profile

Thank you.

Allow customization of chart background/fg colours, for overlaying using broadcasting/streaming software

Streaming software, for example, OBS, supports a filter for inputs called "Chroma-keying", which basically means, treat a specific colour like it's transparent, a little like "greenscreening" in movies.

If we can set the chart backgrounds to green, and foreground elements to white, it means that the program could be overlaid onto streams to provide realtime indication of how a given movement in-game impacts the curve.

See #87 for screenshots

Exception one very GUI startup after setting Scale by DPI to 12000

After I've changed Charts - Scale by Mouse Settings - DPI from 2400 to 12000 and then chose "Re-scale by above" the exception below has occurred. Now it happens each time I run the GUI.

I also can't change it back to 2400, because it doesn't save it - I still have broken graphs on this launch and on next launch it starts with 12000 and an exception.

Here are my settings and how it looks after I press Continue on the exception (warning: they're for the lowest mouse speed in system settings and I'm also used to really high sens):
screenshot 145

************** Exception Text **************
System.OverflowException: Value was either too large or too small for a Decimal.
   at System.Decimal..ctor(Double value)
   at System.Windows.Forms.DataVisualization.Charting.Axis.RoundedValues(Double inter, Boolean shouldStartFromZero, Boolean autoMax, Boolean autoMin, Double& min, Double& max)
   at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateNumberAxis(Double& minimumValue, Double& maximumValue, Boolean shouldStartFromZero, Int32 preferredNumberOfIntervals, Boolean autoMaximum, Boolean autoMinimum)
   at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateAxis(Double& minimumValue, Double& maximumValue, Boolean autoMaximum, Boolean autoMinimum)
   at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateAxis()
   at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetDefaultFromIndexesOrData(Axis axis, AxisType axisType)
   at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetDefaultAxesValues()
   at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetData(Boolean initializeAxes, Boolean checkIndexedAligned)
   at System.Windows.Forms.DataVisualization.Charting.ChartArea.ReCalcInternal()
   at System.Windows.Forms.DataVisualization.Charting.ChartPicture.Paint(Graphics graph, Boolean paintTopLevelElementOnly)
   at System.Windows.Forms.DataVisualization.Charting.Chart.OnPaint(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
   at System.Windows.Forms.Control.WmPaint(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4110.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
rawaccel
    Assembly Version: 1.4.4.0
    Win32 Version: 1.4.4
    CodeBase: file:///C:/Programs/RawAccel/rawaccel.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4110.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4110.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
wrapper
    Assembly Version: 1.4.4.0
    Win32 Version: 1.4.4
    CodeBase: file:///C:/Programs/RawAccel/wrapper.DLL
----------------------------------------
System.Windows.Forms.DataVisualization
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.DataVisualization/v4.0_4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4110.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Newtonsoft.Json
    Assembly Version: 12.0.0.0
    Win32 Version: 12.0.3.23909
    CodeBase: file:///C:/Programs/RawAccel/Newtonsoft.Json.DLL
----------------------------------------
System.Numerics
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
System.Runtime.Serialization
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4110.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Serialization/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll
----------------------------------------
System.Data
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.3761.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------

MOUSE GETTING STUCK IF I HARD SWIPE

I'M HAVING AN ISSUE WITH THIS APP, WHENEVER I START IT MY MOUISE IS GETTING STUCK WHEN I HARD SWIPE OR FLICK IN VALORANT, I just found the settigns on youtube

Windows Sensitivity : 4
Valorant Sens : 0.195
DPI : 800
Polling Rate : 500 or 1000 (Both get stuck)

Raw Accel Settings :
Sensitivity : 0.8625
Rotation : 0
Linear

Acceleration : 0.08625
Sensitivity Cap : 2
Weight : 2
Offset : 0

IDK how to fix it, I installed MarkC mouse reg settings before using RAW accel
PLS HELP

Motivity is unnecesserily complicated, this GUI change should make it better

ATM Gain goes from Sens/Motivity to Sens*Motivity. While keeping the same params internally, it could be displayed in the GUI the same way as other modes by making it go from Sens to Sens*Limit. This way it would be easy to switch to and easier to tweak. Params can still be saved the same way as before for compatibility: Motivity = Limit^0.5, Sens_Saved = Sens_GUI*Motivity.

Interception + rawaccel Patched ?

yesturday after a small valorant patch, when I inject Valolrant (which is based on interception drivers) & start valorant the 32 bit process which has been injected with valolrant crashes. I am pretty sure Interception + rawaccel has been patched.

Improve use of whitespace on charts, make fonts more prominent in charts

Presently, as the legend is placed to the right of the chart, a good deal of space is wasted.
I suggest embedding the legend to save space.

Also, some chart elements could be made a little bolder for better readability.

See #87 for screenshots

The current formatting is actually good at present, but this mainly aims to improve at-a-glance readings for when the chart is overlaid on another video feed, as I will describe in #89

Converter.exe

I want to convert these settings to rawaccel but when I try to convert it with converter.exe it makes my sensitivity 0.0001 and if I fix the sens the acceleration is too high and nothing like the acceleration in the interaccel settings
NhKylO5

How to convert it more accurately?

windows 7

windows 7 support? cant be that complicated can it, for a mouse driver? windows 10 is faaaaaar to dismal for office use, and ive been waiting for something with inertia as interaccel is static, not a smooth mouse feel....

Linux support?

Is there any hope whatsoever for Linux version of RawAccel? Really the only thing holding me back from switching to Linux is lack of RawAccel or some other good mouse acceleration software, I just can't go back to no mouse accel at all, I play worse without it, and I'm a very competitive gamer.

Autostart on Windows 11 not working

Hey there, first of all thanks for the awesome app <3

While running on Win10 I sometimes had the problem that rawaccel wouldn't function on startup. I needed to start the client, then after the grace period my mouse speed would ajust. This would happen rarely, but predictably around updates.

After updating to Windows 11, rawaccel seems to never work on startup and I have to open the client every time. This is quite annoying ^^' (It might have worked one time, but maybe I just dreamed that up.)

I tried:

  • Upgrading to the latest version
  • Uninstalling and reinstalling
  • Toggling the autostart off and on

Any ideas what else to try? Or is this an incompatibility with Win11?

2 different errors while installing

when ever I try to install raw accel from the installer.exe in the signed folder i get errors such as VCRUNTIME140_1.dll was not found and MSVCP140.dll i have tried a bunch of things to fix these and do not know how to. i had to reinstall windows so i thought i would move to raw accel instead of the interaccel one which i used before i reinstalled windows. i would like any help to fix this and maybe your guide looks a little outdated because it doesn't have new download links and the guide doesn't line up with what I'm seeing. any help or advice anyone could give me so i can get raw accel working would be great. thank you.

hey anir patch

hello sir ! i was wondering if its possible patch api (SystemParametersInfo) in win32k.sys on win 10

Many gamers were having problems with unwanted mouse acceleration under Windows XP.

This was caused by a faulty API call ("SystemParametersInfo") which unintendedly enabled mouse acceleration even if it had been disabled previously.

There were some registry fixes aimed at disabling this acceleration, but they did not succeed.

This patcher does not try to solve the symptom like the registry fixes did, but disables mouse acceleration at its origin, the system driver ("win32k.sys").

the problem is the patch write in disk and windows 10 dont allowed it here the source code of it if u like to see

https://pastebin.com/WVTgVuaH

i love the feeling on this patch when i was in xp i cant stop think him for this amazing job he did

By Component Removed | What's The New Best Way To Only Add Acceleration To My Y Axis While Keeping My X Axis 1:1?

Here is a link to my original issue from a long time ago: #61

I've noticed that by component was removed from the application, so I now need to know what's the best way to only add acceleration to my Y axis while keeping my X axis 1:1?

A developer replied stating they would add something better without the curl that by component adds, idk if its been added yet but what's the new best way to accomplish what I'm trying to do?

Mouse deceleration?

Hi, Is there anyway to get mouse deceleration? I play valorant with a high sensitivity and was wondering if theres a way to get mouse deceleration? I like my high sens for tracing but having to high sens kinda mess with the flicks . So was wondering if theres a way to have mouse deceleration?

support

is there way i can pay u ? thanks for that amazing program

Slow driver initialization on startup

I'm using RawAccel to slow down my mouse speed while retaining the improvement to latency high CPI brings.

The problem lies in that on a fresh boot of the system, it often takes upwards of 2 minutes for the sensitivity multiplier to kick in. My short term workaround has been to simply start the configuration GUI up and hit apply.

Attached is an image of "Apply settings at startup" checked, to show I haven't missed that.
image

OS: Windows 10 Pro x64 20H2

Invalid chart range

Idk how to fix, it was all normal until i started program again and msg showed up ''Invalid chart range''

Easier to read error messages?

image

Potentially making an easier error message with your own message box, as most users will not understand nor need the unhandled exception part. No good reason to clamp it to a valid number, as then users may continually try putting a negative offset. Just a suggestion for a future update and not application breaking😄

High CPU Usage

Running on an i7-8750H. Having 17-18% of my CPU being used by Raw Accel during use is alarming.

Screenshot 2021-01-02 183055

What is Raw Accel doing to justify this much CPU usage?

Profile isn't applied at startup

There are sometimes when I start my computer and my rawaccel settings aren't applied. I have to open the app and hit apply to get it to work again. Anyone else have this issue?

"Unhandled exception" if unlock XY and set one to 1, keep the other at 0 and apply.

Hi,
so as the title says, if i set X to 1 and Y to 0 and apply i get the following error:

Screenshot_4

The annoying part is that if i press "Quit", the settings stay saved and it just reappears upon reopening the app. If i press "Continue" it just pops up again, preventing me from reverting the setting.

I tried deleting the settings.json file, thinking it would revert to stock settings - it doesn't. I assume it reads it from the driver if the settings file is missing or something and recreates the file with same invalid settings.

Solution 1 was to replace the settings file with a working one, if one happens to have it, which i did not at first.
Solution 2 was, upon encountering the error, to

  • click "Continue" and
  • NOT move the mouse ( as it turns out, the error is triggered by mouse movement )
  • Tab to the X or Y with the value 0, change it to 1 for example,
  • Tab to "Apply" button and select it with Space
    which made it work again.

Not a huge deal, but something you may want to look into for a more graceful error handle in future versions.
Sry for the wall of text :)

Error details:
************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at grapher.Models.Calculations.AccelChartData.GetVelocityIndex(Double outVelocityValue)
at grapher.Models.Calculations.AccelData.CalculateDotsCombinedDiffSens(Int32 x, Int32 y, Double timeInMs, DriverSettings settings)
at grapher.Models.Charts.ChartState.XYOneGraphState.MakeDots(Int32 x, Int32 y, Double timeInMs)
at grapher.Models.Mouse.MouseWatcher.OnMouseMove(Int32 x, Int32 y, Double timeInMs)
at grapher.Models.Mouse.MouseWatcher.ReadMouseMove(Message message)
at grapher.RawAcceleration.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Gain Cap value is treated very weirdly

Instead of being the actual Gain limit, Cap value gets affected by Acceleration. I'd like to be able to set the actual Gain cap and Acceleration independently of one another. What makes this even worse is that UI doesn't show you the actual maximum Gain value. You need to zoom your graph to see it about right and then tweak both Cap and Acceleration until the Gain value matches the old value if you want to change just Acceleration.

Mark "max value" on charts

While experimenting with my settings, it would be very valuable to have a marker on the chart to show me the highest input speed I reached while doing an aim training scenario, or in game. This would allow me to better fine-tune my acceleration, offset, etc. Having the ability to reset this maximum would also be an important part of this feature.

Raw Accel breaks mouse after pc wakes up from sleep.

Hi,
I'm experiencing this issue in both of my PC's.
The one is a Ryzen 2600 Based system and the other one is a Q6600 based system.
Both computers on w10 with latest updates. And I use WMO 1.1a on both.
Seems that 8/10 times that I wake up the pc from sleep mode the mouse is broken.
It becoming less slow than the pre raw accel situation and also skips a lot.
Disabling/re enabling the Raw Accel made no difference but a reboot makes it work like a charm again.
To be clear, the situation occuring ONLY when raw accel is enabled before pc going to sleep.
Never experienced that issue when Raw accel isn't enabled.
Any ideas?
Thanks

Support for applying acceleration to more than one mouse, but less than all of them

I am loving RawAccel, thank you!

One thing that would make it slightly more optimized for my use case is the ability to apply the acceleration profile to any number of mice, rather than just one mouse or all mice. Windows 10 recognizes 3 mice on my PC - a trackball that I use for work, a wireless gaming mouse, and that same mouse when it's plugged in. I want the acceleration profile to apply to the "two" gaming mice, but not to the trackball, which is impossible through the current settings.

I'll poke around in source myself and see if this is easy enough for someone like me to get to, but wanted to raise a formal issue. Thanks again for the great driver!

Is there a way of applying the accel at startup?

My current way is a batch file that starts and closes rawaccel.exe in the startup folder, yeah its not an ideal way i guess but I found no autostart or that kind, it would also be okay if it runs in the background like most programs, if its not updating 100 times the second. But like that, idk.

add and expose driver/gui version

currently the driver does not have it's version fields filled out.
this makes it impossible to determine if the current install is out of date.

i think the following would be really helpful

  • add version information to the driver
  • add version information to the gui (currently the exe has set 1.0.0.0 regardless of version)
  • display both version numbers in the gui (maybe under "about" menu, pretty much standard practice)
  • the displayed driver version should be the one installed in the system, not the one of the rawaccel.sys file in the rawaccel folder

image
(information displayed by nirsoft's utility)

not starting at 0.25

hi, i'm loving rawaccel, i was just wondering, i'm used to 400 dpi so i do 1600 with 0.25, acc on 0.04 and cap at 4. The output starts at 0.25 but the red dot never actually is on 0.25 is that just visual? What do i have to do to fix it if not. It works fine with acc on 0.025 but thats to slow for me.

[Feature Request] - Dark Mode GUI

Feature Request - Dark mode GUI

Context

We use the software for an extensive amount of time, DARK MODE would help us to reduce eye strain.

Re-add the pre-scaler or adapt the conversion program

I am struggeling to get my old settings transitioned to this new awesome driver.
It looks like, the conversion program and the explanaition will not fully work.

Here is my old settings.txt

Sensitivity = 0.85
Acceleration = 0.26
SensitivityCap = 4
Offset = 0
Power = 2
Pre-ScaleX = 0.033333
Pre-ScaleY = 0.033333
Post-ScaleX = 0.4
Post-ScaleY = 0.4
AngleAdjustment = 0
AngleSnapping = 0
SpeedCap = 0
FancyOutput = 0

What it does: Scales down my 12000 DPI of the mouse to 400, applies an acceleration curve (close to what Windows uses) and then scales it further down via post-scale.
It looks like, your simple formula "Acceleration/Sensitivity)*PreScale" does not apply. My mouse is way to fast at 12000 DPI right now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.