<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>228363</bug_id>
          
          <creation_ts>2021-07-27 14:19:26 -0700</creation_ts>
          <short_desc>[Win][Uniscribe] Implement Font::applyTransforms</short_desc>
          <delta_ts>2025-08-07 16:53:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=297088</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>229421</dependson>
    
    <dependson>228536</dependson>
          <blocked>206208</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779833</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-27 14:19:26 -0700</bug_when>
    <thetext>[Win][Uniscribe] Implement Font::applyTransforms

See also:
  Bug 206208 – [Cocoa] Delete the complex text codepath 😮</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779834</commentid>
    <comment_count>1</comment_count>
      <attachid>434314</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-27 14:19:46 -0700</bug_when>
    <thetext>Created attachment 434314
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779912</commentid>
    <comment_count>2</comment_count>
      <attachid>434314</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 17:17:54 -0700</bug_when>
    <thetext>Comment on attachment 434314
WIP patch

View in context: https://bugs.webkit.org/attachment.cgi?id=434314&amp;action=review

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:293
&gt; +        // state.fOverrideDirection = ?

We may need to pass this information inside the TextRun?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:323
&gt; +        if (!shapeByUniscribe(str, length, item, this, glyphs, clusters, visualAttributes))

I suppose we&apos;ll need to create a ComplexTextControllerUniscribe.h to include the signature of this function?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:353
&gt; +            const float cLogicalScale = platformData().useGDI() ? 1 : 32;

Is this really correct?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:362
&gt; +                advance = roundf(advance);
&gt; +                offsetX = roundf(offsetX);
&gt; +                offsetY = roundf(offsetY);

This is almost certainly not necessary (any more).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779913</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-07-27 17:18:59 -0700</bug_when>
    <thetext>Does Uniscribe produce an initial advance? See also: https://bugs.webkit.org/show_bug.cgi?id=227979</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779939</commentid>
    <comment_count>4</comment_count>
      <attachid>434395</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-27 19:52:16 -0700</bug_when>
    <thetext>Created attachment 434395
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779940</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-27 19:52:46 -0700</bug_when>
    <thetext>Thank you for the feedback. Will check later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779967</commentid>
    <comment_count>6</comment_count>
      <attachid>434314</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-27 23:58:25 -0700</bug_when>
    <thetext>Comment on attachment 434314
WIP patch

View in context: https://bugs.webkit.org/attachment.cgi?id=434314&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:353
&gt;&gt; +            const float cLogicalScale = platformData().useGDI() ? 1 : 32;
&gt; 
&gt; Is this really correct?

The code was added by r28867. It should be correct. However, I want to remove the code
  Bug 206273 – [Win] Remove obsolete useGDI code path and FontRenderingMode enum

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:362
&gt;&gt; +                offsetY = roundf(offsetY);
&gt; 
&gt; This is almost certainly not necessary (any more).

I copied this code from UniscribeController::shapeAndPlaceItem. OK, I will remove the code.
  Bug 228536 – [Win][Uniscribe] Remove the code rounding off glyph advances and offsets for system fonts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781738</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-03 14:20:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/81480150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786294</commentid>
    <comment_count>8</comment_count>
      <attachid>436142</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-22 17:37:55 -0700</bug_when>
    <thetext>Created attachment 436142
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786295</commentid>
    <comment_count>9</comment_count>
      <attachid>436142</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-08-22 17:42:57 -0700</bug_when>
    <thetext>Comment on attachment 436142
WIP patch

View in context: https://bugs.webkit.org/attachment.cgi?id=436142&amp;action=review

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:277
&gt; +GlyphBufferAdvance Font::applyTransforms(GlyphBuffer&amp; glyphBuffer, unsigned beginningGlyphIndex, unsigned beginningStringIndex, unsigned stringLength, bool enableKerning, bool requiresShaping, const AtomString&amp; locale, StringView text, TextDirection textDirection) const

This should probably move to a different file. Is there a FontUniscribe.cpp or FontWin.cpp? If not, we should probably make one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786300</commentid>
    <comment_count>10</comment_count>
      <attachid>436142</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-22 18:28:09 -0700</bug_when>
    <thetext>Comment on attachment 436142
WIP patch

View in context: https://bugs.webkit.org/attachment.cgi?id=436142&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:277
&gt;&gt; +GlyphBufferAdvance Font::applyTransforms(GlyphBuffer&amp; glyphBuffer, unsigned beginningGlyphIndex, unsigned beginningStringIndex, unsigned stringLength, bool enableKerning, bool requiresShaping, const AtomString&amp; locale, StringView text, TextDirection textDirection) const
&gt; 
&gt; This should probably move to a different file. Is there a FontUniscribe.cpp or FontWin.cpp? If not, we should probably make one.

Will we deprecate ComplexTextController soon?
If so, it will be easy to move Font::applyTransforms elsewhere after that.

Because Font::applyTransforms is a almost copy of
ComplexTextController::collectComplexTextRunsForCharacters, I
want to put them in a same file.

One idea is adding a new function applyTransformsByUniscribe in ComplexTextControllerUniscribe.cpp,
moving Font::applyTransforms to FontWin.cpp.

&gt; GlyphBufferAdvance Font::applyTransforms(GlyphBuffer&amp; glyphBuffer, unsigned beginningGlyphIndex, unsigned beginningStringIndex, unsigned stringLength, bool enableKerning, bool requiresShaping, const AtomString&amp; locale, StringView text, TextDirection textDirection) const
&gt; {
&gt;    return applyTransformsByUniscribe(glyphBuffer, beginningGlyphIndex, beginningStringIndex, stringLength, enableKerning, requiresShaping, locale, tesxt, textDirection);
&gt; }

However, this doesn&apos;t look a nice idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786318</commentid>
    <comment_count>11</comment_count>
      <attachid>436149</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-22 22:36:10 -0700</bug_when>
    <thetext>Created attachment 436149
WIP patch

This code doesn&apos;t work well for selecting a Arabic text.
If I select a part of a Arabic text, combining characters are broken apart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786331</commentid>
    <comment_count>12</comment_count>
      <attachid>436155</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-23 00:24:01 -0700</bug_when>
    <thetext>Created attachment 436155
WIP patch

This code works for selecting a Arabic text.
However, it looks complicated and doesn&apos;t look effective code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786332</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-08-23 00:28:44 -0700</bug_when>
    <thetext>This WIP patch is shaping whole &apos;text&apos; every time, and picking up only glyphs corresponding the text range of (beginningStringIndex, stringLength).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786352</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-08-23 01:46:45 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #10)
&gt; Comment on attachment 436142 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=436142&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:277
&gt; &gt;&gt; +GlyphBufferAdvance Font::applyTransforms(GlyphBuffer&amp; glyphBuffer, unsigned beginningGlyphIndex, unsigned beginningStringIndex, unsigned stringLength, bool enableKerning, bool requiresShaping, const AtomString&amp; locale, StringView text, TextDirection textDirection) const
&gt; &gt; 
&gt; &gt; This should probably move to a different file. Is there a FontUniscribe.cpp or FontWin.cpp? If not, we should probably make one.
&gt; 
&gt; Will we deprecate ComplexTextController soon?

No, it will be a while before we deprecate it. It&apos;s fine to leave this function here for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1974626</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2023-08-30 21:32:32 -0700</bug_when>
    <thetext>There are no ports that use Uniscribe any more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1974633</commentid>
    <comment_count>16</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-08-30 21:45:02 -0700</bug_when>
    <thetext>WinCairo is still using Uniscribe now.
https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp

