text: /*
  [PREDITLE]
  
  Jumpshot, p100, millionware on top
  Awp don't need no scope, hop around don't miss a shot
  7 shots in my deagle always got me lookin' evil
  p100 like it's cheat-codes just need one shot never reload
  
  I hit the edgebug jumpbug spin around and flickshot (ooh)
  Didn't even see you but your skull's eating my AWP shots (ahaheahey)
  I hop through vent and spin around you didn't even see me there
  It's 'cause I'm rich and flexing jumping around with my millionware
  
  [DNZ]
  
  I'm in the sky going high
  Counting seconds in the air
  Catch me if you can
  bouncing like a frogman
  It's 778 hopping 'round with 108
  I don't stand around and wait
  Jumpbug and accelerate
  
  [SONAR]
  
  Marijuana movement trail
  Hip got locked up, county jail
  Sold an invite paid for bail
  You be moving like a snail
  interium n***as bought a rat
  paid my way into nohat
  you're a nothing copycat
  f**king noname acrobat
  
  khmora gave me three day ban
  bhopper from pakistan
  blow it up, no taliban
  You wannabes are hexa stans
  
  UID 165
  Drain Gang always sleep-deprived
  Autostrafing cat-to-chair
  Serversiding, millionware
  
  [STELLAR]
  
  Hotwheels sucks gonna breakaway
  Spinning on mirage (yeah)
  Hit you with the 1-tap AK
  Now you all applause (yuh)
  
  Free Clifton he didn't do sh*t
  All the money it's counterfeit
  Never missed bench to bricks
  Swerving around 64-tick
  [CHORUS/PREDITLE]
  
  Jumpshot, p100, millionware on top
  Awp don't need no scope, hop around don't miss a shot
  7 shots in my deagle always got me lookin' evil
  p100 like it's cheat-codes just need one shot never reload
  
  I hit the edgebug jumpbug spin around and flickshot (ooh)
  Didn't even see you but your skull's eating my AWP shots (ahaheahey)
  I hop through vent and spin around you didn't even see me there
  It's 'cause I'm rich and flexing jumping around with my millionware
  
  [STELLAR]
  
  They just added in-game chat
  All these n***as got my back
  Getting banned like every day
  Message aiden, back in black
  
  Hitting edgebugs de_nuke
  Leaving discord call me duxe
  Your strafes are dog, make me puke
  My Fake Backward got you juked
  
  Sold a paste, call me woke
  f**ked your momma in the throat
  Your movement is a f**king joke
  Kill yourself retarded bloke
  Daily dose of estrogen
  No autostrafe I'm genuine
  Jumping shot; adrenaline
  OneShot turned me feminine
  
  [AIDEN]
  
  Knife behind; HNS
  Tracing you like GPS
  I check you like it's chess
  I see Brooke, she undress (I see Brooke, she undress)
  
  Like breezetix, don't need to hear
  Sound ESP, know when you're near
  Bounce off your head, I disappear
  I made that one jumpbug tutorial (do you guys remember that?)
  */
  
  #include "memory.hpp"
  #include <windows.h>
  #include <cstdint>
  #include <algorithm>
  #include <sstream>
  #include <vector>
  
  namespace utils::memory
  {
  #define FIND_NT_HEADER(x) reinterpret_cast<PIMAGE_NT_HEADERS>( uint32_t(x) + reinterpret_cast<PIMAGE_DOS_HEADER>(x)->e_lfanew )
  
  	uint8_t* pattern_scan( const char* module_name, const std::string_view signature )
  	{
  		std::vector<uint8_t> signature_bytes{ };
  
  		{
  			signature_bytes.resize( signature.size( ) );
  
  			std::vector<std::string> signature_chunks{ };
  			std::string current_chunk{ };
  
  			std::istringstream string_stream{ signature.data( ) };
  
  			while ( std::getline( string_stream, current_chunk, ' ' ) )
  				signature_chunks.push_back( current_chunk );
  
  			std::transform( signature_chunks.cbegin( ), signature_chunks.cend( ), signature_bytes.begin( ), [ ]( const std::string& val ) -> uint8_t
  							{
  								return val.find( '?' ) != std::string::npos ? 0ui8 : static_cast< uint8_t >( std::stoi( val, nullptr, 16 ) );
  							} );
  		}
  
  		uint8_t* found_bytes = nullptr;	{
  			const auto image_start = reinterpret_cast< uint8_t* >( GetModuleHandleA( module_name ) );
  			const auto image_end = image_start + FIND_NT_HEADER( image_start )->OptionalHeader.SizeOfImage;
  
  			const auto result = std::search( image_start, image_end, signature_bytes.cbegin( ), signature_bytes.cend( ), [ ]( uint8_t left, uint8_t right ) -> bool
  			 {
  				 return right == 0ui8 || left == right;
  			 } );
  
  			found_bytes = ( result != image_end ) ? result : nullptr;
  		}
  
  		return found_bytes;
  	}
  }