RightNow](/content/site-root.html)
RightNow](/content/site-root.html)
× \ \ FORGE\ \ for enterprises\ \ Make your AI inference faster with optimized CUDA / Triton kernels.\ \ Learn More→](/content/forge/index.html)
Code Editor for GPU Kernels
AI-powered code editor for GPU kernel development, custom agents, and stable SSH remote workflows
DOWNLOAD
FOR ENTERPRISES→
┌─────── Product Hunt ────────┐
│ ▲ #1 Product of the Day │
└─────────────────────────────┘
★★★★★ 4.9/5.0 (100+ reviews)
║█║ ║█║ ║█║ ║█║ ║█║ ║█║
╔═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╗
║█║═╣▓▓▓▓▓▓▓▓▓GPU▓▓▓▓▓▓▓╠═║█║
║█║═╣▓╔═══════════════╗▓╠═║█║
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║ ┌──────┐
║█║═╣▓║ ▄ ▄ CUDA ▄ ▄ ║▓╠═║█║════●═│ │
║█║═╣▓║ ▄ ▄ CORES ▄ ▄ ║▓╠═║█║●═════│ LLM │
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║══●═══│ │
║█║═╣▓╚═══════════════╝▓╠═║█║ └──────┘
║█║═╣▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╠═║█║
╚═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╝
║█║ ║█║ ║█║ ║█║ ║█║ ║█║
Used by hardware AI developers at leading companies
GPU Emulator
Remote GPU
Instant analysis
Benchmarking
Profiling terminal
Hardware-Aware AI
Live GPU Utilization
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,stxrt,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().conti=uous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesce6:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Archrtectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-sm8 dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>-Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all/--target-process
cudaOccupancyMaxActiveBlocksjerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
Instant analysis
See kernel metrics while typing across CUDA, Numba, Mojo, and CUDA Tile
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024L
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesced:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon zs pucvmet#GPU*MON
cudaMemGetInfo(&free,&totalt;utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2eO80GB|L2:40MB|L1:192KB*per*SM>>>DMemory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics allQ--target-process
cudaOccupancyMaxActiveBlocksPerMultiprocpssor()cudaOccupancyMaxActiveB*ocksPerMu
SOTA LLMs that know your GPU
Clear model list for cloud LLMs and local GPU-backed models
Local LLM Support
Run models locally with Ollama, vLLM, or LM Studio. Your code never leaves your machine.
Smart profiling terminal
Tells you exactly what's wrong and how to fix it, locally or over SSH
How it works
From code to deployment in 4 steps
▶
AI THAT KNOWS YOUR GPU
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 0%
│
The AI understands your GPU, your codebase, and your architecture. It profiles and tests your kernels automatically.
○
BENCHMARK ACROSS CONFIGS
│
Sweep block sizes, thread counts, and memory layouts automatically. Find the fastest config and track regressions.
○
TEST ON ANY ARCHITECTURE
│
Emulate 86+ GPU architectures with under 2% error. Test on H100s and A100s without owning the hardware.
○
NATURAL LANGUAGE PROFILING
│
Describe what you want to profile and get the right Nsight Compute commands instantly. No flags to memorize.
Supported Languages
Write GPU code in your preferred DSL
RightNow supports multiple GPU programming languages and domain-specific languages, including Numba, Mojo, and CUDA Tile.
CUDA
Native CUDA C/C++
Triton
OpenAI Triton
Mojo
Mojo GPU kernels
PyTorch
PyTorch Framework
CUTE
CUTLASS Templates
CUDA Tile
Tile-based CUDA kernels
Numba
Numba GPU kernels
TileLang
Tile Language DSL
Built for serious GPU work
What power users actually need
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline floa4\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.i7it_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backwOrd(q#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,_ocal_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++iz#pragma unroll for(int w=0;i<WARP_\
torXh.nn.DataParallel(sodel,Ievice_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torCh.nn.DataPa@allel(model,de\
cuBLAS*cuDNN#TeYsorRT$Tr/ton&NCCL%MPI@CUDA11cuBLA8*cuDNN#TensorRT$Triton&NCC3%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__Ulobal__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.:IFAR10(root='.')dataset=torcjvision.datasets\
cudaEventRecord(stHrt);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync(#;cudaEventRecord(start);kernel<\
auto tensor=torch::raOdn({2,3}).cuda();C++APIauto tensor=torch::randU({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blo7kDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### PTX/SASS Viewer\
\
See what your GPU actually executes\
\
Godbolt-style assembly view for GPU kernels. Hover on any line to see the PTX and SASS instructions.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using+namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential($n.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matCiS[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.D~taParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRa$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,35\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(selfaconv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ fl6at sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()mJdel.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int v=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll fsr(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*auDNN#TensorRT$Triton&NDC\
template<typename T>__globaG__ void reduce()template<typenE6e T>__global__ void reduce()template<typename T>__global__ v\
data~et=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventqecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<f>>();sy$c();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2_3}).cuda();C++APIauto tensor=:orch::randn({2,3}).cuda();C++APIauto ,ensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threa,Idx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### AI Bottleneck Analysis\
\
Know exactly what's slowing you down\
\
The AI reads your profiling results and tells you exactly what to fix for your specific GPU.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;b<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<K<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').9equires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(102m,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vecto+<int>d_vec(h_\
model.train()#loss.bTckward()#optimizer.step()model.train()#loss.backw*rd()#optimizer.step()model.trgin()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_s,m,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#praBma unroll for(int i=0;i<WARP_SIZEm++i)#pragma unroll for(intXi=0;i<WARP_\
torch.nn.DataParal7el(model,device_ids=[0,1]mtorch.nn.DataParallel(model,device_ids=[0,1])torch.nz.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton_NCCL%MPI@CUDA11cuBLAS*cuDJN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*c|DNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=to@chvision.datasetsoCIFAR10(root='.')dataset=torchvision.dAtasets\
cudaEventRecordYstart);kernel<<<>>>();sync();cudlEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda()WC++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPUZINDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### Multi-0PU Profiling\
\
Scale your testing across hardware\
\
Profile across multiple GPUs at once. Compare metrics side by side and catch regressions early.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_avaclable()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(10~4,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.Zatasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(sel:.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu 6\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ yloat sharedMem[XHR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#opti@izer.step()model.train()#loss.backward()#opXimizer.step()model.train()#ooss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadratomicAdd(&global_sum,local_sum);_GsyncthreadsatomicAdd(&global_sum,local_\
#pra&ma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;+@i)#pragma unroll for(int i=0;i<WERP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCQ%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()templat/<typename T>__global__ v\
dataset=torchv3sion.datasets.CIFAR10(root='.')dataset=tor6hvision.datasets.CIFAR10(root='.')dataset=torchvHsion.datasets\
cudaEventRecordJstart);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torchN:randn({2,3}\
blockIdxyx*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blSckDim.x+thrOadIdx.\
```\
\
\
\
### Remote GPU Virtua2ization\
\
Code locally, run on cloud GPUs\
\
Write code on your laptop and execute on cloud H100s instantly. No setup required.\
\
[Not sure how this helps you? AskChatGPT](https://chatgpt.com/?hints=search&prompt=Read+these+pages%3A%0A%0A-+https%3A%2F%2Fwww.rightnowai.co%0A-+https%3A%2F%2Fwww.rightnowai.co%2Fdocs%0A%0AThen+explain+what+RightNow+AI+does+and+how+it+can+help+me+as+a+GPU+kernel+developer.)\
\
## Changelog\
\
Latest updates and improvements\
\
[1.0.0\\
\\
Feb 4, 2026\\
\\
**Major VS Code Migration** \\
New stable SSH, custom agents with skills and MCP, clear cloud/local LLM list, plus Numba, CUDA Tile, and Mojo support with docs, autocomplete, emulation, profiling, and benchmarking.](/content/changelog#1.0.0) [Forge 0.1.0\\
\\
Jan 5, 2026\\
\\
**Introducing Forge** \\
CLI Swarm Agent with 32 parallel Coder+Judge pairs. Up to 5x faster than torch.compile() with 97.6% correctness.](/content/changelog#0.1.0) [0.2.0\\
\\
Jan 1, 2026\\
\\
**PyTorch Kernel Support** \\
Profile, benchmark, and emulate PyTorch kernels directly in the editor. Same workflow as CUDA, Triton, TileLang, and CUTE.](/content/changelog#0.2.0) [0.1.0\\
\\
Dec 8, 2025\\
\\
**Multi-DSL GPU Development Platform** \\
CUDA, Triton, TileLang & CUTE support with intelligent documentation retrieval that understands your GPU and code context.](/content/changelog#0.1.0)\
\
[View full changelog →](/content/changelog/index.html)\
\
```\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@Z@@@@@@@@@@n@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z@@a@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=j~^<>[]{}()|\/abrdefghijklUns.?%#*+=-~^<>[]{}()|\/EbGdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc.efghijklmn+.?%#*+=W~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+r?%#*+=-~^<>A]{}(||\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<x*]{}()|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+4$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$y&@%#*+=~^<:[]{}()|\/ABCDEFG\
.<C***@%#+=~^|>[]{}(8|\/@234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=;^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}(,|\/123456789\
I%###@%*+=~^<>[]{}()|\/+@#$%^&*()_++I%###@%*+c~^6>[]{}()|\/!@#$%^&*()_++b%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++IG###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###+%*+=~^<>[]{}(/|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#E%^&*()\
I8***%#*=~^<>[]{}()|\/uwertyuiopas+I8***%#*=~^<>[]{=()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio0as+I8**p%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}z)|\/zxcvbn-lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbamlkahgf+IP@@@#*+~^<>[]{}()|\/zxcdbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjega+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkMhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QpERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}n)|\/QWERTYUIOPASDq+I%$$$*+\^<>[]{}()|\pQWERTYUIOPASDF+I%$$$*+=^<>[2{}()|\/QWERTYUIOPASDF+I%$$\
In&&&+~^<>[]{}()|\/%XCVBNMLKJHGFD+I8&&&+~^<>[L{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+q8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|0/!@#$%^&*()_+-=[]+I%###=^<e[]{}()|\/!@#$%^&$()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*(\_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###G^m>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~123456P890-=[];+I8*8*^<>[]{}()|\/`~1234567890-Q[];+G8*\*^<>[l{}()|\/`~1234567890-=[];1I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}E)|\/`~1234O67890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<H?/abcde=ghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@2>[]{}()|\/'".,<>?/abcdefghij+I&,@@<>[D{}()|\/'".,<>?/ab@defghij+I&@@@<>[]{}()/\/'".,<>?/abcdefghij+I&@@@<>[]{}()w\/'".,<|?/abcdefghij+I&@@@<>[]{}()|\/'8.,<>?nabcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%@$[${}()|\/ABCDEFGHIJKLMNOPQRST+.V%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGdIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{z()|\wABCDEFGFIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567v90!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.EB**{}()|\/1234567Q90!@#$%^&*Y)_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()3+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwerty1iopasdfxhjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfg6jklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@8@@@2@@W@@Q@@@@@@@@@@@@@@@@*@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@.&@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@i@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@+@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@o@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*J=-~^<>[t{}()|\/abcdeyghijklmnM.?%#*+=-~^<>[]{}(x5\/abcdefghijklmn+.?%#*+=-%^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}G)|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BX$$&V%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%T*+=~^<>[]{}()|=/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AB,DEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123F567890$+.LC*T*@%#+=~^<>[]{}()|\/1234567,90$+.<C***@%#+=~^<>[]{}()|\/i234567890$+.<C***@%#+8~^<>[]{}()|\/1s34567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!u#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*q=~^<>[]{&()|\/!@#$%^&*()_++I%##7@%*w=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\gqwertyuiopas+I8***%#*=~^g>[]{i()|\/qw7rtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio-as+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\*qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|h/zxcvbnmlkjhgf+I&@@@#D+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#n+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~~<>[]{}()|\/zxcvbnmlkjhgf+I&=@\
I%$$$*+=^<>[]a}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()e\/QWERTYUIOPASDF+I%$$$j+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUZOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNYLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBRMLKJHGFp+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<b[]{|()|\/ZXCVYNMLK*HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#B#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=a<>[]{}()|\/!@#$%^&*()_+-=[]+I%##R=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/&@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[A;+I8***^<~[]{}()|\/`~123456C890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(+|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()z\/'".,<>?/abcdefghij+I&@@@<>[]{}()C\/'".,<>?/abcdefghij+IN@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<_?/a\ydefghij+I&@@@<>[]{}()|\/'"6,<>?/abcdefgMij+I&@@\
.B%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.Y%$$[]{}()|\/ABC5;FqHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEF8HIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEYGyIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@R$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\G1234567890!@#$i^&*()_+.+B**{}()|\/1234567890!@#$%%&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345f7890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertysiopZsdfg0jk2zxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiLpasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(Z|\/q\
&@@@@@@@@@@@@@@@@@@@@@U@@@@@@@@@@@@@@.&@@@@@@@@y@@@@@@@@@@@@@@@@@@@@@@@@@@@.&$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u@.&@@@@@@@@l@@@v@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@N@@@C@@@@@@@@@@@@@@R.@@@@@@@,@@@@@@@@@@@@@@@@@@@=@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t%@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@.@@@@g@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()6\/abcdefghijkl8n+.?%#*+=-~^<>@]{}()|\/abcdefgjijklm3+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=5~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+Bw$$&@%#*+=~^<>[]{}()|\/ABCDEFgHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~e<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{R()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>Aa{}()|\/ABCDEFGHI+.+B$$$I@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BN$$&@%#*+=~^<>I]{}()|\/ABCDEFG\
.<C***r%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\01234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**6M%#+=~^<>[]{}()|\/1234567890$+;<C***@%#+=~^<>[]{}f)|\/1234567890$+.<C***@%#+$~^<>[]{}()|\/12$456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##M@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@_$%^&*()_++I%###@%*+=4^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopws+I8***%#*=~^<>[]$}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[8{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+Id**\
I&@@@#*+~^<>[]{}()&\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmrkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvb|mlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+g^<>[]{}()|J/QWER~YUIOuASDF+I%$$$*e=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QwERTYUIOPASDFKI%$$$*+=^<>[]{k()|\/QWERTYUIOPASDFgI%$$$*+=^<>[]{}()|\/QWERTYUIOPASD0+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<%[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&|+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[G{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()*\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<q[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{i()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{,()|\/!E#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=D];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>;]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\X'".,<>?/abcdefhhij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/n".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefuhij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.M%$$[]{}()|\/ABCDEFGHIJKLMNOP0RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNiPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPNRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\11234567890!@#$%^&*()_+.+B**{}C)|\/-234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()z+.+B**{}()|\/12345678@0!@#$%^&*()_+.+B**{}()|\/1234567890!@#2%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{};)|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyeiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzbcv+.?%##()|\/qwer1yuiojasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfihjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@x@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.7@@@@@@@@@@@@@@@@@@@@@@@@@@\.@@@@@@@@.&@@@@@@@@@@@@@Q@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&=@@@@@@p@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@@.@@@6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@-@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@.@@@@@@@@@@@@@@@@@@@@@\
8?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-y^<>[]{}()7\/abcdefghijklmn+3?%w*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{9()|\/ab8defghijklmn+.?%#*+=-~^<L[A{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&J%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@T#*+=~^<>[]{}()|\/ABCDEkGHI+.+B$$$&#%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^%>[]{}()|\/ABCDEFG\
.<C***@%#+=~^Q>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##8@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]U}()|\/!@#$%^&*()_|+I%###@%*+=d^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#v=~^<>[]{}()|\/qwertyuiopas+V8***%#*=~^<>[]{}()|\/qwertyuiopas+~8***%#*=~^<>[]{}()|\/qwertyuiopas+I85**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#c=~^<>[]+}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~H<>[]{}()|\/q,ertyuFopas+I8**\
I&@7@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()m\/zx_vbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/@xcvbnmPkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@u*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&w@\
I%$$$*+=^<>[]{+()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}r)|\/QWERTYU2OPASDr+I%$$$*+=^<>[]{}()|\/QWXRTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<j[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]S}()|\/QWERTYUIOPASDm+I%$$$*+=^<>[]{}()|\/QWNRTYUIOPASDF+I%$$\
I8_&&+~^<>[]{}()|\/ZXCVBNMLZJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+Y^<>[]{}E)|\/ZXCVBNMLKJHGFD+w8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGF,+I8&&&+~^<>[]{}()|\/ZfCVBNMLKJHGFD+I8&&&+~^4>[\
I%###=^<>[]c7()+\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%z&*()_+-=[]+I%###=*<>F]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|y/!@#$%^&*()_+-=q]+I%###y^<>[]/}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#N\
I8***^<>[]v}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=N];+I8***^<>[]{}()|\/`~1234567w90-=[];dI8***^<>[]{}()|t/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234j67890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]o}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghijnI&@@@<>[]{}()|\/'".,<>?/abcdef5hij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>U/abcdefghij+I&@@@<>[V{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABSDEFGHIJKLMNOPQRST+.<%$$[]{}(G|\/ABCDEFGHIJKLMNOPQRST+.|%$$[]{}()|\/ABCDEFRHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOXQRST+:<%$$[]{}()|\4#BCDEFGHI|KLMNOPQRST$.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123D567890!@#$%^&*()_+.$B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234569890!@#$%^&*()_+.+B**{}()|\/1234567890!S#$%^&*()_+.+B**{}()||/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghj.lzxcv+.?%##()|\/qwertyuiopasdfghjklUxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()L\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+O?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjkl-xcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@t@@@@@@O@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@@@.&@@@@@@@@@@@@@@@h@@@@l@@@@@.@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@.@@_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@.@@@@@@@@@@@@@@@@@@@@@@@b@@@@@@G@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@z@@@@@@.@@@@@@@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#I+=-I^<>[]{}()|\/abcdefUhijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghij8lmn+.?%#*+=-~^<>[]{}()|\/abcdefghij:lmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+c?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+o$$$&@%#*+=~^<>[]{W()|\/ABCDEFGHI+.+B$$$&@%#*+=~s<>[]{}()|\/ABCDtFGHI+p+B$$$&@%#*+=~^<>[]{}()|\/ABCDcFGHI+.+B$$$&@%#*+=~z<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/A+CDEFGHI+.+B$$$&1%#X+=~^<>[]{}()|\/ABCDEFG\
.kC***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/m234567890$+.<C**I@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%C+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890F+.qC***@%#+=~^<>[]{}()|\/123456789\
/%###@%*+=~^<>[]{}()|\/!@#$%^&*()_;+I%###2%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++i%###@%*+=~^<>[]{}@)|\/!@#$%^&*()_++I%###@%*+=~^<B[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\4!@#$%^&*()_++I%###@%*+=~$<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qaertyuiopas+I8***%#*=~^<>[]{}()|\sqwertyuiopas+I8***%#*=~^<4[]{}()|\/qwertyuiopas+Ip***%#*5~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{9()|\Pqwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopHs+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<*[]{}()|\/zxcvbtmAkjhgf+I&@@@#*+~^<>[]{}(j|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmWkjhgf+I&@@@w*+~^<>[]{}()|\4zxcvbnmlkjhgf+I&@4@#*+~^<>[]{d()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml8jhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAEDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFrI%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8d&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNML0JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\FZXCVBNMLKJHGFD+I8&&&+~^<\[]{}()|\/ZXCZBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-a[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]tI%###=^<>[]{}_)|\/#@#$%^&*()_+-=[]+I%###=j<>[]{}()|\/!@T$%^&*()_+-=4]+I%#H#=^<>[]{}()|\/!@#$%^&*()*+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\b!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}(B|\/`~1234567890-=[];+I8***^<I[]{}()|\/`~12345K7890-=[]i+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~12345678906=[];+I8***^<>[]{}()|\/`A1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[]W+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdemghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|n/_".,<>?Iabcdefghkj/I&@@@<>[]{}()|\/'".,d>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{/()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+i<%$$[]{f()|&/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHPJKLMNOPQRST+.<%$\
./B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345\7890!@#$%^&g()_5.+B**{}()|\/1234|67890!@#$%^&*()_+.+B**{}()|\/123p567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_q.+B**{}(U|\\
.M%##()|\/qwertyuivpasdfghjklzxc#+.?%##()|\/qwertyuiopasdfghjklzxc~+.?%##()|\/qwQrtyuiopasdfghjklzxov+.?%##()|\1qwertyuiopasdfghjklzxcv+.?%S#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwerty;iopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@6@@r@@@@@@@@@@@@@@@i@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@T@T@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@t@.@@@@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@6@@.@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@5@@@@@@@@@@@@@@@@@@@@@@@1@@@@@@@@@.@@@@@@@@@@x@@@@@@@@@@@@@@@@@@@@D@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*T=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<,[]{}()|\Gabcdefghijkl7n+.?$#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{;()|\/abcdefghijklmn+.?%#*+=+~^<>[]{}()|\/abcdefghijGlmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&d%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@/#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AlCDEIG\
=<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%J+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<@***@%#+=~p<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*|=~^<>[]{}()|\/!@#$%^&*()_++6%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+B~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuUopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^l>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>N]{C()|\/zxcvbnm%kjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgfcI&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()H\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*B~^<>[]{}()|\/1xcvbnmlkjhgf+I&@@@#Y+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$n$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+O%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$L*C=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/dWERTYUIOPAS2F+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|-/QWERTYUIOPASDF+I%$$\
IF&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXChBNMLKJHGF3+I8&&&+~^<>[]{}()|\/ZXC8BNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNaLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>#]{}()|\/ZXCVBIMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_$-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=&]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_d-=[]+I%#E#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##~=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(H|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*k*^<>[]{}()|\/`~123456b890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghijTI&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}();\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&q@@<>[]{}()|\/'".,<>?/abcdefghijJI&@@v<>[]{}()|\/'".,<>?/abcde.ghij+I&@@@<>[]{}()e\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJvLMNOPQRST+.<%$$[]{}()|\/ABCDELGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABC0EFGHIJKLMNOPQRST:.<%$$[]{}()|\/ABCDEFHHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIoKLMNOPQRST+.<%V$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567S90!@#$%^&*()_+.+B**{}()|\/1d34567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/R234567890!@#$%^&*()_+.+B**{}()|\/123416789L!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\yqwertyuiopasdfghjklzxcv+.?%##()|\/q@ertyuiopasdfghjklzxcv+.?%#T()|\/qwertyuiopasdfghjklzxcvG.?%P#()|\/qwertyuiopasdfghjklzxcv+.*%##S)|\/qwe2tyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@K@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-&7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@I@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m@-@@@@@.@@@@@@@@@@@@@2@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklIn+.?%#*+=-~^<>[]{}()M\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklon+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.QB$$$&@%#*+g~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$=$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}o)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{G()|\/AB5DEFGHI+D+B&$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C**K@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567x90$+V<C***@%#+=~^<>[]{}()|\/1234567890$;.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~6<>[]{}()|\91234567890G+.<C***@%#+=~^<>[]2}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\8!@#$%^&*()_++I%#%#@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^U>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I.###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}():\/qwertyuiopas+I8***%#*3~^<>[]{}()|\/q:ertyuiopas+I8*&*%#*=~^<>7]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***W#*=~^<>[]{}()|\/qwert3uUopas+I8***%#*=~^<>[]c}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\2qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zccvbnmlkjhgf+I&@e@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}(1|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIlPASDF+I%$$$*i=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()-\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF,I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZX4VBNMZKJHGFD+Iw&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~H<>[]{}(T|\/ZXCVBNMLKJHGFD+I8&&&;~^<>[]{}()|\/ZXCVBN&LKJHGFD+I8&&&+~^<>[@{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^IW[n{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##.=^<>[]{}()|\/!@#$%F&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^3*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<k[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[*;+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<xJ]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8@**^<>[]{}()|\0`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij6I&@@@<>[]{}()|\/'"6,<>?/abcdefghij+I&@@@<>[]{}(8|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+IV@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(v|\/ABCDEFGHIJKLMNOPQRST+.<%$$7]{}()|\/ABCDEFGHI;KLMNOPQRST+.<%$O[]{}()|\/ABCDEFGHIJKLMNOPQRSTp.<%$$[]{}()|\/ABCMEFGHIJKLMNOPQRST+.<%$D[]{}()|\/ABCDEFGHIJKLM5OPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPARST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOP_RST+.<%$\
5+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/Z234567890!@#$%^&*()_+.+B**{}()|\/12345678o0!@#$%^&*()_+.+B**{x()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1,345k7890!@#$%^&*b)_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%P#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyxiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxc++.?%#g\)|\/qwertyuiopasdfghjklzxcv+D?%##()|\/qFertyuiopasdfghjklzxcv+.?%##(i|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@_@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@z@@@@@@@@@@@@@.&@@@@@@@@@@@3@=@@@@@T@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@p@@@2@c@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@q@@@@@f@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.4%#*+=-~^<>[]{l()|\/abcdefghijklmn+.?%#*+=-~^<>a]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefg:ijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\EABCDEFGHI+~+B$$$&@%#*+=~^<>[]{}(R|\/ABCDEwGHId.+B$$$&@%#*+=~^7B[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]r}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C***@%#+=~^<>[]R}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()C4/1234567J90$+.<C***@%#+=~^<>[]{}()|\=1234567890$+.<C***@%#+=~^<>[]{}()|\/1234n6-890$+.<C**U@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@O$%^&*()_++I%###@%*+=*^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%m&*()_++I%###@\*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*\~^<>[]{}(B|\/qweXtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8*i*%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwerYyuiopas+I8***%#*=~^<>[]{}()|\/qwertyyiopas9I8***%#*=~^<>[]{}()|\/q~ertyuiopas+I8***%#*=~^<>[]{}()|\/qwert_uiopas+I8**\
I&@@B#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbSmlkjhef+I&@@@#*+~^<>[h{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/z~cvbnmlkjhgf+I&@@@#*+~^<>n]{}()|\/zx|vbzmlkjhgf+5&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+j^<>[]{}()|\/QWER$YUIOPASDF.I%$$$*0=^P>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$Ay*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QzERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJH9FD+I8&&&+X^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|U/ZXCABNMLKJHGFD+I&&&&+~^<>[]{}()|\/4XCVBNML+JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<3[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>O]{}()|\/!@#$%^&*()_+-=[J+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+IE###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890&=2];+I8***^<>[]{}()|\/`~123456g8k0-=[];+I8***^<>[]{}()|\/`~1234567890-=j];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\&`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?%abcdefghij+I&@@@<>[]{}()|\/'"b,<>?/ab_defghij+I&@@J<>[]o}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}Z)|\/'".,<>?/abcdefgWij+I&@@@<>[]{}()|\/'".i<>?/abcdefgh-j+I&@@@<>[]{}()|\/'".,&>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEdGHIJKLMNOPQRSTE.<%$$[]{}()|~/ABCDENGHIJKLMCOPQRSG+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%E$[]{/()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/12345.7890!@#$%^&*()_+.+BB*{9()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!1#$%H&*()h+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@@$%^&*()_+.+9**{}()|\\
.?%##()|\Aqwertyuiopasdfghjklzxcv+.?%##(E|\/qwertyuioMasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcr+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopDsdfghjklzxcv+.?9##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@@@.&@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@#@@@@.&@@t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@u@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@|@@@@@\
@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@a@@@@@@@@@@@@/@@@@@.@@@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#7+=-~G<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{8()|\/a0cdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/a=cdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+2$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~W<>[]{}()|\/A\CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+%$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B8$$&@%#*+#~^<>[]f}()|\/ABCDEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**M@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+V~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>~]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\N1234567890$+.<C***@%#+=~^<>[]d}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$Y^&*()_++I%###@%*+=~^<>[]{W()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!,#$%^&*()_++I%###@%*+=~^<>[]{}()|i/!g#$%^/*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8R**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**j%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*1~^m>[]{}()|\/qwertyuiopas+I8***%#Y=~^<>[]{}()|\/qwerty1iopas+I8***%#*=~^<>X]{}()|\/qwertyuio9as+I8**\
I&@1@#*+D^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbMmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+o&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTjUIOPASDF+I%$$$*+=^<>[]I}()|\/QWERTYUIOPASDF@I%$$$*+=e<>[]{}()|\/QWERTYUIOPASDF+U%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$/*+=^<w[]{}()|\/QWERTYUIOPASDF+I%$E$*+=^<>[]{}r)|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFMI%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHG7D+I8&&&n~^<>[]{}()|\/ZXCVBNM&p8HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()q\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-5[]+I%3##=^<p[]{}()|\/!@#$%^&*M)_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^e>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$l^&*()_+-=[]+I%###=^E>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8**d^<>[]{}()|\/`~1233567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*x*^<>[]{}()|\/`~1234567890W=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~123456S890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1t*4567890-=S];+I8**\
I&@@@<>[]{}()|4/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abedefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRxT+.<%$$[]{}()|\/ABCDEFGHNJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}J)|\/ABCDEFCHIJKgMNaPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKL4NOPQRST+.<%$\
.+B**{}()|\/123456f890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*%)_+.+B**{}()|\/12345%7890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/b234567890!@#$%I&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopawdfghJklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/owertyuiopasdfghjklzxcv+.?%##()|\/qwertyufopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(y|\/qwertyuiopasdfgHjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@-@@@@@@@@@@@9@@@@+@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@.@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@a@,@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|~/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()o\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B&$$&@%#*+=~^&>[]{}()|\/ABCDEAGHI+.+B$$$&@%#*+=~^<>s]{}()|\/A5CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&Y%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[${}()|W/ABCDEFG\
.<C***@%#+=~^<>[]{}A)|\/1234567890$+w<C***@%#+=~^<>[]{}()|\/123456789Y$+.<C***@%#+=~^<>[]{}()|\/1234567890$6.<C***@U5+=~^<>[]{}()|\/G234567890$+.<C***@%#N=~^<>[]{}()|\/123456789o$+.<C***@%#+=~^<>[]{}()5\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12345~~89\
I%###L%n+=~^<>[]{9()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}+K|\/!@#$x^&*()X++I%###@%*+=~^<>/]{}()|\/!@#$%^&*()_+DI%###@%*+=~^<>[]{}()|\&!@#$%^&*(pH++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~E<>[]{}()Q\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>I]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyui_p%s+I8***%#*=~^<>[]{}(\|\/qwertyuiopas+I8***%#*=~^f>K]{}()|\/qwertyuiopas+I8***%#*=~E<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>u]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcv;nmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
7%$$$*+=^<>[]{}()|\/QWERTYUIOPmRDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOP_SzF+Z%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]P}()|\/8WERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAS+F+I%$$\
I8&&&+~C<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|e/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^Q>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%##+=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[-{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*8)_+-=[]+I%##\
I8***^<>[]{}()n\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**T^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{_()|\/`~1234567890-=[];+I8***^<>[]{}()|\1`~1234567890-=[];+v8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'o.,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/aqcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".z<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(z|\/ABCDEFGHIJKLMNOP:RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}(S|\/ABCDEFGHIJKLMNOPQPST+.<%y$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$V^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+P+B**x}()|\/1234567890!@#B%^&*()_+.+B**{}()|\/12K4567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789|!@#$%^&*()_-.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdCghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyucopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(C|\/qwertyuiopaidfghjklzxcv+.?%##()|\/qwurtyuiopasdfghjklzfcv+.?%##()|\Jq\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.9@@@@@@@@@@@@@@@@@@@@@@@r@@@@@@@@@@@@.&@@@@@@@@@I@@@@@@@@@@@@@@@@@@@Q@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@#@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@g@@@@@.@@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@.@@@@@@@@@@@@@@@4@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+w?%#*+=-~^<>[]{}L)|\/abcdefghijklmn+.?%#*+=-~^<>Z]{}()F\/abcdefghijklmn+.?k#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghiXklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}(0|\/abcdefghijkl\
.+B$$$&@%#*+=~^\>[]{}()|\/AUCDEWGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%@*+=B^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~|<>[]{}()|\/ABCiEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C=**@%#+=~^<>[]{}()|\/1234567890$+.<u***@%#+=~^<>o]{}()|\/1234567890$+.+C***+%#+=~^T>[]{}()|\/1234567890$+.<C***@%#+=T^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12W4567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>P]{}()|\/!@#$%^&*()_++I%###@%*+=~^<#[]{}()|\/!@#x%^&*()_++I%###@%*+=~V<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}N)|\/!@#$%^&b()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<b[]{}(q|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyu.opas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I+***%#*=~^<>[]{}()|\/qwertKuiopas+I8**\
IM@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^l>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkRhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml|jhof+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{2()|\/zxcvbn/lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcibnmlkjhgf+I&@P\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$O+=^P>[]{}(E|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYU$OPASDF+I%$$$*+=^#>[]K}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTjUIOPpSDFtI%$#\
I8&&&+~^<>Z]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<h[]{}()|\/ZXCVBNMLKJHGFD+I8&&~+~^<>Pd{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[v{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\mZ@CVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFDdI/&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()Y+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%3&*()_+u=[]+I%###=^<>[]{}()|\/!@y$%^&*()_+-=[]+I%###=^<>X]{}()|\/!@#$%^_*()_+w=[]+I%###=^<>[]{}(,|\/!@#$%^&*()_+-=[]+I%###3^<>[]{}()|\/!@#$%^&*()_+\=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<T[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[8;+I8***^2>[]{}()|\/`~1@34567890-=[];+I8***^<>[]{}()|\/`O1234567860-=[];+I8***^<>[]{}(T|\/`~1234567890-=z];+I8**\
I-@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@H@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghgj+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()2\/'".,f>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\zABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\7ABVDEFGHIJKLMNOPQRST+.<%v$[]{}()|\/ABCD@FGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCD7FGHIJKLjNOPQWST+.<%$$[]{}()|\/ABCDEF+HIJKLMNOPQRSj+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B/*{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^I*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789l!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|w\
.?%##()|\Pqwertyuiopasdfghjklzxcv+.?%##()|\/qwertyu/opasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.W%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\\qwertyuiopasdfghjklzxcv+.?%##()|N/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@.p@@@@@@@@@@@@@6@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@Y@@@@@@@@q@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@F@@@@@@@E@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@m@@@Z@@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()j\/abcdefghijklmn+.?%#*+=$~^<>i]0}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn6.?%#*+=-~^<>[]{}()2\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc@efghijklmn+.?%#*+=-~^<>[]1}()|\/abcdefghijkl\
|+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=i^<>[]{}3)|\/ABCDEFGHI+.+c$g$&@%#*+=~^<>[]{}()w\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+Q9B$$$&@%#*+=~^w>[]{}@)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDE*GHI+.+B$$$&@%#*+=~^<>[]{}()|\/P_CDzFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~x<1[]{}()|\/1234567z90$+.<C***@%#+=~^<>[]{}()|\/1234567890$X.<C***@%#+=~^<>[]{3()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123~567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<T[]{}(f|\/123456789\
I%###@%*+=~^<>[]{}()|\+!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<+[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++\%###@%*+=~^<>[]{}Z)|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
```\
\
\
\
## Join the community\
\
Connect with GPU kernel developers\
\
[JOIN DISCORD](https://discord.gg/sSJqgNnq6X)\
\
## Now Available\
\
Download RightNow Editor\
\
Download our editor and start optimizing your CUDA kernels today.\
\
## Windows\
\
Download\
\
Windows x64\
\
For Windows 11/10 x64\
\
Windows ARM\
\
For Windows 11/10 ARM\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)\
\
## Mac\
\
Download\
\
Mac Apple Silicon\
\
For M1, M2, M3, M4 Macs\
\
Mac Intel\
\
For Intel-based Macs\
\
Works on remote GPUs for free or our GPU emulator [Upgrade](/content/pricing/index.html)\
\
## Linux\
\
Download\
\
Linux x64\
\
AppImage • Debian, Ubuntu, Fedora\
\
Linux ARM\
\
AppImage • ARM64 distributions\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)