<?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>143292</bug_id>
          
          <creation_ts>2015-03-31 21:31:37 -0700</creation_ts>
          <short_desc>Support forcing expansion opportunities at the beginning and ending of a run</short_desc>
          <delta_ts>2015-04-01 10:44:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>142608</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1081881</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-03-31 21:31:37 -0700</bug_when>
    <thetext>Support forcing expansion opportunities at the beginning and ending of a run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081885</commentid>
    <comment_count>1</comment_count>
      <attachid>249888</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-03-31 21:41:11 -0700</bug_when>
    <thetext>Created attachment 249888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082012</commentid>
    <comment_count>2</comment_count>
      <attachid>249888</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-04-01 09:01:56 -0700</bug_when>
    <thetext>Comment on attachment 249888
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082024</commentid>
    <comment_count>3</comment_count>
      <attachid>249888</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-01 09:59:09 -0700</bug_when>
    <thetext>Comment on attachment 249888
Patch

Clearing flags on attachment: 249888

Committed r182236: &lt;http://trac.webkit.org/changeset/182236&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082026</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-01 09:59:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082036</commentid>
    <comment_count>5</comment_count>
      <attachid>249888</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-01 10:22:35 -0700</bug_when>
    <thetext>Comment on attachment 249888
Patch

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

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1124
&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_LEAD(initialCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_TRAIL(stringView[1]))

The is8Bit check here is unneeded extra code.

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1128
&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_TRAIL(initialCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_LEAD(stringView[stringView.length() - 2]))

The is8Bit check here is unneeded extra code.

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1143
&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_TRAIL(finalCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_LEAD(stringView[stringView.length() - 2]))

The is8Bit check here is unneeded extra code.

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1147
&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_LEAD(finalCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_TRAIL(stringView[1]))

The is8Bit check here is unneeded extra code.

&gt; Source/WebCore/platform/graphics/FontCascade.h:199
&gt; +    static std::pair&lt;unsigned, bool&gt; expansionOpportunityCount(const StringView&amp;, TextDirection, ExpansionBehavior);

Not sure why you chose pair over tuple here for return value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082044</commentid>
    <comment_count>6</comment_count>
      <attachid>249888</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-01 10:40:05 -0700</bug_when>
    <thetext>Comment on attachment 249888
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1124
&gt;&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_LEAD(initialCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_TRAIL(stringView[1]))
&gt; 
&gt; The is8Bit check here is unneeded extra code.

Done.

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1128
&gt;&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_TRAIL(initialCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_LEAD(stringView[stringView.length() - 2]))
&gt; 
&gt; The is8Bit check here is unneeded extra code.

Done.

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1143
&gt;&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_TRAIL(finalCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_LEAD(stringView[stringView.length() - 2]))
&gt; 
&gt; The is8Bit check here is unneeded extra code.

Done.

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:1147
&gt;&gt; +        if (!stringView.is8Bit() &amp;&amp; U16_IS_LEAD(finalCharacter) &amp;&amp; stringView.length() &gt; 1 &amp;&amp; U16_IS_TRAIL(stringView[1]))
&gt; 
&gt; The is8Bit check here is unneeded extra code.

Done.

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.h:199
&gt;&gt; +    static std::pair&lt;unsigned, bool&gt; expansionOpportunityCount(const StringView&amp;, TextDirection, ExpansionBehavior);
&gt; 
&gt; Not sure why you chose pair over tuple here for return value.

There is no need for a tuple; pairs require exactly two inner types and tuples allow for an arbitrary number. However, I only need two. AFAIK, that&apos;s the only relevant difference between pair and tuple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082045</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-04-01 10:44:14 -0700</bug_when>
    <thetext>Committed r182238: &lt;http://trac.webkit.org/changeset/182238&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249888</attachid>
            <date>2015-03-31 21:41:11 -0700</date>
            <delta_ts>2015-04-01 09:59:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143292-20150331214028.patch</filename>
            <type>text/plain</type>
            <size>47052</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODczZjY4NTA1NmJiN2U0
