local l = (data.bl and 1) or -1
local player = data.player
local item = data.item
local mainHand = data.mainHand

global.chest_boat_anim = 1;
global.fall = 0;
global.pitchAngle = 0.0;
global.yawAngle = 0.0;
global.pitchAngleO = 0.0;
global.yawAngleO = 0.0;

local ptAngle = (mainHand and pitchAngle) or pitchAngleO
local ywAngle = (mainHand and yawAngle) or yawAngleO


if I:isOf(item, Items:get("minecraft:fishing_rod")) then
    animator:rotateZ(0, 22, M:clamp(P:getPitch(player) / 1, -10, 90) + ptAngle, 0.3, 1.9, 0.5, 0.4)
    animator:rotateX(0, 22, M:clamp(P:getPitch(player) / 1, 0, 0) + ywAngle, 0.3, 1.9, 0.5, 0.4)
    animator:moveX(0, 22, -0.1)
end

if I:isOf(item, Items:get("minecraft:warped_fungus_on_a_stick")) or I:isOf(item, Items:get("minecraft:carrot_on_a_stick")) then
    animator:rotateZ(0, 22, M:clamp(P:getPitch(player) / 1, -10, 90) + ptAngle, 0.3, 1.9, 0.5, 0.4)
    animator:rotateX(0, 22, M:clamp(P:getPitch(player) / 1, 0, 0) + ywAngle, 0.3, 1.9, 0.5, 0.4)
    animator:moveX(0, 22, -0.1)
end

if I:isOf(item, Items:get("minecraft:flower_banner_pattern")) or I:isOf(item, Items:get("minecraft:creeper_banner_pattern")) or I:isOf(item, Items:get("minecraft:skull_banner_pattern")) or I:isOf(item, Items:get("minecraft:mojang_banner_pattern")) or I:isOf(item, Items:get("minecraft:globe_banner_pattern")) or I:isOf(item, Items:get("minecraft:piglin_banner_pattern")) or I:isOf(item, Items:get("minecraft:flow_banner_pattern")) or I:isOf(item, Items:get("minecraft:guster_banner_pattern")) or I:isOf(item, Items:get("minecraft:field_masoned_banner_pattern")) or I:isOf(item, Items:get("minecraft:bordure_indented_banner_pattern")) or I:isOf(item, Items:get("minecraft:piglin_banner_pattern")) then
    animator:rotateX(6, 7, M:clamp(P:getPitch(player) / 1, -60, 90) + ptAngle, 0.4, 0.5, 0.5, -0.5)
    animator:rotateZ(6, 7, M:clamp(P:getPitch(player) / 1, 0, 0) - ywAngle, 0.4, 0.5, 0.5, -0.5)
    animator:moveY(6, 7, 0.03)
end

if I:isOf(data.item, Items:get("minecraft:paper")) or I:isOf(data.item, Items:get("minecraft:map")) then
    animator:rotateX(4, 7, M:clamp(P:getPitch(player) / 1, -25, 30) + ptAngle + ywAngle * 1, 0, 0.4, 0.505)
    animator:rotateX(2, 5, M:clamp(P:getPitch(player) / 1, -20, 20) + ptAngle + ywAngle * 1, 0, 0.03, 0.28)
end

if I:isOf(data.item, Items:get("minecraft:name_tag")) then
    animator:rotateX(0, 5, M:clamp(P:getPitch(player) / 1, -70, 90) + ptAngle + ywAngle * 1, 0, 0.2, 0.4)
    animator:rotateZ(0, 5, -ywAngle, 0.5, 0.2, 0.4)
end

if I:isOf(data.item, Items:get("minecraft:armor_stand")) then
    animator:rotateZ(0, 41, -ywAngle, 0.5, 0, 0)
end
if I:isOf(data.item, Items:get("minecraft:chest_minecart")) then
    animator:moveY(0, 15, M:clamp(fall * 0.1, 0, 1) * chest_boat_anim)
    animator:rotateX(0, 11, M:clamp(ptAngle * 1.35, 0, 999) * chest_boat_anim, 0.5, 0.5, 0.8)
    animator:rotateZ(0, 15, -ywAngle * 0.12 * chest_boat_anim, 0.5, 0, 0.5)
end

--Flowers

