From 4844e77b7f65024d85ba74b1824013eda6eb32b2 Mon Sep 17 00:00:00 2001 From: Vladyslav Nikonov Date: Tue, 23 May 2023 18:22:30 +0300 Subject: [PATCH] fix(graphics): invalid YCoCg color conversion (#146) Closes #141 --- crates/ironrdp-error/src/lib.rs | 2 +- .../ironrdp-graphics/src/color_conversion.rs | 27 -------- .../src/rdp6/bitmap_stream.rs | 62 ++++++++++++------ .../src/rdp6/test_assets/64x24_aycocg_rle.bin | Bin 1363 -> 0 bytes .../src/rdp6/test_assets/64x24_aycocg_rle.bmp | Bin 4662 -> 0 bytes .../rdp6/test_assets/64x24_ycocg_rle_ss.bin | Bin 608 -> 0 bytes .../rdp6/test_assets/64x24_ycocg_rle_ss.bmp | Bin 4662 -> 0 bytes .../rdp6/test_assets/64x35_ycocg_rle_ss.bin | Bin 0 -> 2559 bytes .../rdp6/test_assets/64x35_ycocg_rle_ss.bmp | Bin 0 -> 6774 bytes .../rdp6/test_assets/64x57_ycocg_rle_ss.bin | Bin 980 -> 0 bytes .../rdp6/test_assets/64x57_ycocg_rle_ss.bmp | Bin 10998 -> 0 bytes .../src/rdp6/test_assets/64x64_aycocg_rle.bin | Bin 0 -> 1670 bytes .../src/rdp6/test_assets/64x64_aycocg_rle.bmp | Bin 0 -> 12342 bytes .../rdp6/test_assets/64x64_ycocg_raw_ss.bin | Bin 6146 -> 6146 bytes .../rdp6/test_assets/64x64_ycocg_raw_ss.bmp | Bin 12342 -> 12342 bytes .../rdp6/test_assets/64x64_ycocg_rle_ss.bin | Bin 0 -> 5160 bytes .../rdp6/test_assets/64x64_ycocg_rle_ss.bmp | Bin 0 -> 12342 bytes crates/ironrdp-session/src/rfx.rs | 2 +- 18 files changed, 45 insertions(+), 48 deletions(-) delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bin delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bmp delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bin delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bmp create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bin create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bmp delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bin delete mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bmp create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x64_aycocg_rle.bin create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x64_aycocg_rle.bmp create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_rle_ss.bin create mode 100644 crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_rle_ss.bmp diff --git a/crates/ironrdp-error/src/lib.rs b/crates/ironrdp-error/src/lib.rs index 4b467be6..4318874a 100644 --- a/crates/ironrdp-error/src/lib.rs +++ b/crates/ironrdp-error/src/lib.rs @@ -161,7 +161,7 @@ where } } -/// Temporary compability traits to smooth transition from old style +/// Temporary compatibility traits to smooth transition from old style #[cfg(feature = "std")] #[doc(hidden)] pub mod legacy { diff --git a/crates/ironrdp-graphics/src/color_conversion.rs b/crates/ironrdp-graphics/src/color_conversion.rs index 0d1e47d4..d05187c0 100644 --- a/crates/ironrdp-graphics/src/color_conversion.rs +++ b/crates/ironrdp-graphics/src/color_conversion.rs @@ -18,10 +18,6 @@ fn clip(v: i32) -> u8 { min(max(v, 0), 255) as u8 } -fn clip_i16(v: i16) -> u8 { - min(max(v, 0), 255) as u8 -} - #[derive(Debug)] pub struct YCbCrBuffer<'a> { pub y: &'a [i16], @@ -56,13 +52,6 @@ pub struct YCbCr { pub cr: i16, } -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub struct YCoCg { - pub y: u8, - pub co: i8, - pub cg: i8, -} - #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub struct Rgb { pub r: u8, @@ -90,19 +79,3 @@ impl From for Rgb { Self { r, g, b } } } - -impl From for Rgb { - fn from(YCoCg { y, co, cg }: YCoCg) -> Self { - let y = i16::from(y); - let co = i16::from(co); - let cg = i16::from(cg); - - let t = y - cg / 2; - - let r = clip_i16(t + co / 2); - let g = clip_i16(y + cg / 2); - let b = clip_i16(t - co / 2); - - Self { r, g, b } - } -} diff --git a/crates/ironrdp-graphics/src/rdp6/bitmap_stream.rs b/crates/ironrdp-graphics/src/rdp6/bitmap_stream.rs index 28e85f43..c2355164 100644 --- a/crates/ironrdp-graphics/src/rdp6/bitmap_stream.rs +++ b/crates/ironrdp-graphics/src/rdp6/bitmap_stream.rs @@ -2,7 +2,7 @@ use ironrdp_pdu::bitmap::rdp6::{BitmapStream as BitmapStreamPdu, ColorPlanes}; use ironrdp_pdu::{decode, PduError}; use thiserror::Error; -use crate::color_conversion::{Rgb, YCoCg}; +use crate::color_conversion::Rgb; use crate::rdp6::rle::{decompress_8bpp_plane, RleError}; #[derive(Debug, Error)] @@ -158,8 +158,6 @@ impl<'a> BitmapStreamDecoderImpl<'a> { } fn write_aycocg_planes_to_rgb24(&self, params: AYCoCgParams, planes: &[u8], dst: &mut Vec) { - // For AYCoCg we need to take color loss level and subsampling into account - let chroma_shift = (params.color_loss_level - 1) as usize; let sample_shift = params.chroma_subsampling as usize; let (y_offset, co_offset, cg_offset) = ( @@ -177,10 +175,10 @@ impl<'a> BitmapStreamDecoderImpl<'a> { let chroma_col = (idx % self.image_width) >> sample_shift; let chroma_idx = chroma_row * self.chroma_width + chroma_col; - let co = (co_plane[chroma_idx] << chroma_shift) as i8; - let cg = (cg_plane[chroma_idx] << chroma_shift) as i8; + let co = co_plane[chroma_idx]; + let cg = cg_plane[chroma_idx]; - let Rgb { r, g, b } = YCoCg { y, co, cg }.into(); + let Rgb { r, g, b } = ycocg_with_cll_to_rgb(params.color_loss_level, y, co, cg); // As described in 3.1.9.1.2 [MS-RDPEGDI], R and B channels are swapped for // AYCoCg when 24-bit image is used (no alpha). We swap them back here @@ -206,7 +204,7 @@ impl<'a> BitmapStreamDecoderImpl<'a> { use_chroma_subsampling, .. } => { - let params = AYCoCgParams { + let params: AYCoCgParams = AYCoCgParams { color_loss_level, chroma_subsampling: use_chroma_subsampling, alpha: self.bitmap.use_alpha, @@ -220,6 +218,32 @@ impl<'a> BitmapStreamDecoderImpl<'a> { } } +/// Perform YCoCg -> RGB conversion with color loss redution (CLL) correction. +fn ycocg_with_cll_to_rgb(cll: u8, y: u8, co: u8, cg: u8) -> Rgb { + // We decrease CLL by 1 to skip division by 2 for co & cg components during computation of + // the following color conversion matrix: + // |R| |1 1/2 -1/2| |Y | + // |G| = |1 0 1/2| * |Co| + // |B| |1 -1/2 -1/2| |Cg| + let chroma_shift = (cll - 1) as usize; + + let clip_i16 = |v: i16| v.max(0).min(255) as u8; + + let co_signed = (co << chroma_shift) as i8; + let cg_signed = (cg << chroma_shift) as i8; + + let y = i16::from(y); + let co = i16::from(co_signed); + let cg = i16::from(cg_signed); + + let t = y - cg; + let r = clip_i16(t + co); + let g = clip_i16(y + cg); + let b = clip_i16(t - co); + + Rgb { r, g, b } +} + impl BitmapStreamDecoder { /// Performs decoding of bitmap stream PDU from `bitmap_data` and writes decoded rgb24 /// image to `dst` buffer. @@ -286,35 +310,35 @@ mod tests { } #[test] - fn decode_64x24_aycocg_rle() { + fn decode_64x64_aycocg_rle() { // AYCoCg (With alpha), RLE, no chroma subsampling assert_decoded_image( - include_bytes!("test_assets/64x24_aycocg_rle.bin"), - include_bytes!("test_assets/64x24_aycocg_rle.bmp"), + include_bytes!("test_assets/64x64_aycocg_rle.bin"), + include_bytes!("test_assets/64x64_aycocg_rle.bmp"), + 64, 64, - 24, ); } #[test] - fn decode_64x24_ycocg_rle_ss() { + fn decode_64x64_ycocg_rle_ss() { // AYCoCg (No alpha), RLE, with chroma subsampling assert_decoded_image( - include_bytes!("test_assets/64x24_ycocg_rle_ss.bin"), - include_bytes!("test_assets/64x24_ycocg_rle_ss.bmp"), + include_bytes!("test_assets/64x64_ycocg_rle_ss.bin"), + include_bytes!("test_assets/64x64_ycocg_rle_ss.bmp"), + 64, 64, - 24, ); } #[test] - fn decode_64x57_ycocg_rle_ss() { + fn decode_64x35_ycocg_rle_ss() { // AYCoCg (No alpha), RLE, with chroma subsampling + odd resolution assert_decoded_image( - include_bytes!("test_assets/64x57_ycocg_rle_ss.bin"), - include_bytes!("test_assets/64x57_ycocg_rle_ss.bmp"), + include_bytes!("test_assets/64x35_ycocg_rle_ss.bin"), + include_bytes!("test_assets/64x35_ycocg_rle_ss.bmp"), 64, - 57, + 35, ); } diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bin b/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bin deleted file mode 100644 index b5ead2143f2432cf41a18b48436d1aefd33585e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1363 zcmWgsBuE;R7YdR>)xu`M#Ka(YpUbRg+rB*;R;-((z{X(6|AEV*t<8i{-P%x7UpOj2 zPM?WEkne*?Nu3^xw5~7<3lkFqlZt#j}#Dz=VN`QI?5`!C%9QiGg_o)2heMzbkNXaD0Es^C8TMfr*Ken}vyi zfq_xhy*D~CSd&vvf`O%(i9tn(kBfs#fQS2oj1vnJ3lldZ69WUYd~V`=Q+at+?`&^T z29^aZ9BdpMY;0^yjNBhoq?lM3m{=JY7`P1+`5ESO=vZ0EFv&7Aumm$Pu`sbI2+MPS z@L^$LU}9lnWMp>qW?*RR-?C!al2t2g7}%Vdn3xz8B&E4OXt6Lcu`qBkGs+t>GGyh< zw^9(1Fz{LD#lVun1Tu($`vVUX0}B(A02`wuD+7bS;Chf7SXhK+s4y_6Ffp-ksBm$A z04re;5@45RU|^8+UC+kG#=^qGr80|wxtNKKjZeu)k9)HS*hDr921bVcI!r8FY#dB% z903fhE^It}a@-$y7@1fYSXe~-EO;0g1mxDUaWHX!?BW2K!NS7E!NJ4*L5`W3frW*M zMXF#%LRgR1dJYy24la-?24-OL4J09 zMo`LNmXzgW=VoMJK=C&&bKk$iTV)WUZvEtSk!) z&q_u~ZUzP>4hBXBV|GqPSqA0>@t&T(pk(0d&C?>x%fP_E#KQ2HiG@!{NQi@plNppi zA{anUTfoH3%nV{NGjo4nrcwqskS~%M8JK*XU3pZP7*shK_H!~aFf%eU z)-kex^onphGchnRd|>9~1o@kt5hTZ0YtO*Qz;4XQ$iVFaO055xg{ApGXyd=gUn%IWUR5Tt79HWmhc1x7|*RVD`II)?dtLP8=U zB4Qj2yb8?BJZek~|7#f-7`Qmtm>8H?IK;RZ_ykp%7|hri8SI5v7+BO98Mw8X7|t`Y zL!*gBgn=c5iIIVgMNyRn?0hZ;mJo2naH}yfsIV~1X9CA3BNGF^;(aD2aN1{K07bH* P;CYb4m{?diKx!NTsTRdD diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_aycocg_rle.bmp deleted file mode 100644 index 112bbb8c5611db2d8138c55c024195a565bb2a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4662 zcmZ?rH4|b012YB&1`P%V1_uTP1_=fR21YQ+z`!8H!0>_@g24(I7#L)PIPjwllVVmi zdCe`gT~_0?s=;ktliT`s_YEB$>pQ*IcY3es@LAU4HLJ#L<@C^v>r>aSPhYt)bJ3Q( zS=);Gcb9kXu5Lb9-*l*{@?ax=Ti~)%LR@Glw}0leGmmf~xJF!zy)$DMmfJ3^c3fTW zytdJGeY5+97LN@b9veG7S2TFEWmrYIs0G_A*QHpkUK+n@L)zkv>GL+_&Dc`Vx2vpc zS5@Qw+S>h%Rfn2znU5xp=6ER~uAIIZQ%^s{h0wHPayNAOEUmO%SqpMMvKJOrIVHGg zC`s@^w5Un(&FBeOv?gut`pjt?vLD*e_wymsscXidCy7K+?5M=~OO!sH@&YX1W z5d=*>c^?fCG;m#$+p;RVRW)|VURYG+ROqj3r6Go_y}8iFl zx-3YqJXqh~Tpq4nT~WAYT15ZKU$m|$b$+IXh6G$CRtBcC z;UekX)4Pw}?>KU!W!HtB%X@cE&qhXAO+yx(pKrdb!V2z%mDRRWvn`ALwJSmll3di} zMY$o0y#w{T7shukO>9|`QnxIvVns&z%Iw0`xtU8djUCk?YVeS7*J3i#x~6p;yVG{) zTEn(8o2TaQn3RHy@R$jaYKYQVR${fR0)!w5sV~i}G*GuXRKF_7$VpF1R+tl_GBnvT zugR}uQbfs|n7mnWiM^4bwY~-x3J_WRB&M_BBFUZ8+mGIEK6t%u%c(6>a*!RrV^Ru! zV`YRmJWM2(6j>m9p*PjEEJ&{=%%CRBpx9qK*b}R8&OZUL$A= z+_jjDl{qdS@ z7ch;&6iIMVSXgKY@xsz_%Q<-#<-z)up@ubK1|au`7*qxtmiikeJE}YCN*XB%87T>w zs)`1gDP_3nq`PYC$_rwei6#PfEhZzTV@mD*o0Yq-7Hv4TvNv->PXYuLZ8%oB^CFr# zSh>pL+(iLuON*giSX^w~7-?7@tX~}p@yOOu%Qs(NTOFL6nw#PzH=IW#Qo6lo)Fs7iA z7*~CyHrxx-vOq})Q%1SE9Nntt_mxz`OUum%B{CsmrLYk0fQXQ&a9;}bm{W%^w z?uOEGBIu1VxZ8+vKU^`yBUnjXuEi>@EY9s@Al4G2v#7{wS&7x0Jd5^NV^Ce@uV3m9 z$^xbShQ+@6k=Ck)ih_7T9^x>9=?9`rN{9=q%OQeT-HBgNS)AKhSG*xg2ND+xifm@& zSWL*Un4E208*6H$BqT4&4YwK(W1!rR-**sMJkEwo4R!a!J%Wb;NhEkkNN`b$#N!h3 zr0}>LB1J8iL(C!1k$7}L9Epd7*h?)Ek4wmt!sBv?6t!FqF^4=y;?V_hBpwoCFSSTK aE+J0}kINxa)N(n*9P%8AM;FAAct`-swMQ!e diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bin b/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bin deleted file mode 100644 index ad9b28912c0f1e0ef3d0c50ec0a647fea88ee950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmcDH6A%#i|3RL=P?YbJAQ-ZWGKw;A>px&{;_`pM@PNV5hLMqhGyeet1H%J`L=Pq= zCI*iF2Mi4NL3~AHCME_ECSe9H|N9L08H_md?=yg;IQFynbZj|tWJ{Y58v}>ReFpve z3~cw5*7f+vaB)d_G%ZkLFq+Jgwa0*kjg5)HS7SjOgVExw7A_Vx78W)Z1`m#cI0gqM z1_lPDEox05K^CRDrk0APPaAjt;9(H@z_Nggg@uKUt;Wp4%Er#A!^OuhC}!F{1|j1R zJGKujEKF=%JUo0LEFi$4k-;GJAp~R!8w;DdBquvNH}@1)ZeD(QWqt-m0|o{Lp$|@M zOl)jSY%Ipsy3(@z3>}=Z(wf@Z+6+P;WFQ(@)ZH1GB={JPFfi&H>MEaQ00o4QFv|xv zHWoHEHh%_APEKw%IVKOyH|`8V9|YOhz+Pct5jIvdC@l%V5UL$e_>2%*MpT#H85980X>S z5y!|NxRljTnw5c7+J}`v@Nf(}laQsUsjUzf69ePrB7PC$4@G&qjF)+Htgc!4cyu`$0m|j;?Ra3(dn99V+ zSW^emz);J?#KOYFSXaj&7|g`PRLh_W(gO+s6-EZe%S;SROf1z53=E7+wG50~89@?E J)wK*v3;?8*ZdCvP diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x24_ycocg_rle_ss.bmp deleted file mode 100644 index 3f087c7f8d9a94c03bbd0d500b1270d248a7d121..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4662 zcmZ?rH4|b012YB&1`P%V1_uTP1_=fR21YQ+z`!8H!0>_@g24(I7#PF^xWojwgar8h z|Nr}eXz=O7J3)S4QGQN>h+R}PrCsUT4NL+k0X~D6Cc}L=A9gCiRIBMFV zh$#nRChUpo+f~*zucTv6PRo+4rbRvtd%Ws)>6<#U^Gf5fLWGZl4(?CMD@a{_GI{Co z#KlJw79B~LcO-W9L5SnSC+`oPxHqbASLWQ4tM*-5zWef)2h3y&wxKN>&xaO}*Z(bEq{PCXbtd4FX8-tgYtd)BQuwP)Mq{hO~H z+IHo@mJ53}?Amsywz4%LtA?3Zeqh6&L0GLos*YxiKwBuUxbeX8PPiZFbFEvO?^w*7 zBQZ0ML`^#sHR({qgadIsyJEU_bhP#C-F@)ZiG5EmpL~4v{F7@Jo?Sb4`}E;c+g2T3 zzxdFySv%%Tus76}=4FTb0@?9&NdF9iiUl1rV&)u)oOuwETf_VJhxP4?>Do~+@64K2 z8}{uvbo2P$o5%Npq5$mvJ7+*qaOcFHn|n8&TDNG~j7ieG>}bx0b7>v^?EK=fskxBc z8aeS`c>n&8z5{{XdrLazEZK49#)$)uFQ0~l{F7@Jo?N@|{Py+dx39mrbK~XRn~$%a zzjExrzIDrFd0F8OMq|*y{l?bLklY&Hzdy8hZ(#Rc|IXcotuuF=dGPe=*%vo1JimGQ z#jPu^?py<*d$-;`y!-y~{f|!{etvrY*^Nubwyl%pWre372m|g5TDxDApHp0r+oxno zTHm^mt^+|G`vThb__ywkZ(P0nef9X;>nGpcIQ8-N*)O*) ze7$|~&fkFPi|j( zX4?v6bb9OZvzu3**|g&D`o(iQYvqOc2i*Pq{QPciZV_!;LYp^2>Q=9+T^o1Ka_ zA-mr#Z<&x)ksz-i9{0l?PlxgoIrN12xm6To{Lkl;m*8i)v15`X;#cRsS?>E?c{4n`Bi?|w)upgEq_?uUmwnp3fI n3A!KC@uTjChcKxO%qSSl;g9LNQTIc#15L|M%wUI$V1_>c3+|CC diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bin b/crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bin new file mode 100644 index 0000000000000000000000000000000000000000..7f0d64fc4210256808ac4eea5ed9ec87ed27e6fd GIT binary patch literal 2559 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 literal 0 HcmV?d00001 diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x35_ycocg_rle_ss.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b87630b58f5f10fa57887dbf3a198afb31fd0548 GIT binary patch literal 6774 zcmZ?rEt6sZ12YB&1`P%V1_uTP24w~Y21W)6u(*R11H%hu2nGu@p2?_D>@d*hDiHL{@3JMAf3yX<~NlHpeNl8gaNJvUb z%E-t_Nl7UvD9FmnDk&*xYiql>xL8`+Zz}d7-$$cTRZ3H=T}x%R#a5f z)z#J4*H>0n*3{J0*VosU*4CERHdQs%mDRDbvhwlqiSURBatey_iVAQDKzzgn2Hf1- zV491Eheumm+uYpTNXy8=z{1MNDkdaGTwGj4L_||lQ$s_8o10ryR8&wl$=>EYp#l$4a8pP!zd zUSD6|00uQRHMO<1b#--BRaG@$0P<0JeSLX72M33MfPjpMjEsnkwz9UOq@pOVC^s`V z9Psh+@$&L=ad8O<2=MUmi13IAa0m!-2?=ux^Yiob^70A@2=Mds3kwTNN=ga{2xw|* zdV71v#KfefrRC-2B_<|jWMp`Idj|ytMMXt9J39*r2}w&!o0yomxVU(Gd;9qKczJpG z`1sh{+oz&#*@Cb7Yb8>R>@$s>+u<-EkaC37D3JNMKE4#V5 z$;!%db93|Z@^W%=3J3^5Qj3_Fn3k57v$L~=goL7^qPVy?B!nd;B_RpP$HylyFi=53 zL0nusHa1p4K|xzvTUl9IR#sMCUS1mvf`fxYz#t_hB`z+`-QC^J&MrJWJTWoR-rnBZ z+uOs#BOo9kI5;>sJUS{aDIp~zEh|q@P>_?86OvANS$QFehm(<$larH+i;JJ1UsP0- zo10r(TiejkP(VOHMMcHZ(o#rBNLW}{LPA1TR+fi{$J*N3$;l}wD9F#x58@+8`VkZq z6oCOq>JkzXf}|xeF)?|0c^MfQWo2ar1qB@)owBmBy1KgD+}!Bs=-}XB3kwT#b8|~e zOCuvA8yg#Yd;5rph=PKG($dn>%G&(m^788X^6GkFacM3-AucX178Vv>US16i4K+12 z5fKp{9v%)34jvvJh!>>6fDa5HUWTL`B_$;R0Re7qZb+Wx=jRs?5D*a&;pgXvWCQ^L z0daA0QBhGTDJeNQIVmYAadB}YBO@0Vm-zVjh=_=Ugaii%2Q@V{cX#*j@NgR&8$CTe zJ3Bi^M@J72kC2cMKR>_J)YPo3tc;9|rlzKvnwpB5hU)s}^6L89##RX#1z~Y%2?+^a zUS4r=aeaM#Q&Ur2U0pstJ}xdUK0ZE(7a(!O3kDDo9v&V^Nl7IoB}nSx;o;%q<%*=Fha&mBRNJvP?$;l}wD1d}~esOteWv#Nhwz#ysh=dFa z2PmC$a&mHTaBy*PLGmo5@Zsm@7ZenPWCTcd2K$2-92qw89hBcIWSOBQBhV_h9m$T9UWa=T|GTLQ&Uq5 z3kxG7BL@cuKR>^qprGjJ=%}cu*x1l+yv>FVl2GMyP1SXo)w+1WWeI|l{^1_T87 z`T2#0h9)K^ic8BYs%olh>r2QeNXja*bMv#Xu<-NqLvl2vsNv=11v?y+LLiApO-+p- z3?Pmd76z52kZ6LqADn_f1h^6aRR?e{fc+sRE-ntK%VcC^WMyUL zb#)C43?SieY;0@+1}+XZp018AE-qeR;Opxf5D*X)6vWLhEG{jtt#1rTNCG0DjKIOc z0gnQR%i(ds2d)nI`S~Ft!otFk*nuQ|NXSDHjEIN`$OGV#N<>6N6b2yfmz0!*BqWG0 zT&CSir%ge*V!_(8#$H&Lt z-(Of*7*usi%IX-H$SJ9bNy&*w$gpyPDlCY@ARd9UApy?G$qDfSq_hM_1t^ce-46+N zNa7I|7DjeIBqBsbMIlijE-o%1At5dg+5M347Z(>75)zV?l@%8khZL>K%E~e_GD=EH z%F4=WYHC_qT6%hV1_lP^#`>0~hE`@qE)F)%_SQ~zR`%BBu8y`&PEK}qc95bQQrd_r z%4(PxNUAEzXsGZDi*xV@aB^}&8gh_WfRySGzwq+%3JD4E^70A_3PMOo`WF@!77&r( z6B6SS5)%-S;1?Db5RniNkq{J>6cm*d5|a`VlM)sOWnNufT}Tv&O3F&eD2PhR$|$Hn z!XM&(9UUEgeSHH117l-jOH)I8YjZm*Gka@uTT4?%TT6FmdrwzKi0zPihf7RIMngqJ zK}JqX4H65GWCN)MAU@^c;SmrJfH)qa3zA_W1rCJGFDwpsHk<)>zp%Kpu(-68lvF@K z03_rkWfjGw4q^6~yq9GvWx<#B7?YJLqh`+ z3kEtGhPs+YdRh)C=go=WYoRqMk7Y7#Kh@g^`hwiHV7%s-l351h1qhzqGiVmYRf$ zf`X2Qkerm5lANTfqL7%Bn3SBPtfHu-EU%y_j{vAhhm@AQyu2J79O~-oVq#+Ob`IR} zaQ8!sBUmF8L_?C6u(&kD3lLvGq5zVRq~(<%xmZ-3}rk?$?6>2^9rCDKT+nc^(N7X?0~OH6>wrX(=@&1sx3u6$LphH7+qBZhlaa zE-ft$>AXWoDJdyPh7}eThBPKcMMWXu4{m-6Ks<=c{g7H%ObpZzf>goambD}#Bgo0g zp+$j~mX@}*wtzH4LtRZVB{>lV8A!>)CnW~Swjv5LQff*v8Y*H+a`M{h!s62G z+@Ow$qN1Xbk`lz7kPHhc_SMzZ&CSiFrKNdzcpzgAXz3p_2|;RPcwGz`ngI1~z!@3R zuSBj3Ah`hIeq()YIFeIR;}sO;lM-VW=I0U<;*}H?l$8{el@ykjmeEj=Qd5%CQUf)u z1w=S_1O!Dv!yt-^ijdAAq-h}}B&4ma?cw2}si_I+v%u32Bs$1i43YYT}<$ttR{2=H)<3bG6HGxBnBiwlb>$qC9z ziYUlHNJ!4&;u8`QlM)pbm64H=mX;P57w6&OfefLDh=@o_OG6sl5XVDW)R4pjDP56! z2M~Wj8l;d+4NpiiGBS|lBrPos=^aCw)*31bT53v$x|(K2dWO21x|*txBqS;+Dl$DlO=H?e><>X}(;sa#|0TFR&c_}$15pZ2EC@KjV zaFCRggk(L)2m_@25f&Dfk&%HX9(bz>(oBN5A5!W8g8Bje1X)A)-FyJmQyng|4yr`%sr0Xp!D+}=g7Z;b1kdOozh>3|oI{T0W z1L-foQxqip;Y~h>rywdJMHVDGK!#joBt+z;#T8^E6l5gSl;pJ4m31{$?XArr?SBs! z2X$q6ZeeadF+O>Dc^)1fF)=YYIXPKbSx6gl;l0wlEIBqRzTNekj~NMi|NtQ0up<)p+UMFnLfM3m&D zl;x!rWF)lIl#KPYbv0E@40N>Bm9^ECg{6i0#rYxGA7YM_l$4?(s6oynAOh)Ka&vP- zLJZPZf&`JEprDwT7^LehEiDaixq(K5!4)yYsSu42Hk^b+2RsWy5T0TLs)7={pr9Zqv4O|8B_t$-g@xgz zA}Bk6+XIlXEG{lCNOFY~eUOAIAt3=CoCB4pA`&t@0wR1upyrLJsHnWWJS0@%E{7x- zNZT8dmLQb^B#NH{`b`jzLn;nQNl;MN@+-9fQ-gKh5;d22@)L;$3tQtQZ_=O2I33I)BvcSl@=FQmY2~`5m%O%kdP1+ y6_t|`^K^Agj*rerNia4xhV&F5rol-_$U}kxVj!mbA<14#NlIH;8d4WS+z$YMn=fbp literal 0 HcmV?d00001 diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bin b/crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bin deleted file mode 100644 index 1125f1b2a5da30dc49ad34d81da062a090ce2add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmcDP-|8qY#`8%~{-L8h1J5VHPlAl{O!5qjjN**)42_K-lJOJs5~HW->FJr7+1a_5 zSUgQux3DNMFlUC8HoGSIi(Iz{kbGmCVD#!^OiD&&MOe$G|1R zvVe)}?Af!Ynbxjd`+Bfy4 z*O+$f*a4Db;ZWgC+sOy9qM?_gkJW8+gY((5-cQs7~OXoVTd z?9Il*Cl}Ah#m2;dWLF0R6AKF)2M13*7Y7F$3k$NGG6Rzg3&`o*qAU}b?%ut7pXu-4 zzxE6aOsw(@yeS|bGBGGHGU|f`3{9ArSj-r>c&xZsK=Ea|eLI5!6O$Q3`gF@eZWeox zbClOInClxefK+*iM>_i22P!gfDc{jES5nb)W#DFF@n8zxz0-cPDFeT`nhJv}gLiYQ zf3r6y!$NZ*v0tCq%@;DLfyg}%K#tbGF1+Jfl1V z$0tE~rb00WaVALyge-_9%f}+iA}h)w%fQ4mQI(bb3HXrA#a=49pI4a{TfvwMy33N(@X4EDo}=0t&7S zOoH;Z{7ekY4h9Ac46Y0ef&u!x3~c61ObogpQE%`3cx46_Q6_l?Wg&(VR$*abK_)Kk zYKCAY78WIz5*`IPIXQ(`Z5FTqqfC8yVtjmJDFdsrB*R8!esLxyCRsBUSraBGkY{9+ zWrTP_j8T(;NrpjNfI2MYrW2bf@DaA09!Vq+0zlxJXZU}Iz9V2NjBWo2YwabRU- zW_M#?WMI-|WMFp4$>EW3Wnf@pk!N5(=#Zb!E4xvdi9wlxNriz?o;M1& diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x57_ycocg_rle_ss.bmp deleted file mode 100644 index 55fbc0e9b30671d192bb333be7cb784f60c090b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10998 zcmZ?r{iekL24)Nl3>pj!3=Rwo43-QG42%pCVDST53=A)rAs8&cz`$^9nIHYp(WSn` zTY7x4KUQ>fsV_<95N{(vl_c4V)$zv{`;WSxU^wGaFdF`&=?7QZAVz#N{lL=?q!gk* zi5X3}+5cjze_O9!7qZ#H2k`Vk;P>)esN+@oySxonkDng`1Xv(}??C6GMBzUNf=;nAY7dxsuUPgjv)cwSVz-ahm zh5+%QN4ZK&+bI{J+*QPzK)Gu%O(5QO%2i_8PPqu>t|Hz9@?5JS!=NF&=jKMa%ONI^=l)wK%5I$~ zTR%M?D{^piNz2K~=$Vn(J2Sm^HXLR4&dlhUk&=_+?ClM)opO>q_g~zfdwy@WkrV@V zp0%eUh~HA}X{Cq}!tIS}JJqTDYgAR{IqB_;$% zM^?lfULFnSqA`p-{37#9Z9CVZA^XnNfwT8cJ$ZM|g(u6--NS{Jp1oU8ltW$juUoO` z|Nq}`w0XMs#;KlgE*ita!(;N|#q%#e$3*ikJ)3#{>5Owv@T2U)d@87?ku^Zv&-v57bU3GS|K*-F) zt8@0;z7vo7PCV*Ae!utV-QJ^jyAR*Sg?f(M={vbRWIn zd;B5Q-T(LJ*PmeU0}Q@@2YCnC{dfNVL3V$~tU29B?{^%!Gi}GA&edCI&g>+JTG#KK zwC7mIp*uat9%Sa{QaAno{{Hzp7<>bRuV26Z`t=Lh{kQ-BMs|Pu%-L|D-8x^A}F8 zTDGZr`R3~7o2!;>nzvxmq$zC>-?h%2J7>$5h66WRj@+TT`@em9_Yn*}fWiCs@4tWl zzIVDO99{VHziiPqzg6e_R-H5R@M@htv-$Atx_#FcY*^7cwRdxW^5*{J{)x>iSI_O* zcBpUHvA$i$I=3ENxq5E@#Ab+W)2vyuH*c=rf4%we?eyGi>W2T94{zRs!860<%=tOJ6E>Hu56F3?rxsGe17ici$y!G6>q`xH#a0^k4pFDxO8SLIi4`JW|7*NY?#F#^*`(-3}4E1%FE?x+6@S{gi zH-p{#;65rK#$IZvA>RGOtE86Oyj|_FB4qQ4cNOs}kWT8QFZ|T}8Y~Wbgi`EYD&j!zF*!NQOh6?GiH>vs_}9N5)KvH?QBmd;js%m#^P{{Q8~AVdm`F zvxS)~fB%lN|NWbZb=S2Ux9&Z7^6b@{4@?d$0e*hMO#d1FGktlp=|;`(f?rJk8JJi? zSy-5vSuL5^m>d|GSeQhZZv17?5K!Xf-S6zr@RvzzBU3#K6B82)3zGv26B7%_gue`t zmV)elc4ZO_e;JrqZh_=;b6G$X8JBnhw^ir^Uu9rm80h((J;*z{C)>`1)OtW(FqK8~+%JUCP^?TFfo8Uz+GW9A%vabFN2mPgDDdOTO@;e_AIFD%>OaWv;gV-%5alq^VaP< zcke$anLbU6!GX!w*O$fe@859yzkeB6PHow-YtMm0$4;EtrN!XTH(}DGPl5<&fA8KM z!{}SLZr!;hazpf%iMVrkcfnkxqyI>ya2N-3yVJ+8ygFUJR7qMD2hdy zgjxJSQ64DDE+7#TrM1X(K1-~r-DFe)%GIEpdJGjN+TGBSJ;{KTmSrI;8#3CfEY$$%(z zFaY9au$OD69WTCRfu9m z3SXh9GeSSoeUlm&&3m*etT&9Y05d(X_ zM5In>m~H?AqhF?8Ap`sTWRBDl4rZw+21cD?hz0X=GMLzySy)*ZK7vf19~#ON9qlRR z&%h+W1hQR5Dwc&oh+SM>p5dW^prGI0=F%c#o1_lNud4@ny zCRQINCME`XCQexfmPfKoEb>ej2F}_VRt^s48U_~bc=qB9HU`dKMz-o|Hr5&jW_IDq_(INfRtC=bmDLOk zU_tizbww3Cd<;Bd417`5Y|M3_vWLUo~4T1A9Lgk5D-)122Q1 zek}w0{Ni#3Mh12!R#2KLDPgY4DJUpo5aRY{VPs)YVi&Ij#RD4~+b3ROZX~}7+Ox1Q iJ+fzFV%aFq#C%DYi2)p1@W6&E literal 0 HcmV?d00001 diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_aycocg_rle.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_aycocg_rle.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0c53eea2aa4bef4462cfcc0f0b8734b8ed4e0574 GIT binary patch literal 12342 zcmZ?rH8WrU12YB&1`P%V1_vl+WRL)hGZ-*1ykLf4hyVk_n+Ys%^tzuJKYG>2L?n9J z%SsSE>0yDR$KA|uHZtRJH}j(|rbk^&kGq+%BDmw`he$KA|BCH!gO{+GRsm5BaQ*4UP!<^o8xd4*>A@-6=!rh6Bf$VHdHE5+4va68Um|j4Zg}DFiL{>=QLnMjm)93x{ z_z|Z2F-2bXGGe+GIS?RhWcNeZl)E3(M`$9LuEi9=>V8ZgLEMZ?4lVa%`snRMR;&nD zazYDRVz`*0jVbc7ml2Xe;3TF~v5H`IJf27)#=&T6FkOo&g6V#^N01rFDF?zPHJmZ6 zCMbed+Th}14PLZv4#dsKBrf-3ilc=puI?B_89`6M6~Mhiq5C2B!b!{`5jh?qY^*k7 zO2J)-mGPp70fMlah8F(M+u6|&+`(uJD!Lz+!yw|wi2*AcQcpohG{--0XNLqAF(kw~ zWD=`&5CvGJunIyPhNt}uSMa!-`B@tqI_hJC*hrAXv>n-GI2)o2&Lzlz43FUI-onQp zAj;4k-^K>9ju;ZtB@i>wNQg2tK|I`tos1BKOASO8LOyL}MMIFbE5uS{62Fh&D$$g| z#W5LZ&O;8^hne5Sp<>av`Ddu#*wZop`jvwLln;x|kpg z2zjT21ry!vWJMFa-^`AN;2uO%2^Yu8fGb9mg^Ob{ZnrZdqdOfe$lP0PO!u1D(9r#6 zb~KT@jjZUXlNH$>vEJwy;Id9#%f8Qp4QLgs?ljhr_z(2WKT{OEQ&GsHTO z39XD*TUj9pB8W^v6rhn1#c=XU3kxoExtSRmU1?!K=3Z`QzFyCciLTYLAtOu$S6f*j zHlmpZ5kw}D6d2E4p0GjEpYSaG;@iWqR|< z^cEHx(g!UlFo2+ig@zCYesX@kJ~F~o{C^aThQMeDjE2By2v8gXbzq>47l4)2QDW87 zrArqtUc6}0qJ;|=&YwSj-n@Bp=FFKrd-lwkGZ!sd^y<|sf`;>BwBH z>_v+f{r&s*7a06R0?U>yd-dwo)vH(M&Yg=@BV5qy+$V_R7rcOrff$g0)z;RYb7aq? zU7L2aB(!(;OE=FJUw&Puq$gp<27=+gbm>x%L3r`Pg$p6>M{@hmA3uI9TehqR3?@#T zh}VGs5ce;5@qZ46`|IlJw6(R5PMx}UYVF3x#HvZNBq}c z=l}it7uoSYe}dfq0}Ouu{ykyB1cL5|IDYnX6ov5cZ%H|_BB7&Lzq>XzS8CBJ?%k(( z*6it;7DScspEqybpFe-Fy8qvUyyZhpf^McYbNs)YZXIdjn54-WVr^LKw|kAA=Z^7r1}UKD3x za6Hd`gg744{r~^}$6I_7D1V4aKeK1gMs`2M@$+_l41WLq-PzfR;bas6@8h2#j-T=bMI0XfH!D5S zP(?_<%}P(Ig#WZ@(|-T{{o}`vIXk}a1bpH4|2%&)*y-QDfBW|B*RNmg?d>Se!r*uv z`!x0G|0z%YPkxLd2QPmf*L%a!m70*%$=18GqaW9MQziVTPM!Mu_iu=c=WqUw?0AU# z+uGVtoQ1*hI`#?T_{op||3d=s@ZYj$%aRRquJoi_Zcf&Xoh#$gqu`Lxo`VeBCM?X$_^ncQ$|9#K?!CE39y0*6V z@87@L+S(`POxUxaWpi_I)4W*{H4{W`ywNJEazB1tTU-0@-@g!LAPr>Ui4!OO{P`2& zc0c@n;=}*FPybGM@E@rG^`{mLwD1D3l3HY4q_X?_`yq)37g=9l zkKau1!>@au{OP~{zy0z5-*g9keSJMWJ>A{iU0q!r9UblM?X9h?EiElgO-+rBjrH~Q zb#-<49p!oOrN@C65Cm=p4q*aPgA82~sTdfNOpF3xhzWce;^6%d2XBTrSRBnfIMEB@ Nz`{tz!HFId2LRimZ)pGk literal 0 HcmV?d00001 diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_raw_ss.bin b/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_raw_ss.bin index 0e28acad39aee5139195a21a925014d5b0a1339d..2ad571ac23496654113d9de87319186dd364a7fb 100644 GIT binary patch literal 6146 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

hbM(=xO)R8Tcj3vi5#bTZYj z(De*EUqulTp-D(bQ2hRMfQb@U&7lP_>M)l+)KX)|b#WFxA&p)6lkZcCt1#Q#La) zQBXG1Hqv&mwD53OHrCNoH}dv3RgpKCwej-ti8Rr+QZ;nY z($Z6vQFl@^*E7`9SJtstRyJ0XQ`1&AF*Y)_wzhO}bu-d8(>K$V5B0OOcCdC+l~d9* zF_!i5)Kv4<)${T(FwxMGH#IddG_p1{QZdnx&^OSOG0@R4u(YrViEs=HH?-F?wb4>n za4^!d^f0tDG*D93ak7s$Ff`P#@%MLev)0zp);CktH`G@!(J)k(*HTkb)HKyJvGodc zbJF+LHg>nRx3YIqGPPDwv5j#F(N@=0)zX!>RMb(la}Es%a@JKhbT!mBG*HvlHquvA zP}b2`vo_aJw+;vl_Otc2^bN6ha56D4wzIV`bBzkL)H7Dp&{xw_RWs5wFbxk33eZ(k zwXG+Qnm4tGqUz~ba$}x_4A7e z@Uu16&{oyd&@)t1*HhItRx?nO(RFvWa`&@zwYLv(v2bwq_3?4h)ABHL5BF5EbaTPC|Fj6;EHL%f8v(z%s(>6C#GBWfC4RmpGa`5mCb?|oe4vX+I zQC?>^o@=P3HG-2bukO} zvD4PkGqttSw=po)w>EcFx6;38P^LKOBH8eJ`3bAu=@bWTJRWi2J zSJyF6(lXT1(3X|6j`r~hvC@}QQgtv_Qc+cL3bGA!QByL~*R-%Uwz1MzRx)*TP#HklQp!^QB=~@)3r9%H&xRz)7R59P%+iev@p`QFo||oHB>j& zH8Ri%v9&dE2-XSl_IC5s*D^Hs@o>{M3yiQaRWi5N)lt;5Gc+-?Hc(bpFi|o#(bUy4 zP}JA6Fmu*2u~9HIP**ec^mVqe3bFSI@d$O+F>nj;RM6B{RQK?+RWxwYHZykeRMxYy z(bd+|FxPOf_E)x4Q8d<8v-LBvbye4}*3>okurs&P@pCW;@Yl67wzTqcH8j?hl~OU% zQ!y|%G&Z$!(+YMo)=@Xmu!!^vGt)O#Q`0d}@{Wv%@zd8eQ8P5N4GVBF4vqATN(l6e z2#xg&buyHbH8fJUHrBJW(A4q`wD8hU*3&c6@^%UcFt)Q+w$jr#(v@(FOb#+MGBH>8 z3((e5RIv^7wheX+akUL`*3~sNHZs@KGv(YkCRkaWEw{kTJcCt4zHrBKBbGA1%wg`#{^a~A+@C~=MFf%nV zH}$o4Ha9WVHPhF3@l@0BP|&e7kX7-tbuuy6F*EZDi}Ci23G{Qab})7D4|5CDF*dO= zwKsJ)b2Za9(zCNRb@KA@b~IOUa&dHY3%0Q}GS||!Rx{AGv-b?NuywKV2=w;~kMwm9 za@Mglx3>3ibkcKjQq^9TtH@UhXewDk-K^mhu<(Y3X+HPAG+a!<7} zjtF%$vXAwTaLP$?b1^s8G&I)J^2>~H&@xohlrz-SHPSKmjff5j4fN2nG;|IKa*egr z(Y3SpFxFEwSJjcQ42$x$v39i9(zR68HnB4`($@3#G2so)-=-BQ`XWj z(lyXGv9q-FRx;NyG~h@^JI?*4Ee3*E7+v)zWfz^>+x-Ffmuw zGcz<(S28it)mGFtm($nM(>J%$m(#IPQ#CP>*Vfh1vo}+<@-uMu4)zWTv9*%du(mg_ zRx>d2^$7CRH_}yA*U>i8(bU&BH`UcJ)iW|O*0HwM)zml8)>k*y*EcY9^0hK{^U^oa z*D!Q)@UhU*ur$%N)HKz#)KJrMur<}v*3}0Eho+ICijlpEmVu$BwV9E&v6iv2j)A$A zu8y0Fn^m-*mV=p=oUKcYlY^tbn}vgkp}w)6s;aM-gPESOg_fDVmYRjBwuOtYp`E#@ zw~msPg_@R@g_E(ViE&W0dsLvNfw85Xk)?rSf|tF!pS!QEm79sariQLZfW4ufgR+64 zp^mAJo{h1etA~fRwYipYsIj?*bA-LEm1CfXt-YzPzK*$thnuUTyMujzwPRqEe}I{> zo}RH&U_fMmy{f97sky#|shyo`fL~C6gN>%In}(HzsZXSfhqs+(h`zCjiN3k6v5!N5 zlYd~0wY7zhm!GMnsg=2PaAZh~v4yO@g@?7dskNWApPQYfwUfDxkExxdyMb$TxK)sW znZBj1g_(|tM@(Q;kVCY$hkHm^jK77GqoJmOu62l|p|OshhHsdgql>qhbGVm_qq~}= zgT0QQo~E{un!bmFnS+DBgRiZYfq|uoe^9uOL%3hCm$R9zfoG_Lrm4A(v9YnLwo8bu zbC`jdg>7h5Sb&?WhqaNVrG|l(hM}dGxqG0agOQn`g{`NpiM6eRg@0URh_6?KPq2rp zy{?JAwY9Cik*TMbxq+IIrn;?bjIV{ale?vvvzeWpfw7;PiHDn&m5sTPg=2uVj*XGM zy{DI-gI|biP@s3LkDe zj*d})lYwQZy|P^5p5sij?1w6U>=zmBnmV`P*?po^iCo|9XsyT7%Ozpt^itCO>5Y*2Wt zkAJ+4tE;!Io3&R!h?k44jjva5w5PY7g{`Acps|%_yq$@Kow=`%v9qC(Usz;Nn7)Za zkb|?ETcB4=K!B}nTuefAK$N>lkVincr?X$6r@M=do27?cKy-kOkBy6mrIo&wv$?LL zql=!tomWJVxv7m${{{r@y7E ztDUWrm9wp*gM+8Om!q?#O=w7ftCOW|pqr1au7$3flZCm7iLH5%tDS?BtGlkTosFGWL~yL9y@S2Axr1k*qouv8ot>+hr&na8e^ij0rB9@tg|3yMo4c*CxkIqC zm8+ATr;ELVm3y?ktDA$PwX>tOXF!abn~kH5g>`_xr?st>rJb#lvz>QTNR+ozSfq=e zm$j>{XQ-W%5uxn6kn2nR8gM*We zoui+ty|0aBRHx3gPRtcMjyy|bG;BNG#&y`4QH69WSy zBZIxIy}iAyt*xECy&V|XGBPsS+uGVQFfxD@*x55M*xT9JgD4Qgj**eU&eom*D$i&S zl3`$Eu(!9j2bl{p6eMpC*3QTXGK3Lg1egTrx3_1o2bs&j$iT?R$jAh;(ALh*p26PU z&K4pF;(^R$U}OS2$i~(V#>U1LWGl!B1`xr-#K_3R#KZ&%D3H7z z#N}Y`gZ&1QW&-&K6s)$kb_`$u(hOoiw1a$T&&0$4vV{@k8jutyfIvn=4FClkI2aii zz@7&=oQaW%iGh)c85CC_H-P+Z2R6mto&lr}6gCV@Obnp-1Zf623*-(vJ39ujw?NSY z3N27Lf-M9EIVi3{)`5&;Vqyjv57G#7Gsw4~5CGc>iacg!W@aW31LR~-Xn~Z2Z3i(J z7@1kXDnN=r4h6dxll@%lpVzRM-*`UY*yM%#-1uVkG$_iny zu(GnTvVctmxtoEFl?@75S=rb?n%UUdK_Va{nHU*BOg4}dDg(@8V+F+%11QWv&IP%h znHl02ke9%GP#A&)!2tvf1}Goo15gx!;t#4H6xz)2Tmq5+$0!phTSAq9Oa)`Gb|xlB zG68D>*#WT+6pkSOgB3zGf@HxdhmnZ|fw}OoVsQ|kL zq=y+~EkqdVQ5XlLgozm<5B4_5bdbRy4}pqfa3Tkp3>5_V2I4GmNPzV-f|(#kf&!2k z8V(SLgY5$mV3&ayAgjTKf$|zm5y%f9M}k}nasn8G42OgdNDtISASOrxqykh(AQ=e} zW(F$+u|eetsHy;k6qpZk16VzX2hj{-LHr4}3G6j60p@~aK^B5S6NF)WkaL+B89`P- zq#;^hHiLr#Bm_1DrUDd7Am=cGk|Ed`5E)PeGJ``6RG7mZ3k@TXnM|Mv0C^Z>KOBQ~ zgLxnpI1WKPkOmM9u^YsKrg%`g2XWCb$Xt+HK{TS!0aXRyLJeH@fh>T?gTfRNa>yja eNG6B|P?-i102v1@o5B7C%fqC=G+Y*}i2(qyz690) diff --git a/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_raw_ss.bmp b/crates/ironrdp-graphics/src/rdp6/test_assets/64x64_ycocg_raw_ss.bmp index 4a989c5fdd18d22c39804b7071bd63d83f8d0046..4a08aa52ef13eb3d5734b554f176a20e16383b2d 100644 GIT binary patch literal 12342 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ξQcW?XfXn+4;_s~dRzaTdc9|zw+*Whq(NV+O%s7c7la0&{_sHn&) z%E~PT^*-X#;?lC>;*!D=A_6iKBg^yCGZQ1TlcQ5(Lla{oVB)LDK@opm`1OU{_F7 zP+DG^wY{;OlbL_8du(E8d~$ejxOZ5bTX?*CLP9`lYN&&YMR2$`C{g)4d-*x}1h@o- bdWJ>$1w{oFRTV|1CR(^Sq?D9oR8#-};G>c# literal 12342 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

*x`u&q6Ko5 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 i5%{c)kdTmwhzO*X