NzdiNmI2OTVkZmFjYjBhZWJhNThlYTQ0Ny4uOWFhNzdlNjdhNWI0NDg2OTcxMWZhMzAyNjI2NGJh
ZjdmZDEzNjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY5IEBACiAyMDE1LTAzLTMxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgU3VwcG9ydCBm
b3JjaW5nIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZGlu
ZyBvZiBhIHJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzMjkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWlncmF0ZSBFeHBhbnNpb25CZWhhdmlvciB0byBhbiBlbnVtIGNvbXByaXNlZCBvZiB0d28g
dmFsdWVzOiBvbmUgZm9yIGxlYWRpbmcgYmVoYXZpb3IKKyAgICAgICAgYW5kIG9uZSBmb3IgdHJh
aWxpbmcgYmVoYXZpb3IuIEVhY2ggb2YgdGhlc2UgdHdvIHZhbHVlcyBjYW4gdGFrZSBvbiBhIHZh
bHVlIG9mCisgICAgICAgICJmb3JjZSwiICJmb3JiaWQsIiBhbmQgbmVpdGhlci4gQWxsIGNhbGxz
IHRoYXQgaW50ZXJhY3Qgd2l0aCBqdXN0aWZpY2F0aW9uIGFyZQorICAgICAgICBtaWdyYXRlZCB0
byB1c2UgdGhpcyBuZXcgc3RydWN0dXJlLgorCisgICAgICAgIE5vdGUgdGhhdCBpbiB0aGlzIHRl
cm1pbm9sb2d5LCAibGVhZGluZyIgYW5kICJ0cmFpbGluZyIgYXJlIHdpdGggcmVzcGVjdCB0byB0
aGUgb3JkZXIKKyAgICAgICAgdGhhdCBlbGVtZW50cyBnZXQgbGFpZCBvdXQgaW4gYSBsaW5lLiBU
aGVyZWZvcmUsIGxlYWRpbmcgaXMgYWx3YXlzIG9uIHRoZSBsZWZ0LCBzaW5jZQorICAgICAgICBs
aW5lcyBnZXQgbGFpZCBvdXQgdGhhdCB3YXkgcmVnYXJkbGVzcyBvZiB0aGVpciBiaWRpIGF0dHJp
YnV0ZXMuCisKKyAgICAgICAgVGhpcyBpcyBnZXR0aW5nIHJlYWR5IGZvciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNjA4CisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbCk6IE1pZ3JhdGUgdG8gdGhlc2Ug
bmV3CisgICAgICAgIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6bGVhZGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5KTogUmV0dXJucyB3aGV0aGVyIG9uZSBp
cyBwcmVzZW50CisgICAgICAgIG9yIG5vdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRl
Ojp0cmFpbGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5KTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oOiBOZXcgbGVhZGluZyBleHBhbnNpb24gZmllbGQuCisgICAgICAgIChXZWJD
b3JlOjpHbHlwaEJ1ZmZlcjo6c2V0TGVhZGluZ0V4cGFuc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJ1ZmZlcjo6bGVhZGluZ0V4cGFuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dFJ1bi5oOiBtX2V4cGFuc2lvbkJlaGF2aW9yIG5lZWRzIG1vcmUgYml0cy4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmV4cGFuc2lvbkJlaGF2aW9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRSdW46OmFsbG93c0xlYWRpbmdFeHBhbnNpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFJ1bjo6YWxsb3dzVHJhaWxpbmdFeHBhbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOiBVcGRhdGUgdG8g
c3VwcG9ydCBuZXcgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OldpZHRo
SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5zaW9uTG9jYXRpb24pOiBXaGVyZSBz
aG91bGQgd2UgaW5zZXJ0IGV4cGFuc2lvbnM/CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlSW50ZXJuYWwpOiBVc2UgZXhwYW5zaW9uTG9jYXRpb24oKQorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW06CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNv
bXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcDogU2FtZSBhcyBXaWR0aEl0ZXJhdG9yCisgICAgICAgIChXZWJDb3JlOjpD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6ZXhwYW5zaW9uTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250
cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cGxleFRleHRDb250cm9sbGVyOjpsZWFkaW5nRXhwYW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1RleHRGbGFncy5oOiBBZGQgbmV3IGVudW0gdmFsdWVzCisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUJveC5oOiBVcGRhdGUgdG8gaW5jbHVkZSBuZXcgdmFsdWVzLgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94OjpJbmxpbmVCb3hCaXRmaWVsZHM6OklubGluZUJveEJpdGZpZWxk
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmNhbkhhdmVUcmFpbGluZ0V4cGFuc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldENhbkhhdmVUcmFpbGluZ0V4cGFu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNldEZvcmNlVHJhaWxpbmdFeHBh
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpmb3JjZVRyYWlsaW5nRXhwYW5z
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2V0Rm9yY2VMZWFkaW5nRXhwYW5z
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6Zm9yY2VMZWFkaW5nRXhwYW5zaW9u
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOiBVcGRhdGUgdG8gdXNlIG5ldyBGb250Q2Fz
Y2FkZSBzaWduYXR1cmVzLgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5zaW9uQmVoYXZpb3JGb3JJ
bmxpbmVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RXhwYW5zaW9uQmVoYXZpb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0
aW9uUG9zaXRpb25zRm9yU2VnbWVudCk6CisKKzIwMTUtMDMtMzEgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwogICAgICAgICBNb3ZlIEV4cGFuc2lvbkJlaGF2aW9y
RmxhZ3MgYW5kIFRleHREaXJlY3Rpb24gdG8gdGhlaXIgb3duIGZpbGUKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzI3MwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggMjc1ZjVmMDk1
OGI0ZDIyMDM2MzUwNDExNzM2OGUwYTFiMTczYmIyNy4uMWQ2NmE5ZjQ4YTc3YmM1YjkyMTVjYzNl
ZTZkNzQ1NzNjOTYxOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTAwNSw5ICsxMDA1LDE0IEBAIGJvb2wgRm9udENhc2Nh
ZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMiBjKQogICAgIHJldHVybiBpc0NKS0lk
ZW9ncmFwaChjKTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCitzdGQ6OnBh
aXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKIHsK
ICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gKGV4
cGFuc2lvbkJlaGF2aW9yICYgTGVhZGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmJpZExlYWRpbmdF
eHBhbnNpb247CisgICAgaWYgKChleHBhbnNpb25CZWhhdmlvciAmIExlYWRpbmdFeHBhbnNpb25N
YXNrKSA9PSBGb3JjZUxlYWRpbmdFeHBhbnNpb24pIHsKKyAgICAgICAgKytjb3VudDsKKyAgICAg
ICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgfQogICAgIGlmIChkaXJlY3Rpb24gPT0g
TFRSKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpXSkpIHsKQEAgLTEwMjUsMTMg
KzEwMzAsMjUgQEAgdW5zaWduZWQgRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnRJbnRlcm5hbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywKICAgICAgICAgICAgICAgICBpc0Fm
dGVyRXhwYW5zaW9uID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGNvdW50
OworICAgIGlmICghaXNBZnRlckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZpb3IgJiBUcmFp
bGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmNlVHJhaWxpbmdFeHBhbnNpb24pIHsKKyAgICAgICAg
Kytjb3VudDsKKyAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgfSBlbHNlIGlm
IChpc0FmdGVyRXhwYW5zaW9uICYmIChleHBhbnNpb25CZWhhdmlvciAmIFRyYWlsaW5nRXhwYW5z
aW9uTWFzaykgPT0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pIHsKKyAgICAgICAgLS1jb3VudDsK
KyAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoY291bnQsIGlzQWZ0ZXJFeHBhbnNpb24pOwogfQogCi11bnNpZ25lZCBGb250
Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYg
aXNBZnRlckV4cGFuc2lvbikKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQogewogICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElk
ZW9ncmFwaHMgPSBjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwogICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSAoZXhwYW5z
aW9uQmVoYXZpb3IgJiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGluZ0V4cGFu
c2lvbjsKKyAgICBpZiAoKGV4cGFuc2lvbkJlaGF2aW9yICYgTGVhZGluZ0V4cGFuc2lvbk1hc2sp
ID09IEZvcmNlTGVhZGluZ0V4cGFuc2lvbikgeworICAgICAgICArK2NvdW50OworICAgICAgICBp
c0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICB9CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIp
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOwpAQCAtMTA3NSwxNCArMTA5
Miw2MyBAQCB1bnNpZ25lZCBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAogICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBjb3VudDsKKyAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24gJiYgKGV4cGFuc2lvbkJlaGF2aW9yICYgVHJhaWxpbmdFeHBh
bnNpb25NYXNrKSA9PSBGb3JjZVRyYWlsaW5nRXhwYW5zaW9uKSB7CisgICAgICAgICsrY291bnQ7
CisgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXNBZnRl
ckV4cGFuc2lvbiAmJiAoZXhwYW5zaW9uQmVoYXZpb3IgJiBUcmFpbGluZ0V4cGFuc2lvbk1hc2sp
ID09IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uKSB7CisgICAgICAgIC0tY291bnQ7CisgICAgICAg
IGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGNvdW50LCBpc0FmdGVyRXhwYW5zaW9uKTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGU6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCitzdGQ6OnBh
aXI8dW5zaWduZWQsIGJvb2w+IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
KGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKIHsKKyAgICAvLyBGb3IgZWFjaCBj
aGFyYWN0ZXIsIGl0ZXJhdGluZyBmcm9tIGxlZnQgdG8gcmlnaHQ6CisgICAgLy8gICBJZiBpdCBp
cyByZWNvZ25pemVkIGFzIGEgc3BhY2UsIGluc2VydCBhbiBvcHBvcnR1bml0eSBhZnRlciBpdAor
ICAgIC8vICAgSWYgaXQgaXMgYW4gaWRlb2dyYXBoLCBpbnNlcnQgb25lIG9wcG9ydHVuaXR5IGJl
Zm9yZSBpdCBhbmQgb25lIG9wcG9ydHVuaXR5IGFmdGVyIGl0CisgICAgLy8gRG8gdGhpcyBzdWNo
IGEgd2F5IHNvIHRoYXQgdGhlcmUgYXJlIG5vdCB0d28gb3Bwb3J0dW5pdGllcyBuZXh0IHRvIGVh
Y2ggb3RoZXIuCiAgICAgaWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgp
LCBzdHJpbmdWaWV3Lmxlbmd0aCgpLCBkaXJlY3Rpb24sIGlzQWZ0ZXJFeHBhbnNpb24pOwotICAg
IHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwgZGlyZWN0aW9uLCBpc0FmdGVyRXhwYW5z
aW9uKTsKKyAgICAgICAgcmV0dXJuIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChz
dHJpbmdWaWV3LmNoYXJhY3RlcnM4KCksIHN0cmluZ1ZpZXcubGVuZ3RoKCksIGRpcmVjdGlvbiwg
ZXhwYW5zaW9uQmVoYXZpb3IpOworICAgIHJldHVybiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoc3RyaW5nVmlldy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSwg
ZGlyZWN0aW9uLCBleHBhbnNpb25CZWhhdmlvcik7Cit9CisKK2Jvb2wgRm9udENhc2NhZGU6Omxl
YWRpbmdFeHBhbnNpb25PcHBvcnR1bml0eShjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBpZiAoIXN0cmluZ1ZpZXcubGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVDaGFyMzIgaW5pdGlhbENoYXJhY3RlcjsK
KyAgICBpZiAoZGlyZWN0aW9uID09IExUUikgeworICAgICAgICBpbml0aWFsQ2hhcmFjdGVyID0g
c3RyaW5nVmlld1swXTsKKyAgICAgICAgaWYgKCFzdHJpbmdWaWV3LmlzOEJpdCgpICYmIFUxNl9J
U19MRUFEKGluaXRpYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUx
Nl9JU19UUkFJTChzdHJpbmdWaWV3WzFdKSkKKyAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIg
PSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoaW5pdGlhbENoYXJhY3Rlciwgc3RyaW5nVmlld1sxXSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5pdGlhbENoYXJhY3RlciA9IHN0cmluZ1ZpZXdbc3Ry
aW5nVmlldy5sZW5ndGgoKSAtIDFdOworICAgICAgICBpZiAoIXN0cmluZ1ZpZXcuaXM4Qml0KCkg
JiYgVTE2X0lTX1RSQUlMKGluaXRpYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkg
PiAxICYmIFUxNl9JU19MRUFEKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdKSkK
KyAgICAgICAgICAgIGluaXRpYWxDaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoc3Ry
aW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMl0sIGluaXRpYWxDaGFyYWN0ZXIpOworICAg
IH0KKworICAgIHJldHVybiBjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgp
ICYmIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woaW5pdGlhbENoYXJhY3Rlcik7Cit9CisKK2Jvb2wg
Rm9udENhc2NhZGU6OnRyYWlsaW5nRXhwYW5zaW9uT3Bwb3J0dW5pdHkoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nVmlldywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgaWYgKCFzdHJp
bmdWaWV3Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBVQ2hhcjMyIGZp
bmFsQ2hhcmFjdGVyOworICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7CisgICAgICAgIGZpbmFs
Q2hhcmFjdGVyID0gc3RyaW5nVmlld1tzdHJpbmdWaWV3Lmxlbmd0aCgpIC0gMV07CisgICAgICAg
IGlmICghc3RyaW5nVmlldy5pczhCaXQoKSAmJiBVMTZfSVNfVFJBSUwoZmluYWxDaGFyYWN0ZXIp
ICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9JU19MRUFEKHN0cmluZ1ZpZXdbc3Ry
aW5nVmlldy5sZW5ndGgoKSAtIDJdKSkKKyAgICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2
X0dFVF9TVVBQTEVNRU5UQVJZKHN0cmluZ1ZpZXdbc3RyaW5nVmlldy5sZW5ndGgoKSAtIDJdLCBm
aW5hbENoYXJhY3Rlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmluYWxDaGFyYWN0ZXIgPSBz
dHJpbmdWaWV3WzBdOworICAgICAgICBpZiAoIXN0cmluZ1ZpZXcuaXM4Qml0KCkgJiYgVTE2X0lT
X0xFQUQoZmluYWxDaGFyYWN0ZXIpICYmIHN0cmluZ1ZpZXcubGVuZ3RoKCkgPiAxICYmIFUxNl9J
U19UUkFJTChzdHJpbmdWaWV3WzFdKSkKKyAgICAgICAgICAgIGZpbmFsQ2hhcmFjdGVyID0gVTE2
X0dFVF9TVVBQTEVNRU5UQVJZKGZpbmFsQ2hhcmFjdGVyLCBzdHJpbmdWaWV3WzFdKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJlYXRBc1NwYWNlKGZpbmFsQ2hhcmFjdGVyKSB8fCAoY2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKSAmJiBpc0NKS0lkZW9ncmFwaE9yU3ltYm9s
KGZpbmFsQ2hhcmFjdGVyKSk7CiB9CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJlY2VpdmVUZXh0
RW1waGFzaXMoVUNoYXIzMiBjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmgKaW5kZXggNjdkM2UzODRmOTVlNTlhY2YzMWE0ODdhZjMxYzJjNDFkZDNk
MWVjNy4uNjZhMzRlODg3YzE5ZjJjZWFiN2E2OWU4NGVkNDExZDYyZmJiOTk3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xOTQsMTAg
KzE5NCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNoYXIz
Mik7CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsKIAot
ICAgIC8vIEJFV0FSRTogSWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGFmdGVyIHRoaXMgZnVu
Y3Rpb24gY2FsbCwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgaW5jbHVkZXMgYSB0cmFpbGluZyBv
cHBvcnR1bml0eQotICAgIC8vIHdoaWNoIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IGJlIHByZXNl
bnQuIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNl
Z21lbnQoKSBjb21wZW5zYXRlcwotICAgIC8vIGZvciB0aGlzIGJ5IGRlY3JlbWVudGluZyB0aGUg
cmV0dXJuZWQgdmFsdWUgaWYgaXNBZnRlckV4cGFuc2lvbiBpcyB0cnVlIGF0IHRoZSBlbmQgb2Yg
YSBsaW5lLgotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNv
bnN0IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsK
KyAgICAvLyBSZXR1cm5zICh0aGUgbnVtYmVyIG9mIG9wcG9ydHVuaXRpZXMsIHdoZXRoZXIgdGhl
IGxhc3QgZXhwYW5zaW9uIGlzIGEgdHJhaWxpbmcgZXhwYW5zaW9uKQorICAgIC8vIElmIHRoZXJl
IGFyZSBubyBvcHBvcnR1bml0aWVzLCB0aGUgYm9vbCB3aWxsIGJlIHRydWUgaWZmIHdlIGFyZSBm
b3JiaWRkaW5nIGxlYWRpbmcgZXhwYW5zaW9ucy4KKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2ln
bmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFN0cmluZ1ZpZXcmLCBU
ZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisKKyAgICAvLyBXaGV0aGVyIG9yIG5v
dCB0aGVyZSBpcyBhbiBleHBhbnNpb24gb3Bwb3J0dW5pdHkganVzdCBiZWZvcmUgdGhlIGZpcnN0
IGNoYXJhY3RlcgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHRha2UgYSBpc0FmdGVy
RXhwYW5zaW9uIGZsYWc7IHRoaXMgYXNzdW1lcyB0aGF0IGlzQWZ0ZXJFeHBhbnNpb24gaXMgZmFs
c2UKKyAgICAvLyBIZXJlLCAiTGVhZGluZyIgYW5kICJUcmFpbGluZyIgYXJlIHJlbGV2YW50IGFm
dGVyIHRoZSBsaW5lIGhhcyBiZWVuIHJlYXJyYW5nZWQgZm9yIGJpZGkuCisgICAgLy8gKCJMZWFk
aW5nIiBtZWFucyAibGVmdCIgYW5kICJUcmFpbGluZyIgbWVhbnMgInJpZ2h0LiIpCisgICAgc3Rh
dGljIGJvb2wgbGVhZGluZ0V4cGFuc2lvbk9wcG9ydHVuaXR5KGNvbnN0IFN0cmluZ1ZpZXcmLCBU
ZXh0RGlyZWN0aW9uKTsKKyAgICBzdGF0aWMgYm9vbCB0cmFpbGluZ0V4cGFuc2lvbk9wcG9ydHVu
aXR5KGNvbnN0IFN0cmluZ1ZpZXcmLCBUZXh0RGlyZWN0aW9uKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZVNtb290aGluZyhib29sKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcoKTsKQEAgLTIzNyw4ICsyNDMs
OCBAQCBwcml2YXRlOgogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7CiAgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwogCi0gICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRl
cm5hbChjb25zdCBMQ2hhciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlz
QWZ0ZXJFeHBhbnNpb24pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9u
LCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVk
LCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCBz
aXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CisgICAgc3Rh
dGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudElu
dGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5z
aW9uQmVoYXZpb3IpOwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZy
aWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCmluZGV4IDI4M2JjM2ZlODI2MDBkODIy
NWZjNDE4YjYzNGY0YjJkMzA4ZWMzODQuLmM4MmFmMzkwODQ0ZjVkMjdlMmU2MDQ3OWQ5YmQ3ZWI0
OTFkMDc5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhC
dWZmZXIuaApAQCAtMTAwLDYgKzEwMCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SW5pdGlh
bEFkdmFuY2UoR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFk
dmFuY2UgPSBpbml0aWFsQWR2YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYg
aW5pdGlhbEFkdmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CisKKyAg
ICB2b2lkIHNldExlYWRpbmdFeHBhbnNpb24oZmxvYXQgbGVhZGluZ0V4cGFuc2lvbikgeyBtX2xl
YWRpbmdFeHBhbnNpb24gPSBsZWFkaW5nRXhwYW5zaW9uOyB9CisgICAgZmxvYXQgbGVhZGluZ0V4
cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGVhZGluZ0V4cGFuc2lvbjsgfQogICAgIAogICAg
IEdseXBoIGdseXBoQXQoaW50IGluZGV4KSBjb25zdAogICAgIHsKQEAgLTI0NCw2ICsyNDcsNyBA
QCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICBWZWN0b3I8RmxvYXRTaXplLCAyMDQ4
PiBtX29mZnNldHM7CiAjZW5kaWYKKyAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKaW5kZXggMzcy
OGU1NWVlZDMxYTE5OTJhYmMxMDZiZDg5Mzc5NzMxOWE4NjljYy4uN2U0ZmU3Y2Y4YTVjZjgzN2Zl
NTk5NTlmY2NlZDZkNjM3YjExMzkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RleHRSdW4uaApAQCAtMTY1LDggKzE2NSw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB4UG9z
KCkgY29uc3QgeyByZXR1cm4gbV94cG9zOyB9CiAgICAgdm9pZCBzZXRYUG9zKGZsb2F0IHhQb3Mp
IHsgbV94cG9zID0geFBvczsgfQogICAgIGZsb2F0IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwYW5zaW9uOyB9Ci0gICAgYm9vbCBhbGxvd3NMZWFkaW5nRXhwYW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9leHBhbnNpb25CZWhhdmlvciAmIEFsbG93TGVhZGluZ0V4cGFuc2lvbjsgfQot
ICAgIGJvb2wgYWxsb3dzVHJhaWxpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFu
c2lvbkJlaGF2aW9yICYgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbjsgfQorICAgIEV4cGFuc2lvbkJl
aGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25CZWhh
dmlvcjsgfQogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4obV9kaXJlY3Rpb24pOyB9CiAgICAgYm9vbCBydGwoKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbiA9PSBSVEw7IH0KICAgICBib29sIGx0cigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IExUUjsgfQpAQCAtMjE5LDcgKzIxOCw3IEBAIHByaXZh
dGU6CiAgICAgZmxvYXQgbV9ob3Jpem9udGFsR2x5cGhTdHJldGNoOwogCiAgICAgZmxvYXQgbV9l
eHBhbnNpb247Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3IgbV9leHBhbnNpb25CZWhhdmlvciA6IDI7
CisgICAgdW5zaWduZWQgbV9leHBhbnNpb25CZWhhdmlvciA6IDQ7CiAgICAgdW5zaWduZWQgbV9h
bGxvd1RhYnMgOiAxOwogICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDogMTsKICAgICB1bnNpZ25l
ZCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUgOiAxOyAvLyBXYXMgdGhpcyBkaXJlY3Rpb24gc2V0IGJ5
IGFuIG92ZXJyaWRlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKaW5kZXggYjIyZDI5ZDJmZTgwMmNjNWY2ZjlmOTBk
YzAyODIyZDFmYjI2YzY4Ny4uNWUzMzBlNTQyZTViMmQwMTMxNmUzYmFkNWJhMzk5MDg1Y2RmMjI1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihj
b25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2UKICAgICAs
IG1fcnVuKHJ1bikKICAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQogICAgICwgbV9ydW5XaWR0
aFNvRmFyKDApCi0gICAgLCBtX2lzQWZ0ZXJFeHBhbnNpb24oIXJ1bi5hbGxvd3NMZWFkaW5nRXhw
YW5zaW9uKCkpCisgICAgLCBtX2lzQWZ0ZXJFeHBhbnNpb24oKHJ1bi5leHBhbnNpb25CZWhhdmlv
cigpICYgTGVhZGluZ0V4cGFuc2lvbk1hc2spID09IEZvcmJpZExlYWRpbmdFeHBhbnNpb24pCiAg
ICAgLCBtX2ZpbmFsUm91bmRpbmdXaWR0aCgwKQogICAgICwgbV90eXBlc2V0dGluZ0ZlYXR1cmVz
KGZvbnQtPnR5cGVzZXR0aW5nRmVhdHVyZXMoKSkKICAgICAsIG1fZmFsbGJhY2tGb250cyhmYWxs
YmFja0ZvbnRzKQpAQCAtNTYsMTAgKzU2LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRv
cihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2UKICAg
ICBpZiAoIW1fZXhwYW5zaW9uKQogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0g
MDsKICAgICBlbHNlIHsKLSAgICAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gbV9pc0FmdGVy
RXhwYW5zaW9uOwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4udGV4dCgpLCBtX3J1
bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7Ci0gICAgICAgIGlmIChpc0Fm
dGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQotICAgICAg
ICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOworICAgICAgICB1bnNpZ25lZCBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQobV9ydW4udGV4dCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgcnVuLmV4cGFuc2lv
bkJlaGF2aW9yKCkpLmZpcnN0OwogCiAgICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCkKICAgICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwpAQCAtMTY4
LDEzICsxNjUsNDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEds
eXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYKICAgICByZXR1cm4gd2lkdGhE
aWZmZXJlbmNlOwogfQogCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxib29sLCBib29sPiBleHBh
bnNpb25Mb2NhdGlvbihib29sIGlkZW9ncmFwaCwgYm9vbCB0cmVhdEFzU3BhY2UsIGJvb2wgbHRy
LCBib29sIGlzQWZ0ZXJFeHBhbnNpb24sIGJvb2wgZm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgYm9v
bCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiwgYm9vbCBmb3JjZUxlYWRpbmdFeHBhbnNpb24sIGJv
b2wgZm9yY2VUcmFpbGluZ0V4cGFuc2lvbikKK3sKKyAgICBib29sIGV4cGFuZExlZnQgPSBpZGVv
Z3JhcGg7CisgICAgYm9vbCBleHBhbmRSaWdodCA9IGlkZW9ncmFwaDsKKyAgICBpZiAodHJlYXRB
c1NwYWNlKSB7CisgICAgICAgIGlmIChsdHIpCisgICAgICAgICAgICBleHBhbmRSaWdodCA9IHRy
dWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4cGFuZExlZnQgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoaXNBZnRlckV4cGFuc2lvbikgeworICAgICAgICBpZiAobHRyKQorICAgICAgICAg
ICAgZXhwYW5kTGVmdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBhbmRS
aWdodCA9IGZhbHNlOworICAgIH0KKyAgICBBU1NFUlQoIWZvcmJpZExlYWRpbmdFeHBhbnNpb24g
fHwgIWZvcmNlTGVhZGluZ0V4cGFuc2lvbik7CisgICAgQVNTRVJUKCFmb3JiaWRUcmFpbGluZ0V4
cGFuc2lvbiB8fCAhZm9yY2VUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgaWYgKGZvcmJpZExlYWRp
bmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZExlZnQgPSBmYWxzZTsKKyAgICBpZiAoZm9yYmlk
VHJhaWxpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZFJpZ2h0ID0gZmFsc2U7CisgICAgaWYg
KGZvcmNlTGVhZGluZ0V4cGFuc2lvbikKKyAgICAgICAgZXhwYW5kTGVmdCA9IHRydWU7CisgICAg
aWYgKGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZFJpZ2h0ID0gdHJ1ZTsK
KyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQpOworfQor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgogaW5saW5lIHVuc2lnbmVkIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5
cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogewogICAgIGJvb2wgcnRsID0gbV9ydW4ucnRsKCk7CiAg
ICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSAobV9mb250LT5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9m
b250LT53b3JkU3BhY2luZygpIHx8IG1fZXhwYW5zaW9uKSAmJiAhbV9ydW4uc3BhY2luZ0Rpc2Fi
bGVkKCk7CiAKKyAgICBib29sIHJ1bkZvcmNlc0xlYWRpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhw
YW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZUxlYWRpbmdF
eHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JjZXNUcmFpbGluZ0V4cGFuc2lvbiA9IChtX3J1bi5l
eHBhbnNpb25CZWhhdmlvcigpICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JjZVRyYWls
aW5nRXhwYW5zaW9uOworICAgIGJvb2wgcnVuRm9yYmlkc0xlYWRpbmdFeHBhbnNpb24gPSAobV9y
dW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRM
ZWFkaW5nRXhwYW5zaW9uOworICAgIGJvb2wgcnVuRm9yYmlkc1RyYWlsaW5nRXhwYW5zaW9uID0g
KG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBUcmFpbGluZ0V4cGFuc2lvbk1hc2spID09IEZv
cmJpZFRyYWlsaW5nRXhwYW5zaW9uOwogICAgIGZsb2F0IHdpZHRoU2luY2VMYXN0Um91bmRpbmcg
PSBtX3J1bldpZHRoU29GYXI7CisgICAgZmxvYXQgbGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGgg
PSAwOwogICAgIG1fcnVuV2lkdGhTb0ZhciA9IGZsb29yZihtX3J1bldpZHRoU29GYXIpOwogICAg
IHdpZHRoU2luY2VMYXN0Um91bmRpbmcgLT0gbV9ydW5XaWR0aFNvRmFyOwogCkBAIC0xODksNiAr
MjIwLDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChU
ZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVu
Z3RoID0gMDsKICAgICBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UgY2hhcmFjdGVyc1RyZWF0ZWRB
c1NwYWNlOwogICAgIFN0cmluZyBub3JtYWxpemVkU3BhY2VzU3RyaW5nQ2FjaGU7CisgICAgLy8g
V2UgYXJlIGl0ZXJhdGluZyBpbiBzdHJpbmcgb3JkZXIsIG5vdCBnbHlwaCBvcmRlci4gQ29tcGFy
ZSB0aGlzIHRvIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMo
KQogICAgIHdoaWxlICh0ZXh0SXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5n
dGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwog
ICAgICAgICBpbnQgY3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCk7CkBAIC0yNDIsMzYgKzI3NCw2MyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAg
ICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcpIHsKICAgICAgICAgICAgIC8vIEFjY291bnQgZm9y
IGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgaWYgKHdpZHRoICYmIG1fZm9udC0+bGV0dGVy
U3BhY2luZygpKQorICAgICAgICAgICAgaWYgKHdpZHRoKSB7CiAgICAgICAgICAgICAgICAgd2lk
dGggKz0gbV9mb250LT5sZXR0ZXJTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgd2lkdGggKz0g
bGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGg7CisgICAgICAgICAgICAgICAgbGVmdG92ZXJKdXN0
aWZpY2F0aW9uV2lkdGggPSAwOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0aWMg
Ym9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAgICAgICAgICAgICBib29sIHRyZWF0QXNTcGFj
ZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlm
ICh0cmVhdEFzU3BhY2UgfHwgKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENhc2NhZGU6
OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSkpIHsKKyAgICAgICAgICAgIGJvb2wg
Y3VycmVudElzTGFzdENoYXJhY3RlciA9IGN1cnJlbnRDaGFyYWN0ZXIgKyBhZHZhbmNlTGVuZ3Ro
ID09IHN0YXRpY19jYXN0PHNpemVfdD4obV9ydW4ubGVuZ3RoKCkpOworICAgICAgICAgICAgYm9v
bCBmb3JjZUxlYWRpbmdFeHBhbnNpb24gPSBmYWxzZTsgLy8gT24gdGhlIGxlZnQsIHJlZ2FyZGxl
c3Mgb2YgbV9ydW4ubHRyKCkKKyAgICAgICAgICAgIGJvb2wgZm9yY2VUcmFpbGluZ0V4cGFuc2lv
biA9IGZhbHNlOyAvLyBPbiB0aGUgcmlnaHQsIHJlZ2FyZGxlc3Mgb2YgbV9ydW4ubHRyKCkKKyAg
ICAgICAgICAgIGJvb2wgZm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICAgICAgaWYg
KHJ1bkZvcmNlc0xlYWRpbmdFeHBhbnNpb24pCisgICAgICAgICAgICAgICAgZm9yY2VMZWFkaW5n
RXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyAhY3VycmVudENoYXJhY3RlciA6IGN1cnJlbnRJc0xh
c3RDaGFyYWN0ZXI7CisgICAgICAgICAgICBpZiAocnVuRm9yY2VzVHJhaWxpbmdFeHBhbnNpb24p
CisgICAgICAgICAgICAgICAgZm9yY2VUcmFpbGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8g
Y3VycmVudElzTGFzdENoYXJhY3RlciA6ICFjdXJyZW50Q2hhcmFjdGVyOworICAgICAgICAgICAg
aWYgKHJ1bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgIGZvcmJpZExl
YWRpbmdFeHBhbnNpb24gPSBtX3J1bi5sdHIoKSA/ICFjdXJyZW50Q2hhcmFjdGVyIDogY3VycmVu
dElzTGFzdENoYXJhY3RlcjsKKyAgICAgICAgICAgIGlmIChydW5Gb3JiaWRzVHJhaWxpbmdFeHBh
bnNpb24pCisgICAgICAgICAgICAgICAgZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24gPSBtX3J1bi5s
dHIoKSA/IGN1cnJlbnRJc0xhc3RDaGFyYWN0ZXIgOiAhY3VycmVudENoYXJhY3RlcjsKKyAgICAg
ICAgICAgIGJvb2wgaWRlb2dyYXBoID0gKGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2hhcmFjdGVyKSk7CisgICAgICAgICAgICBp
ZiAodHJlYXRBc1NwYWNlIHx8IGlkZW9ncmFwaCB8fCBmb3JjZUxlYWRpbmdFeHBhbnNpb24gfHwg
Zm9yY2VUcmFpbGluZ0V4cGFuc2lvbikgewogICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUg
dGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9y
dHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBleHBhbmRMZWZ0LCBleHBhbmRSaWdodDsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjp0aWUoZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQpID0gZXhwYW5z
aW9uTG9jYXRpb24oaWRlb2dyYXBoLCB0cmVhdEFzU3BhY2UsIG1fcnVuLmx0cigpLCBtX2lzQWZ0
ZXJFeHBhbnNpb24sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24sIGZvcmJpZFRyYWlsaW5nRXhwYW5z
aW9uLCBmb3JjZUxlYWRpbmdFeHBhbnNpb24sIGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pOwogICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhwYW5zaW9uOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRyZWF0QXNTcGFjZSAmJiAhbV9pc0FmdGVyRXhwYW5z
aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIHRoZSBleHBhbnNpb24gb3Bw
b3J0dW5pdHkgYmVmb3JlIHRoaXMgaWRlb2dyYXBoLgotICAgICAgICAgICAgICAgICAgICAgICAg
bV9leHBhbnNpb24gLT0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGV4cGFuc2lvbkF0VGhpc09wcG9ydHVuaXR5ID0gIW1fcnVuLmFwcGx5
V29yZFJvdW5kaW5nKCkgPyBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5IDogcm91bmRmKHByZXZp
b3VzRXhwYW5zaW9uKSAtIHJvdW5kZihtX2V4cGFuc2lvbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3J1bldpZHRoU29GYXIgKz0gZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXItPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnQtPnplcm9XaWR0aFNwYWNl
R2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+c3BhY2VHbHlwaCgp
LCBmb250LCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdseXBoQnVmZmVyLT5leHBhbmRMYXN0QWR2YW5jZShleHBhbnNpb25BdFRoaXNP
cHBvcnR1bml0eSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRMZWZ0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ydW4ubHRyKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbmNyZWFzZSBwcmV2aW91cyB3aWR0aAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHkg
PSAhbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSA/IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkg
OiByb3VuZGYocHJldmlvdXNFeHBhbnNpb24pIC0gcm91bmRmKG1fZXhwYW5zaW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3J1bldpZHRoU29GYXIgKz0gZXhwYW5zaW9uQXRUaGlz
T3Bwb3J0dW5pdHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci0+aXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mb3JU
ZXh0RW1waGFzaXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5z
aW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+c3BhY2VHbHlwaCgpLCBmb250LCBleHBhbnNp
b25BdFRoaXNPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKGV4cGFuc2lvbkF0VGhpc09wcG9ydHVu
aXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIG5l
eHQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb25BdFRo
aXNPcHBvcnR1bml0eSA9ICFtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpID8gbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSA6IHJvdW5kZihwcmV2aW91c0V4cGFuc2lvbikgLSByb3VuZGYobV9leHBh
bnNpb24gLSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCArPSBleHBhbnNpb25BdFRoaXNPcHBv
cnR1bml0eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lzQWZ0ZXJFeHBhbnNpb24g
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldmlvdXNFeHBhbnNpb24gPSBtX2V4cGFuc2lvbjsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ydW4uYWxsb3dzVHJhaWxpbmdFeHBhbnNpb24o
KSB8fCAobV9ydW4ubHRyKCkgJiYgY3VycmVudENoYXJhY3RlciArIGFkdmFuY2VMZW5ndGggPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fcnVuLmxlbmd0aCgpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IChtX3J1bi5ydGwoKSAmJiBjdXJyZW50Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoZXhwYW5kUmlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhw
YW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCArPSAhbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSA/IG1fZXhwYW5zaW9uUGVy
T3Bwb3J0dW5pdHkgOiByb3VuZGYocHJldmlvdXNFeHBhbnNpb24pIC0gcm91bmRmKG1fZXhwYW5z
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBZnRlckV4cGFuc2lvbiA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0
eSA9ICFtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpID8gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eSA6IHJvdW5kZihwcmV2aW91c0V4cGFuc2lvbikgLSByb3VuZGYobV9leHBhbnNpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGggKz0gZXhwYW5zaW9uQXRUaGlzT3Bwb3J0dW5pdHk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ydW4ubHRyKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBtX2lz
QWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKQEAgLTM0MSw2ICs0MDAsMTMgQEAgaW5saW5lIHVuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVy
YXRvciwgR2x5cGgKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChsZWZ0b3Zlckp1c3RpZmlj
YXRpb25XaWR0aCkgeworICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCisgICAgICAgICAg
ICBnbHlwaEJ1ZmZlci0+YWRkKGxhc3RGb250RGF0YS0+emVyb1dpZHRoU3BhY2VHbHlwaCgpLCBs
YXN0Rm9udERhdGEsIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQobGFzdEZvbnREYXRh
LT5zcGFjZUdseXBoKCksIGxhc3RGb250RGF0YSwgbGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGgs
IG1fcnVuLmxlbmd0aCgpKTsKKyAgICB9CisKICAgICBpZiAoc2hvdWxkQXBwbHlGb250VHJhbnNm
b3JtcygpKSB7CiAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1z
KGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwg
KnRoaXMsIG1fdHlwZXNldHRpbmdGZWF0dXJlcywgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsK
ICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggOThhYmUw
NDRmNjk2NDliYTA0NmEwOWZmN2NjOTk5ZjBmYzYyNTY3MS4uOTVlNTZmZWMzODRhYTczOTZiOTYx
YmRjMTQ3YmExZWQ1ZTVkZThjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC02MDIsNyArNjAy
LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICBmbG9hdCBhZnRlcldpZHRoID0gY29u
dHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7CiAKICAgICBpZiAocnVuLnJ0bCgpKQotICAgICAgICBz
ZWxlY3Rpb25SZWN0Lm1vdmUoY29udHJvbGxlci50b3RhbFdpZHRoKCkgLSBhZnRlcldpZHRoLCAw
KTsKKyAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGNvbnRyb2xsZXIudG90YWxXaWR0aCgpIC0g
YWZ0ZXJXaWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigpLCAwKTsKICAgICBlbHNl
CiAgICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7CiAgICAgc2VsZWN0
aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwpAQCAtNjIzLDcgKzYy
Myw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyCiAgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNv
bnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwogCiAgICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAg
ICBpbml0aWFsQWR2YW5jZSA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpICsgY29udHJvbGxlci5m
aW5hbFJvdW5kaW5nV2lkdGgoKSAtIGFmdGVyV2lkdGg7CisgICAgICAgIGluaXRpYWxBZHZhbmNl
ID0gY29udHJvbGxlci50b3RhbFdpZHRoKCkgKyBjb250cm9sbGVyLmZpbmFsUm91bmRpbmdXaWR0
aCgpIC0gYWZ0ZXJXaWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigpOwogICAgICAg
ICBnbHlwaEJ1ZmZlci5yZXZlcnNlKDAsIGdseXBoQnVmZmVyLnNpemUoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwCmluZGV4IGQzYTgxMTNjMmMyNGViNWJkMzk3MWNlNjE3ZjUxODgzMDQwMTgwZTAu
LjJkMjJhZWU5M2NhNWI1YTk3ZTlmZTdhODJlMDI1MjZhNzk0ZGQ3OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCkBAIC0xMzMsNyArMTMzLDYgQEAgQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHQKICAgICAsIG1fZmluYWxSb3VuZGluZ1dpZHRoKDApCiAgICAgLCBtX2V4cGFuc2lvbihydW4u
ZXhwYW5zaW9uKCkpCiAgICAgLCBtX2xlYWRpbmdFeHBhbnNpb24oMCkKLSAgICAsIG1fYWZ0ZXJF
eHBhbnNpb24oIXJ1bi5hbGxvd3NMZWFkaW5nRXhwYW5zaW9uKCkpCiAgICAgLCBtX2ZhbGxiYWNr
Rm9udHMoZmFsbGJhY2tGb250cykKICAgICAsIG1fbWluR2x5cGhCb3VuZGluZ0JveFgoc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQogICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94
WChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpCkBAIC0xNDQsMTAgKzE0Myw3IEBA
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBUZXh0CiAgICAgaWYgKCFtX2V4cGFuc2lvbikKICAgICAgICAg
bV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2wg
aXNBZnRlckV4cGFuc2lvbiA9IG1fYWZ0ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhw
YW5zaW9uKTsKLSAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1Ry
YWlsaW5nRXhwYW5zaW9uKCkpCi0gICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
LS07CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2Fz
Y2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigp
ID8gTFRSIDogUlRMLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSkuZmlyc3Q7CiAKICAgICAgICAg
aWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQogICAgICAgICAgICAgbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSA9IDA7CkBAIC01MTksOCArNTE1LDEwIEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVm
ZmVyLCBHCiAgICAgICAgIC8vIFdlIG11c3Qgc3RvcmUgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3Ig
dGhlIGZpcnN0IGdseXBoIHdlIGFyZSBnb2luZyB0byBkcmF3LgogICAgICAgICAvLyBXaGVuIGxl
ZnRtb3N0R2x5cGggaXMgMCwgaXQgcmVwcmVzZW50cyB0aGUgZmlyc3QgZ2x5cGggdG8gZHJhdywg
dGFraW5nIGludG8KICAgICAgICAgLy8gYWNjb3VudCB0aGUgdGV4dCBkaXJlY3Rpb24uCi0gICAg
ICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbGVmdG1vc3RHbHlwaCkKKyAgICAgICAgaWYgKGdseXBo
QnVmZmVyICYmICFsZWZ0bW9zdEdseXBoKSB7CiAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0
SW5pdGlhbEFkdmFuY2UoY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKSk7CisgICAgICAg
ICAgICBnbHlwaEJ1ZmZlci0+c2V0TGVhZGluZ0V4cGFuc2lvbihtX2xlYWRpbmdFeHBhbnNpb24p
OworICAgICAgICB9CiAKICAgICAgICAgd2hpbGUgKG1fZ2x5cGhJbkN1cnJlbnRSdW4gPCBnbHlw
aENvdW50KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBnbHlwaFN0YXJ0T2Zmc2V0ID0gY29tcGxl
eFRleHRSdW4uaW5kZXhBdChnKTsKQEAgLTU3NywxMSArNTc1LDQyIEBAIHZvaWQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBo
QnVmZmVyLCBHCiAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBtX2ZpbmFsUm91bmRpbmdXaWR0
aDsKIH0KIAorc3RhdGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gZXhwYW5zaW9uTG9j
YXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJlYXRBc1NwYWNlLCBib29sIGx0ciwgYm9vbCBp
c0FmdGVyRXhwYW5zaW9uLCBib29sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24sIGJvb2wgZm9yYmlk
VHJhaWxpbmdFeHBhbnNpb24sIGJvb2wgZm9yY2VMZWFkaW5nRXhwYW5zaW9uLCBib29sIGZvcmNl
VHJhaWxpbmdFeHBhbnNpb24pCit7CisgICAgYm9vbCBleHBhbmRMZWZ0ID0gaWRlb2dyYXBoOwor
ICAgIGJvb2wgZXhwYW5kUmlnaHQgPSBpZGVvZ3JhcGg7CisgICAgaWYgKHRyZWF0QXNTcGFjZSkg
eworICAgICAgICBpZiAobHRyKQorICAgICAgICAgICAgZXhwYW5kUmlnaHQgPSB0cnVlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBleHBhbmRMZWZ0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KGlzQWZ0ZXJFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZExlZnQgPSBmYWxzZTsKKyAgICBBU1NF
UlQoIWZvcmJpZExlYWRpbmdFeHBhbnNpb24gfHwgIWZvcmNlTGVhZGluZ0V4cGFuc2lvbik7Cisg
ICAgQVNTRVJUKCFmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiB8fCAhZm9yY2VUcmFpbGluZ0V4cGFu
c2lvbik7CisgICAgaWYgKGZvcmJpZExlYWRpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZExl
ZnQgPSBmYWxzZTsKKyAgICBpZiAoZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pCisgICAgICAgIGV4
cGFuZFJpZ2h0ID0gZmFsc2U7CisgICAgaWYgKGZvcmNlTGVhZGluZ0V4cGFuc2lvbikKKyAgICAg
ICAgZXhwYW5kTGVmdCA9IHRydWU7CisgICAgaWYgKGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pCisg
ICAgICAgIGV4cGFuZFJpZ2h0ID0gdHJ1ZTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhw
YW5kTGVmdCwgZXhwYW5kUmlnaHQpOworfQorCiB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQogeworICAgIGJvb2wgYWZ0ZXJFeHBhbnNpb24gPSAo
bV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3Ji
aWRMZWFkaW5nRXhwYW5zaW9uOwogICAgIENHRmxvYXQgd2lkdGhTaW5jZUxhc3RDb21taXQgPSAw
OwogICAgIHNpemVfdCBydW5Db3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKICAgICBi
b29sIGhhc0V4dHJhU3BhY2luZyA9IChtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC53
b3JkU3BhY2luZygpIHx8IG1fZXhwYW5zaW9uKSAmJiAhbV9ydW4uc3BhY2luZ0Rpc2FibGVkKCk7
CisgICAgYm9vbCBydW5Gb3JjZXNMZWFkaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJl
aGF2aW9yKCkgJiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yY2VMZWFkaW5nRXhwYW5zaW9u
OworICAgIGJvb2wgcnVuRm9yY2VzVHJhaWxpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9u
QmVoYXZpb3IoKSAmIFRyYWlsaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yY2VUcmFpbGluZ0V4cGFu
c2lvbjsKKyAgICBib29sIHJ1bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFu
c2lvbkJlaGF2aW9yKCkgJiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGluZ0V4
cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmJpZHNUcmFpbGluZ0V4cGFuc2lvbiA9IChtX3J1bi5l
eHBhbnNpb25CZWhhdmlvcigpICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRUcmFp
bGluZ0V4cGFuc2lvbjsKKyAgICAvLyBXZSBhcmUgaXRlcmF0aW5nIGluIGdseXBoIG9yZGVyLCBu
b3Qgc3RyaW5nIG9yZGVyLiBDb21wYXJlIHRoaXMgdG8gV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUlu
dGVybmFsKCkKICAgICBmb3IgKHNpemVfdCByID0gMDsgciA8IHJ1bkNvdW50OyArK3IpIHsKICAg
ICAgICAgQ29tcGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5z
W3JdOwogICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhD
b3VudCgpOwpAQCAtNjYyLDE2ICs2OTEsMzMgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkKICAgICAgICAgICAgIGlmIChoYXNFeHRyYVNwYWNp
bmcpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5j
ZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KICAgICAgICAgICAgICAgICAv
LyBUaGF0IHdheSB3ZSB3ZWVkIG91dCB6ZXJvIHdpZHRoIGx1cmtlcnMuICBUaGlzIGJlaGF2aW9y
IG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi0gICAgICAgICAgICAgICAgaWYgKGFk
dmFuY2Uud2lkdGggJiYgbV9mb250LmxldHRlclNwYWNpbmcoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoYWR2YW5jZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0aCArPSBt
X2ZvbnQubGV0dGVyU3BhY2luZygpOwogCisgICAgICAgICAgICAgICAgYm9vbCBsYXN0Q2hhcmFj
dGVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckluZGV4ICsgMSkgPT0gbV9ydW4u
bGVuZ3RoKCkgfHwgKFUxNl9JU19TVVJST0dBVEVfTEVBRChjaCkgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNoYXJhY3RlckluZGV4ICsgMikgPT0gbV9ydW4ubGVuZ3RoKCkgJiYgVTE2X0lTX1NV
UlJPR0FURV9UUkFJTCgqKGNwICsgY2hhcmFjdGVySW5kZXggKyAxKSkpOworCisgICAgICAgICAg
ICAgICAgYm9vbCBmb3JjZUxlYWRpbmdFeHBhbnNpb24gPSBmYWxzZTsgLy8gT24gdGhlIGxlZnQs
IHJlZ2FyZGxlc3Mgb2YgbV9ydW4ubHRyKCkKKyAgICAgICAgICAgICAgICBib29sIGZvcmNlVHJh
aWxpbmdFeHBhbnNpb24gPSBmYWxzZTsgLy8gT24gdGhlIHJpZ2h0LCByZWdhcmRsZXNzIG9mIG1f
cnVuLmx0cigpCisgICAgICAgICAgICAgICAgYm9vbCBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYm9vbCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGlmIChydW5Gb3JjZXNMZWFkaW5nRXhwYW5zaW9uKQorICAg
ICAgICAgICAgICAgICAgICBmb3JjZUxlYWRpbmdFeHBhbnNpb24gPSBtX3J1bi5sdHIoKSA/ICFj
aGFyYWN0ZXJJbmRleCA6IGxhc3RDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgaWYgKHJ1bkZv
cmNlc1RyYWlsaW5nRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBmb3JjZVRyYWlsaW5n
RXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBsYXN0Q2hhcmFjdGVyIDogIWNoYXJhY3RlckluZGV4
OworICAgICAgICAgICAgICAgIGlmIChydW5Gb3JiaWRzTGVhZGluZ0V4cGFuc2lvbikKKyAgICAg
ICAgICAgICAgICAgICAgZm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gIWNo
YXJhY3RlckluZGV4IDogbGFzdENoYXJhY3RlcjsKKyAgICAgICAgICAgICAgICBpZiAocnVuRm9y
Ymlkc1RyYWlsaW5nRXhwYW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBmb3JiaWRUcmFpbGlu
Z0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gbGFzdENoYXJhY3RlciA6ICFjaGFyYWN0ZXJJbmRl
eDsKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFj
aW5nLgotICAgICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgRm9udENhc2NhZGU6Omlz
Q0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBpZGVvZ3Jh
cGggPSBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCk7CisgICAgICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBpZGVvZ3JhcGggfHwgZm9yY2VMZWFkaW5nRXhwYW5z
aW9uIHx8IGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
RGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBh
bnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9leHBhbnNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhwYW5kTGVmdCwg
ZXhwYW5kUmlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnRpZShleHBhbmRMZWZ0
LCBleHBhbmRSaWdodCkgPSBleHBhbnNpb25Mb2NhdGlvbihpZGVvZ3JhcGgsIHRyZWF0QXNTcGFj
ZSwgbV9ydW4ubHRyKCksIGFmdGVyRXhwYW5zaW9uLCBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBm
b3JiaWRUcmFpbGluZ0V4cGFuc2lvbiwgZm9yY2VMZWFkaW5nRXhwYW5zaW9uLCBmb3JjZVRyYWls
aW5nRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHByZXZpb3VzRXhw
YW5zaW9uID0gbV9leHBhbnNpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRyZWF0
QXNTcGFjZSAmJiAhbV9hZnRlckV4cGFuc2lvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRha2UgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBiZWZvcmUgdGhpcyBpZGVvZ3Jh
cGguCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwYW5kTGVmdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHByZXZpb3VzIHdpZHRoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24gLT0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb25BdFRoaXNPcHBv
cnR1bml0eSA9ICFtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpID8gbV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eSA6IHJvdW5kZihwcmV2aW91c0V4cGFuc2lvbikgLSByb3VuZGYobV9leHBhbnNpb24p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdG90YWxXaWR0aCArPSBleHBhbnNpb25B
dFRoaXNPcHBvcnR1bml0eTsKQEAgLTY4MSwxOSArNzI3LDIwIEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZhbmNlcygpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYWRqdXN0ZWRBZHZhbmNlcy5sYXN0KCkud2lkdGggKz0gZXhwYW5zaW9u
QXRUaGlzT3Bwb3J0dW5pdHk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNF
eHBhbnNpb24gPSBtX2V4cGFuc2lvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEdseXBoIHx8IG1fcnVuLmFsbG93c1RyYWlsaW5n
RXhwYW5zaW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRSaWdodCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9u
UGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZS53aWR0
aCArPSAhbV9ydW4uYXBwbHlXb3JkUm91bmRpbmcoKSA/IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5p
dHkgOiByb3VuZGYocHJldmlvdXNFeHBhbnNpb24pIC0gcm91bmRmKG1fZXhwYW5zaW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb25BdFRoaXNPcHBvcnR1bml0eSA9
ICFtX3J1bi5hcHBseVdvcmRSb3VuZGluZygpID8gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA6
IHJvdW5kZihwcmV2aW91c0V4cGFuc2lvbikgLSByb3VuZGYobV9leHBhbnNpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggKz0gZXhwYW5zaW9uQXRUaGlzT3Bw
b3J0dW5pdHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFmdGVyRXhwYW5zaW9uID0gZmFsc2U7CiAKICAgICAgICAg
ICAgICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5nLgogICAgICAgICAgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlICYmIChjaCAhPSAnXHQnIHx8ICFtX3J1bi5hbGxvd1RhYnMo
KSkgJiYgKGNoYXJhY3RlckluZGV4ID4gMCB8fCByID4gMCkgJiYgbV9mb250LndvcmRTcGFjaW5n
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IG1fZm9udC53b3Jk
U3BhY2luZygpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X2FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGFmdGVyRXhwYW5z
aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEFwcGx5IHJvdW5k
aW5nIGhhY2tzIGlmIG5lZWRlZC4KQEAgLTc0Niw2ICs3OTMsNyBAQCB2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQogICAgICAgICBpZiAoIWlzTW9u
b3RvbmljKQogICAgICAgICAgICAgY29tcGxleFRleHRSdW4uc2V0SXNOb25Nb25vdG9uaWMoKTsK
ICAgICB9CisKICAgICBtX3RvdGFsV2lkdGggKz0gd2lkdGhTaW5jZUxhc3RDb21taXQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuaAppbmRleCAwYzljNDIxNmQ4Mzc4NjdlYTQ5ZjJkNDA0NzIy
ODlkOGUyNjZjYTk3Li4zNTM1MGFjZGNiYWE1NGQ2MWRlYWMwMTdmNTI3OGJmOTA2OWQ1NjFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFg7IH0KICAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KICAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5n
Qm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KKworICAgIGZs
b2F0IGxlYWRpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2xlYWRpbmdFeHBhbnNpb247
IH0KICAgICAKIHByaXZhdGU6CiAgICAgY2xhc3MgQ29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVm
Q291bnRlZDxDb21wbGV4VGV4dFJ1bj4gewpAQCAtMTY3LDcgKzE2OSw2IEBAIHByaXZhdGU6CiAg
ICAgZmxvYXQgbV9leHBhbnNpb247CiAgICAgZmxvYXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eTsKICAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247Ci0gICAgYm9vbCBtX2FmdGVyRXhwYW5z
aW9uOwogCiAgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKaW5kZXggNTYwYjEwMmY1ZTllZTBh
ZTIyMzk4ZDM4YzgxN2JjYTZlMGUxOWFhMC4uOTU5MDZiNWFjMDE0MjEwNTBjYmFiYWU0YWEzYzdk
MTE5Y2ExYzFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RmxhZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCkBA
IC0zMiwxMSArMzIsMTggQEAgZW51bSBUZXh0RGlyZWN0aW9uIHsgUlRMLCBMVFIgfTsKIAogaW5s
aW5lIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikg
eyByZXR1cm4gZGlyZWN0aW9uID09IExUUjsgfQogCisvLyBIZXJlLCAiTGVhZGluZyIgYW5kICJU
cmFpbGluZyIgYXJlIHJlbGV2YW50IGFmdGVyIHRoZSBsaW5lIGhhcyBiZWVuIHJlYXJyYW5nZWQg
Zm9yIGJpZGkuCisvLyAoIkxlYWRpbmciIG1lYW5zICJsZWZ0IiBhbmQgIlRyYWlsaW5nIiBtZWFu
cyAicmlnaHQuIikKIGVudW0gRXhwYW5zaW9uQmVoYXZpb3JGbGFncyB7CiAgICAgRm9yYmlkVHJh
aWxpbmdFeHBhbnNpb24gPSAwIDw8IDAsCiAgICAgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbiA9IDEg
PDwgMCwKLSAgICBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uID0gMCA8PCAxLAotICAgIEFsbG93TGVh
ZGluZ0V4cGFuc2lvbiA9IDEgPDwgMSwKKyAgICBGb3JjZVRyYWlsaW5nRXhwYW5zaW9uID0gMiA8
PCAwLAorICAgIFRyYWlsaW5nRXhwYW5zaW9uTWFzayA9IDMgPDwgMCwKKworICAgIEZvcmJpZExl
YWRpbmdFeHBhbnNpb24gPSAwIDw8IDIsCisgICAgQWxsb3dMZWFkaW5nRXhwYW5zaW9uID0gMSA8
PCAyLAorICAgIEZvcmNlTGVhZGluZ0V4cGFuc2lvbiA9IDIgPDwgMiwKKyAgICBMZWFkaW5nRXhw
YW5zaW9uTWFzayA9IDMgPDwgMiwKIH07CiAKIHR5cGVkZWYgdW5zaWduZWQgRXhwYW5zaW9uQmVo
YXZpb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKaW5kZXggYzM1MmM2MjYzNjVm
OTZlNzdlNjk3ZjM2MWYxZDAzMzc5Zjc4MDgwOC4uNzI4ODNmMjc5NTcyODRlMTNmZjE0ZjNhNjkw
MTRhZGNlYzYyM2Q2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtMzE1
LDEwICszMTUsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX2lzSG9yaXpvbnRhbChpc0hv
cml6b250YWwpCiAgICAgICAgICAgICAsIG1fZW5kc1dpdGhCcmVhayhmYWxzZSkKICAgICAgICAg
ICAgICwgbV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbihmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9jYW5IYXZlVHJhaWxpbmdFeHBhbnNpb24oZmFsc2UpCiAgICAg
ICAgICAgICAsIG1fa25vd25Ub0hhdmVOb092ZXJmbG93KHRydWUpICAKICAgICAgICAgICAgICwg
bV9oYXNFbGxpcHNpc0JveE9ySHlwaGVuKGZhbHNlKQogICAgICAgICAgICAgLCBtX2Rpck92ZXJy
aWRlKGZhbHNlKQogICAgICAgICAgICAgLCBtX2JlaGF2ZXNMaWtlVGV4dChmYWxzZSkKKyAgICAg
ICAgICAgICwgbV9mb3JjZVRyYWlsaW5nRXhwYW5zaW9uKGZhbHNlKQorICAgICAgICAgICAgLCBt
X2ZvcmNlTGVhZGluZ0V4cGFuc2lvbihmYWxzZSkKICAgICAgICAgICAgICwgbV9kZXRlcm1pbmVk
SWZOZXh0T25MaW5lRXhpc3RzKGZhbHNlKQogICAgICAgICAgICAgLCBtX25leHRPbkxpbmVFeGlz
dHMoZmFsc2UpCiAgICAgICAgIHsKQEAgLTM0NCwxMSArMzQ3LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgQUREX0JPT0xFQU5fQklURklFTEQoZW5kc1dpdGhCcmVhaywgRW5kc1dpdGhCcmVhayk7IC8v
IFdoZXRoZXIgdGhlIGxpbmUgZW5kcyB3aXRoIGEgPGJyPi4KICAgICAgICAgLy8gc2hhcmVkIGJl
dHdlZW4gUm9vdElubGluZUJveCBhbmQgSW5saW5lVGV4dEJveAogICAgICAgICBBRERfQk9PTEVB
Tl9CSVRGSUVMRChoYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbiwg
SGFzU2VsZWN0ZWRDaGlsZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24pOworICAgICAgICBB
RERfQk9PTEVBTl9CSVRGSUVMRChjYW5IYXZlVHJhaWxpbmdFeHBhbnNpb24sIENhbkhhdmVUcmFp
bGluZ0V4cGFuc2lvbik7CiAgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGtub3duVG9IYXZl
Tm9PdmVyZmxvdywgS25vd25Ub0hhdmVOb092ZXJmbG93KTsKICAgICAgICAgQUREX0JPT0xFQU5f
QklURklFTEQoaGFzRWxsaXBzaXNCb3hPckh5cGhlbiwgSGFzRWxsaXBzaXNCb3hPckh5cGhlbik7
CiAgICAgICAgIC8vIGZvciBJbmxpbmVUZXh0Qm94CiAgICAgICAgIEFERF9CT09MRUFOX0JJVEZJ
RUxEKGRpck92ZXJyaWRlLCBEaXJPdmVycmlkZSk7CiAgICAgICAgIEFERF9CT09MRUFOX0JJVEZJ
RUxEKGJlaGF2ZXNMaWtlVGV4dCwgQmVoYXZlc0xpa2VUZXh0KTsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBvYmplY3QgcmVwcmVzZW50cyB0ZXh0IHdpdGggYSBub24temVybyBoZWlnaHQuIEluY2x1
ZGVzIG5vbi1pbWFnZSBsaXN0IG1hcmtlcnMsIHRleHQgYm94ZXMsIGJyLgorICAgICAgICBBRERf
Qk9PTEVBTl9CSVRGSUVMRChmb3JjZVRyYWlsaW5nRXhwYW5zaW9uLCBGb3JjZVRyYWlsaW5nRXhw
YW5zaW9uKTsKKyAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoZm9yY2VMZWFkaW5nRXhwYW5z
aW9uLCBGb3JjZUxlYWRpbmdFeHBhbnNpb24pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2RldGVybWluZWRJZk5leHRPbkxpbmVFeGlzdHMgOiAxOwpAQCAtNDE0
LDYgKzQyMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRIYXNIeXBoZW4oYm9vbCBoYXNI
eXBoZW4pIHsgbV9iaXRmaWVsZHMuc2V0SGFzRWxsaXBzaXNCb3hPckh5cGhlbihoYXNIeXBoZW4p
OyB9ICAgIAogICAgIGJvb2wgY2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJldHVy
biBtX2JpdGZpZWxkcy5oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lv
bigpOyB9CiAgICAgdm9pZCBzZXRDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbihib29sIGNhbkhhdmVM
ZWFkaW5nRXhwYW5zaW9uKSB7IG1fYml0ZmllbGRzLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW5PckNh
bkhhdmVMZWFkaW5nRXhwYW5zaW9uKGNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKTsgfQorICAgIGJv
b2wgY2FuSGF2ZVRyYWlsaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMu
Y2FuSGF2ZVRyYWlsaW5nRXhwYW5zaW9uKCk7IH0KKyAgICB2b2lkIHNldENhbkhhdmVUcmFpbGlu
Z0V4cGFuc2lvbihib29sIGNhbkhhdmVUcmFpbGluZ0V4cGFuc2lvbikgeyBtX2JpdGZpZWxkcy5z
ZXRDYW5IYXZlVHJhaWxpbmdFeHBhbnNpb24oY2FuSGF2ZVRyYWlsaW5nRXhwYW5zaW9uKTsgfQor
ICAgIHZvaWQgc2V0Rm9yY2VUcmFpbGluZ0V4cGFuc2lvbigpIHsgbV9iaXRmaWVsZHMuc2V0Rm9y
Y2VUcmFpbGluZ0V4cGFuc2lvbih0cnVlKTsgfQorICAgIGJvb2wgZm9yY2VUcmFpbGluZ0V4cGFu
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmZvcmNlVHJhaWxpbmdFeHBhbnNpb24o
KTsgfQorICAgIHZvaWQgc2V0Rm9yY2VMZWFkaW5nRXhwYW5zaW9uKCkgeyBtX2JpdGZpZWxkcy5z
ZXRGb3JjZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7IH0KKyAgICBib29sIGZvcmNlTGVhZGluZ0V4
cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmZvcmNlTGVhZGluZ0V4cGFuc2lv
bigpOyB9CiAgICAgCiAgICAgLy8gRm9yIElubGluZUZsb3dCb3ggYW5kIElubGluZVRleHRCb3gK
ICAgICBib29sIGV4dHJhY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmV4dHJhY3Rl
ZCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA0NTZl
NmU2ZmU4ZTAzZGNjMTY5MTU1NDkzNDQ0NzM0MmE4YTVlOGI2Li5jNTZjZGQwNDU0NzgwNzM2OTdm
YmZkMWZkNGZkNGJiZTMwODJiMTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKQEAgLTc3LDYgKzc3LDEyIEBAIHB1YmxpYzoKICAgICB1c2luZyBJbmxpbmVCb3g6
OnNldEhhc0h5cGhlbjsKICAgICB1c2luZyBJbmxpbmVCb3g6OmNhbkhhdmVMZWFkaW5nRXhwYW5z
aW9uOwogICAgIHVzaW5nIElubGluZUJveDo6c2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb247Cisg
ICAgdXNpbmcgSW5saW5lQm94OjpjYW5IYXZlVHJhaWxpbmdFeHBhbnNpb247CisgICAgdXNpbmcg
SW5saW5lQm94OjpzZXRDYW5IYXZlVHJhaWxpbmdFeHBhbnNpb247CisgICAgdXNpbmcgSW5saW5l
Qm94Ojpmb3JjZVRyYWlsaW5nRXhwYW5zaW9uOworICAgIHVzaW5nIElubGluZUJveDo6c2V0Rm9y
Y2VUcmFpbGluZ0V4cGFuc2lvbjsKKyAgICB1c2luZyBJbmxpbmVCb3g6OmZvcmNlTGVhZGluZ0V4
cGFuc2lvbjsKKyAgICB1c2luZyBJbmxpbmVCb3g6OnNldEZvcmNlTGVhZGluZ0V4cGFuc2lvbjsK
IAogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQnlTdGFydChjb25zdCBJbmxpbmVUZXh0
Qm94KiBmaXJzdCwgY29uc3QgSW5saW5lVGV4dEJveCogc2Vjb25kKSB7IHJldHVybiBmaXJzdC0+
c3RhcnQoKSA8IHNlY29uZC0+c3RhcnQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDQ3MDg4OWUwYjQ1NjM3YjU4
Y2EwYmQyZDI1NmIwYWYwMWViOTUwN2EuLjYzZWIzMjY5Zjc5ODk1NjJmMTFiMDNiMTgxZTQ2MmY3
MjNkNmRkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCkBAIC03MjIsNiArNzIyLDQ1IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBs
aW5lCiAgICAgbGluZUJveC0+cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKGxpbmVMb2dpY2Fs
TGVmdCwgbmVlZHNXb3JkU3BhY2luZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgRXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KGJvb2wgaXNBZnRlckV4cGFu
c2lvbikKK3sKKyAgICBFeHBhbnNpb25CZWhhdmlvciByZXN1bHQgPSBBbGxvd1RyYWlsaW5nRXhw
YW5zaW9uOworICAgIHJlc3VsdCB8PSBpc0FmdGVyRXhwYW5zaW9uID8gRm9yYmlkTGVhZGluZ0V4
cGFuc2lvbiA6IEFsbG93TGVhZGluZ0V4cGFuc2lvbjsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlFeHBhbnNpb25CZWhhdmlvcihJbmxpbmVUZXh0Qm94
JiB0ZXh0Qm94LCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3sKKyAgICBz
d2l0Y2ggKGV4cGFuc2lvbkJlaGF2aW9yICYgTGVhZGluZ0V4cGFuc2lvbk1hc2spIHsKKyAgICBj
YXNlIEZvcmNlTGVhZGluZ0V4cGFuc2lvbjoKKyAgICAgICAgdGV4dEJveC5zZXRGb3JjZUxlYWRp
bmdFeHBhbnNpb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3JiaWRMZWFkaW5nRXhw
YW5zaW9uOgorICAgICAgICB0ZXh0Qm94LnNldENhbkhhdmVMZWFkaW5nRXhwYW5zaW9uKGZhbHNl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBbGxvd0xlYWRpbmdFeHBhbnNpb246CisgICAg
ICAgIHRleHRCb3guc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoIChleHBhbnNpb25CZWhhdmlvciAmIFRyYWlsaW5n
RXhwYW5zaW9uTWFzaykgeworICAgIGNhc2UgRm9yY2VUcmFpbGluZ0V4cGFuc2lvbjoKKyAgICAg
ICAgdGV4dEJveC5zZXRGb3JjZVRyYWlsaW5nRXhwYW5zaW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9yYmlkVHJhaWxpbmdFeHBhbnNpb246CisgICAgICAgIHRleHRCb3guc2V0Q2Fu
SGF2ZVRyYWlsaW5nRXhwYW5zaW9uKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uOgorICAgICAgICB0ZXh0Qm94LnNldENhbkhhdmVUcmFpbGlu
Z0V4cGFuc2lvbih0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogQmlkaVJ1
biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2Vn
bWVudChSb290SW5saW5lQm94KiBsaW5lQm94LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sIEVU
ZXh0QWxpZ24gdGV4dEFsaWduLCBmbG9hdCYgbG9naWNhbExlZnQsIAogICAgIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1Nw
YWNlUnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAs
IFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlLAogICAgIFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCkBAIC03NDIsMTAgKzc4MSwxMiBAQCBCaWRp
UnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JT
ZWdtZW50KFJvb3RJbmxpbmVCbwogICAgICAgICB9CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0
PihydW4tPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJUZXh0ID0gZG93
bmNhc3Q8UmVuZGVyVGV4dD4ocnVuLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGF1dG8mIHRl
eHRCb3ggPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqcnVuLT5ib3goKSk7CiAgICAgICAgICAg
ICBpZiAodGV4dEFsaWduID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4pIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAg
ICAgIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpydW4tPmJveCgpKS5zZXRDYW5IYXZlTGVhZGlu
Z0V4cGFuc2lvbih0cnVlKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVz
SW5SdW4gPSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0
LnN0cmluZ1ZpZXcocnVuLT5tX3N0YXJ0LCBydW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVj
dGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICBFeHBhbnNpb25CZWhh
dmlvciBleHBhbnNpb25CZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJv
eChpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICBhcHBseUV4cGFuc2lvbkJlaGF2
aW9yKHRleHRCb3gsIGV4cGFuc2lvbkJlaGF2aW9yKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0aWVzSW5SdW47CisgICAgICAgICAgICAgICAgc3RkOjp0aWUob3Bwb3J0dW5p
dGllc0luUnVuLCBpc0FmdGVyRXhwYW5zaW9uKSA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldyhydW4tPm1fc3RhcnQsIHJ1bi0+bV9z
dG9wKSwgcnVuLT5ib3goKS0+ZGlyZWN0aW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKTsKICAgICAg
ICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzLmFwcGVuZChvcHBvcnR1bml0aWVzSW5S
dW4pOwogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gb3Bwb3J0
dW5pdGllc0luUnVuOwogICAgICAgICAgICAgfQpAQCAtNzY2LDExICs4MDcsMTMgQEAgQmlkaVJ1
biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2Vn
bWVudChSb290SW5saW5lQm8KICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBsZWFmQ2hp
bGQgPSBydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCktPmZpcnN0TGVhZkNoaWxkKCk7IGxlYWZDaGls
ZDsgbGVhZkNoaWxkID0gbGVhZkNoaWxkLT5uZXh0TGVhZkNoaWxkKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXM8SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzQWZ0ZXJFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNh
c3Q8SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24o
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8
SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv
dW50ZXJlZEp1c3RpZmllZFJ1YnkgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVuZGVyZXIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4g
PSBGb250Q2FzY2FkZTo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmlu
Z1ZpZXcoKSwgbGVhZkNoaWxkLT5kaXJlY3Rpb24oKSwgaXNBZnRlckV4cGFuc2lvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9
IGV4cGFuc2lvbkJlaGF2aW9yRm9ySW5saW5lVGV4dEJveChpc0FmdGVyRXhwYW5zaW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGx5RXhwYW5zaW9uQmVoYXZpb3IodGV4dEJveCwgZXhw
YW5zaW9uQmVoYXZpb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0
dW5pdGllc0luUnVuOworICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0aWUob3Bwb3J0dW5p
dGllc0luUnVuLCBpc0FmdGVyRXhwYW5zaW9uKSA9IEZvbnRDYXNjYWRlOjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KHJlbmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlv
bigpLCBleHBhbnNpb25CZWhhdmlvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbnNp
b25PcHBvcnR1bml0aWVzLmFwcGVuZChvcHBvcnR1bml0aWVzSW5SdW4pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBvcHBvcnR1bml0aWVzSW5S
dW47CiAgICAgICAgICAgICAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>