if I:isOf(data.item, Items:get("minecraft:blue_orchid")) then
    animator:rotateX(0, 215, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 215, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:open_eyeblossom")) then
    animator:rotateX(0, 131, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 131, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dandelion")) then
    animator:rotateX(0, 107, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 107, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:azure_bluet")) then
    animator:rotateX(0, 155, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 155, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:allium")) then
    animator:rotateX(0, 71, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 71, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:wither_rose")) then
    animator:rotateX(0, 119, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 119, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:orange_tulip")) then
    animator:rotateX(0, 83, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 83, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:white_tulip")) then
    animator:rotateX(0, 107, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 107, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:red_tulip")) then
    animator:rotateX(0, 119, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 119, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:pink_tulip")) then
    animator:rotateX(0, 83, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 83, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:closed_eyeblossom")) then
    animator:rotateX(0, 107, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 107, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:oxeye_daisy")) then
    animator:rotateX(0, 131, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 131, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:cornflower")) then
    animator:rotateX(0, 131, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 131, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:poppy")) then
    animator:rotateX(0, 119, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 119, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:torchflower")) then
    animator:rotateX(0, 299, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 299, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:lily_of_the_valley")) then
    animator:rotateX(0, 155, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 155, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:rose_bush")) then
    animator:rotateX(0, 677, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 677, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:peony")) then
    animator:rotateX(0, 383, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 383, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:lilac")) then
    animator:rotateX(0, 683, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 683, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:pitcher_plant")) then
    animator:rotateX(0, 371, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 371, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:large_fern")) then
    animator:rotateX(0, 599, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 599, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:tall_grass")) then
    animator:rotateX(0, 515, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 515, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:firefly_bush")) then
    animator:rotateX(0, 275, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 275, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:tall_dry_grass")) then
    animator:rotateX(0, 377, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 377, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:cactus_flower")) then
    animator:rotateX(0, 155, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 155, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:crimson_roots")) then
    animator:rotateX(0, 335, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 335, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:warped_roots")) then
    animator:rotateX(0, 261, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 261, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:sunflower")) then
    animator:rotateX(0, 263, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 263, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:big_dripleaf")) then
    animator:rotateX(0, 305, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 305, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:short_dry_grass")) then
    animator:rotateX(0, 227, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 227, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:short_grass")) then
    animator:rotateX(0, 419, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 419, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:seagrass")) then
    animator:rotateX(0, 107, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 107, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:kelp")) then
    animator:rotateX(0, 257, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 257, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:horn_coral")) then
    animator:rotateX(0, 335, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 335, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:brain_coral")) then
    animator:rotateX(0, 575, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 575, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:bubble_coral")) then
    animator:rotateX(0, 251, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 251, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:fire_coral")) then
    animator:rotateX(0, 419, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 419, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:tube_coral")) then
    animator:rotateX(0, 143, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 143, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_horn_coral")) then
    animator:rotateX(0, 335, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 335, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_brain_coral")) then
    animator:rotateX(0, 575, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 575, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_bubble_coral")) then
    animator:rotateX(0, 251, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 251, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_fire_coral")) then
    animator:rotateX(0, 419, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 419, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_tube_coral")) then
    animator:rotateX(0, 143, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 143, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dead_bush")) then
    animator:rotateX(0, 299, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 299, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:bush")) then
    animator:rotateX(0, 167, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 167, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:fern")) then
    animator:rotateX(0, 299, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 299, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:jungle_sapling")) then
    animator:rotateX(0, 251, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 251, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:pale_oak_sapling")) then
    animator:rotateX(0, 279, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 279, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:birch_sapling")) then
    animator:rotateX(0, 243, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 243, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:cherry_sapling")) then
    animator:rotateX(0, 307, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 307, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:dark_oak_sapling")) then
    animator:rotateX(0, 279, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 279, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:oak_sapling")) then
    animator:rotateX(0, 335, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 335, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:spruce_sapling")) then
    animator:rotateX(0, 227, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 227, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:acacia_sapling")) then
    animator:rotateX(0, 275, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 275, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

if I:isOf(data.item, Items:get("minecraft:mangrove_propagule")) then
    animator:rotateX(0, 59, M:clamp(-ptAngle * 0.3, -15, 15), 0.3, 0, 0.6)
    animator:rotateZ(0, 59, M:clamp((ywAngle * 0.4) + (-ptAngle * 0.15), -20, 20), 0.5, 0, 0)
end

--Spawn Eggs


-- you really thought you can find the egg codes here? well you have to wait a bit more

--⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣤⡤⢤⣤⣤⣤⣤⣤⣄⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀
--⠀⠀⠀⠀⠀⣠⣿⡿⣟⠯⡒⢯⣽⣓⣒⢾⣯⣭⣿⣿⠿⠭⠭⣯⣷⣦⡀⠀⠀⠀
--⠀⠀⠀⠀⣰⣿⣯⣞⣕⣽⠾⠿⠿⠿⢿⣏⣿⣿⣿⡗⣽⣿⣿⣷⡝⣿⣿⡆⠀⠀
--⠀⠀⠀⣀⣛⠛⢿⣛⢝⢁⣀⣀⣀⠓⠶⠈⣿⣿⡿⠗⠉⠁⢀⣀⣹⣛⣛⣳⢄⠀
--⠀⡔⡾⢁⣴⡆⢦⣬⣙⣛⣋⣤⣿⣿⣷⣾⣿⣿⣿⡆⢿⣿⡟⠻⠛⡉⣍⣲⢱⠁
--⠀⣇⣇⢸⣉⡀⢦⣌⡙⠻⠿⣯⣭⣥⠡⡤⠿⢿⣿⣿⡆⠉⡻⢿⣿⠇⢻⣟⠼⠀
--⠀⠈⠪⣴⣿⣧⡀⢉⠛⠘⢶⣦⣬⠉⣀⠓⠿⠿⠯⢉⣴⠿⠿⠓⡁⡄⠀⣿⠃⠀
--⠀⠀⠀⠙⣿⣿⣷⣌⠻⢠⣤⣀⠉⠐⠛⠿⠿⠰⠶⠦⠰⠶⠇⠘⠃⠁⠀⣿⠀⠀
--⠀⠀⠀⠀⠘⢿⣿⣿⣷⣌⠻⢿⠇⣼⣶⣦⡄⣄⣀⡀⢀⡀⢀⡀⡀⠀⢠⣿⠀⠀
--⠀⠀⠀⠀⠀⠀⠙⠯⣛⠭⣻⠶⣬⣉⣛⠛⠃⠿⠿⠃⠿⠃⠚⣀⣁⣤⣾⣿⡀⠀
--⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠒⠯⣶⣋⡽⢛⣿⣯⣿⣭⣭⡿⢿⣿⣻⣾⢟⣿⡇⠀
--⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⠿⣶⣾⣿⣿⣿⣭⣭⣭⣶⣿⡿⠁⠀
--⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⠛⠛⠋⠁⠀⠀⠀