I have to a plan to use DirectWrite for it to support color fonts (bug#215259).
The first milestone is still using Uniscribe for shaping.
I&apos;d like to replace Uniscribe with DirectWrite or HarfBuzz DirectWrite backend in the future.

Anyway, I think it&apos;s not easy to implement Font::applyTransforms for HarfBuzz, DirectWrite and Uniscribe.
I think ComplexTextController is better for the backends.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434314</attachid>
            <date>2021-07-27 14:19:46 -0700</date>
            <delta_ts>2021-07-27 19:52:16 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>uniscribe.diff</filename>
            <type>text/plain</type>
            <size>5584</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggMTdhMzdhZjhi
YmZkLi44NDgyNjkzY2JhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCkBAIC01NDEsNyArNTQxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOwogfQogCi0jaWYgIVVTRShDT1JFX1RFWFQpCisjaWYgVVNFKEhBUkZCVVpaKQogdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBj
b25zdAogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApp
bmRleCA3NzRhNTJhMjg2OTMuLjkxN2ZmMjkwMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0
Q29udHJvbGxlclVuaXNjcmliZS5jcHAKQEAgLTI3NCw2ICsyNzQsMTA2IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgfQogfQogCit2b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2ln
bmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWly
ZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4
dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAoreworICAgIGdseXBoQnVmZmVyLnJlbW92
ZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlw
aEluZGV4KTsKKworICAgIGF1dG8gc3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5n
U3RyaW5nSW5kZXgpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5n
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOworCisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiBpdGVt
cyg2KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgU0NS
SVBUX0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0ZSB7IH07
CisgICAgICAgIGNvbnRyb2wuZk1lcmdlTmV1dHJhbEl0ZW1zID0gdHJ1ZTsKKyAgICAgICAgLy8g
U2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUu
dUJpZGlMZXZlbCA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAg
ICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgorICAgICAgICAvLyBz
dGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSA/CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBt
YXkgd3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhy
ID0gU2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwg
c3Vic3RyaW5nLmxlbmd0aCgpLCBpdGVtcy5zaXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBp
dGVtcy5kYXRhKCksICZudW1JdGVtcyk7CisgICAgICAgIGlmIChociAhPSBFX09VVE9GTUVNT1JZ
KSB7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpdGVtcy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7Cisg
ICAgfQorICAgIGl0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1JdGVtczsgaSsrKSB7CisgICAgICAgIC8vIERldGVybWluZSB0aGUgc3RyaW5n
IGZvciB0aGlzIGl0ZW0uCisgICAgICAgIGNvbnN0IFVDaGFyKiBzdHIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnMuZ2V0KCkgKyBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAgICAgaW50IGxlbmd0aCA9
IGl0ZW1zW2krMV0uaUNoYXJQb3MgLSBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAgICAgU0NSSVBU
X0lURU0mIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAvLyBTZXQgdXAgYnVmZmVycyB0byBo
b2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCisgICAgICAgIFZlY3RvcjxXT1JE
PiBnbHlwaHM7CisgICAgICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsKKyAgICAgICAgVmVjdG9y
PFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOworICAgICAgICBjbHVzdGVycy5yZXNp
emUobGVuZ3RoKTsKKworICAgICAgICAvLyBTaGFwZSB0aGUgaXRlbS4KKyAgICAgICAgLy8gVGhl
IHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNoYXJh
Y3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCisgICAgICAgIC8vIEFwcGFy
ZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRl
ZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW5n
dGggKyAxNik7CisgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkp
OworCisgICAgICAgIGlmICghc2hhcGVCeVVuaXNjcmliZShzdHIsIGxlbmd0aCwgaXRlbSwgdGhp
cywgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhzLgor
ICAgICAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPGludD4gYWR2
YW5jZXM7CisgICAgICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBh
ZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIEhSRVNVTFQgcGxhY2VSZXN1
bHQgPSBTY3JpcHRQbGFjZSgwLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMu
c2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICZpdGVtLmEsIGFk
dmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAgICBpZiAocGxhY2VSZXN1
bHQgPT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0
IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gV2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05U
IGludG8KKyAgICAgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBs
YWNlLgorICAgICAgICAgICAgSFduZERDIGhkYygwKTsKKyAgICAgICAgICAgIEhGT05UIGhmb250
ID0gcGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIEhHRElPQkogb2xkRm9udCA9
IFNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBsYWNlUmVzdWx0ID0gU2Ny
aXB0UGxhY2UoaGRjLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgp
LCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZh
bmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgICAgIFNlbGVjdE9iamVj
dChoZGMsIG9sZEZvbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChwbGFjZVJl
c3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIFZlY3RvcjxGbG9hdFNpemU+IGJhc2VBZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPEZsb2F0
UG9pbnQ+IG9yaWdpbnM7CisgICAgICAgIGJhc2VBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkoZ2x5
cGhzLnNpemUoKSk7CisgICAgICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXpl
KCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBr
KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBwbGF0Zm9ybURh
dGEoKS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZh
bmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zm
c2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRZID0g
b2Zmc2V0c1trXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIEFw
cEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5nIG1v
ZGVzLgorICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSkgewor
ICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7CisgICAgICAgICAgICAg
ICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRZID0g
cm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiYXNlQWR2YW5j
ZXMudW5jaGVja2VkQXBwZW5kKHsgYWR2YW5jZSwgMCB9KTsKKyAgICAgICAgICAgIG9yaWdpbnMu
dW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0WCwgb2Zmc2V0WSB9KTsKKyAgICAgICAgfQorICAgICAg
ICBib29sIGx0ciA9ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgYXV0byBzdHJpbmdJbmRpY2VzID0g
c3RyaW5nSW5kaWNlc0Zyb21DbHVzdGVycyhjbHVzdGVycywgU3RyaW5nVmlldyhzdHIsIGxlbmd0
aCksIGl0ZW0uaUNoYXJQb3MsIGdseXBocy5zaXplKCksIGx0cik7CisgICAgICAgIEZsb2F0U2l6
ZSBpbml0aWFsQWR2YW5jZSA9IHRvRmxvYXRTaXplKG9yaWdpbnNbMF0pOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBn
bHlwaEJ1ZmZlci5hZGQoZ2x5cGhzW2ldLCAqdGhpcywgYmFzZUFkdmFuY2VzW2ldLCBzdHJpbmdJ
bmRpY2VzW2ldKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmIC8vICFVU0UoRElSRUNUMkQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434395</attachid>
            <date>2021-07-27 19:52:16 -0700</date>
            <delta_ts>2021-08-22 17:37:55 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>uniscribe.diff</filename>
            <type>text/plain</type>
            <size>8534</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggMTdhMzdhZjhi
YmZkLi44NDgyNjkzY2JhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCkBAIC01NDEsNyArNTQxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOwogfQogCi0jaWYgIVVTRShDT1JFX1RFWFQpCisjaWYgVVNFKEhBUkZCVVpaKQogdm9pZCBG
b250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJv
b2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdWaWV3LCBUZXh0RGlyZWN0aW9uKSBj
b25zdAogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDQ3
YTdlMTJmOWJjNi4uZWI0NjM3ODBiOGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCkBAIC0yMDYsNyArMjA2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29s
IGNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90
KSBjb25zdDsKLSAgICB2b2lkIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCBib29s
IGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBs
b2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAgdm9pZCBh
cHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4
LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCBi
b29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5n
JiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbikgY29uc3Q7CiAKICAgICAv
LyBSZXR1cm5zIG51bGxvcHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhz
LgogICAgIHN0ZDo6b3B0aW9uYWw8Qml0VmVjdG9yPiBmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIHVuc2lnbmVkIGNvdW50KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCBhYzU0ZTY4MTM5OTIu
LjhjZDlhZjVlMzhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3
aWR0aEZvclNpbXBsZVRleHQoU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3RpCiAgICAgICAgIGdseXBoQnVmZmVyLmFkZChnbHlwaCwgZm9udCwgZ2x5cGhXaWR0aCwgaSk7
CiAgICAgfQogCi0gICAgZm9udC5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIDAsIDAsIGVu
YWJsZUtlcm5pbmcoKSwgcmVxdWlyZXNTaGFwaW5nKCksIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkTG9jYWxlKCksIHRleHQsIHRleHREaXJlY3Rpb24pOworICAgIGZvbnQuYXBwbHlUcmFuc2Zv
cm1zKGdseXBoQnVmZmVyLCAwLCAwLCB0ZXh0Lmxlbmd0aCgpLCBlbmFibGVLZXJuaW5nKCksIHJl
cXVpcmVzU2hhcGluZygpLCBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZExvY2FsZSgpLCB0ZXh0
LCB0ZXh0RGlyZWN0aW9uKTsKICAgICAvLyBUaGlzIGlzIG5lZWRlZCBvbmx5IHRvIG1hdGNoIHRo
ZSByZXN1bHQgb2YgdGhlIHNsb3cgcGF0aC4KICAgICAvLyBTYW1lIGdseXBoIHdpZHRocyBidXQg
ZGlmZmVyZW50IGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgY2FuIHByb2R1Y2UgZGlmZmVyZW50
IHJ1biB3aWR0aC4KICAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBw
bGllZCA9IC1ydW5XaWR0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAKaW5kZXggYjdjYzBmYjUyNWY2Li43MzIzYTEyYTQ1NzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
Y3BwCkBAIC0xMDUsNyArMTA1LDggQEAgaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ24KIAogICAgIEFT
U0VSVChsYXN0R2x5cGhDb3VudCA8PSBnbHlwaEJ1ZmZlclNpemUpOwogCi0gICAgZm9udC5hcHBs
eVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBtX2N1cnJlbnRDaGFyYWN0
ZXJJbmRleCwgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250LmZvbnRE
ZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIG1fcnVuLnRleHQoKSwgbV9ydW4uZGlyZWN0
aW9uKCkpOworICAgIGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhD
b3VudCwgbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCAtIG1f
Y3VycmVudENoYXJhY3RlckluZGV4LAorICAgICAgICBtX2VuYWJsZUtlcm5pbmcsIG1fcmVxdWly
ZXNTaGFwaW5nLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSwgbV9y
dW4udGV4dCgpLCBtX3J1bi5kaXJlY3Rpb24oKSk7CiAKICNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQ
SFNfV09SS0FST1VORCkKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vODA3OTgxMTM+OiBJZiBhIGNo
YXJhY3RlciBpcyBub3QgaW4gQk1QLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGdseXBoIGZvciBpdCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4
VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKaW5kZXggNzc0YTUy
YTI4NjkzLi41NmJkZWRhYzllZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJV
bmlzY3JpYmUuY3BwCkBAIC0yNzQsNiArMjc0LDEwNiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNw
LAogICAgIH0KIH0KIAordm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5p
bmdTdHJpbmdJbmRleCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCBib29sIGVuYWJsZUtlcm5pbmcs
IGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbGUsIFN0cmluZ1Zp
ZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25zdAoreworICAgIGdseXBo
QnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBi
ZWdpbm5pbmdHbHlwaEluZGV4KTsKKworICAgIGF1dG8gc3Vic3RyaW5nID0gdGV4dC5zdWJzdHJp
bmcoYmVnaW5uaW5nU3RyaW5nSW5kZXgsIHN0cmluZ0xlbmd0aCk7CisgICAgYXV0byB1cGNvbnZl
cnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisKKyAg
ICBWZWN0b3I8U0NSSVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBudW1JdGVtcyA9IDA7Cisg
ICAgZm9yICg7OykgeworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250cm9sIHsgfTsKKyAgICAg
ICAgU0NSSVBUX1NUQVRFIHN0YXRlIHsgfTsKKyAgICAgICAgY29udHJvbC5mTWVyZ2VOZXV0cmFs
SXRlbXMgPSB0cnVlOworICAgICAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZv
ciB0aGUgcnVuLgorICAgICAgICBzdGF0ZS51QmlkaUxldmVsID0gdGV4dERpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpSVEw7CisgICAgICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9u
YWwgb3ZlcnJpZGUuCisgICAgICAgIC8vIHN0YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9ID8KKwor
ICAgICAgICAvLyBTY3JpcHRJdGVtaXplIG1heSB3cml0ZSAoY01heEl0ZW1zICsgMSkgU0NSSVBU
X0lURU0uCisgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRJdGVtaXplKHdjaGFyRnJvbSh1cGNv
bnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkpLCBzdHJpbmdMZW5ndGgsIGl0ZW1zLnNpemUoKSAtIDEs
ICZjb250cm9sLCAmc3RhdGUsIGl0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAgaWYg
KGhyICE9IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6ZShp
dGVtcy5zaXplKCkgKiAyKTsKKyAgICB9CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsgMSk7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KKyAgICAgICAgY29uc3QgVUNoYXIq
IHN0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSArIGl0ZW1zW2ldLmlDaGFyUG9zOwor
ICAgICAgICBpbnQgbGVuZ3RoID0gaXRlbXNbaSsxXS5pQ2hhclBvcyAtIGl0ZW1zW2ldLmlDaGFy
UG9zOworICAgICAgICBTQ1JJUFRfSVRFTSYgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgIC8v
IFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRlbS4K
KyAgICAgICAgVmVjdG9yPFdPUkQ+IGdseXBoczsKKyAgICAgICAgVmVjdG9yPFdPUkQ+IGNsdXN0
ZXJzOworICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7Cisg
ICAgICAgIGNsdXN0ZXJzLnJlc2l6ZShsZW5ndGgpOworCisgICAgICAgIC8vIFNoYXBlIHRoZSBp
dGVtLgorICAgICAgICAvLyBUaGUgcmVjb21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZl
ciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9j
cy4KKyAgICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhh
dmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgorICAgICAgICBnbHlw
aHMucmVzaXplKDEuNSAqIGxlbmd0aCArIDE2KTsKKyAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgaWYgKCFzaGFwZUJ5VW5pc2NyaWJlKHN0
ciwgbGVuZ3RoLCBpdGVtLCB0aGlzLCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1dGVz
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIG5vdyBoYXZlIGEgY29s
bGVjdGlvbiBvZiBnbHlwaHMuCisgICAgICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOworICAg
ICAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKKyAgICAgICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhz
LnNpemUoKSk7CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAg
ICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIHNjcmlwdENhY2hlKCksIGds
eXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAorICAg
ICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Cisg
ICAgICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiBXZSBuZWVk
IHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0
aGUgREMgaW4gdG8gU2NyaXB0UGxhY2UuCisgICAgICAgICAgICBIV25kREMgaGRjKDApOworICAg
ICAgICAgICAgSEZPTlQgaGZvbnQgPSBwbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICAg
ICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICAg
ICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIHNjcmlwdENhY2hlKCksIGdseXBocy5k
YXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAorICAgICAgICAg
ICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAg
ICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYmFzZUFkdmFuY2VzOwor
ICAgICAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2luczsKKyAgICAgICAgYmFzZUFkdmFuY2Vz
LnJlc2VydmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgb3JpZ2lucy5yZXNlcnZl
Q2FwYWNpdHkoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGdseXBocy5zaXplKCk7IGsrKykgeworICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2lj
YWxTY2FsZSA9IHBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMSA6IDMyOworICAgICAgICAgICAg
ZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgICAg
IGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAg
ICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKKworICAg
ICAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBub24t
aW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCisgICAgICAgICAgICBpZiAoIXBsYXRmb3JtRGF0YSgp
LmlzU3lzdGVtRm9udCgpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5kZihhZHZh
bmNlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOworICAgICAg
ICAgICAgICAgIG9mZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJhc2VBZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoeyBhZHZhbmNlLCAwIH0pOwor
ICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNrZWRBcHBlbmQoeyBvZmZzZXRYLCBvZmZzZXRZIH0p
OworICAgICAgICB9CisgICAgICAgIGJvb2wgbHRyID0gIWl0ZW0uYS5mUlRMOworICAgICAgICBh
dXRvIHN0cmluZ0luZGljZXMgPSBzdHJpbmdJbmRpY2VzRnJvbUNsdXN0ZXJzKGNsdXN0ZXJzLCBT
dHJpbmdWaWV3KHN0ciwgbGVuZ3RoKSwgYmVnaW5uaW5nU3RyaW5nSW5kZXggKyBpdGVtLmlDaGFy
UG9zLCBnbHlwaHMuc2l6ZSgpLCBsdHIpOworICAgICAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFu
Y2UgPSB0b0Zsb2F0U2l6ZShvcmlnaW5zWzBdKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZ2x5cGhzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZ2x5cGhCdWZmZXIuYWRk
KGdseXBoc1tpXSwgKnRoaXMsIGJhc2VBZHZhbmNlc1tpXSwgc3RyaW5nSW5kaWNlc1tpXSk7Cisg
ICAgfQorfQorCiB9CiAKICNlbmRpZiAvLyAhVVNFKERJUkVDVDJEKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436142</attachid>
            <date>2021-08-22 17:37:55 -0700</date>
            <delta_ts>2021-08-22 22:36:10 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>10796</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNzBkMTAwYzQ4
NThlLi41OWVhN2Y4ZDBkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCkBAIC01NDEsNyArNTQxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOwogfQogCi0jaWYgIVVTRShDT1JFX1RFWFQpCisjaWYgVVNFKEhBUkZCVVpaKQogR2x5cGhC
dWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCAwZGVlOGE1MGU1
MzMuLjBlYmM3MWM2NDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aApAQCAtMjA2LDcgKzIwNiw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAg
R2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCB1bnNp
Z25lZCBzdHJpbmdMZW5ndGgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0
aW9uKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgbnVsbG9wdCBpZiBub25lIG9mIHRoZSBnbHlw
aHMgYXJlIE9ULVNWRyBnbHlwaHMuCiAgICAgc3RkOjpvcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRP
VFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CmluZGV4IDA1MGUyODdkOTlkYy4uZWNhZTc4MmQ2N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGkKICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBm
b250LCBnbHlwaFdpZHRoLCBpKTsKICAgICB9CiAKLSAgICBhdXRvIGluaXRpYWxBZHZhbmNlID0g
Zm9udC5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIDAsIDAsIGVuYWJsZUtlcm5pbmcoKSwg
cmVxdWlyZXNTaGFwaW5nKCksIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIHRl
eHQsIHRleHREaXJlY3Rpb24pOworICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5
VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgMCwgdGV4dC5sZW5ndGgoKSwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSwgdGV4dCwgdGV4dERpcmVjdGlvbik7CiAgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBt
YXRjaCB0aGUgcmVzdWx0IG9mIHRoZSBzbG93IHBhdGguCiAgICAgLy8gU2FtZSBnbHlwaCB3aWR0
aHMgYnV0IGRpZmZlcmVudCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGNhbiBwcm9kdWNlIGRp
ZmZlcmVudCBydW4gd2lkdGguCiAgICAgZmxvYXQgcnVuV2lkdGhEaWZmZXJlbmNlV2l0aFRyYW5z
Zm9ybUFwcGxpZWQgPSAtcnVuV2lkdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IDQxYTEyOTJlZDBlZS4uNTM5MGQwZWIy
NmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFu
a0Vtb2ppKFVDaGFyMzIgY29kZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAx
ICYmIGNvZGVwb2ludCA8PSAweEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6
OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBs
YXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCYgZm9udCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
JiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpIC0+IEFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQK
K2lubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5zaWduZWQgc3RyaW5n
TGVuZ3RoLCBjb25zdCBGb250JiBmb250LCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZSkgLT4gQXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdAogewogICAg
IGF1dG8gZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIEFTU0VSVChs
YXN0R2x5cGhDb3VudCA8PSBnbHlwaEJ1ZmZlclNpemUpOwpAQCAtOTIsNyArOTIsOCBAQCBpbmxp
bmUgYXV0byBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZQogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50
OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IHdpZHRo
KGFkdmFuY2VzW2ldKTsKIAotICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIG1fY3VycmVudENoYXJhY3Rlcklu
ZGV4LCBtX2VuYWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQuZm9udERlc2Ny
aXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSwgbV9ydW4udGV4dCgpLCBtX3J1bi5kaXJlY3Rpb24o
KSk7CisgICAgYXV0byBpbml0aWFsQWR2YW5jZSA9IGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsIHN0cmluZ0xl
bmd0aCwKKyAgICAgICAgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250
LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIG1fcnVuLnRleHQoKSwgbV9ydW4u
ZGlyZWN0aW9uKCkpOwogCiAjaWYgVVNFKENURk9OVFNIQVBFR0xZUEhTX1dPUktBUk9VTkQpCiAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzgwNzk4MTEzPjogSWYgYSBjaGFyYWN0ZXIgaXMgbm90IGlu
IEJNUCwgYW5kIHdlIGRvbid0IGhhdmUgYSBnbHlwaCBmb3IgaXQsCkBAIC0yMTUsNyArMjE2LDcg
QEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjpjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQmIGwKICAgICAgICAgQVNTRVJUKCZnbHlwaEJ1ZmZlci5m
b250QXQoaSkgPT0gZm9udCk7CiAjZW5kaWYKIAotICAgIGF1dG8gYXBwbHlGb250VHJhbnNmb3Jt
c1Jlc3VsdCA9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50
LCAqZm9udCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKKyAgICBhdXRvIGFwcGx5Rm9udFRy
YW5zZm9ybXNSZXN1bHQgPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5
cGhDb3VudCwgY3VycmVudENoYXJhY3RlckluZGV4IC0gbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgs
ICpmb250LCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgIG1fcnVuV2lkdGhTb0ZhciAr
PSBhcHBseUZvbnRUcmFuc2Zvcm1zUmVzdWx0LmFkZGl0aW9uYWxBZHZhbmNlOwogICAgIGFwcGx5
SW5pdGlhbEFkdmFuY2UoZ2x5cGhCdWZmZXIsIGFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQuaW5p
dGlhbEFkdmFuY2UsIGxhc3RHbHlwaENvdW50KTsKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJbmRl
eCA9IGN1cnJlbnRDaGFyYWN0ZXJJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAppbmRleCBiZDhiY2RiNzk4YjQuLmUyY2RkODQ0YzM3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0
b3IuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgICAgICBmbG9hdCBhZGRpdGlvbmFs
QWR2YW5jZTsKICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlOwogICAg
IH07Ci0gICAgQXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEds
eXBoQnVmZmVyJiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQmLCBDaGFyYWN0
ZXJzVHJlYXRlZEFzU3BhY2UmKTsKKyAgICBBcHBseUZvbnRUcmFuc2Zvcm1zUmVzdWx0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5z
aWduZWQgc3RyaW5nTGVuZ3RoLCBjb25zdCBGb250JiwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
Jik7CiAgICAgdm9pZCBjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVyJiwgdW5zaWdu
ZWQmIGxhc3RHbHlwaENvdW50LCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXgsIGNvbnN0
IEZvbnQqJiwgY29uc3QgRm9udCYgbmV3Rm9udCwgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQsIFVD
aGFyMzIgY2hhcmFjdGVyLCBmbG9hdCYgd2lkdGhPZkN1cnJlbnRGb250UmFuZ2UsIGZsb2F0IG5l
eHRDaGFyYWN0ZXJXaWR0aCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7CiAgICAgdm9pZCBh
cHBseUluaXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyJiwgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRp
YWxBZHZhbmNlLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlz
Y3JpYmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhU
ZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKaW5kZXggNzc0YTUyYTI4NjkzLi5iMzBlN2VhZjIx
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21w
bGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0y
NzQsNiArMjc0LDk5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxl
eFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsCiAgICAgfQogfQogCitHbHlw
aEJ1ZmZlckFkdmFuY2UgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3Ry
aW5nSW5kZXgsIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29s
IHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRl
eHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKK3sKKyAgICBnbHlwaEJ1ZmZl
ci5yZW1vdmUoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5u
aW5nR2x5cGhJbmRleCk7CisKKyAgICBhdXRvIHN1YnN0cmluZyA9IHRleHQuc3Vic3RyaW5nKGJl
Z2lubmluZ1N0cmluZ0luZGV4LCBzdHJpbmdMZW5ndGgpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworCisgICAgVmVj
dG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZv
ciAoOzspIHsKKyAgICAgICAgU0NSSVBUX0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFND
UklQVF9TVEFURSBzdGF0ZSB7IH07CisgICAgICAgIGNvbnRyb2wuZk1lcmdlTmV1dHJhbEl0ZW1z
ID0gdHJ1ZTsKKyAgICAgICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhl
IHJ1bi4KKyAgICAgICAgc3RhdGUudUJpZGlMZXZlbCA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6UlRMOworICAgICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92
ZXJyaWRlLgorICAgICAgICAvLyBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSA/CisKKyAgICAg
ICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkgd3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVN
LgorICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20odXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzLmdldCgpKSwgc3RyaW5nTGVuZ3RoLCBpdGVtcy5zaXplKCkgLSAxLCAmY29u
dHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRhKCksICZudW1JdGVtcyk7CisgICAgICAgIGlmIChociAh
PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpdGVtcy5yZXNpemUoaXRlbXMu
c2l6ZSgpICogMik7CisgICAgfQorICAgIGl0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgaSsrKSB7CisgICAgICAgIC8vIERldGVy
bWluZSB0aGUgc3RyaW5nIGZvciB0aGlzIGl0ZW0uCisgICAgICAgIGNvbnN0IFVDaGFyKiBzdHIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkgKyBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAg
ICAgaW50IGxlbmd0aCA9IGl0ZW1zW2krMV0uaUNoYXJQb3MgLSBpdGVtc1tpXS5pQ2hhclBvczsK
KyAgICAgICAgU0NSSVBUX0lURU0mIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAvLyBTZXQg
dXAgYnVmZmVycyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCisgICAg
ICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7CisgICAgICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsK
KyAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOworICAgICAg
ICBjbHVzdGVycy5yZXNpemUobGVuZ3RoKTsKKworICAgICAgICAvLyBTaGFwZSB0aGUgaXRlbS4K
KyAgICAgICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMg
MS41ICogdGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCisg
ICAgICAgIC8vIEFwcGFyZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcg
dG8gbWFrZSByZXBlYXRlZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgZ2x5cGhzLnJl
c2l6ZSgxLjUgKiBsZW5ndGggKyAxNik7CisgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXpl
KGdseXBocy5zaXplKCkpOworCisgICAgICAgIGlmICghc2hhcGVCeVVuaXNjcmliZShzdHIsIGxl
bmd0aCwgaXRlbSwgdGhpcywgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rp
b24gb2YgZ2x5cGhzLgorICAgICAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKKyAgICAgICAg
VmVjdG9yPGludD4gYWR2YW5jZXM7CisgICAgICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXpl
KCkpOworICAgICAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIEhS
RVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMu
ZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAg
ICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAg
ICBpZiAocGxhY2VSZXN1bHQgPT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBUaGUgc2Ny
aXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gV2UgbmVlZCB0byBz
ZWxlY3Qgb3VyIEhGT05UIGludG8KKyAgICAgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERD
IGluIHRvIFNjcmlwdFBsYWNlLgorICAgICAgICAgICAgSFduZERDIGhkYygwKTsKKyAgICAgICAg
ICAgIEhGT05UIGhmb250ID0gcGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIEhH
RElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBs
YWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgp
LCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAg
ICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KEZBSUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGJvb2wgbHRyID0gIWl0ZW0uYS5mUlRMOworICAgICAgICBhdXRv
IHN0cmluZ0luZGljZXMgPSBzdHJpbmdJbmRpY2VzRnJvbUNsdXN0ZXJzKGNsdXN0ZXJzLCBTdHJp
bmdWaWV3KHN0ciwgbGVuZ3RoKSwgYmVnaW5uaW5nU3RyaW5nSW5kZXggKyBpdGVtLmlDaGFyUG9z
LCBnbHlwaHMuc2l6ZSgpLCBsdHIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsg
PCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2Fs
U2NhbGUgPSBwbGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZs
b2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBm
bG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAg
ICBmbG9hdCBvZmZzZXRZID0gb2Zmc2V0c1trXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAg
ICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWlu
dGVnZXIgcmVuZGVyaW5nIG1vZGVzLgorICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5p
c1N5c3RlbUZvbnQoKSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5j
ZSk7CisgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci5hZGQoZ2x5cGhzW2tdLCAqdGhpcywgeyBhZHZhbmNlLCAwIH0s
IHN0cmluZ0luZGljZXNba10pOworICAgICAgICAgICAgZ2x5cGhCdWZmZXIub3JpZ2lucyhrKVsw
XSA9IG1ha2VHbHlwaEJ1ZmZlck9yaWdpbihvZmZzZXRYLCBvZmZzZXRZKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gbWFrZUdseXBoQnVmZmVyQWR2YW5jZSgpOworfQorCiB9CiAKICNl
bmRpZiAvLyAhVVNFKERJUkVDVDJEKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436149</attachid>
            <date>2021-08-22 22:36:10 -0700</date>
            <delta_ts>2021-08-23 00:24:09 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>11209</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNzBkMTAwYzQ4
NThlLi41OWVhN2Y4ZDBkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCkBAIC01NDEsNyArNTQxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOwogfQogCi0jaWYgIVVTRShDT1JFX1RFWFQpCisjaWYgVVNFKEhBUkZCVVpaKQogR2x5cGhC
dWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCAwZGVlOGE1MGU1
MzMuLjBlYmM3MWM2NDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aApAQCAtMjA2LDcgKzIwNiw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAg
R2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCB1bnNp
Z25lZCBzdHJpbmdMZW5ndGgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0
aW9uKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgbnVsbG9wdCBpZiBub25lIG9mIHRoZSBnbHlw
aHMgYXJlIE9ULVNWRyBnbHlwaHMuCiAgICAgc3RkOjpvcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRP
VFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CmluZGV4IDA1MGUyODdkOTlkYy4uNzRlMjA0ODY1ODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGkKICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBm
b250LCBnbHlwaFdpZHRoLCBpKTsKICAgICB9CiAKLSAgICBhdXRvIGluaXRpYWxBZHZhbmNlID0g
Zm9udC5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIDAsIDAsIGVuYWJsZUtlcm5pbmcoKSwg
cmVxdWlyZXNTaGFwaW5nKCksIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIHRl
eHQsIHRleHREaXJlY3Rpb24pOworICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5
VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgMCwgdGV4dC5sZW5ndGgoKSwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSwgdGV4dCwgdGV4dERpcmVjdGlvbik7CiAgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBt
YXRjaCB0aGUgcmVzdWx0IG9mIHRoZSBzbG93IHBhdGguCiAgICAgLy8gU2FtZSBnbHlwaCB3aWR0
aHMgYnV0IGRpZmZlcmVudCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGNhbiBwcm9kdWNlIGRp
ZmZlcmVudCBydW4gd2lkdGguCiAgICAgZmxvYXQgcnVuV2lkdGhEaWZmZXJlbmNlV2l0aFRyYW5z
Zm9ybUFwcGxpZWQgPSAtcnVuV2lkdGg7CkBAIC00OTEsNiArNDkxLDkgQEAgRm9udENhc2NhZGU6
OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aCgpCiAKIEZvbnRDYXNjYWRlOjpDb2RlUGF0
aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykgY29uc3QKIHsKKyAg
ICAvLyBPT1BTOiBEbyBub3QgbGFuZCB0aGlzLgorICAgIHJldHVybiBDb2RlUGF0aDo6U2ltcGxl
OworCiAgICAgaWYgKHNfY29kZVBhdGggIT0gQ29kZVBhdGg6OkF1dG8pCiAgICAgICAgIHJldHVy
biBzX2NvZGVQYXRoOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IDQxYTEyOTJlZDBlZS4uNTM5MGQwZWIyNmQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNw
cApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFua0Vtb2ppKFVD
aGFyMzIgY29kZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAxICYmIGNvZGVw
b2ludCA8PSAweEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9u
dFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBsYXN0R2x5cGhD
b3VudCwgY29uc3QgRm9udCYgZm9udCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0
ZXJzVHJlYXRlZEFzU3BhY2UpIC0+IEFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQKK2lubGluZSBh
dXRvIFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCBj
b25zdCBGb250JiBmb250LCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkgLT4gQXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdAogewogICAgIGF1dG8gZ2x5
cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIEFTU0VSVChsYXN0R2x5cGhD
b3VudCA8PSBnbHlwaEJ1ZmZlclNpemUpOwpAQCAtOTIsNyArOTIsOCBAQCBpbmxpbmUgYXV0byBX
aWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgdW5zaWduZQogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5
cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IHdpZHRoKGFkdmFuY2Vz
W2ldKTsKIAotICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5VHJhbnNmb3Jtcyhn
bHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIG1fY3VycmVudENoYXJhY3RlckluZGV4LCBtX2Vu
YWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRMb2NhbGUoKSwgbV9ydW4udGV4dCgpLCBtX3J1bi5kaXJlY3Rpb24oKSk7CisgICAg
YXV0byBpbml0aWFsQWR2YW5jZSA9IGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBs
YXN0R2x5cGhDb3VudCwgbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsIHN0cmluZ0xlbmd0aCwKKyAg
ICAgICAgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250LmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIG1fcnVuLnRleHQoKSwgbV9ydW4uZGlyZWN0aW9u
KCkpOwogCiAjaWYgVVNFKENURk9OVFNIQVBFR0xZUEhTX1dPUktBUk9VTkQpCiAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzgwNzk4MTEzPjogSWYgYSBjaGFyYWN0ZXIgaXMgbm90IGluIEJNUCwgYW5k
IHdlIGRvbid0IGhhdmUgYSBnbHlwaCBmb3IgaXQsCkBAIC0yMTUsNyArMjE2LDcgQEAgdm9pZCBX
aWR0aEl0ZXJhdG9yOjpjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQmIGwKICAgICAgICAgQVNTRVJUKCZnbHlwaEJ1ZmZlci5mb250QXQoaSkg
PT0gZm9udCk7CiAjZW5kaWYKIAotICAgIGF1dG8gYXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdCA9
IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCAqZm9udCwg
Y2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKKyAgICBhdXRvIGFwcGx5Rm9udFRyYW5zZm9ybXNS
ZXN1bHQgPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwg
Y3VycmVudENoYXJhY3RlckluZGV4IC0gbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsICpmb250LCBj
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZv
bnRUcmFuc2Zvcm1zUmVzdWx0LmFkZGl0aW9uYWxBZHZhbmNlOwogICAgIGFwcGx5SW5pdGlhbEFk
dmFuY2UoZ2x5cGhCdWZmZXIsIGFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQuaW5pdGlhbEFkdmFu
Y2UsIGxhc3RHbHlwaENvdW50KTsKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJl
bnRDaGFyYWN0ZXJJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuaAppbmRleCBiZDhiY2RiNzk4YjQuLmUyY2RkODQ0YzM3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAt
NjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgICAgICBmbG9hdCBhZGRpdGlvbmFsQWR2YW5jZTsK
ICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlOwogICAgIH07Ci0gICAg
QXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
JiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQmLCBDaGFyYWN0ZXJzVHJlYXRl
ZEFzU3BhY2UmKTsKKyAgICBBcHBseUZvbnRUcmFuc2Zvcm1zUmVzdWx0IGFwcGx5Rm9udFRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5zaWduZWQgc3Ry
aW5nTGVuZ3RoLCBjb25zdCBGb250JiwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7CiAgICAg
dm9pZCBjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVyJiwgdW5zaWduZWQmIGxhc3RH
bHlwaENvdW50LCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXgsIGNvbnN0IEZvbnQqJiwg
Y29uc3QgRm9udCYgbmV3Rm9udCwgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQsIFVDaGFyMzIgY2hh
cmFjdGVyLCBmbG9hdCYgd2lkdGhPZkN1cnJlbnRGb250UmFuZ2UsIGZsb2F0IG5leHRDaGFyYWN0
ZXJXaWR0aCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7CiAgICAgdm9pZCBhcHBseUluaXRp
YWxBZHZhbmNlKEdseXBoQnVmZmVyJiwgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNl
LCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlclVuaXNjcmliZS5jcHAKaW5kZXggNzc0YTUyYTI4NjkzLi5jZmM3MTc0Zjk3YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENv
bnRyb2xsZXJVbmlzY3JpYmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0yNzQsNiArMjc0
LDEwMCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgIH0KIH0KIAorR2x5cGhCdWZmZXJB
ZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgZ2x5cGhCdWZmZXIucmVtb3Zl
KGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBo
SW5kZXgpOworCisgICAgYXV0byBzdWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdT
dHJpbmdJbmRleCwgc3RyaW5nTGVuZ3RoKTsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVy
cyA9IHN1YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKworICAgIFZlY3RvcjxTQ1JJ
UFRfSVRFTT4gaXRlbXMoNik7CisgICAgaW50IG51bUl0ZW1zID0gMDsKKyAgICBmb3IgKDs7KSB7
CisgICAgICAgIFNDUklQVF9DT05UUk9MIGNvbnRyb2wgeyB9OworICAgICAgICBTQ1JJUFRfU1RB
VEUgc3RhdGUgeyB9OworICAgICAgICBjb250cm9sLmZNZXJnZU5ldXRyYWxJdGVtcyA9IHRydWU7
CisgICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCisg
ICAgICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSB0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OlJUTDsKKyAgICAgICAgLy8gTG9jayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4K
KyAgICAgICAgLy8gc3RhdGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gPworCisgICAgICAgIC8vIFNj
cmlwdEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRFTS4KKyAgICAg
ICAgSFJFU1VMVCBociA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKHVwY29udmVydGVkQ2hhcmFj
dGVycy5nZXQoKSksIHN0cmluZ0xlbmd0aCwgaXRlbXMuc2l6ZSgpIC0gMSwgJmNvbnRyb2wsICZz
dGF0ZSwgaXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpOworICAgICAgICBpZiAoaHIgIT0gRV9PVVRP
Rk1FTU9SWSkgeworICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaXRlbXMucmVzaXplKGl0ZW1zLnNpemUoKSAq
IDIpOworICAgIH0KKyAgICBpdGVtcy5yZXNpemUobnVtSXRlbXMgKyAxKTsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgeworICAgICAgICAvLyBEZXRlcm1pbmUgdGhl
IHN0cmluZyBmb3IgdGhpcyBpdGVtLgorICAgICAgICBjb25zdCBVQ2hhciogc3RyID0gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpICsgaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIGludCBs
ZW5ndGggPSBpdGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAg
IFNDUklQVF9JVEVNJiBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgLy8gU2V0IHVwIGJ1ZmZl
cnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgICAgICBWZWN0
b3I8V09SRD4gZ2x5cGhzOworICAgICAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7CisgICAgICAg
IFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICAgICAgY2x1c3Rl
cnMucmVzaXplKGxlbmd0aCk7CisKKyAgICAgICAgLy8gU2hhcGUgdGhlIGl0ZW0uCisgICAgICAg
IC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRo
ZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgICAgICAv
LyBBcHBhcmVudGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2Ug
cmVwZWF0ZWQgY2FsbHMgdG8gU2NyaXB0U2hhcGUuCisgICAgICAgIGdseXBocy5yZXNpemUoMS41
ICogbGVuZ3RoICsgMTYpOworICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMu
c2l6ZSgpKTsKKworICAgICAgICBpZiAoIXNoYXBlQnlVbmlzY3JpYmUoc3RyLCBsZW5ndGgsIGl0
ZW0sIHRoaXMsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGds
eXBocy4KKyAgICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7CisgICAgICAgIFZlY3Rvcjxp
bnQ+IGFkdmFuY2VzOworICAgICAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAg
ICAgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBIUkVTVUxUIHBs
YWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwgc2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwg
Z2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICAgICAmaXRl
bS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgaWYgKHBs
YWNlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNo
ZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91
ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBT
Y3JpcHRQbGFjZS4KKyAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7CisgICAgICAgICAgICBIRk9O
VCBoZm9udCA9IHBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7CisgICAgICAgICAgICBwbGFjZVJlc3Vs
dCA9IFNjcmlwdFBsYWNlKGhkYywgc2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhz
LnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICAgICAgICAgJml0ZW0u
YSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7CisgICAgICAgICAgICBTZWxl
Y3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQo
cGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBib29sIGx0ciA9ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgYXV0byBzdHJpbmdJ
bmRpY2VzID0gc3RyaW5nSW5kaWNlc0Zyb21DbHVzdGVycyhjbHVzdGVycywgU3RyaW5nVmlldyhz
dHIsIGxlbmd0aCksIGJlZ2lubmluZ1N0cmluZ0luZGV4ICsgaXRlbS5pQ2hhclBvcywgZ2x5cGhz
LnNpemUoKSwgbHRyKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhz
LnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpID0gbHRyID8gayA6IGdseXBo
cy5zaXplKCkgLSBrIC0gMTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUg
PSBwbGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZsb2F0IGFk
dmFuY2UgPSBhZHZhbmNlc1tpXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBv
ZmZzZXRYID0gb2Zmc2V0c1tpXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9h
dCBvZmZzZXRZID0gb2Zmc2V0c1tpXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAgICAgICAg
IC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIg
cmVuZGVyaW5nIG1vZGVzLgorICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5pc1N5c3Rl
bUZvbnQoKSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAgICAgICAg
ICBvZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbHlwaEJ1ZmZlci5hZGQoZ2x5cGhzW2ldLCAqdGhpcywgeyBhZHZhbmNlLCAwIH0sIHN0cmlu
Z0luZGljZXNbaV0pOworICAgICAgICAgICAgKmdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5n
R2x5cGhJbmRleCArIGspID0gbWFrZUdseXBoQnVmZmVyT3JpZ2luKG9mZnNldFgsIG9mZnNldFkp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7
Cit9CisKIH0KIAogI2VuZGlmIC8vICFVU0UoRElSRUNUMkQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436155</attachid>
            <date>2021-08-23 00:24:01 -0700</date>
            <delta_ts>2021-08-23 00:24:01 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>11434</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggNzBkMTAwYzQ4
NThlLi41OWVhN2Y4ZDBkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCkBAIC01NDEsNyArNTQxLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZVNjYWxl
ZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2EKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwgc2NhbGVGYWN0
b3IpOwogfQogCi0jaWYgIVVTRShDT1JFX1RFWFQpCisjaWYgVVNFKEhBUkZCVVpaKQogR2x5cGhC
dWZmZXJBZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFRl
eHREaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1ha2VHbHlwaEJ1ZmZlckFkdmFuY2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCAwZGVlOGE1MGU1
MzMuLjBlYmM3MWM2NDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aApAQCAtMjA2LDcgKzIwNiw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBjYW5SZW5k
ZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciosIHNpemVfdCkgY29uc3Q7
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbikgY29uc3Q7CisgICAg
R2x5cGhCdWZmZXJBZHZhbmNlIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCB1bnNp
Z25lZCBzdHJpbmdMZW5ndGgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBp
bmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0
aW9uKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgbnVsbG9wdCBpZiBub25lIG9mIHRoZSBnbHlw
aHMgYXJlIE9ULVNWRyBnbHlwaHMuCiAgICAgc3RkOjpvcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRP
VFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CmluZGV4IDA1MGUyODdkOTlkYy4uNzRlMjA0ODY1ODE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRleHQsIFRl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGkKICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBm
b250LCBnbHlwaFdpZHRoLCBpKTsKICAgICB9CiAKLSAgICBhdXRvIGluaXRpYWxBZHZhbmNlID0g
Zm9udC5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIDAsIDAsIGVuYWJsZUtlcm5pbmcoKSwg
cmVxdWlyZXNTaGFwaW5nKCksIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIHRl
eHQsIHRleHREaXJlY3Rpb24pOworICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5
VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgMCwgdGV4dC5sZW5ndGgoKSwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSwgdGV4dCwgdGV4dERpcmVjdGlvbik7CiAgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBt
YXRjaCB0aGUgcmVzdWx0IG9mIHRoZSBzbG93IHBhdGguCiAgICAgLy8gU2FtZSBnbHlwaCB3aWR0
aHMgYnV0IGRpZmZlcmVudCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGNhbiBwcm9kdWNlIGRp
ZmZlcmVudCBydW4gd2lkdGguCiAgICAgZmxvYXQgcnVuV2lkdGhEaWZmZXJlbmNlV2l0aFRyYW5z
Zm9ybUFwcGxpZWQgPSAtcnVuV2lkdGg7CkBAIC00OTEsNiArNDkxLDkgQEAgRm9udENhc2NhZGU6
OkNvZGVQYXRoIEZvbnRDYXNjYWRlOjpjb2RlUGF0aCgpCiAKIEZvbnRDYXNjYWRlOjpDb2RlUGF0
aCBGb250Q2FzY2FkZTo6Y29kZVBhdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykgY29uc3QKIHsKKyAg
ICAvLyBPT1BTOiBEbyBub3QgbGFuZCB0aGlzLgorICAgIHJldHVybiBDb2RlUGF0aDo6U2ltcGxl
OworCiAgICAgaWYgKHNfY29kZVBhdGggIT0gQ29kZVBhdGg6OkF1dG8pCiAgICAgICAgIHJldHVy
biBzX2NvZGVQYXRoOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IDQxYTEyOTJlZDBlZS4uNTM5MGQwZWIyNmQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNw
cApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFua0Vtb2ppKFVD
aGFyMzIgY29kZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAxICYmIGNvZGVw
b2ludCA8PSAweEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9u
dFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBsYXN0R2x5cGhD
b3VudCwgY29uc3QgRm9udCYgZm9udCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0
ZXJzVHJlYXRlZEFzU3BhY2UpIC0+IEFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQKK2lubGluZSBh
dXRvIFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCBj
b25zdCBGb250JiBmb250LCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkgLT4gQXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdAogewogICAgIGF1dG8gZ2x5
cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIEFTU0VSVChsYXN0R2x5cGhD
b3VudCA8PSBnbHlwaEJ1ZmZlclNpemUpOwpAQCAtOTIsNyArOTIsOCBAQCBpbmxpbmUgYXV0byBX
aWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgdW5zaWduZQogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5
cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IHdpZHRoKGFkdmFuY2Vz
W2ldKTsKIAotICAgIGF1dG8gaW5pdGlhbEFkdmFuY2UgPSBmb250LmFwcGx5VHJhbnNmb3Jtcyhn
bHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIG1fY3VycmVudENoYXJhY3RlckluZGV4LCBtX2Vu
YWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRMb2NhbGUoKSwgbV9ydW4udGV4dCgpLCBtX3J1bi5kaXJlY3Rpb24oKSk7CisgICAg
YXV0byBpbml0aWFsQWR2YW5jZSA9IGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBs
YXN0R2x5cGhDb3VudCwgbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsIHN0cmluZ0xlbmd0aCwKKyAg
ICAgICAgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250LmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCksIG1fcnVuLnRleHQoKSwgbV9ydW4uZGlyZWN0aW9u
KCkpOwogCiAjaWYgVVNFKENURk9OVFNIQVBFR0xZUEhTX1dPUktBUk9VTkQpCiAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzgwNzk4MTEzPjogSWYgYSBjaGFyYWN0ZXIgaXMgbm90IGluIEJNUCwgYW5k
IHdlIGRvbid0IGhhdmUgYSBnbHlwaCBmb3IgaXQsCkBAIC0yMTUsNyArMjE2LDcgQEAgdm9pZCBX
aWR0aEl0ZXJhdG9yOjpjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaWduZWQmIGwKICAgICAgICAgQVNTRVJUKCZnbHlwaEJ1ZmZlci5mb250QXQoaSkg
PT0gZm9udCk7CiAjZW5kaWYKIAotICAgIGF1dG8gYXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdCA9
IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCAqZm9udCwg
Y2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKKyAgICBhdXRvIGFwcGx5Rm9udFRyYW5zZm9ybXNS
ZXN1bHQgPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwg
Y3VycmVudENoYXJhY3RlckluZGV4IC0gbV9jdXJyZW50Q2hhcmFjdGVySW5kZXgsICpmb250LCBj
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwogICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZv
bnRUcmFuc2Zvcm1zUmVzdWx0LmFkZGl0aW9uYWxBZHZhbmNlOwogICAgIGFwcGx5SW5pdGlhbEFk
dmFuY2UoZ2x5cGhCdWZmZXIsIGFwcGx5Rm9udFRyYW5zZm9ybXNSZXN1bHQuaW5pdGlhbEFkdmFu
Y2UsIGxhc3RHbHlwaENvdW50KTsKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJl
bnRDaGFyYWN0ZXJJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuaAppbmRleCBiZDhiY2RiNzk4YjQuLmUyY2RkODQ0YzM3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAt
NjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgICAgICBmbG9hdCBhZGRpdGlvbmFsQWR2YW5jZTsK
ICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlOwogICAgIH07Ci0gICAg
QXBwbHlGb250VHJhbnNmb3Jtc1Jlc3VsdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
JiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQmLCBDaGFyYWN0ZXJzVHJlYXRl
ZEFzU3BhY2UmKTsKKyAgICBBcHBseUZvbnRUcmFuc2Zvcm1zUmVzdWx0IGFwcGx5Rm9udFRyYW5z
Zm9ybXMoR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgdW5zaWduZWQgc3Ry
aW5nTGVuZ3RoLCBjb25zdCBGb250JiwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7CiAgICAg
dm9pZCBjb21taXRDdXJyZW50Rm9udFJhbmdlKEdseXBoQnVmZmVyJiwgdW5zaWduZWQmIGxhc3RH
bHlwaENvdW50LCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXgsIGNvbnN0IEZvbnQqJiwg
Y29uc3QgRm9udCYgbmV3Rm9udCwgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQsIFVDaGFyMzIgY2hh
cmFjdGVyLCBmbG9hdCYgd2lkdGhPZkN1cnJlbnRGb250UmFuZ2UsIGZsb2F0IG5leHRDaGFyYWN0
ZXJXaWR0aCwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7CiAgICAgdm9pZCBhcHBseUluaXRp
YWxBZHZhbmNlKEdseXBoQnVmZmVyJiwgR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNl
LCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlclVuaXNjcmliZS5jcHAKaW5kZXggNzc0YTUyYTI4NjkzLi4wZTBhYTMyMmMzMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENv
bnRyb2xsZXJVbmlzY3JpYmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0yNzQsNiArMjc0
LDEwNiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgIH0KIH0KIAorR2x5cGhCdWZmZXJB
ZHZhbmNlIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgZ2x5cGhCdWZmZXIucmVtb3Zl
KGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBo
SW5kZXgpOworCisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB0ZXh0LnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOworCisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2KTsKKyAg
ICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgU0NSSVBUX0NPTlRS
T0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0ZSB7IH07CisgICAgICAg
IGNvbnRyb2wuZk1lcmdlTmV1dHJhbEl0ZW1zID0gdHJ1ZTsKKyAgICAgICAgLy8gU2V0IHVwIHRo
ZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJpZGlMZXZl
bCA9IHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMOworICAgICAgICAvLyBMb2Nr
IHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgorICAgICAgICAvLyBzdGF0ZS5mT3Zl
cnJpZGVEaXJlY3Rpb24gPSA/CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkgd3JpdGUg
KGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0
SXRlbWl6ZSh3Y2hhckZyb20odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwgdGV4dC5sZW5n
dGgoKSwgaXRlbXMuc2l6ZSgpIC0gMSwgJmNvbnRyb2wsICZzdGF0ZSwgaXRlbXMuZGF0YSgpLCAm
bnVtSXRlbXMpOworICAgICAgICBpZiAoaHIgIT0gRV9PVVRPRk1FTU9SWSkgeworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaXRlbXMucmVzaXplKGl0ZW1zLnNpemUoKSAqIDIpOworICAgIH0KKyAgICBpdGVt
cy5yZXNpemUobnVtSXRlbXMgKyAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRl
bXM7IGkrKykgeworICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3IgdGhpcyBpdGVt
LgorICAgICAgICBjb25zdCBVQ2hhciogc3RyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgp
ICsgaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGl0ZW1zW2kr
MV0uaUNoYXJQb3MgLSBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAgICAgU0NSSVBUX0lURU0mIGl0
ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICBpZiAoaXRlbXNbaSsxXS5pQ2hhclBvcyA8PSBiZWdp
bm5pbmdTdHJpbmdJbmRleCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYmVn
aW5uaW5nU3RyaW5nSW5kZXggKyBzdHJpbmdMZW5ndGggPD0gaXRlbXNbaV0uaUNoYXJQb3MpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTZXQgdXAgYnVmZmVycyB0byBob2xk
IHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCisgICAgICAgIFZlY3RvcjxXT1JEPiBn
bHlwaHM7CisgICAgICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsKKyAgICAgICAgVmVjdG9yPFND
UklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOworICAgICAgICBjbHVzdGVycy5yZXNpemUo
bGVuZ3RoKTsKKworICAgICAgICAvLyBTaGFwZSB0aGUgaXRlbS4KKyAgICAgICAgLy8gVGhlIHJl
Y29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNoYXJhY3Rl
ciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCisgICAgICAgIC8vIEFwcGFyZW50
bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBj
YWxscyB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW5ndGgg
KyAxNik7CisgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkpOwor
CisgICAgICAgIGlmICghc2hhcGVCeVVuaXNjcmliZShzdHIsIGxlbmd0aCwgaXRlbSwgdGhpcywg
Z2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhzLgorICAg
ICAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPGludD4gYWR2YW5j
ZXM7CisgICAgICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBhZHZh
bmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQg
PSBTY3JpcHRQbGFjZSgwLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6
ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICZpdGVtLmEsIGFkdmFu
Y2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAgICBpZiAocGxhY2VSZXN1bHQg
PT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHBy
aW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gV2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGlu
dG8KKyAgICAgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNl
LgorICAgICAgICAgICAgSFduZERDIGhkYygwKTsKKyAgICAgICAgICAgIEhGT05UIGhmb250ID0g
cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNl
bGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0
UGxhY2UoaGRjLCBzY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2
aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNl
cy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgICAgIFNlbGVjdE9iamVjdCho
ZGMsIG9sZEZvbnQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZBSUxFRChwbGFjZVJlc3Vs
dCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGJvb2wgbHRyID0gIWl0ZW0uYS5mUlRMOworICAgICAgICBhdXRvIHN0cmluZ0luZGljZXMgPSBz
dHJpbmdJbmRpY2VzRnJvbUNsdXN0ZXJzKGNsdXN0ZXJzLCBTdHJpbmdWaWV3KHN0ciwgbGVuZ3Ro
KSwgaXRlbS5pQ2hhclBvcywgZ2x5cGhzLnNpemUoKSwgbHRyKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBpID0gbHRyID8gayA6IGdseXBocy5zaXplKCkgLSBrIC0gMTsKKyAgICAgICAgICAgIGlm
IChzdHJpbmdJbmRpY2VzW2ldIDwgYmVnaW5uaW5nU3RyaW5nSW5kZXggfHwgYmVnaW5uaW5nU3Ry
aW5nSW5kZXggKyBzdHJpbmdMZW5ndGggPD0gc3RyaW5nSW5kaWNlc1tpXSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBw
bGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZsb2F0IGFkdmFu
Y2UgPSBhZHZhbmNlc1tpXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZz
ZXRYID0gb2Zmc2V0c1tpXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBv
ZmZzZXRZID0gb2Zmc2V0c1tpXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAgICAgICAgIC8v
IE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVu
ZGVyaW5nIG1vZGVzLgorICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZv
bnQoKSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bHlwaEJ1ZmZlci5hZGQoZ2x5cGhzW2ldLCAqdGhpcywgeyBhZHZhbmNlLCAwIH0sIHN0cmluZ0lu
ZGljZXNbaV0pOworICAgICAgICAgICAgKmdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5nR2x5
cGhJbmRleCArIGspID0gbWFrZUdseXBoQnVmZmVyT3JpZ2luKG9mZnNldFgsIG9mZnNldFkpOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYWtlR2x5cGhCdWZmZXJBZHZhbmNlKCk7Cit9
CisKIH0KIAogI2VuZGlmIC8vICFVU0UoRElSRUNUMkQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>