888       888          888                                                    
888   o   888          888                                                    
888  d8b  888          888                                                    
888 d888b 888  .d88b.  888  .d8888b .d88b.  88888b.d88b.   .d88b.             
888d88888b888 d8P  Y8b 888 d88P"   d88""88b 888 "888 "88b d8P  Y8b            
88888P Y88888 88888888 888 888     888  888 888  888  888 88888888            
8888P   Y8888 Y8b.     888 Y88b.   Y88..88P 888  888  888 Y8b.    d8b d8b d8b 
888P     Y888  "Y8888  888  "Y8888P "Y88P"  888  888  888  "Y8888 Y8P Y8P Y8P