From c2cc566c9d7f63c024c0a15e93c9ae99717a4b4f Mon Sep 17 00:00:00 2001 From: Garret Rieger Date: Wed, 22 Sep 2021 14:15:55 -0700 Subject: [PATCH] [subset] Fix subset_offset_array adding unused space to serializer. ArrayOf.serialize_append allocates space for the new item, but ArrayOf.pop() does not recover the allocated space. So in the case where the revert path was entered the extra space added by serialize_append gets left in the serialization buffer. This moves the snapshot to before ArrayOf.serialize_append is called so that revert cleans up the buffer extend. --- src/hb-ot-layout-common.hh | 4 ++-- src/hb-ot-layout-gpos-table.hh | 2 +- src/hb-ot-layout-gsubgpos.hh | 4 ++-- ...ackItalic.default.retain-all-codepoint.ttf | Bin 120240 -> 120236 bytes ...talic.glyph-names.retain-all-codepoint.ttf | Bin 132484 -> 132480 bytes ...ic.notdef-outline.retain-all-codepoint.ttf | Bin 120240 -> 120236 bytes ...font7.layout-test-retain-gids.21,23,25.otf | Bin 1728 -> 1728 bytes .../gpos2_1_font7.layout-test.21,23,25.otf | Bin 1384 -> 1384 bytes ...rules_f2.layout-test-retain-gids.41,42.otf | Bin 2208 -> 2208 bytes ...multiple_subrules_f2.layout-test.41,42.otf | Bin 1400 -> 1400 bytes ...rules_f2.layout-test-retain-gids.41,42.otf | Bin 2224 -> 2224 bytes ...multiple_subrules_f2.layout-test.41,42.otf | Bin 1416 -> 1416 bytes ...default.627,644,623,62D,644,627,645,2E.ttf | Bin 11388 -> 11372 bytes ...taliqUrdu-Bold.default.627,644,62D,628.ttf | Bin 17688 -> 17640 bytes .../NotoNastaliqUrdu-Bold.default.627,644.ttf | Bin 3520 -> 3512 bytes ...old.default.633,645,627,621,20,644,627.ttf | Bin 12380 -> 12360 bytes ...oNastaliqUrdu-Bold.default.63A,64A,631.ttf | Bin 19380 -> 19340 bytes ...in-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 18224 -> 18208 bytes ...qUrdu-Bold.retain-gids.627,644,62D,628.ttf | Bin 23748 -> 23704 bytes ...oNastaliqUrdu-Bold.retain-gids.627,644.ttf | Bin 9164 -> 9160 bytes ...retain-gids.633,645,627,621,20,644,627.ttf | Bin 18184 -> 18164 bytes ...taliqUrdu-Bold.retain-gids.63A,64A,631.ttf | Bin 25432 -> 25392 bytes .../Fraunces.default.26,66,69,124,125.ttf | Bin 15856 -> 15856 bytes 23 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-layout-common.hh b/src/hb-ot-layout-common.hh index 1a00c53cc..fcaf76c82 100644 --- a/src/hb-ot-layout-common.hh +++ b/src/hb-ot-layout-common.hh @@ -237,9 +237,9 @@ struct subset_offset_array_t template bool operator () (T&& offset) { + auto snap = subset_context->serializer->snapshot (); auto *o = out.serialize_append (subset_context->serializer); if (unlikely (!o)) return false; - auto snap = subset_context->serializer->snapshot (); bool ret = o->serialize_subset (subset_context, offset, base); if (!ret) { @@ -268,9 +268,9 @@ struct subset_offset_array_arg_t template bool operator () (T&& offset) { + auto snap = subset_context->serializer->snapshot (); auto *o = out.serialize_append (subset_context->serializer); if (unlikely (!o)) return false; - auto snap = subset_context->serializer->snapshot (); bool ret = o->serialize_subset (subset_context, offset, base, arg); if (!ret) { diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh index 02a5795a0..1e53920f8 100644 --- a/src/hb-ot-layout-gpos-table.hh +++ b/src/hb-ot-layout-gpos-table.hh @@ -1386,9 +1386,9 @@ struct PairPosFormat1 | hb_filter (glyphset, hb_first) | hb_filter ([this, c, out] (const Offset16To& _) { + auto snap = c->serializer->snapshot (); auto *o = out->pairSet.serialize_append (c->serializer); if (unlikely (!o)) return false; - auto snap = c->serializer->snapshot (); bool ret = o->serialize_subset (c, _, this, valueFormat, out->valueFormat); if (!ret) { diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index 513a4a61d..a1cd27479 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -1752,10 +1752,10 @@ struct RuleSet for (const Offset16To& _ : rule) { if (!_) continue; + auto o_snap = c->serializer->snapshot (); auto *o = out->rule.serialize_append (c->serializer); if (unlikely (!o)) continue; - auto o_snap = c->serializer->snapshot (); if (!o->serialize_subset (c, _, this, lookup_map, klass_map)) { out->rule.pop (); @@ -2724,10 +2724,10 @@ struct ChainRuleSet for (const Offset16To& _ : rule) { if (!_) continue; + auto o_snap = c->serializer->snapshot (); auto *o = out->rule.serialize_append (c->serializer); if (unlikely (!o)) continue; - auto o_snap = c->serializer->snapshot (); if (!o->serialize_subset (c, _, this, lookup_map, backtrack_klass_map, diff --git a/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf b/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf index 4f27a6ca9b41b185b5487024a3074fcb31635004..f36005982e429fd31d1ca5512cdc788ac29084ad 100644 GIT binary patch delta 260 zcmdn6ntjb`_6Z6+wpr=-7#Q>!7#R3xP1K2I{4%japK;E_9Vb}w!k_=z+`@R)&^Utg z11AS32gfQPtl_ZW5CcLc7-XNqp2i-;Zon?Z&cybG?E#RS!6r4i#rUT1I|e4kwTx>S z7=flUGH@_3vEA8RU?R-Om@&D zDr4H_HZxZy#UO?t1_uT?Aj!zU$})rHDXR>tBC7@i3xf=U7=r)<*W`B=(yBZRY>bbA xwmo8a&cMX*jDd^6hrtb~&x*l>L61R$K?$UKvyo*!D=*^60|4_8K8gSU delta 264 zcmZ3pntj7+_6Z6+e%Heb7#Q>!7#R2$Ow@^H{4udZpK-y&9Vb}4>o`tqZecuYXdK7+ zjgya)k7EN6HgVW-$N(W6u+L)8VUJ)pV^?73VEe`P3`ovnQ<&Uhd{g)f0~6y~#WT7z~o1!+Kf*o^O3ms|EuLP)veBh=GTJVe%UbX-z($`3#JY xfi^y3c+SAY@Qi_r!H>ZMsMm(UjKP3Gi$MjfgJH9dWj<^3T)XXa?HKu|0|0hyK7jxL diff --git a/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.glyph-names.retain-all-codepoint.ttf b/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.glyph-names.retain-all-codepoint.ttf index 69e63eace053e0d39fb9a50553def0f863b68ae3..f19545184f435cbc3f3bfc6569ea221fe7ea01a1 100644 GIT binary patch delta 265 zcmZqa=4j~Vn4rL8o0Wc#fkE#90|Wo8i8|4YCnk32GuBMpVb6GF;*Sg#Rab$o%_)p$ z4UHo>KX7tza&W8y!Ws?>4ly8Pf}l*l>;~*o>`ZK5*d74M8EjIMQ;cs4zhhux zT+6tYfsug$h&dRT*zRl&FcD^C%$S^Fs?TUKd5WnnBiH0ZrrM16CciV)WZW`Y!c3j9 zXR?EtDr4H_G&5Hw#UO?t1_uT?Aj!zU$})rHDXR>tBC7@i3xf=U7=r)<*W_~+(yBZR zY>bbAwmo8a&cMX*jDd^6hrtb~&x*l>L61R$K?$UKvyf#zD=9BjYXo&m{uYzmW8jBg5mVPIlh z%ea<-k%0k-IT)DO9&HXV5oTn}o19{*&uBM!im5K6z~n=w+Kf*ozcbZj+%;LkOr3Gk zWCt@<#+=P*X0A-iVGLmmP7HEDl97RxWd_SrRvA`BRt*LgpqK=M5Cabb!{jp-(wclg z^BEW)18sc7@SK5(;TZ!LgCBzjP_GSx8G`|X7J~{{2g7C_%Y4@6TD$GFc8tu&0po-} AdjJ3c diff --git a/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.notdef-outline.retain-all-codepoint.ttf b/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.notdef-outline.retain-all-codepoint.ttf index 4f27a6ca9b41b185b5487024a3074fcb31635004..f36005982e429fd31d1ca5512cdc788ac29084ad 100644 GIT binary patch delta 260 zcmdn6ntjb`_6Z6+wpr=-7#Q>!7#R3xP1K2I{4%japK;E_9Vb}w!k_=z+`@R)&^Utg z11AS32gfQPtl_ZW5CcLc7-XNqp2i-;Zon?Z&cybG?E#RS!6r4i#rUT1I|e4kwTx>S z7=flUGH@_3vEA8RU?R-Om@&D zDr4H_HZxZy#UO?t1_uT?Aj!zU$})rHDXR>tBC7@i3xf=U7=r)<*W`B=(yBZRY>bbA xwmo8a&cMX*jDd^6hrtb~&x*l>L61R$K?$UKvyo*!D=*^60|4_8K8gSU delta 264 zcmZ3pntj7+_6Z6+e%Heb7#Q>!7#R2$Ow@^H{4udZpK-y&9Vb}4>o`tqZecuYXdK7+ zjgya)k7EN6HgVW-$N(W6u+L)8VUJ)pV^?73VEe`P3`ovnQ<&Uhd{g)f0~6y~#WT7z~o1!+Kf*o^O3ms|EuLP)veBh=GTJVe%UbX-z($`3#JY xfi^y3c+SAY@Qi_r!H>ZMsMm(UjKP3Gi$MjfgJH9dWj<^3T)XXa?HKu|0|0hyK7jxL diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23,25.otf index 1831de08150f4fec295108a0f9f02abd556a72c8..e56914ed0c771565802b2a4e0a3936d145f6cb25 100644 GIT binary patch delta 61 zcmX@Wdw_R>BKNoFxeN@9B@7GBDenw2?hqn5(Wl_kcm21Sfn>eF-~S-TrJ7Rz{tP^#3Dc$Mj%uKV&(r9 M|L1Hz!T5s(0IIDG{{R30 diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23,25.otf index e1f580b2a9b134beb6014f6aefb34c847663cb12..99f876188a7af55dbe0efa8605d381cb9ec5a8b4 100644 GIT binary patch delta 61 zcmaFC^@3}HBKOwkxeN@96$}gvK@)Wzu$(K?bC@i^xLA^hfsug;h=qU{0-63>{GY?X Ku=xz*9A*FoOAkQ+ delta 61 zcmaFC^@3}HBDeqZ>kJHx6$}gvAro~Tu$*_&&6+I0xLA^pfsug;h(&-hj8Mq*-{SwA K&1V?rFarSof)7Ce diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42.otf index 688ad21d912e043cbee8d3b42c94b82d96c4d6c1..33c8824d49bd1456f536ea41436619d9067b2996 100644 GIT binary patch delta 48 zcmV-00MGxR5ug!}Aq&drkN^MyzyJUMYOyQ?0R&BZmsyiE0lNVzlkfo>0R)o{0wJ?4 G0&@mv#|@hR delta 50 zcmZ1=xIl1%BDd>HNd^YS0}KodIU99Y7+L&Ur@2lxVcgBAGx-CfG&36m!(<*N#m)Lm Gg=_#;H4K~p diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42.otf index 3e2a6a76b1a44274d8e3eecf7c3d526772e5f5c9..d34cc87c1e23dfdfafb3537d9a17a9304c0fc0d8 100644 GIT binary patch delta 69 zcmeyt^@D4IBDdEIcLoN=6ATOtSsQhD8JRDy_&M2zaks1%0~-S?P?V8@1B&^8Gz79t N7GqM}Y|7-!3;;}?4AB4p delta 71 zcmeyt^@D4IBDc+pNCpPR6ATOtIU99&8JXX&xIEd0aksn<0~-S?P?V8@1B&^8Gz79S PFiaL>n>cgx!_uraU#MHv}57?>C|803H? V0|OsegpGk=vIvvmW_Kn>W&jHI3wi(m diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644,623,62D,644,627,645,2E.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644,623,62D,644,627,645,2E.ttf index ba93a9673878143e50cd18b3b6bac07d8d5876ef..52d40c1729152db0bc7dd4f49d23e3e528c398d3 100644 GIT binary patch delta 275 zcmewp@g`z|0Z;LVTz3Wrt`7_hoO>qPSTnAfSn+~oujQp5n^PFKbLm%bcyOq3FtFca z-^4zJy@Bl%TN8^Fiv;s8<}=K*m@Alrm<^aknEo;KFkWNiUFfgVt2r&pS+A(S|iZQY=d}6rAaEf6U!!m|R40Q~73{ebj z3`Pt}n5&`kRx;L8%yGa57)?+ll delta 291 zcmXYpF-QV&6vlt={@2}g9C~Sq)zA_R5-43nkU>*KbHxo!5ze+nlcPk4qGMx&`wcBl z=9V}{V{Hu~L5&VQEj}LK`@Z+S?=zmn%~Ei6QT+!03+9Kd@}Bfs*B^HO^tqN?%A;Sb zd$G6Uh3?qxyAN*Dd2#A?*|t_HnRk97rm`lO=y?M-^eJky?Px5*K+U$OVw+w1}T zw?41m&`;@6-D%smZQIhelx@m3V*P4ewvJl|tij^F;$h3KB~j!m>@#hd0@`I`y>e6a z#uO9E=@k?lkOL}y(IGN(4>yUG+Q!BnzD#2@0`0(oT&RQ#8t>#G>ZS&kW(z3B4*SS5 zc#AbW!F{&EW<}-U&qYqg(2WKhf<-t&59pu4UVAXCNUna zFX%)BJ`{@8@Nw>jCM=N}?vXMUd3^FIrg0rZvQo&nRvG04$qp$0n3RxJ{)=U;|6}|w zCYtN67HI4fOR^qgx$YeCesl>}eN9QNY}SMsOkxBB=s}bGSU1kp`&C*sMw@O@=@Mo! zEN$6xvQ&Lgj&LEfL|CuJB!DSm{-Qe4l6dBu{XSt+9(TZiyb!HR`7$q+tUu zJ0pa*-8MF9eh45R^PC0jtDHa=KG;%41C8nlQ(!%HBzz1>DL{=seowgjn{7 TL?T|5O(w?T{#?>W@lpB%(?*jN delta 829 zcmZuvT}V@57=GUGoHI{z&9k$$bj_{CoIlx|O-jwgW*A5<6A8f(i||53f?`NSL{OQ; z5KdTxcu^t4x=3fz#fV)*L`X>&6%kP)(X~-{5uT7o3cJ;>P8r>VH&SkiaG*X(nZua!S9PkA%mPEW{n+&Shv=j?U1 zINka)eOe#ZJN2-xJJuZ^9a+b$Bk2&@k~XO&w3ucuxna-Q2aChj0ritwV;MxNT`Ju zR<2FdMK^U|H@3sZr$=>16)#kdM5J2rnNc`$uWuex7{>?{p3{pMce_C*SN;)m3;qJ3 ze^B|qsPs2#1nbWhsp7M^BjV}l`jaH}qtg)4>aAfWs^Tt^7{vhMXl6-VK)NmJS7NJUTTIkrq6LFAMs(B2)mY^=e)U*n gMGJZjvXySm=XHh=Y_BX_YsB0A8wAd@kCFg>12&bDY5)KL diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.627,644.ttf index 30c02be6608ff0e503e4810ddc9a719939b3eba4..1b1065f1829d36a60477dc9bb963e14d5cde2730 100644 GIT binary patch delta 161 zcmX>gy+e9}0gvup-%AV(tVvaV#URDN!oa}5$iM-`d_bC!0YtJ)4q~fUWCOC;7Lzw delta 182 zcmdlXeL#AG0gv7zpYIF|tVxq%oH~ezh_1#W;gRI!p#Kq< zOqdrK;YVzj)H5Q@%f4iIV88RsKId3d2TE2h;KHLCm8nDpnxia@kcm&cqJwLk;|Miu zp@af_WW!efHYpEgb3E}gYm0%97?d*#0~p3A7^W~R5s`-+K~n0Buq>*C^qy3XIIO$r ep=0SQSnfR!ze~el5PkQ3iTzSSwV$b|6dO>SiewZMw2Mv-)k*5oA)~nH&_P5fNL^}59US}< ziim+OE)EX5Nhc8p2M2NJBq|Q#HOldLkNffN?zZ|=jXe8!vU>-lUBLQj1wOg0+N&{L zzuJ#O@~yR1%T?d%L3LC!^_dh$?i$#uCXJ?V%q(G@3RTLePW2R+gat)PN=7yt lE1fu1bYbF*GY8m6UID)}sQ&GVbiqve;!C|rgxGe1{4YL_JDC6g diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.63A,64A,631.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.63A,64A,631.ttf index 335f24e85bcafd623d79704ee27193b6fa34223f..90352a7cecc4f881501d3503fdaa121e81682ffe 100644 GIT binary patch delta 758 zcmYk4Ur1A77{;IPJ3DSptC>50cG8%0$dp<~H`nnG5uvua2oVz@kzI(y2pM7_%M3!w ziy^`pC>CKsLLe$ShoVyP)M zsTW^=_aOsRcLF}+S+k$nZYI*fkI+Zo$p>jouD3Dj=v|J`_OUqJP8j?DtuzSrN zEuD8Q9_l#gbOs6y$EZD6po_B@gbe_LgH9D(wjC>8^H!`33Rx^*79urwONJduTt+9_ z5P=^qvt9q{E8W&_im^cm1-nR?Bm)%!*{cK{F+!rA$4?kddtc9uH^qFL zZz7iag>RZ84d?7*Ji!dxjn&=o^{6ERu8~a)>9^WFX zMK+xuL(SWP1}I{2*1>cd@e5XvMVgkR4XQQQ`khHL{0#T9pSi7J^RzMUTwvDh*%Cpb UWhQHbo*`FkDi~ zE6UWarGc6R5a?TL2{PNI-?x%Rian`*{Kh}#Px)K@L0`_-d3L^Hyh5sgx~p!fS#@3= zRJ+wmC9k|!7L~M;R2mgo{v&V8S-IMC;Mw#{c@myVX-~>ZF-dj*bZ6bO?jd)N>%eup z{B!9}$w0B!sTH<3M(tXGCN5(LHUJC`I_FVpJ2D1BAH*t6*uVx>Ad>UgB-oM00FvlL zltRk@{hF2!xEv=z{g6;7E{YT45Mro?OH7FgvDN6VuVLjGjH8yIIGs`|RzUev;a8Cz zyu~DjPe3#RvAhuI=Je0$HYoyL`qNMer#_>(^@k0w>s4W0m=H#YzGeJ~=U56~Dbk5m zEMbZ`52BYi#}I-{HG3LgD06&_-{pP$Dvy%?4tmf^xL)!WNA6d3u_y~Ni51`gyZC|} zFyG4f5@=eXB%`zQmLXhM^4_^F!u8x)A7rvQNEt{i4GD!$Q zC3?^U(FS|iltb^{X#C`ziROv~@I&;QY5Y)6HD9q$@?pNoSB>>%J5#p!Jsx8FW+t0u z(=24+k77jMjx~s0vmLrKUQ-@qQK~+R2L#nYbxme%@#g|HT;Ge|EHTGuBTpDU6ahwe z%QJ`4OB(Aa`2X1-&x^NTzwnnzeqAFORz92MjoH=4)Zk8PLc^@y!{9B rEb%rTV0-4Sv8=fn$0Ih^AX<7aOxoDfj diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644,623,62D,644,627,645,2E.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644,623,62D,644,627,645,2E.ttf index 4343e23d8f808bfa62cacb0ead44dcd00b1b614d..55117ca6c60fbe0fec48f6530303e9c8d8d5b92f 100644 GIT binary patch delta 306 zcmdnc$GD)6ae@KQ*}ebXGB60QVPN2DnrLIqm@u(IpV46AiXAN9zNa4AoWfWv>}|)% z!|{sa2*)ChGL8ri7xq4OHg>l4Y}sr~@+-%b(3@64s1{S&Uy84=}bdFauSmFbFXSFxoL{F^Vy= zF??dU$8d^a7sE1!Nep!ic??kuZVW~YN}I1p8Z$DBFtBark(OuFF! zhT|8<6^>0DZ5$aKA?&l*eOL~$EMTc)31E?9{=|$UBs!wAOVh~_-VANrh zVB}!Md#yK`%WN^k8D0%|X#Q@c)PJ|NrxU=R5!UD$TCa zbjWJ?)uaH?IN(dZi26xPJ+&+vm+3}R_q=z^oACO*g6F*_Q@K?+Qf_txwLYy)3uspR z7yD!TReRL#R`=ALx}mP9)9QpeWXsypwxq3I*-_pob!GEqvSq3yb0A{&%VS39_y?&n zDvrWOZy{oTX^^l>Rb*v1*{ELK+Ss@vYBWJ9$omQ8LN#2F*#euQ1T`=}Q&5H+i?RSV zv4%y=FeelAnbyyilrW408c>B&J>B+%!bZhO8+ngWoO~q0RBXD9C7gvD3_)(qdb0h9 zsSP1`P@+F*?__Ss`p5QKR>8gX)N)T2^SFZ%P8GZ^#;cql{sby+fqQV8|6=**{}}s= z=}P>rDb6%uP3SP@;+KdGBChY9u65M$*P8JRlSp9*9fQ1Mf}cwu@TmxLE8r{VsBp|tz?|Gt5feBr>)HOALt8xOIqnyA d8b&kMNyyKVzT01uZ>9$ZyoIJ61J_9a{s4qTl?ea< delta 835 zcmZuuZAep57=GS+?$v2ix4XHPADhXTABhZ=vNDmmt~P4wSYaAc5&p0cDG)IcsW2%J z^G1pID|cl!QctkocpbA5kGb|B^r-ciUK zd(v=|_B_QD`ZyXV7GK4Gi0P-Ao}G9NC__rfh)x-C2b_vWNtM^-MR`PSlk>%zm=IxU zTZ*DW@<|T*PRlew9TcG|cHt+u2d{LH-WAEz-<~w-w;T9Gl~w<)Bi^AE)l_aK&jx|ZrR?&4xi2r^|;7md*@-_4LX#m5{a-rxANFq&zgSq4fwsKn#q n){eFmWPjku94nj9t(`4(a7A2iw!WnxF;?Gdaqkdtwf4|&hzgoI diff --git a/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644.ttf b/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.627,644.ttf index 5e64a7603c6a83654c15008291c51b06c3cbd331..7408cba8b9c33cd9c702a80183d423cfc8f52958 100644 GIT binary patch delta 188 zcmX@(e!_i%0Z)-g*FOdZ))oc^rbiQPtQj*VR_F_6Ffj1N<>V(P{@VM;kAZ>r%)}il zSlXxgyKPQkoXukB!DPfF!NkOPjd2H~7sCODWeh0{Rt!=MEDQ_`j0_x5%m<_yna==8 zmdQqJt*S;0OpF^C_b{+A@PJh?F_bYRFt{)%F)#!5F)#>$Ro-JO7o7&=1u&Sv#hDmH T7}z%Furo3;GHlM_NRS2qBswKA delta 192 zcmX@%e#U)*0Z(S-> zu*^7Po3%NGaW;#wACm=>91{oQ9mai(ehh~gRxqS7*f2;jurM$%FfwpJF&~g-WIh8V z*%%lm8?d#in=vpkZeZL4~FC?N_LMRj=-q08! zAua#K7Uza=j%X@q6pDt%E^)csbAI=5F0S}<$#x+jFR3vw`2@tpk2mt|DDXMUQF zjr>P)-EIeIS$Z=i6XOU1un!*rn{2Sg3fGutNEhFD#|T5*;~GsIp@s^Uk+;3nF(rU& zb2FP>dB_L`t`ej31t6(Ar8=k7fDF|Ks*-TK4`DVHsXxaK9KAsC|EKlc R&oC>RvGMdS?SAGa{|9i&I}!i@ delta 315 zcmW+vF-QVo7=7>mHSR*fjI;3S8+uc(>b&|=52~Z;s;qL#W}juO z`+HVO4*|i6bwjQN6+5L1FRG+se1Zme1q(J^HdteYC1#nXfgaxQh%PSCf{R_$P(cw{ z$vGe2VRQ_JP$#*}r4dOfVHOjRFla7tn=L3YNS;*3?T)IT)-;fwGdXPa;VkSL^ z#E8)i5g){$UPQ#WK8T1K3=yG-2#FC9Vm@ALcfX_-wg zvy@)^;9=h?a3&3S@4P|YZye%)uNx4I=bZ@$6-2GBkdMAxaF)1YZC95mt z;?8(!*Zw(2!k#P~wG9^NR$UxN0u}%aHrjraSa!@z!yC~Xw8)spI7D*pE(rzbMK>Y{ zAqXEzjHS@J=FIM0i9$l5m=!;ZE2u{RPH|405J$}P`5IQbg*6-^Ax^u5LRm~}v%qTC zFoi+%>}gb!200;+<#fvFo1+8D>8zTp&1kr=SmO|;gaM(4sPl{e;Ik}>kL0&w0;3or z)Hpf`^*E78hTihZo#eed#yfZ;*U1}07!9PT7}=J)-X<1g8gnuWwy=)(l=>9LkVGG; zbfAe;{N~WbV@%vdNMAZpl#_2n9W*!$`{i#30<0LDgkar8LW%;&1RWr2GaRk8qMpZZ zYCZYy?@8-oQBcqk&AkwGBNA>dSl|e fnr6tE>!4YE%PY7#Ng-D}A+J`I78SX2)oV%{M>gpq^~(UXXX4w z0+#E)UXKCiKLUBNw-r8Sxa*Gu)E@S`@-J@=|o4dAMpImX* zgsaaLc6sE4{7#;fhvjy;OqQMd&UI(pX?1*Yym1UTDjg>Ks(s3Ck$y;v(umX}RZBkG ztj&`hJs!zeO&>9jr#>@9jlqe;Z*`5v-fCiN<^R4J^cbOkye6 z!&j`*9Of{M#~3E0b~NbHphlWXnNjCL&*IHzk7;dcPzE2#gRsW%*c$n#V9mP&L$6Bi0svE<`b)B*Ql{G#3q& z3Bm&l`O$slugTd#5(}yLf9rKWl)=txMcLGHjZNyBXq