<?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>157071</bug_id>
          
          <creation_ts>2016-04-27 07:18:18 -0700</creation_ts>
          <short_desc>RenderMathOperator: Move calculation of preferred width into MathOperator</short_desc>
          <delta_ts>2016-06-09 13:49:24 -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>MathML</component>
          <version>WebKit 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>
          <dependson>156910</dependson>
    
    <dependson>156913</dependson>
    
    <dependson>156921</dependson>
    
    <dependson>156950</dependson>
          <blocked>152244</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1187740</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-27 07:18:18 -0700</bug_when>
    <thetext>I&apos;m extracting more changes from bug 152244.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187742</commentid>
    <comment_count>1</comment_count>
      <attachid>277476</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-27 07:32:50 -0700</bug_when>
    <thetext>Created attachment 277476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191147</commentid>
    <comment_count>2</comment_count>
      <attachid>278392</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-09 00:51:53 -0700</bug_when>
    <thetext>Created attachment 278392
Patch

Updating after https://trac.webkit.org/changeset/200569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191883</commentid>
    <comment_count>3</comment_count>
      <attachid>278602</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-11 01:53:34 -0700</bug_when>
    <thetext>Created attachment 278602
Patch

Minor change: s/maximumGlyphWidth/setMaxPreferredWidth/ in the ASSERT of MathOperator::calculateStretchyData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191889</commentid>
    <comment_count>4</comment_count>
      <attachid>278606</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-11 02:19:12 -0700</bug_when>
    <thetext>Created attachment 278606
Patch for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192749</commentid>
    <comment_count>5</comment_count>
      <attachid>278602</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-13 08:21:17 -0700</bug_when>
    <thetext>Comment on attachment 278602
Patch

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

LGTM just some minor nits.

&gt; Source/WebCore/ChangeLog:11
&gt; +        (WebCore::MathOperator::MathOperator): Initialize m_maxPreferredWidth

Nit: Missing dot at the end.

&gt; Source/WebCore/ChangeLog:21
&gt; +        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): This function performs bad

Nit: s/bad/wrong/

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:264
&gt; +void MathOperator::calculateStretchyData(const RenderStyle&amp; style, bool setMaxPreferredWidth, LayoutUnit targetSize)

A small suggestion, maybe call the argument &quot;calculateMaxPreferredWidth&quot;.

&gt; Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp:270
&gt; +    // FIXME: We should not using stretchSize during the preferred width calculation nor should we leave logical width dirty (http://webkit.org/b/152244).

Nit: s/using/use/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192775</commentid>
    <comment_count>6</comment_count>
      <attachid>278842</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-13 09:42:55 -0700</bug_when>
    <thetext>Created attachment 278842
Patch

Addressing Manuel&apos;s comments...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200833</commentid>
    <comment_count>7</comment_count>
      <attachid>280918</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-09 07:57:32 -0700</bug_when>
    <thetext>Created attachment 280918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200950</commentid>
    <comment_count>8</comment_count>
      <attachid>280918</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-06-09 13:32:50 -0700</bug_when>
    <thetext>Comment on attachment 280918
Patch

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

Looks like a nice clean-up. r=me.

&gt; Source/WebCore/rendering/mathml/MathOperator.h:93
&gt; +    LayoutUnit m_maxPreferredWidth = 0;

We prefer the C++11 initializer syntax, but I guess you are being consistent with the other things in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200960</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-09 13:49:24 -0700</bug_when>
    <thetext>Committed r201881: &lt;http://trac.webkit.org/changeset/201881&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277476</attachid>
            <date>2016-04-27 07:32:50 -0700</date>
            <delta_ts>2016-05-09 00:51:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>maxprefwidth.patch</filename>
            <type>text/plain</type>
            <size>12200</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MTdhYjBhLi4yMWNiMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTYtMDQtMjcgIEZyZWRlcmljIFdhbmcgIDxmcmVkLndhbmdAZnJlZS5mcj4KKworICAg
ICAgICBSZW5kZXJNYXRoT3BlcmF0b3I6IE1vdmUgY2FsY3VsYXRpb24gb2YgcHJlZmVycmVkIHdp
ZHRoIGludG8gTWF0aE9wZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTcwNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2UuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRvcik6IEluaXRpYWxpemUgbV9tYXhQcmVmZXJy
ZWRXaWR0aAorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcik6IElu
dHJvZHVjZSBhIHN0eWxlIHBhcmFtZXRlciBhbmQgY2FsbCByZXNldC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGhPcGVyYXRvcjo6cmVzZXQpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIHJlc2V0IHRo
ZSBvcGVyYXRvci4KKyAgICAgICAgRm9yIG5vdyB3ZSBvbmx5IHNldCB0aGUgd2lkdGggb2YgdGhl
IGJhc2UgZ2x5cGggYW5kIHRoZSBwcmVmZXJyZWQgbWF4IHdpZHRoLgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IENhbGN1bGF0
ZSB0aGUgbV9tYXhQcmVmZXJyZWRXaWR0aC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRv
cjo6ZmluZFN0cmV0Y2h5RGF0YSk6IENoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlv
biBhbmQgZGlyZWN0bHkgc2V0IG1fbWF4UHJlZmVycmVkV2lkdGguCisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDogQWRkIG1fbWF4UHJlZmVycmVkV2lkdGggbWVtYmVy
IGFuZCB1cGRhdGUgc29tZSBkZWNsYXJhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OndpZHRoKTogTmV3IGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6bWF4UHJlZmVycmVkV2lkdGgpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLgorICAg
ICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKTogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBiYWQKKyAgICAgICAgb3BlcmF0aW9ucyB0
aGF0IHdpbGwgYmUgZml4ZWQgaW4gYnVnIDE1MjI0NCB3aGVuIHdlIHVwZGF0ZSB0aGUgdGVzdHMu
CisgICAgICAgIEZvciBub3csIGxldCdzIGp1c3QgdXNlIG1heFByZWZlcnJlZFdpZHRoKCkgZm9y
IG5vbi1ob3Jpem9udGFsIG9wZXJhdG9ycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjp1cGRhdGVTdHlsZSk6IFVzZSB0aGUgbmV3IHNpZ25hdHVyZSBvZiB0aGUgZnVu
Y3Rpb25zLgorCiAyMDE2LTA0LTI1ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4K
IAogICAgICAgICBJbnRyb2R1Y2UgTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAppbmRleCAxZjJj
Y2I2Li43OGNjNWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuY3BwCkBAIC03OSw2ICs3OSw3IEBAIE1hdGhPcGVyYXRvcjo6TWF0aE9wZXJh
dG9yKCkKICAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQogICAgICwgbV9vcGVyYXRvclR5cGUoVW5k
ZWZpbmVkT3BlcmF0b3IpCiAgICAgLCBtX3N0cmV0Y2hUeXBlKFVuc3RyZXRjaGVkKQorICAgICwg
bV9tYXhQcmVmZXJyZWRXaWR0aCgwKQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9hc2NlbnQo
MCkKICAgICAsIG1fZGVzY2VudCgwKQpAQCAtODYsMTAgKzg3LDI4IEBAIE1hdGhPcGVyYXRvcjo6
TWF0aE9wZXJhdG9yKCkKIHsKIH0KIAotdm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVD
aGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCit2b2lkIE1hdGhP
cGVyYXRvcjo6c2V0T3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBVQ2hhciBiYXNl
Q2hhcmFjdGVyLCBPcGVyYXRvclR5cGUgb3BlcmF0b3JUeXBlKQogewogICAgIG1fYmFzZUNoYXJh
Y3RlciA9IGJhc2VDaGFyYWN0ZXI7CiAgICAgbV9vcGVyYXRvclR5cGUgPSBvcGVyYXRvclR5cGU7
CisgICAgcmVzZXQoc3R5bGUpOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cmVzZXQoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSAwOworICAg
IG1fd2lkdGggPSAwOworCisgICAgLy8gV2UgdXNlIHRoZSBiYXNlIHNpemUgZm9yIHRoZSBjYWxj
dWxhdGlvbiBvZiB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7
CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX21heFByZWZlcnJlZFdpZHRoID0gbV93aWR0aCA9IGFkdmFuY2VXaWR0aEZvckds
eXBoKGJhc2VHbHlwaCk7CisKKyAgICBpZiAobV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVy
YXRvcikKKyAgICAgICAgZmluZFN0cmV0Y2h5RGF0YShzdHlsZSwgdHJ1ZSk7IC8vIFdlIGFsc28g
dGFrZSBpbnRvIGFjY291bnQgdGhlIHdpZHRoIG9mIGxhcmdlciBzaXplcyBmb3IgdGhlIGNhbGN1
bGF0aW9uIG9mIHRoZSBwcmVmZXJyZWQgd2lkdGguCisgICAgZWxzZSBpZiAobV9vcGVyYXRvclR5
cGUgPT0gRGlzcGxheU9wZXJhdG9yKQorICAgICAgICBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihzdHlsZSk7IC8vIFdlIGNhbiBkaXJlY3RseSBzZWxlY3QgdGhlIHNpemUgdmFyaWFudCBh
bmQgZGV0ZXJtaW5lIHRoZSBmaW5hbCBtZXRyaWNzLgogfQogCiBib29sIE1hdGhPcGVyYXRvcjo6
Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5
cGgpIGNvbnN0CkBAIC0xMzIsNiArMTUxLDggQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmZpbmREaXNw
bGF5U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBmb3Ig
KGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEdseXBoRGF0YSBn
bHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKICAgICAgICAgc2V0U2l6ZVZh
cmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGluIFNUSVggV29y
ZCBoYXZlIGluY29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNlbWVudCBvZiBz
dXBlcnNjcmlwdCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkIChodHRwOi8vc291
cmNlZm9yZ2UubmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCisgICAgICAgIG1fbWF4UHJl
ZmVycmVkV2lkdGggPSBib3VuZHNGb3JHbHlwaChnbHlwaERhdGEpLndpZHRoKCk7CiAgICAgICAg
IG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFs
aWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKICAgICAgICAg
aWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDAsMjQgKzI2MSwyNCBAQCBib29sIE1hdGhPcGVy
YXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgVmVjdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6Zmlu
ZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5
cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQordm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRT
dHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIHNldE1heFByZWZlcnJl
ZFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCiB7CiAgICAgQVNTRVJUKG1fb3BlcmF0b3JU
eXBlID09IFZlcnRpY2FsT3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0gSG9yaXpvbnRhbE9w
ZXJhdG9yKTsKLSAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1fb3BlcmF0b3JUeXBl
ID09IFZlcnRpY2FsT3BlcmF0b3IpOworICAgIEFTU0VSVCghc2V0TWF4UHJlZmVycmVkV2lkdGgg
fHwgbV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvcik7CiAgICAgYm9vbCBpc1ZlcnRp
Y2FsID0gbV9vcGVyYXRvclR5cGUgPT0gVmVydGljYWxPcGVyYXRvcjsKIAogICAgIEdseXBoRGF0
YSBiYXNlR2x5cGg7CiAgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKKyAgICBpZiAo
IXNldE1heFByZWZlcnJlZFdpZHRoKSB7CiAgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlm
IHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KICAgICAgICAgZmxvYXQgYmFzZVNpemUg
PSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGJhc2VHbHlwaCk7CiAgICAgICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE1hdGhPcGVyYXRvcjo6R2x5cGhBc3Nl
bWJseURhdGEgYXNzZW1ibHlEYXRhOworICAgIEdseXBoQXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0
YTsKICAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKICAgICAgICAgVmVjdG9y
PEdseXBoPiBzaXplVmFyaWFudHM7CiAgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpB
c3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CkBAIC0yNjUsMTEgKzI4NiwxMSBAQCB2b2lkIE1h
dGhPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZs
b2F0KiBtYXhpbXVtR2x5cAogICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMu
CiAgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKICAgICAg
ICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsK
LSAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4
aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKGdseXBoRGF0YSkpOworICAgICAgICAgICAgaWYgKHNldE1heFByZWZlcnJlZFdp
ZHRoKQorICAgICAgICAgICAgICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSBzdGQ6Om1heDxMYXlv
dXRVbml0PihtX21heFByZWZlcnJlZFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERh
dGEpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNldFNpemVWYXJpYW50
KGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IGlzVmVydGljYWwgPyBo
ZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRh
KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0
Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CiAg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzA4LDExICszMjksMTEgQEAgdm9pZCBNYXRo
T3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9h
dCogbWF4aW11bUdseXAKICAgICB9CiAKICAgICAvLyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBt
YXhpbXVtIHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21wb25lbnQuCi0gICAgaWYgKG1heGltdW1HbHlw
aFdpZHRoKSB7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVt
R2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkpOwotICAg
ICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFk
dmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKLSAgICAgICAgKm1h
eGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhX
aWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLmJvdHRvbSkpOworICAgIGlmIChzZXRNYXhQcmVmZXJyZWRXaWR0aCkgewor
ICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQ
cmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkpOwor
ICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQ
cmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lv
bikpOworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4o
bV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1p
ZGRsZSkpOworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5p
dD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRh
LmJvdHRvbSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAppbmRleCBhNzRmODM3Li5lOTVhOGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAg
LTQ2LDggKzQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgSG9yaXpvbnRhbE9wZXJhdG9yCiAgICAg
fTsKICAgICBNYXRoT3BlcmF0b3IoKTsKLSAgICB2b2lkIHNldE9wZXJhdG9yKFVDaGFyIGJhc2VD
aGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7CisgICAgdm9pZCBzZXRPcGVyYXRvcihjb25zdCBSZW5k
ZXJTdHlsZSYsIFVDaGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7CisgICAgdm9pZCBy
ZXNldChjb25zdCBSZW5kZXJTdHlsZSYpOwogCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBMYXlvdXRVbml0IG1heFByZWZlcnJlZFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhQcmVmZXJyZWRXaWR0aDsgfQogICAgIExheW91dFVuaXQgaXRh
bGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQogCiAg
ICAgYm9vbCBpc1N0cmV0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZXRjaFR5cGUgIT0gVW5z
dHJldGNoZWQ7IH0KQEAgLTg4LDcgKzkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2l6ZVZh
cmlhbnQoY29uc3QgR2x5cGhEYXRhJik7CiAgICAgdm9pZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0
IEdseXBoQXNzZW1ibHlEYXRhJik7CiAgICAgdm9pZCBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihjb25zdCBSZW5kZXJTdHlsZSYpOwotICAgIHZvaWQgZmluZFN0cmV0Y2h5RGF0YShjb25z
dCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJn
ZXRTaXplID0gMCk7CisgICAgdm9pZCBmaW5kU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxl
JiwgYm9vbCBzZXRNYXhQcmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7
CiAgICAgYm9vbCBnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiYsIEdseXBoQXNzZW1i
bHlEYXRhJik7CiAKICAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUm
LCBQYWludEluZm8mLCBjb25zdCBHbHlwaERhdGEmLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2lu
LCBHbHlwaFBhaW50VHJpbW1pbmcpOwpAQCAtMTA0LDYgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKICAgICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3Nl
bWJseTsKICAgICB9OworICAgIExheW91dFVuaXQgbV9tYXhQcmVmZXJyZWRXaWR0aDsKICAgICBM
YXlvdXRVbml0IG1fd2lkdGg7CiAgICAgTGF5b3V0VW5pdCBtX2FzY2VudDsKICAgICBMYXlvdXRV
bml0IG1fZGVzY2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggN2U4M2QxNi4uNzYyNTc0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5jcHAKQEAgLTI2Nyw2ICsyNjcsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCB1c2luZyBzdHJldGNoU2l6ZSBkdXJp
bmcgdGhlIHByZWZlcnJlZCB3aWR0aCBjYWxjdWxhdGlvbiBub3Igc2hvdWxkIHdlIGxlYXZlIGxv
Z2ljYWwgd2lkdGggZGlydHkgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KICAgICBNYXRo
T3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOwogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRp
c3BsYXlTdHlsZSgpKQogICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpEaXNwbGF5T3BlcmF0
b3I7CkBAIC0yNzQsMjUgKzI3NSwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6
OlZlcnRpY2FsT3BlcmF0b3I7CiAgICAgZWxzZQogICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9y
OjpIb3Jpem9udGFsT3BlcmF0b3I7Ci0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90
ZXh0Q29udGVudCwgdHlwZSk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBmbG9hdCBt
YXhpbXVtR2x5cGhXaWR0aCA9IG1fbWF0aE9wZXJhdG9yLmdldEJhc2VHbHlwaChzdHlsZSgpLCBi
YXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7CisgICAgbV9t
YXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Ioc3R5bGUoKSwgbV90ZXh0Q29udGVudCwgdHlwZSk7Cisg
ICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGg7CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKKyAg
ICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci53aWR0aCgpOwogICAgICAg
ICBpZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAgbWF4
aW11bUdseXBoV2lkdGggPSBzdHJldGNoU2l6ZSgpOwotICAgICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWls
aW5nU3BhY2U7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGg7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzTGFy
Z2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpIHsKLSAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3Jz
IGluIFNUSVggV29yZCBoYXZlIGluY29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3Bs
YWNlbWVudCBvZiBzdXBlcnNjcmlwdCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFk
IChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCi0gICAg
ICAgIG1fbWF0aE9wZXJhdG9yLmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkp
OwotICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0
b3I6OlNpemVWYXJpYW50KQotICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBib3VuZHNG
b3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpLndpZHRoKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gRklYTUU6IHNvbWUgZ2x5cGhzIChlLmcuIHRoZSBvbmUgZm9yICJGUkFDVElP
TiBTTEFTSCIgaW4gdGhlIFNUSVggTWF0aCBmb250IG9yIGxhcmdlIG9wZXJhdG9ycykgaGF2ZSBh
IHdpZHRoIHRoYXQgZGVwZW5kcyBvbiB0aGUgaGVpZ2h0LCByZXN1bHRpbmcgaW4gbGFyZ2UgZ2Fw
cyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNikuCi0gICAg
ICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRTdHJldGNoeURhdGEoc3R5bGUoKSwgJm1heGltdW1HbHlw
aFdpZHRoKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0g
bV9tYXRoT3BlcmF0b3IubWF4UHJlZmVycmVkV2lkdGgoKTsKICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9sZWFkaW5nU3BhY2Ug
KyBtYXhpbXVtR2x5cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFjZTsKIH0KIApAQCAtMzgzLDExICsz
NzMsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgICAg
ICB0eXBlID0gTWF0aE9wZXJhdG9yOjpWZXJ0aWNhbE9wZXJhdG9yOwogICAgIGVsc2UKICAgICAg
ICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6SG9yaXpvbnRhbE9wZXJhdG9yOwotICAgIG1fbWF0aE9w
ZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5cGUpOworICAgIG1fbWF0aE9wZXJh
dG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1fdGV4dENvbnRlbnQsIHR5cGUpOwogICAgIGlmICht
X2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKICAgICAgICAg
bV9tYXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRTdHJldGNoeURhdGEoc3R5bGUo
KSwgbnVsbHB0ciwgc3RyZXRjaFNpemUoKSk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRT
dHJldGNoeURhdGEoc3R5bGUoKSwgZmFsc2UsIHN0cmV0Y2hTaXplKCkpOwogICAgICAgICBpZiAo
IW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278392</attachid>
            <date>2016-05-09 00:51:53 -0700</date>
            <delta_ts>2016-05-11 01:53:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-max-preferred-width.patch</filename>
            <type>text/plain</type>
            <size>13081</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA2NzVmOTllMWI0YTEyMmNjNWI1YjQxMzdhNzU0ODUyYmFkYjVhMmRlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogV2VkLCAyNyBBcHIgMjAxNiAxNjozNDowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMThd
IG1heCBwcmVmZXJyZWQgd2lkdGgKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCAgIHwgNDUgKysrKysrKysrKysrKysrKy0t
LS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCAgICAg
fCAgOCArKystCiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
ICAgICB8IDI2ICsrKystLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygr
KSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZiZDY1ZDcuLmM0NTA2MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxNi0wNC0yNyAgRnJlZGVyaWMgV2FuZyAgPGZyZWQu
d2FuZ0BmcmVlLmZyPgorCisgICAgICAgIFJlbmRlck1hdGhPcGVyYXRvcjogTW92ZSBjYWxjdWxh
dGlvbiBvZiBwcmVmZXJyZWQgd2lkdGggaW50byBNYXRoT3BlcmF0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzA3MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3Ig
aXMgbm90IGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9yKTogSW5p
dGlhbGl6ZSBtX21heFByZWZlcnJlZFdpZHRoCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnNldE9wZXJhdG9yKTogSW50cm9kdWNlIGEgc3R5bGUgcGFyYW1ldGVyIGFuZCBjYWxsIHJl
c2V0LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpyZXNldCk6IE5ldyBoZWxwZXIg
ZnVuY3Rpb24gdG8gcmVzZXQgdGhlIG9wZXJhdG9yLgorICAgICAgICBGb3Igbm93IHdlIG9ubHkg
c2V0IHRoZSB3aWR0aCBvZiB0aGUgYmFzZSBnbHlwaCBhbmQgdGhlIHByZWZlcnJlZCBtYXggd2lk
dGguCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHls
ZUxhcmdlT3BlcmF0b3IpOiBDYWxjdWxhdGUgdGhlIG1fbWF4UHJlZmVycmVkV2lkdGguCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IENoYW5n
ZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBhbmQgZGlyZWN0bHkgc2V0IG1fbWF4UHJl
ZmVycmVkV2lkdGguCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDog
QWRkIG1fbWF4UHJlZmVycmVkV2lkdGggbWVtYmVyIGFuZCB1cGRhdGUgc29tZSBkZWNsYXJhdGlv
bnMuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OndpZHRoKTogTmV3IGhlbHBlciBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6bWF4UHJlZmVycmVkV2lk
dGgpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogVGhpcyBmdW5jdGlvbiBwZXJm
b3JtcyBiYWQKKyAgICAgICAgb3BlcmF0aW9ucyB0aGF0IHdpbGwgYmUgZml4ZWQgaW4gYnVnIDE1
MjI0NCB3aGVuIHdlIHVwZGF0ZSB0aGUgdGVzdHMuCisgICAgICAgIEZvciBub3csIGxldCdzIGp1
c3QgdXNlIG1heFByZWZlcnJlZFdpZHRoKCkgZm9yIG5vbi1ob3Jpem9udGFsIG9wZXJhdG9ycy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSk6IFVz
ZSB0aGUgbmV3IHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb25zLgorCiAyMDE2LTA0LTI1ICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgTWF0aE9w
ZXJhdG9yOjpPcGVyYXRvclR5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcAppbmRleCA5MGE1MzY1Li5lODQ3OGZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC03OSw2ICs3
OSw3IEBAIE1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9yKCkKICAgICA6IG1fYmFzZUNoYXJhY3Rl
cigwKQogICAgICwgbV9vcGVyYXRvclR5cGUoT3BlcmF0b3JUeXBlOjpVbmRlZmluZWRPcGVyYXRv
cikKICAgICAsIG1fc3RyZXRjaFR5cGUoU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgICwg
bV9tYXhQcmVmZXJyZWRXaWR0aCgwKQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9hc2NlbnQo
MCkKICAgICAsIG1fZGVzY2VudCgwKQpAQCAtODYsMTAgKzg3LDI4IEBAIE1hdGhPcGVyYXRvcjo6
TWF0aE9wZXJhdG9yKCkKIHsKIH0KIAotdm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVD
aGFyIGJhc2VDaGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCit2b2lkIE1hdGhP
cGVyYXRvcjo6c2V0T3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBVQ2hhciBiYXNl
Q2hhcmFjdGVyLCBPcGVyYXRvclR5cGUgb3BlcmF0b3JUeXBlKQogewogICAgIG1fYmFzZUNoYXJh
Y3RlciA9IGJhc2VDaGFyYWN0ZXI7CiAgICAgbV9vcGVyYXRvclR5cGUgPSBvcGVyYXRvclR5cGU7
CisgICAgcmVzZXQoc3R5bGUpOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cmVzZXQoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSAwOworICAg
IG1fd2lkdGggPSAwOworCisgICAgLy8gV2UgdXNlIHRoZSBiYXNlIHNpemUgZm9yIHRoZSBjYWxj
dWxhdGlvbiBvZiB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7
CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX21heFByZWZlcnJlZFdpZHRoID0gbV93aWR0aCA9IGFkdmFuY2VXaWR0aEZvckds
eXBoKGJhc2VHbHlwaCk7CisKKyAgICBpZiAobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBl
OjpWZXJ0aWNhbE9wZXJhdG9yKQorICAgICAgICBjYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUs
IHRydWUpOyAvLyBXZSBhbHNvIHRha2UgaW50byBhY2NvdW50IHRoZSB3aWR0aCBvZiBsYXJnZXIg
c2l6ZXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAgIGVs
c2UgaWYgKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6RGlzcGxheU9wZXJhdG9yKQor
ICAgICAgICBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKTsgLy8gV2Ug
Y2FuIGRpcmVjdGx5IHNlbGVjdCB0aGUgc2l6ZSB2YXJpYW50IGFuZCBkZXRlcm1pbmUgdGhlIGZp
bmFsIG1ldHJpY3MuCiB9CiAKIGJvb2wgTWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJhc2VHbHlwaCkgY29uc3QKQEAgLTEzMiw2
ICsxNTEsOCBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgZm9yIChhdXRvJiBzaXplVmFy
aWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVW
YXJpYW50LCBiYXNlR2x5cGguZm9udCk7CiAgICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0
YSk7CisgICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBpbiBTVElYIFdvcmQgaGF2ZSBpbmNvcnJl
Y3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1lbnQgb2Ygc3VwZXJzY3JpcHQsIHNv
IHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9w
L3N0aXhmb250cy90cmFja2luZy80OS8pLgorICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0g
Ym91bmRzRm9yR2x5cGgoZ2x5cGhEYXRhKS53aWR0aCgpOwogICAgICAgICBtX2l0YWxpY0NvcnJl
Y3Rpb24gPSBnbHlwaERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigq
Z2x5cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5nbHlwaCk7CiAgICAgICAgIGlmIChoZWlnaHRGb3JH
bHlwaChnbHlwaERhdGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjQwLDcgKzI2MSw3IEBAIGJvb2wgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVH
bHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURh
dGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExh
eW91dFVuaXQgdGFyZ2V0U2l6ZSkKK3ZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNo
eURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIHNldE1heFByZWZlcnJlZFdpZHRo
LCBMYXlvdXRVbml0IHRhcmdldFNpemUpCiB7CiAgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09
IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvciB8fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVy
YXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7CiAgICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhX
aWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3Ip
OwpAQCAtMjUwLDE0ICsyNzEsMTQgQEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUKICAgICBpZiAo
IWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgeworICAgIGlmICghc2V0TWF4UHJlZmVycmVkV2lkdGgp
IHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFy
Z2UgZW5vdWdoLgogICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRG
b3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKICAg
ICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7
CisgICAgR2x5cGhBc3NlbWJseURhdGEgYXNzZW1ibHlEYXRhOwogICAgIGlmIChiYXNlR2x5cGgu
Zm9udC0+bWF0aERhdGEoKSkgewogICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsK
ICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQ
YXJ0czsKQEAgLTI2NSwxMSArMjg2LDExIEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVT
dHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAg
ICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KICAgICAgICAgZm9yIChhdXRvJiBz
aXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewogICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBo
RGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICAgICAgaWYgKG1heGlt
dW1HbHlwaFdpZHRoKQotICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7
CisgICAgICAgICAgICBpZiAoc2V0TWF4UHJlZmVycmVkV2lkdGgpCisgICAgICAgICAgICAgICAg
bV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVk
V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0
YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOworICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDog
YWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoc2l6
ZSA+PSB0YXJnZXRTaXplKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CkBAIC0zMDgsMTEgKzMyOSwxMSBAQCB2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdQogICAgIH0K
IAogICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgsIHZlcmlmeSBl
YWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgKm1h
eGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkpOwotICAgICAgICAqbWF4aW11bUds
eXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRo
ID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3Nl
bWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4
KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJv
dHRvbU9yTGVmdCkpOworICAgIGlmIChzZXRNYXhQcmVmZXJyZWRXaWR0aCkgeworICAgICAgICBt
X21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRX
aWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpKTsKKyAg
ICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJl
ZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24p
KTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1f
bWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRk
bGUpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5i
b3R0b21PckxlZnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKaW5kZXggNDM0YWVhZC4uMDNmOTVk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5o
CkBAIC00MSw4ICs0MSwxMSBAQCBjbGFzcyBNYXRoT3BlcmF0b3IgewogcHVibGljOgogICAgIGVu
dW0gY2xhc3MgT3BlcmF0b3JUeXBlIHsgVW5kZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVyYXRv
ciwgVmVydGljYWxPcGVyYXRvciwgSG9yaXpvbnRhbE9wZXJhdG9yIH07CiAgICAgTWF0aE9wZXJh
dG9yKCk7Ci0gICAgdm9pZCBzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRv
clR5cGUpOworICAgIHZvaWQgc2V0T3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmLCBVQ2hhciBi
YXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUpOworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVy
U3R5bGUmKTsKIAorICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRo
OyB9CisgICAgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4UHJlZmVycmVkV2lkdGg7IH0KICAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KIAogICAgIGJvb2wgaXNTdHJldGNo
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0
Y2hlZDsgfQpAQCAtNzEsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaXplVmFyaWFu
dChjb25zdCBHbHlwaERhdGEmKTsKICAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5
cGhBc3NlbWJseURhdGEmKTsKICAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3Bl
cmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVN0cmV0Y2h5RGF0
YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5p
dCB0YXJnZXRTaXplID0gMCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3Qg
UmVuZGVyU3R5bGUmLCBib29sIHNldE1heFByZWZlcnJlZFdpZHRoLCBMYXlvdXRVbml0IHRhcmdl
dFNpemUgPSAwKTsKICAgICBib29sIGNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBh
cnQ+JiwgR2x5cGhBc3NlbWJseURhdGEmKSBjb25zdDsKIAogICAgIExheW91dFJlY3QgcGFpbnRH
bHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IEdseXBoRGF0YSYsIGNv
bnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7CkBAIC04Nyw2ICs5
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKICAgICAgICAgR2x5
cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsKICAgICB9OworICAgIExheW91dFVuaXQgbV9tYXhQ
cmVmZXJyZWRXaWR0aDsKICAgICBMYXlvdXRVbml0IG1fd2lkdGg7CiAgICAgTGF5b3V0VW5pdCBt
X2FzY2VudDsKICAgICBMYXlvdXRVbml0IG1fZGVzY2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXgg
YzM0NzcxZi4uNjczNWRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTI2Nyw2ICsyNjcsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCB1
c2luZyBzdHJldGNoU2l6ZSBkdXJpbmcgdGhlIHByZWZlcnJlZCB3aWR0aCBjYWxjdWxhdGlvbiBu
b3Igc2hvdWxkIHdlIGxlYXZlIGxvZ2ljYWwgd2lkdGggZGlydHkgKGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTUyMjQ0KS4KICAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOwogICAgIGlm
IChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQogICAgICAgICB0eXBlID0gTWF0aE9w
ZXJhdG9yOjpPcGVyYXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKQEAgLTI3NCwyNSArMjc1LDE0
IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKCkKICAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpWZXJ0aWNh
bE9wZXJhdG9yOwogICAgIGVsc2UKICAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0
b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3I7Ci0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0
b3IobV90ZXh0Q29udGVudCwgdHlwZSk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBm
bG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IG1fbWF0aE9wZXJhdG9yLmdldEJhc2VHbHlwaChzdHls
ZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7Cisg
ICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Ioc3R5bGUoKSwgbV90ZXh0Q29udGVudCwgdHlw
ZSk7CisgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGg7CiAgICAgaWYgKCFtX2lzVmVydGljYWwp
IHsKKyAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci53aWR0aCgpOwog
ICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAg
ICAgbWF4aW11bUdseXBoV2lkdGggPSBzdHJldGNoU2l6ZSgpOwotICAgICAgICBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBt
X3RyYWlsaW5nU3BhY2U7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpIHsKLSAgICAgICAgLy8gTGFyZ2Ugb3Bl
cmF0b3JzIGluIFNUSVggV29yZCBoYXZlIGluY29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5n
IG1pc3BsYWNlbWVudCBvZiBzdXBlcnNjcmlwdCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBp
bnN0ZWFkIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5Lyku
Ci0gICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0
b3Ioc3R5bGUoKSk7Ci0gICAgICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09
IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KQotICAgICAgICAgICAgbWF4
aW11bUdseXBoV2lkdGggPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQp
LndpZHRoKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IHNvbWUgZ2x5cGhzIChl
LmcuIHRoZSBvbmUgZm9yICJGUkFDVElPTiBTTEFTSCIgaW4gdGhlIFNUSVggTWF0aCBmb250IG9y
IGxhcmdlIG9wZXJhdG9ycykgaGF2ZSBhIHdpZHRoIHRoYXQgZGVwZW5kcyBvbiB0aGUgaGVpZ2h0
LCByZXN1bHRpbmcgaW4gbGFyZ2UgZ2FwcyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDMyNikuCi0gICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZVN0cmV0
Y2h5RGF0YShzdHlsZSgpLCAmbWF4aW11bUdseXBoV2lkdGgpOwotICAgIH0KKyAgICB9IGVsc2UK
KyAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci5tYXhQcmVmZXJyZWRX
aWR0aCgpOwogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90cmFp
bGluZ1NwYWNlOwogfQogCkBAIC0zODMsMTEgKzM3MywxMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJh
dG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcjsKICAgICBlbHNlCiAgICAgICAgIHR5cGUgPSBNYXRo
T3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yOwotICAgIG1fbWF0aE9w
ZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5cGUpOworICAgIG1fbWF0aE9wZXJh
dG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1fdGV4dENvbnRlbnQsIHR5cGUpOwogICAgIGlmICht
X2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKICAgICAgICAg
bV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgp
KTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlU3RyZXRjaHlE
YXRhKHN0eWxlKCksIG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOworICAgICAgICBtX21hdGhPcGVy
YXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgZmFsc2UsIHN0cmV0Y2hTaXplKCkp
OwogICAgICAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278602</attachid>
            <date>2016-05-11 01:53:34 -0700</date>
            <delta_ts>2016-05-13 09:42:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-max-preferred-width.patch</filename>
            <type>text/plain</type>
            <size>13168</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBmNGVmNDljNjVlZTliYzEyMmM0ZGRlZjcxYTA0YjY1Njg4YjNhNTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogV2VkLCAyNyBBcHIgMjAxNiAxNjozNDowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMThd
IG1heCBwcmVmZXJyZWQgd2lkdGgKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCAgIHwgNDcgKysrKysrKysrKysrKysrKy0t
LS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCAgICAg
fCAgOCArKystCiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
ICAgICB8IDI2ICsrKystLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA3MyBpbnNlcnRpb25zKCsp
LCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzNiZGQxOC4uZThmNTExMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE2LTA0LTI3ICBGcmVkZXJpYyBXYW5nICA8ZnJlZC53
YW5nQGZyZWUuZnI+CisKKyAgICAgICAgUmVuZGVyTWF0aE9wZXJhdG9yOiBNb3ZlIGNhbGN1bGF0
aW9uIG9mIHByZWZlcnJlZCB3aWR0aCBpbnRvIE1hdGhPcGVyYXRvcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MDcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBp
cyBub3QgY2hhbmdlLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IpOiBJbml0
aWFsaXplIG1fbWF4UHJlZmVycmVkV2lkdGgKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRv
cjo6c2V0T3BlcmF0b3IpOiBJbnRyb2R1Y2UgYSBzdHlsZSBwYXJhbWV0ZXIgYW5kIGNhbGwgcmVz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnJlc2V0KTogTmV3IGhlbHBlciBm
dW5jdGlvbiB0byByZXNldCB0aGUgb3BlcmF0b3IuCisgICAgICAgIEZvciBub3cgd2Ugb25seSBz
ZXQgdGhlIHdpZHRoIG9mIHRoZSBiYXNlIGdseXBoIGFuZCB0aGUgcHJlZmVycmVkIG1heCB3aWR0
aC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxl
TGFyZ2VPcGVyYXRvcik6IENhbGN1bGF0ZSB0aGUgbV9tYXhQcmVmZXJyZWRXaWR0aC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKTogQ2hhbmdl
IHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGFuZCBkaXJlY3RseSBzZXQgbV9tYXhQcmVm
ZXJyZWRXaWR0aC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBB
ZGQgbV9tYXhQcmVmZXJyZWRXaWR0aCBtZW1iZXIgYW5kIHVwZGF0ZSBzb21lIGRlY2xhcmF0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6d2lkdGgpOiBOZXcgaGVscGVyIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjptYXhQcmVmZXJyZWRXaWR0
aCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBUaGlzIGZ1bmN0aW9uIHBlcmZv
cm1zIGJhZAorICAgICAgICBvcGVyYXRpb25zIHRoYXQgd2lsbCBiZSBmaXhlZCBpbiBidWcgMTUy
MjQ0IHdoZW4gd2UgdXBkYXRlIHRoZSB0ZXN0cy4KKyAgICAgICAgRm9yIG5vdywgbGV0J3MganVz
dCB1c2UgbWF4UHJlZmVycmVkV2lkdGgoKSBmb3Igbm9uLWhvcml6b250YWwgb3BlcmF0b3JzLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXNl
IHRoZSBuZXcgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbnMuCisKIDIwMTYtMDQtMjUgIEZyZWRl
cmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBNYXRoT3Bl
cmF0b3I6Ok9wZXJhdG9yVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9NYXRoT3BlcmF0b3IuY3BwCmluZGV4IDkwYTUzNjUuLjU5N2QzNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKQEAgLTc5LDYgKzc5
LDcgQEAgTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQogICAgIDogbV9iYXNlQ2hhcmFjdGVy
KDApCiAgICAgLCBtX29wZXJhdG9yVHlwZShPcGVyYXRvclR5cGU6OlVuZGVmaW5lZE9wZXJhdG9y
KQogICAgICwgbV9zdHJldGNoVHlwZShTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCisgICAgLCBt
X21heFByZWZlcnJlZFdpZHRoKDApCiAgICAgLCBtX3dpZHRoKDApCiAgICAgLCBtX2FzY2VudCgw
KQogICAgICwgbV9kZXNjZW50KDApCkBAIC04NiwxMCArODcsMjggQEAgTWF0aE9wZXJhdG9yOjpN
YXRoT3BlcmF0b3IoKQogewogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNo
YXIgYmFzZUNoYXJhY3RlciwgT3BlcmF0b3JUeXBlIG9wZXJhdG9yVHlwZSkKK3ZvaWQgTWF0aE9w
ZXJhdG9yOjpzZXRPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFVDaGFyIGJhc2VD
aGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSBvcGVyYXRvclR5cGUpCiB7CiAgICAgbV9iYXNlQ2hhcmFj
dGVyID0gYmFzZUNoYXJhY3RlcjsKICAgICBtX29wZXJhdG9yVHlwZSA9IG9wZXJhdG9yVHlwZTsK
KyAgICByZXNldChzdHlsZSk7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpyZXNldChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IDA7CisgICAg
bV93aWR0aCA9IDA7CisKKyAgICAvLyBXZSB1c2UgdGhlIGJhc2Ugc2l6ZSBmb3IgdGhlIGNhbGN1
bGF0aW9uIG9mIHRoZSBwcmVmZXJyZWQgd2lkdGguCisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsK
KyAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSBtX3dpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYmFzZUdseXBoKTsKKworICAgIGlmIChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6
OlZlcnRpY2FsT3BlcmF0b3IpCisgICAgICAgIGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShzdHlsZSwg
dHJ1ZSk7IC8vIFdlIGFsc28gdGFrZSBpbnRvIGFjY291bnQgdGhlIHdpZHRoIG9mIGxhcmdlciBz
aXplcyBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBwcmVmZXJyZWQgd2lkdGguCisgICAgZWxz
ZSBpZiAobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpEaXNwbGF5T3BlcmF0b3IpCisg
ICAgICAgIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUpOyAvLyBXZSBj
YW4gZGlyZWN0bHkgc2VsZWN0IHRoZSBzaXplIHZhcmlhbnQgYW5kIGRldGVybWluZSB0aGUgZmlu
YWwgbWV0cmljcy4KIH0KIAogYm9vbCBNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdApAQCAtMTMyLDYg
KzE1MSw4IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9w
ZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBmb3IgKGF1dG8mIHNpemVWYXJp
YW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZh
cmlhbnQsIGJhc2VHbHlwaC5mb250KTsKICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRh
KTsKKyAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGluIFNUSVggV29yZCBoYXZlIGluY29ycmVj
dCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNlbWVudCBvZiBzdXBlcnNjcmlwdCwgc28g
d2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Av
c3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCisgICAgICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSBi
b3VuZHNGb3JHbHlwaChnbHlwaERhdGEpLndpZHRoKCk7CiAgICAgICAgIG1faXRhbGljQ29ycmVj
dGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpn
bHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKICAgICAgICAgaWYgKGhlaWdodEZvckds
eXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yNDAsMjQgKzI2MSwyNCBAQCBib29sIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRl
R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29ucwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlE
YXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBM
YXlvdXRVbml0IHRhcmdldFNpemUpCit2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRj
aHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBzZXRNYXhQcmVmZXJyZWRXaWR0
aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQogewogICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9
PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0gT3Bl
cmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOwotICAgIEFTU0VSVCghbWF4aW11bUdseXBo
V2lkdGggfHwgbV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9y
KTsKKyAgICBBU1NFUlQoIXNldE1heFByZWZlcnJlZFdpZHRoIHx8IG1fb3BlcmF0b3JUeXBlID09
IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcik7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0g
bV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yOwogCiAgICAg
R2x5cGhEYXRhIGJhc2VHbHlwaDsKICAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUds
eXBoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgewor
ICAgIGlmICghc2V0TWF4UHJlZmVycmVkV2lkdGgpIHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0
cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgogICAgICAgICBmbG9hdCBi
YXNlU2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKICAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFz
ZVNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTWF0aE9wZXJhdG9yOjpH
bHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CisgICAgR2x5cGhBc3NlbWJseURhdGEgYXNz
ZW1ibHlEYXRhOwogICAgIGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgewogICAgICAg
ICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKICAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0
aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKQEAgLTI2NSwxMSArMjg2LDExIEBA
IHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2
YXJpYW50cy4KICAgICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykg
ewogICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBo
LmZvbnQpOwotICAgICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKQotICAgICAgICAgICAg
ICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2
YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7CisgICAgICAgICAgICBpZiAoc2V0TWF4UHJl
ZmVycmVkV2lkdGgpCisgICAgICAgICAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGdseXBoRGF0YSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2V0U2l6
ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gaXNWZXJ0
aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChn
bHlwaERhdGEpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgc2l6ZSA9IGlzVmVydGljYWwg
PyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhE
YXRhKTsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0zMDgsMTEgKzMyOSwxMSBAQCB2
b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgZmxvYXQqIG1heGltdQogICAgIH0KIAogICAgIC8vIElmIHdlIGFyZSBtZWFzdXJp
bmcgdGhlIG1heGltdW0gd2lkdGgsIHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4
aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgo
Km1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9w
T3JSaWdodCkpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11
bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24p
KTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdp
ZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAg
ICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkpOworICAgIGlmIChzZXRN
YXhQcmVmZXJyZWRXaWR0aCkgeworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9
IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRX
aWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJy
ZWRXaWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFu
Y2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmgKaW5kZXggNDM0YWVhZC4uMDNmOTVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC00MSw4ICs0MSwxMSBAQCBjbGFzcyBN
YXRoT3BlcmF0b3IgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgT3BlcmF0b3JUeXBlIHsgVW5k
ZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVyYXRvciwgVmVydGljYWxPcGVyYXRvciwgSG9yaXpv
bnRhbE9wZXJhdG9yIH07CiAgICAgTWF0aE9wZXJhdG9yKCk7Ci0gICAgdm9pZCBzZXRPcGVyYXRv
cihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUpOworICAgIHZvaWQgc2V0T3BlcmF0
b3IoY29uc3QgUmVuZGVyU3R5bGUmLCBVQ2hhciBiYXNlQ2hhcmFjdGVyLCBPcGVyYXRvclR5cGUp
OworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmKTsKIAorICAgIExheW91dFVuaXQg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBtYXhQcmVm
ZXJyZWRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4UHJlZmVycmVkV2lkdGg7IH0KICAgICBM
YXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJl
Y3Rpb247IH0KIAogICAgIGJvb2wgaXNTdHJldGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0
Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZDsgfQpAQCAtNzEsNyArNzQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKICAgICB2
b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmKTsKICAgICB2b2lk
IGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsK
LSAgICB2b2lkIGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0
KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7CisgICAgdm9p
ZCBjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmLCBib29sIHNldE1heFBy
ZWZlcnJlZFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKICAgICBib29sIGNhbGN1
bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFZlY3Rv
cjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+JiwgR2x5cGhBc3NlbWJseURhdGEmKSBj
b25zdDsKIAogICAgIExheW91dFJlY3QgcGFpbnRHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBh
aW50SW5mbyYsIGNvbnN0IEdseXBoRGF0YSYsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEds
eXBoUGFpbnRUcmltbWluZyk7CkBAIC04Nyw2ICs5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgR2x5
cGhEYXRhIG1fdmFyaWFudDsKICAgICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsK
ICAgICB9OworICAgIExheW91dFVuaXQgbV9tYXhQcmVmZXJyZWRXaWR0aDsKICAgICBMYXlvdXRV
bml0IG1fd2lkdGg7CiAgICAgTGF5b3V0VW5pdCBtX2FzY2VudDsKICAgICBMYXlvdXRVbml0IG1f
ZGVzY2VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggYzM0NzcxZi4uNjczNWRjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAKQEAgLTI2Nyw2ICsyNjcsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCB1c2luZyBzdHJldGNoU2l6ZSBkdXJpbmcgdGhl
IHByZWZlcnJlZCB3aWR0aCBjYWxjdWxhdGlvbiBub3Igc2hvdWxkIHdlIGxlYXZlIGxvZ2ljYWwg
d2lkdGggZGlydHkgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KICAgICBNYXRoT3BlcmF0
b3I6Ok9wZXJhdG9yVHlwZSB0eXBlOwogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlT
dHlsZSgpKQogICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6OkRpc3Bs
YXlPcGVyYXRvcjsKQEAgLTI3NCwyNSArMjc1LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgdHlwZSA9IE1hdGhP
cGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yOwogICAgIGVsc2UKICAgICAg
ICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3I7
Ci0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgdHlwZSk7Ci0g
ICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IG1f
bWF0aE9wZXJhdG9yLmdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0
b3Ioc3R5bGUoKSwgbV90ZXh0Q29udGVudCwgdHlwZSk7CisgICAgZmxvYXQgbWF4aW11bUdseXBo
V2lkdGg7CiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKKyAgICAgICAgbWF4aW11bUdseXBoV2lk
dGggPSBtX21hdGhPcGVyYXRvci53aWR0aCgpOwogICAgICAgICBpZiAobWF4aW11bUdseXBoV2lk
dGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBzdHJl
dGNoU2l6ZSgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVhZGlu
Z1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7Ci0gICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0
eWxlKCkpIHsKLSAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGluIFNUSVggV29yZCBoYXZlIGlu
Y29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNlbWVudCBvZiBzdXBlcnNjcmlw
dCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkIChodHRwOi8vc291cmNlZm9yZ2Uu
bmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCi0gICAgICAgIG1fbWF0aE9wZXJhdG9yLmNh
bGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7Ci0gICAgICAgIGlmICht
X21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6
OlNpemVWYXJpYW50KQotICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBib3VuZHNGb3JH
bHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpLndpZHRoKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gRklYTUU6IHNvbWUgZ2x5cGhzIChlLmcuIHRoZSBvbmUgZm9yICJGUkFDVElPTiBT
TEFTSCIgaW4gdGhlIFNUSVggTWF0aCBmb250IG9yIGxhcmdlIG9wZXJhdG9ycykgaGF2ZSBhIHdp
ZHRoIHRoYXQgZGVwZW5kcyBvbiB0aGUgaGVpZ2h0LCByZXN1bHRpbmcgaW4gbGFyZ2UgZ2FwcyAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNikuCi0gICAgICAg
IG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShzdHlsZSgpLCAmbWF4aW11bUds
eXBoV2lkdGgpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbWF4aW11bUdseXBoV2lkdGgg
PSBtX21hdGhPcGVyYXRvci5tYXhQcmVmZXJyZWRXaWR0aCgpOwogICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX2xlYWRpbmdTcGFj
ZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90cmFpbGluZ1NwYWNlOwogfQogCkBAIC0zODMsMTEg
KzM3MywxMSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAg
ICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcjsK
ICAgICBlbHNlCiAgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6SG9y
aXpvbnRhbE9wZXJhdG9yOwotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENv
bnRlbnQsIHR5cGUpOworICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1f
dGV4dENvbnRlbnQsIHR5cGUpOwogICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJh
dG9ySW5EaXNwbGF5U3R5bGUoKSkKICAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlz
cGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9t
YXRoT3BlcmF0b3IuY2FsY3VsYXRlU3RyZXRjaHlEYXRhKHN0eWxlKCksIG51bGxwdHIsIHN0cmV0
Y2hTaXplKCkpOworICAgICAgICBtX21hdGhPcGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEo
c3R5bGUoKSwgZmFsc2UsIHN0cmV0Y2hTaXplKCkpOwogICAgICAgICBpZiAoIW1fbWF0aE9wZXJh
dG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotLSAKMi44LjEK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278606</attachid>
            <date>2016-05-11 02:19:12 -0700</date>
            <delta_ts>2016-06-09 07:57:32 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>157071-EWS.patch</filename>
            <type>text/plain</type>
            <size>82325</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTk4NGFlMC4uOTc4YTMzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTUsNiArMjUxNSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRhMmQ3Zi4uZThm
NTExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxNi0wNC0yNyAgRnJlZGVyaWMg
V2FuZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgorCisgICAgICAgIFJlbmRlck1hdGhPcGVyYXRvcjog
TW92ZSBjYWxjdWxhdGlvbiBvZiBwcmVmZXJyZWQgd2lkdGggaW50byBNYXRoT3BlcmF0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzA3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
TWF0aE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6TWF0aE9w
ZXJhdG9yKTogSW5pdGlhbGl6ZSBtX21heFByZWZlcnJlZFdpZHRoCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKTogSW50cm9kdWNlIGEgc3R5bGUgcGFyYW1ldGVy
IGFuZCBjYWxsIHJlc2V0LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpyZXNldCk6
IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgdGhlIG9wZXJhdG9yLgorICAgICAgICBGb3Ig
bm93IHdlIG9ubHkgc2V0IHRoZSB3aWR0aCBvZiB0aGUgYmFzZSBnbHlwaCBhbmQgdGhlIHByZWZl
cnJlZCBtYXggd2lkdGguCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0
ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBDYWxjdWxhdGUgdGhlIG1fbWF4UHJlZmVycmVk
V2lkdGguCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5
RGF0YSk6IENoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBhbmQgZGlyZWN0bHkg
c2V0IG1fbWF4UHJlZmVycmVkV2lkdGguCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuaDogQWRkIG1fbWF4UHJlZmVycmVkV2lkdGggbWVtYmVyIGFuZCB1cGRhdGUgc29t
ZSBkZWNsYXJhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OndpZHRoKTog
TmV3IGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6bWF4
UHJlZmVycmVkV2lkdGgpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogVGhpcyBm
dW5jdGlvbiBwZXJmb3JtcyBiYWQKKyAgICAgICAgb3BlcmF0aW9ucyB0aGF0IHdpbGwgYmUgZml4
ZWQgaW4gYnVnIDE1MjI0NCB3aGVuIHdlIHVwZGF0ZSB0aGUgdGVzdHMuCisgICAgICAgIEZvciBu
b3csIGxldCdzIGp1c3QgdXNlIG1heFByZWZlcnJlZFdpZHRoKCkgZm9yIG5vbi1ob3Jpem9udGFs
IG9wZXJhdG9ycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRh
dGVTdHlsZSk6IFVzZSB0aGUgbmV3IHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb25zLgorCisyMDE2
LTA0LTI1ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBJbnRy
b2R1Y2UgTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Njk1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNo
YW5nZS4KKworICAgICAgICBBbiBlbnVtIE9wZXJhdG9yVHlwZSBpcyBpbnRyb2R1Y2VkIGluIE1h
dGhPcGVyYXRvciBpbiBvcmRlciB0byBpbmRpY2F0ZQorICAgICAgICB3aGljaCBraW5kIG9mIHN0
cmV0Y2hpbmcgaXMgcmVxdWVzdGVkLiBJbiBmb2xsb3ctdXAgd29yaywgdGhpcyB3aWxsCisgICAg
ICAgIGFsbG93IHRvIGp1c3QgY2FsbCBzZXRPcGVyYXRvciBhbmQgc3RyZXRjaFRvIHdpdGhvdXQg
aGF2aW5nIHRvCisgICAgICAgIGV4cGxpY2l0bHkgY2FsbCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVM
YXJnZU9wZXJhdG9yIG9yIGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YS4KKworICAgICAgICAqIHJlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVy
YXRvcjo6TWF0aE9wZXJhdG9yKTogVXNlIE9wZXJhdG9yVHlwZSBpbnN0ZWFkIG9mIGEgYm9vbGVh
bi4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IEFkZCBh
biBhc3NlcnQgdG8gZW5zdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSB1c2UuCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdl
T3BlcmF0b3IpOiBEaXR0bywgdGhpcyBtYWtlcyB0aGUgYXNzZXJ0IG1vcmUgYWNjdXJhdGUuCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IERp
dHRvIGFuZCByZXBsYWNlIG1faXNWZXJ0aWNhbCB3aXRoIGEgbG9jYWwgaXNWZXJ0aWNhbCB2YXJp
YWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4
dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZp
bGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkp
OiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGQg
dGhlIE9wZXJhdG9yVHlwZSBlbnVtLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpz
dHJldGNoU2l6ZSk6IFVzZSBPcGVyYXRvclR5cGUgaW5zdGVhZCBvZiBhIGJvb2xlYW4uCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxX
aWR0aHMpOiBDYWxsIHNldE9wZXJhdG9yIHdpdGggdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBEaXR0by4KKwor
MjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAg
TW92ZSBzZWxlY3Rpb24gYW5kIGRyYXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBz
ZXBhcmF0ZSBNYXRoT3BlcmF0b3IgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIHRoZSBNYXRoT3BlcmF0b3IgZmlsZXMu
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Ym91bmRzRm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJh
dG9yLgorICAgICAgICAoV2ViQ29yZTo6aGVpZ2h0Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRl
ck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZVdpZHRoRm9yR2x5cGgp
OiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9y
OjpzZXRPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmdldEJhc2VH
bHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxP
cGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJs
eSk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBm
cm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yIHdpdGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIu
CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBoQXNzZW1ibHlG
YWxsQmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpjYWxjdWxh
dGVTdHJldGNoeURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6
cGFpbnRHbHlwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxs
V2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppdGFsaWND
b3JyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXNTdHJldGNoZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjp1bnN0cmV0Y2gpOgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURh
dGEpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzdHJldGNoU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVkIHRvIHVzZSBN
YXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgRm9yIG5vdyB3ZSBjYWxsIHNldE9wZXJhdG9y
IHRvIHRyYW5zbWl0IGluZm9ybWF0aW9uIHRvIG1fbWF0aE9wZXJhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXBkYXRlZCB0byB1c2Ug
TWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRo
T3BlcmF0b3IgbWVtYmVycyB0byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogVXBk
YXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludCk6IERpdHRvLgorICAgICAgICBG
b3Igbm93IHdlIHNldCBzb21lIG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQg
c29tZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpwYWludENoaWxkcmVuKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9y
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFz
ZUdseXBoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzZXRTaXplVmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxh
dGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVy
dGljYWxFeHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxH
bHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQgdG8g
dXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0ZWQu
CisKIDIwMTYtMDUtMDkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFtpT1NdIDxzZWxlY3Q+IGVsZW1lbnRzIHNob3VsZCByZW5kZXIgcmlnaHQtYWxpZ25lZCB3aGVu
IGluIFJUTCBtb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggN2FjMTAyZS4uYjRiNzA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY2NCw2ICsxNjY0LDgg
QEAKIAkJNDM5MDQ2RTgxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5
MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4
MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1
RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAq
LzsgfTsKKwkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVF
ODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBB
RjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1h
dGhNTFRva2VuLmNwcCAqLzsgfTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzkwNDZEODEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsg
fTsKIAkJNDM5RDMzNDMxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTEx
QzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTIwOCw2ICs5MjEwLDgg
QEAKIAkJNDM5MDQ2RDQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBB
QyAvKiBNYXRoT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWF0aE9wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2
RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNYXRoT3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8q
IFJlbmRlck1hdGhNTFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hdGhNTFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQw
MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjkzNiw2ICsxNjk0MCw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5
IC8qIFJlbmRlck1hdGhNTFRva2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEy
IC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1
RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgx
MkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI3NjUxLDYgKzI3NjU3LDcgQEAKIAkJCQk0
MzkwNDZFNjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4
MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBD
Rjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkND
REQyMTY2NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29u
dHJvbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzEzMjQsNiArMzEzMzEsNyBAQAogCQkJCTQzOTA0
NkU1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQzOTA0NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tl
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1
RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5
NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CURFNDlCMzA5MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVy
TWVkaWFDb250cm9scy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41OTdkMzYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1M
KQorI2luY2x1ZGUgIk1hdGhPcGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
KyNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEm
IGRhdGEpCit7CisgICAgcmV0dXJuIGRhdGEuaXNWYWxpZCgpID8gZGF0YS5mb250LT5ib3VuZHNG
b3JHbHlwaChkYXRhLmdseXBoKSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIGZs
b2F0IGhlaWdodEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4g
Ym91bmRzRm9yR2x5cGgoZGF0YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVy
biBkYXRhLmlzVmFsaWQoKSA/IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKSA6
IDA7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBiZSByZW1vdmVkIHdo
ZW4gT3BlblR5cGUgTUFUSCBmb250IGFyZSB3aWRlbHkgYXZhaWxhYmxlIChodHRwOi8vd2tidWcv
MTU2ODM3KS4KK3N0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNoYXIgY2hhcmFjdGVy
OworICAgIFVDaGFyIHRvcENoYXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKKyAgICBVQ2hh
ciBib3R0b21DaGFyOworICAgIFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8gVGhlIGZpcnN0IGxl
ZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0
aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNvbnN0IHNob3J0IGxl
ZnRSaWdodFBhaXJzQ291bnQgPSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0
cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAw
eDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5ICAsIDB4MjM5
ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcworICAgIHsg
MHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUg
YnJhY2tldAorICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwg
Ly8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4
MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3ZCAgLCAweDIz
YWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAorICAg
IHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWls
aW5nCisgICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyBy
aWdodCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAg
ICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYs
IDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAg
MHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYsIDB4MjAxNiwg
MHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQorICAgIHsg
MHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8K
KyAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdy
YWwgc2lnbgorfTsKKworTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQorICAgIDogbV9iYXNl
Q2hhcmFjdGVyKDApCisgICAgLCBtX29wZXJhdG9yVHlwZShPcGVyYXRvclR5cGU6OlVuZGVmaW5l
ZE9wZXJhdG9yKQorICAgICwgbV9zdHJldGNoVHlwZShTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQp
CisgICAgLCBtX21heFByZWZlcnJlZFdpZHRoKDApCisgICAgLCBtX3dpZHRoKDApCisgICAgLCBt
X2FzY2VudCgwKQorICAgICwgbV9kZXNjZW50KDApCisgICAgLCBtX2l0YWxpY0NvcnJlY3Rpb24o
MCkKK3sKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgVUNoYXIgYmFzZUNoYXJhY3RlciwgT3BlcmF0b3JUeXBlIG9wZXJhdG9yVHlw
ZSkKK3sKKyAgICBtX2Jhc2VDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyOworICAgIG1fb3BlcmF0
b3JUeXBlID0gb3BlcmF0b3JUeXBlOworICAgIHJlc2V0KHN0eWxlKTsKK30KKwordm9pZCBNYXRo
T3BlcmF0b3I6OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBtX21heFBy
ZWZlcnJlZFdpZHRoID0gMDsKKyAgICBtX3dpZHRoID0gMDsKKworICAgIC8vIFdlIHVzZSB0aGUg
YmFzZSBzaXplIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHByZWZlcnJlZCB3aWR0aC4KKyAg
ICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNl
R2x5cGgpKQorICAgICAgICByZXR1cm47CisgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IG1fd2lk
dGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOworCisgICAgaWYgKG1fb3BlcmF0
b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcikKKyAgICAgICAgY2FsY3Vs
YXRlU3RyZXRjaHlEYXRhKHN0eWxlLCB0cnVlKTsgLy8gV2UgYWxzbyB0YWtlIGludG8gYWNjb3Vu
dCB0aGUgd2lkdGggb2YgbGFyZ2VyIHNpemVzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHBy
ZWZlcnJlZCB3aWR0aC4KKyAgICBlbHNlIGlmIChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5
cGU6OkRpc3BsYXlPcGVyYXRvcikKKyAgICAgICAgY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihzdHlsZSk7IC8vIFdlIGNhbiBkaXJlY3RseSBzZWxlY3QgdGhlIHNpemUgdmFyaWFu
dCBhbmQgZGV0ZXJtaW5lIHRoZSBmaW5hbCBtZXRyaWNzLgorfQorCitib29sIE1hdGhPcGVyYXRv
cjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNl
R2x5cGgpIGNvbnN0Cit7CisgICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIobV9iYXNlQ2hhcmFjdGVyLCAhc3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKTsKKyAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5cGgu
Zm9udCA9PSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworfQorCit2b2lkIE1h
dGhPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkK
K3sKKyAgICBBU1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZvbnQt
Pm1hdGhEYXRhKCkpOworICAgIG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQ7CisgICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9y
OjpzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEp
Cit7CisgICAgQVNTRVJUKG1fb3BlcmF0b3JUeXBlID09IE9wZXJhdG9yVHlwZTo6VmVydGljYWxP
cGVyYXRvciB8fCBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVy
YXRvcik7CisgICAgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5Owor
ICAgIG1fYXNzZW1ibHkgPSBhc3NlbWJseURhdGE7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpj
YWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpEaXNwbGF5
T3BlcmF0b3IpOworCisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKKyAgICBpZiAoIWdldEJhc2VH
bHlwaChzdHlsZSwgYmFzZUdseXBoKSB8fCAhYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOworICAgIFZl
Y3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CisKKyAg
ICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlzIHNvbWV0aW1lcyB0
b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxzcXJ0ezJ9IHRpbWVz
IHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgorICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgKiBzcXJ0T2ZUd29G
bG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUds
eXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwor
CisgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5
cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisKKyAgICAvLyBX
ZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBl
eHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0
byB0aGUgbGFyZ2VzdCB2YXJpYW50LgorICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXpl
VmFyaWFudHMpIHsKKyAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFz
ZUdseXBoLmZvbnQpOworICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOworICAgICAg
ICAvLyBMYXJnZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhhdmUgaW5jb3JyZWN0IGFkdmFuY2Ug
d2lkdGgsIGNhdXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVyc2NyaXB0LCBzbyB3ZSB1c2UgdGhl
IGdseXBoIGJvdW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdGl4Zm9udHMv
dHJhY2tpbmcvNDkvKS4KKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IGJvdW5kc0Zvckds
eXBoKGdseXBoRGF0YSkud2lkdGgoKTsKKyAgICAgICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gZ2x5
cGhEYXRhLmZvbnQtPm1hdGhEYXRhKCktPmdldEl0YWxpY0NvcnJlY3Rpb24oKmdseXBoRGF0YS5m
b250LCBnbHlwaERhdGEuZ2x5cGgpOworICAgICAgICBpZiAoaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhE
YXRhKSA+PSBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK2Jvb2wgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJh
Y2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0
YTo6QXNzZW1ibHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJseURhdGEmIGFzc2Vt
Ymx5RGF0YSkgY29uc3QKK3sKKyAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIFR5cGUg
TWF0aCB0YWJsZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25lIGN1cnJlbnRseSB1
c2VkIGJ5IHRoZSBNYXRoT3BlcmF0b3IgY29kZSwgc28gd2UgdHJ5IHRvIGZhbGxiYWNrIGluIGEg
cmVhc29uYWJsZSB3YXkuCisgICAgLy8gRklYTUU6IE1hdGhPcGVyYXRvciBzaG91bGQgc3VwcG9y
dCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDMyNykuCisgICAgLy8gV2UgdXNlIHRoZSBhcHByb2FjaCBvZiB0aGUgY29w
eUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01hdGhKYXgtZGV2L2Js
b2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQorCisgICAgLy8gV2UgY291
bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgorICAgIGludCBub25FeHRlbmRl
ckNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7CisgICAg
ICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQorICAgICAgICAgICAgbm9uRXh0ZW5kZXJDb3VudCsr
OworICAgIH0KKyAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCisgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9vIG1hbnkgcGllY2Vz
LgorCisgICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMgZnJvbSBsZWZ0IHRv
IHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0b20gdG8gdG9wIGZv
ciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgZW51bSBQYXJ0VHlwZSB7CisgICAgICAgIFN0YXJ0
LAorICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKKyAgICAgICAgTWlkZGxl
LAorICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCisgICAgICAgIEVuZCwKKyAg
ICAgICAgTm9uZQorICAgIH07CisgICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0VHlwZSA9IFN0YXJ0
OworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAgIGFzc2VtYmx5RGF0
YS5taWRkbGUuZ2x5cGggPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMp
IHsKKyAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAgICAgICAgICAvLyBJ
ZiB3ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNraXAgdGhl
IG1pZGRsZSBnbHlwaC4KKyAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRUeXBlID09IEV4dGVu
ZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5
cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7CisgICAgICAgICAgICBlbHNlIGlmIChl
eHBlY3RlZFBhcnRUeXBlID09IE1pZGRsZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRU
eXBlID0gRW5kOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIpIHsKKyAg
ICAgICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgICAg
ICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsgLy8gV2UgY29w
eSB0aGUgZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIGVsc2UgaWYgKGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZmZXJlbnQg
ZXh0ZW5kZXJzLgorCisgICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBs
ZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRl
bmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUg
bWlkZGxlIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgZXh0ZW5kZXIuCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJl
dHdlZW5TdGFydEFuZE1pZGRsZToKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlk
ZGxlQW5kRW5kOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0aXBsZSBjb25zZWN1
dGl2ZSBleHRlbmRlcnMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKKyAgICAg
ICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90dG9tIHBh
cnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoID0gcGFydC5n
bHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFy
dEFuZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4dGVuZGVy
QmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBjYXNlIE1pZGRsZToKKyAgICAgICAgICAg
IC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAgICAgICAgYXNzZW1ibHlEYXRhLm1p
ZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0g
RXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICBjYXNlIEVuZDoK
KyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgorICAgICAgICAgICAg
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAg
ZXhwZWN0ZWRQYXJ0VHlwZSA9IE5vbmU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Y2FzZSBOb25lOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3Qg
YW4gdW5leHBlY3RlZCBub24tZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5n
bHlwaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdl
IGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFuIGV4dGVuc2lvbiBnbHlwaC4KKworICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgdG9wL2JvdHRvbSBnbHlwaHMsIHdlIHVzZSB0aGUgZXh0ZW5zaW9u
IGdseXBoLgorICAgIGlmICghYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZ2x5cGgpCisgICAgICAg
IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5n
bHlwaDsKKyAgICBpZiAoIWFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGgpCisgICAgICAg
IGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9u
LmdseXBoOworCisgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udCA9ICZzdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250
ID0gYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKKyAgICBhc3NlbWJseURhdGEuYm90dG9t
T3JMZWZ0LmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250OworICAgIGFzc2VtYmx5
RGF0YS5taWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJseURh
dGEudG9wT3JSaWdodC5mb250IDogbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgYm9vbCBzZXRNYXhQcmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXpl
KQoreworICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2Fs
T3BlcmF0b3IgfHwgbV9vcGVyYXRvclR5cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3Bl
cmF0b3IpOworICAgIEFTU0VSVCghc2V0TWF4UHJlZmVycmVkV2lkdGggfHwgbV9vcGVyYXRvclR5
cGUgPT0gT3BlcmF0b3JUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBib29sIGlzVmVydGlj
YWwgPSBtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7CisK
KyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBi
YXNlR2x5cGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNldE1heFByZWZlcnJlZFdp
ZHRoKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlz
IGxhcmdlIGVub3VnaC4KKyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBpc1ZlcnRpY2FsID8gaGVp
Z2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7
CisgICAgICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdseXBoQXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0YTsKKyAgICBpZiAo
YmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKKyAgICAgICAgVmVjdG9yPEdseXBoPiBzaXpl
VmFyaWFudHM7CisgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
IGFzc2VtYmx5UGFydHM7CisgICAgICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRN
YXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBpc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFz
c2VtYmx5UGFydHMpOworICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCisg
ICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAg
ICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKKyAg
ICAgICAgICAgIGlmIChzZXRNYXhQcmVmZXJyZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX21h
eFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0
aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERh
dGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhlcmUgaXMg
YSBjb25zdHJ1Y3Rpb24uCisgICAgICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxC
YWNrKHN0eWxlLCBhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghaXNWZXJ0aWNhbCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0
YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAg
ICAgICBjb25zdCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRy
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3Ry
ZXRjaHlDaGFyYWN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3Rl
cnNbaW5kZXhdLmNoYXJhY3RlciA9PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwg
bGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIGluIHJpZ2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9y
bSBieSBhZGRpbmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBz
ZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0Lgor
ICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8g
YSBsaXN0IG9mIGdseXBoIGRhdGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0ID0g
c3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPnRvcENoYXIsIGZhbHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0
eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5leHRlbnNpb25DaGFyLCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21Pckxl
ZnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNo
YXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEubWlkZGxl
ID0gc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIgPyBzdHlsZS5mb250Q2FzY2FkZSgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2Up
IDogR2x5cGhEYXRhKCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgYXJlIG1lYXN1cmluZyB0aGUg
bWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgorICAgIGlmIChzZXRNYXhQcmVm
ZXJyZWRXaWR0aCkgeworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5
b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1i
bHlEYXRhLnRvcE9yUmlnaHQpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0aCA9
IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRXaWR0
aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fbWF4UHJlZmVycmVkV2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0
byBhdm9pZCBnbHlwaCBvdmVybGFwcy4KKyAgICBmbG9hdCBtaW5TaXplID0gaXNWZXJ0aWNhbCA/
CisgICAgICAgIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSArIGhlaWdo
dEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlE
YXRhLmJvdHRvbU9yTGVmdCkKKyAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJs
eURhdGEuYm90dG9tT3JMZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5t
aWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpOwor
ICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
R2x5cGhBc3NlbWJseShhc3NlbWJseURhdGEpOworfQorCitMYXlvdXRSZWN0IE1hdGhPcGVyYXRv
cjo6cGFpbnRHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgR2x5cGhEYXRhJiBkYXRhLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBh
aW50VHJpbW1pbmcgdHJpbSkKK3sKKyAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNG
b3JHbHlwaChkYXRhKTsKKworICAgIExheW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBM
YXlvdXRTaXplKGdseXBoQm91bmRzLngoKSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91
bmRzLmhlaWdodCgpKSk7CisgICAgZ2x5cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5
cGhCb3VuZHMueSgpKTsKKworICAgIC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVn
bHkgd2l0aCBvbmUgYW5vdGhlciB3ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVs
IGJvdW5kYXJpZXMKKyAgICAvLyBhbmQgdHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJp
bSBpcyB0byBhY2NvdW50IGZvciBmb250cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZl
IGxlc3MKKyAgICAvLyB0aGFuIGZ1bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBp
bnRyb2R1Y2Ugc21hbGwgc2VhbXMgYmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhzLgorICAgIEZsb2F0
UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OworICAgIHN3aXRjaCAodHJpbSkgeworICAgIGNh
c2UgVHJpbVRvcDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFp
bnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8o
Z2x5cGhQYWludFJlY3QueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltQm90dG9t
OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
bWF4WSgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8o
Z2x5cGhQYWludFJlY3QubWF4WSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltVG9w
QW5kQm90dG9tOgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWlu
dFJlY3QueSgpLmNlaWwoKSArIDEpOworICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlF
ZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJv
dW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKKyAgICAgICAgY2xpcEJvdW5k
cy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUcmltTGVmdDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRv
KGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlm
dFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
cmltUmlnaHQ6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4
WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRyaW1MZWZ0QW5kUmlnaHQ6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhn
bHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNo
aWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOworICAgICAg
ICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOworICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOworICAgIH0K
KworICAgIC8vIENsaXBwaW5nIHRoZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVu
dGlhbCBpc3N1ZXMgYXQgam9pbmVkIGVkZ2VzLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChj
bGlwQm91bmRzKTsKKworICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKKyAgICBidWZmZXIuYWRkKGRh
dGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSkpOworICAgIGlu
Zm8uY29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udCwg
YnVmZmVyLCAwLCAxLCBvcmlnaW4pOworCisgICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OworfQor
Cit2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
ZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQoreworICAgIEFTU0VSVChtX29wZXJhdG9yVHlw
ZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOworICAgIEFTU0VSVChtX3N0cmV0
Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3Nl
bWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgp
KTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBo
LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLnkoKSA9PSB0by55
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBi
b3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisKKyAgICAvLyBDbGlwcGluZyB0
aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRl
bmRlciBnbHlwaCBpbnRvIHRoZQorICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3
aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlm
aWVzIGxhdGVyIGNsaXBwaW5nLgorICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVj
dDsKKyAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhmcm9tLnkoKSk7CisgICAgY2xpcEJvdW5k
cy5zaGlmdE1heFlFZGdlVG8odG8ueSgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBC
b3VuZHMpOworCisgICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZy
b20gdGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdv
IHBpeGVscy4KKyAgICBmbG9hdCBvZmZzZXRUb0dseXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsg
MjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpLCBm
cm9tLnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEds
eXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlw
aFJlY3QubWF4WSgpIDwgdG8ueSgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0g
cGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2lu
LCBUcmltVG9wQW5kQm90dG9tKTsKKyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdp
bi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gVGhl
cmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBn
bHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAg
IC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAg
ICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQoreworICAgIEFT
U0VSVChtX29wZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7
CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkp
OworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOworICAgIEFTU0VS
VChmcm9tLngoKSA8PSB0by54KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9y
IHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAg
aWYgKGZyb20ueCgpID09IHRvLngoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKworICAgIC8vIENs
aXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90
dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9t
IGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5k
IHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0g
aW5mby5yZWN0OworICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGZyb20ueCgpKTsKKyAgICBj
bGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyh0by54KCkpOworICAgIGluZm8uY29udGV4dCgpLmNs
aXAoY2xpcEJvdW5kcyk7CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBw
aXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQg
bGVmdCBieSB0d28gcGl4ZWxzLgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhMZWZ0ID0gLTI7Cisg
ICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSArIG9mZnNl
dFRvR2x5cGhMZWZ0LCBzdGQ6Om1pbihmcm9tLnkoKSwgdG8ueSgpKSk7CisgICAgRmxvYXRSZWN0
IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKKworICAgIHdoaWxlIChs
YXN0UGFpbnRlZEdseXBoUmVjdC5tYXhYKCkgPCB0by54KCkpIHsKKyAgICAgICAgbGFzdFBhaW50
ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lv
biwgZ2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOworICAgICAgICBnbHlwaE9yaWdpbi5z
ZXRYKGdseXBoT3JpZ2luLngoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LndpZHRoKCkpOworCisg
ICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxs
IGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3Rh
bmdsZQorICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3
IG5vdGhpbmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZl
cnRpY2FsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIEFTU0VSVChtX29w
ZXJhdG9yVHlwZSA9PSBPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOworICAgIEFTU0VS
VChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NF
UlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1fYXNzZW1i
bHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcg
dGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGlu
ZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0
UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0
ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBGbG9hdFJlY3QgdG9wR2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOworICAgIExh
eW91dFBvaW50IHRvcEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9w
TGVmdC55KCkgLSB0b3BHbHlwaEJvdW5kcy55KCkpOworICAgIExheW91dFJlY3QgdG9wR2x5cGhQ
YWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnRvcE9yUmlnaHQs
IHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKKworICAgIEZsb2F0UmVjdCBib3R0b21HbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0KTsKKyAgICBM
YXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRv
clRvcExlZnQueSgpICsgc3RyZXRjaFNpemUoKSAtIChib3R0b21HbHlwaEJvdW5kcy5oZWlnaHQo
KSArIGJvdHRvbUdseXBoQm91bmRzLnkoKSkpOworICAgIExheW91dFJlY3QgYm90dG9tR2x5cGhQ
YWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbU9yTGVm
dCwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOworCisgICAgaWYgKG1fYXNzZW1ibHkubWlk
ZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3
ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQgaXQg
aGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgorICAgICAgICBG
bG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5Lm1p
ZGRsZSk7CisgICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9w
TGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2lu
Lm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9wR2x5
cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5t
b3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjApKTsK
KworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChz
dHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltVG9w
QW5kQm90dG9tKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0eWxl
LCBpbmZvLCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBtaWRkbGVHbHlwaFBh
aW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVu
c2lvbkdseXBoKHN0eWxlLCBpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5l
cigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCB0b3BH
bHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5Y
TWluWUNvcm5lcigpKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEds
eXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9vcGVyYXRvclR5
cGUgPT0gT3BlcmF0b3JUeXBlOjpIb3Jpem9udGFsT3BlcmF0b3IpOworICAgIEFTU0VSVChtX3N0
cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9h
c3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90
dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGds
eXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBl
eGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0UG9pbnQg
b3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2Vp
bGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhP
cmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50
KTsKKyAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUs
IGluZm8sIG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRyaW1SaWdo
dCk7CisKKyAgICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkudG9wT3JSaWdodCk7CisgICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9yaWdpbihv
cGVyYXRvclRvcExlZnQueCgpICsgbV93aWR0aCAtIHJpZ2h0R2x5cGhCb3VuZHMud2lkdGgoKSwg
b3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsKKyAgICBMYXlvdXRSZWN0IHJpZ2h0R2x5
cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnRvcE9yUmln
aHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKKworICAgIExheW91dFBvaW50IGJhc2Vs
aW5lU2hpZnQoMCwgbV9hc2NlbnQpOworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3Rh
cnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLgorICAgICAgICBMYXlvdXRQb2ludCBtaWRk
bGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBsZWZ0R2x5cGhPcmlnaW4ueSgpKTsK
KyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KChyaWdodEdseXBo
UGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYKCkpIC8gMi4wLCAwKSk7Cisg
ICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxl
LCBpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5k
UmlnaHQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwg
aW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0
LCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7
CisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBt
aWRkbGVHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgcmln
aHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7CisgICAg
fSBlbHNlCisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBp
bmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQs
IHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmOTVkYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9w
ZXJhdG9yLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTWF0aE9wZXJhdG9yX2gKKyNkZWZpbmUgTWF0aE9wZXJhdG9yX2gKKworI2lmIEVOQUJMRShN
QVRITUwpCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgor
I2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNp
bmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlbmRlclN0eWxlOworCitjbGFzcyBNYXRoT3BlcmF0b3IgeworcHVibGljOgorICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3JUeXBlIHsgVW5kZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVyYXRvciwg
VmVydGljYWxPcGVyYXRvciwgSG9yaXpvbnRhbE9wZXJhdG9yIH07CisgICAgTWF0aE9wZXJhdG9y
KCk7CisgICAgdm9pZCBzZXRPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYsIFVDaGFyIGJhc2VD
aGFyYWN0ZXIsIE9wZXJhdG9yVHlwZSk7CisgICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHls
ZSYpOworCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
KyAgICBMYXlvdXRVbml0IG1heFByZWZlcnJlZFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhQ
cmVmZXJyZWRXaWR0aDsgfQorICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQorCisgICAgYm9vbCBpc1N0cmV0Y2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVk
OyB9CisgICAgdm9pZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6
VW5zdHJldGNoZWQ7IH0KKworICAgIC8vIEZJWE1FOiBBbGwgdGhlIGNvZGUgYmVsb3cgc2hvdWxk
IGJlIHByaXZhdGUgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIGJ5IFJlbmRlck1hdGhNTE9w
ZXJhdG9yIChodHRwOi8vd2Via2l0Lm9yZy9iLzE1MjI0NCkuCisKKyAgICBzdHJ1Y3QgR2x5cGhB
c3NlbWJseURhdGEgeworICAgICAgICBHbHlwaERhdGEgdG9wT3JSaWdodDsKKyAgICAgICAgR2x5
cGhEYXRhIGV4dGVuc2lvbjsKKyAgICAgICAgR2x5cGhEYXRhIGJvdHRvbU9yTGVmdDsKKyAgICAg
ICAgR2x5cGhEYXRhIG1pZGRsZTsKKyAgICB9OworICAgIGVudW0gY2xhc3MgU3RyZXRjaFR5cGUg
eyBVbnN0cmV0Y2hlZCwgU2l6ZVZhcmlhbnQsIEdseXBoQXNzZW1ibHkgfTsKKyAgICBlbnVtIEds
eXBoUGFpbnRUcmltbWluZyB7CisgICAgICAgIFRyaW1Ub3AsCisgICAgICAgIFRyaW1Cb3R0b20s
CisgICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCisgICAgICAgIFRyaW1MZWZ0LAorICAgICAgICBU
cmltUmlnaHQsCisgICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKKyAgICB9OworCisgICAgTGF5b3V0
VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3JUeXBlID09IE9wZXJh
dG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yID8gbV93aWR0aCA6IG1fYXNjZW50ICsgbV9kZXNj
ZW50OyB9CisgICAgYm9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlwaERh
dGEmKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwor
ICAgIHZvaWQgc2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOworICAg
IHZvaWQgY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHls
ZSYpOworICAgIHZvaWQgY2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiwg
Ym9vbCBzZXRNYXhQcmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7Cisg
ICAgYm9vbCBjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiYsIEdseXBoQXNz
ZW1ibHlEYXRhJikgY29uc3Q7CisKKyAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoY29uc3QgUmVu
ZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBHbHlwaERhdGEmLCBjb25zdCBMYXlvdXRQb2lu
dCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcpOworICAgIHZvaWQgZmlsbFdpdGhWZXJ0aWNh
bEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7CisgICAgdm9pZCBmaWxsV2l0
aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOworICAgIHZv
aWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRIb3Jpem9udGFsR2x5cGhB
c3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7CisKKyAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7CisgICAgT3BlcmF0b3JUeXBlIG1fb3Bl
cmF0b3JUeXBlOworICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7CisgICAgdW5pb24gewor
ICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OworICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBt
X2Fzc2VtYmx5OworICAgIH07CisgICAgTGF5b3V0VW5pdCBtX21heFByZWZlcnJlZFdpZHRoOwor
ICAgIExheW91dFVuaXQgbV93aWR0aDsKKyAgICBMYXlvdXRVbml0IG1fYXNjZW50OworICAgIExh
eW91dFVuaXQgbV9kZXNjZW50OworICAgIExheW91dFVuaXQgbV9pdGFsaWNDb3JyZWN0aW9uOwor
fTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKKyNlbmRpZiAvLyBNYXRoT3BlcmF0
b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCA3MmU5Yjk1Li42NzM1ZGNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmNwcApAQCAtNDUsMzMgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogdXNpbmcg
bmFtZXNwYWNlIE1hdGhNTE5hbWVzOwogCi0vLyBGSVhNRTogVGhlIE9wZW5UeXBlIE1BVEggdGFi
bGUgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0YWJsZSAo
aHR0cDovL3drYnVnLzEyMjI5NykuCi1zdHJ1Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgewotICAgIFVD
aGFyIGNoYXJhY3RlcjsKLSAgICBVQ2hhciB0b3BDaGFyOwotICAgIFVDaGFyIGV4dGVuc2lvbkNo
YXI7Ci0gICAgVUNoYXIgYm90dG9tQ2hhcjsKLSAgICBVQ2hhciBtaWRkbGVDaGFyOwotfTsKLS8v
IFRoZSBmaXJzdCBsZWZ0UmlnaHRQYWlyc0NvdW50IHBhaXJzIGNvcnJlc3BvbmQgdG8gbGVmdC9y
aWdodCBmZW5jZXMgdGhhdCBjYW4gZWFzaWx5IGJlIG1pcnJvcmVkIGluIFJUTC4KLXN0YXRpYyBj
b25zdCBzaG9ydCBsZWZ0UmlnaHRQYWlyc0NvdW50ID0gNTsKLXN0YXRpYyBjb25zdCBTdHJldGNo
eUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0gewotICAgIHsgMHgyOCAgLCAweDIz
OWIsIDB4MjM5YywgMHgyMzlkLCAweDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcwotICAgIHsg
MHgyOSAgLCAweDIzOWUsIDB4MjM5ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQgcGFyZW50
aGVzaXMKLSAgICB7IDB4NWIgICwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8v
IGxlZnQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4NWQgICwgMHgyM2E0LCAweDIzYTUsIDB4MjNh
NiwgMHgwICAgIH0sIC8vIHJpZ2h0IHNxdWFyZSBicmFja2V0Ci0gICAgeyAweDdiICAsIDB4MjNh
NywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQKLSAgICB7
IDB4N2QgICwgMHgyM2FiLCAweDIzYWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5
IGJyYWNrZXQKLSAgICB7IDB4MjMwOCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgwICAgIH0s
IC8vIGxlZnQgY2VpbGluZwotICAgIHsgMHgyMzA5LCAweDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAw
eDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZwotICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4MjNhMiwg
MHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBmbG9vcgotICAgIHsgMHgyMzBiLCAweDIzYTUsIDB4
MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgZmxvb3IKLSAgICB7IDB4N2MgICwgMHg3
YywgICAweDdjLCAgIDB4N2MsICAgMHgwICAgIH0sIC8vIHZlcnRpY2FsIGJhcgotICAgIHsgMHgy
MDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDAgICAgfSwgLy8gZG91YmxlIHZlcnRpY2Fs
IGxpbmUKLSAgICB7IDB4MjIyNSwgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgwICAgIH0sIC8v
IHBhcmFsbGVsIHRvCi0gICAgeyAweDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAg
ICB9IC8vIGludGVncmFsIHNpZ24KLX07Ci0KIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcihNYXRoTUxFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxl
KQogICAgIDogUmVuZGVyTWF0aE1MVG9rZW4oZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAg
LCBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKDApCkBAIC0yOTQsMjQgKzI2NywyMiBAQCB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAg
IGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlw
aCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCB1c2luZyBzdHJldGNoU2l6ZSBkdXJpbmcgdGhlIHByZWZlcnJlZCB3aWR0
aCBjYWxjdWxhdGlvbiBub3Igc2hvdWxkIHdlIGxlYXZlIGxvZ2ljYWwgd2lkdGggZGlydHkgKGh0
dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KKyAgICBNYXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlw
ZSB0eXBlOworICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQorICAgICAg
ICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKKyAg
ICBlbHNlIGlmIChtX2lzVmVydGljYWwpCisgICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6Ok9w
ZXJhdG9yVHlwZTo6VmVydGljYWxPcGVyYXRvcjsKKyAgICBlbHNlCisgICAgICAgIHR5cGUgPSBN
YXRoT3BlcmF0b3I6Ok9wZXJhdG9yVHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yOworICAgIG1fbWF0
aE9wZXJhdG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1fdGV4dENvbnRlbnQsIHR5cGUpOworICAg
IGZsb2F0IG1heGltdW1HbHlwaFdpZHRoOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CisgICAg
ICAgIG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3Iud2lkdGgoKTsKICAgICAgICAg
aWYgKG1heGltdW1HbHlwaFdpZHRoIDwgc3RyZXRjaFNpemUoKSkKICAgICAgICAgICAgIG1heGlt
dW1HbHlwaFdpZHRoID0gc3RyZXRjaFNpemUoKTsKLSAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90cmFpbGlu
Z1NwYWNlOwotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc0xhcmdl
T3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7Ci0gICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBp
biBTVElYIFdvcmQgaGF2ZSBpbmNvcnJlY3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFj
ZW1lbnQgb2Ygc3VwZXJzY3JpcHQsIHNvIHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAo
aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0aXhmb250cy90cmFja2luZy80OS8pLgotICAgICAg
ICBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7Ci0gICAgICAgIGlmIChtX3N0
cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKLSAgICAgICAgICAgIG1heGlt
dW1HbHlwaFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KS53aWR0aCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUgb25lIGZvciAi
RlJBQ1RJT04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBvcGVyYXRvcnMp
IGhhdmUgYSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0aW5nIGluIGxh
cmdlIGdhcHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYp
LgotICAgICAgICBjYWxjdWxhdGVTdHJldGNoeURhdGEoJm1heGltdW1HbHlwaFdpZHRoKTsKLSAg
ICB9CisgICAgfSBlbHNlCisgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0
b3IubWF4UHJlZmVycmVkV2lkdGgoKTsKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9sZWFkaW5nU3BhY2UgKyBtYXhpbXVtR2x5
cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFjZTsKIH0KIApAQCAtMzc0LDI0NSArMzQ1LDE0IEBAIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9
CiAKLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdAotewotICAgIGJhc2VHbHlw
aCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRl
bnQsICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIHJldHVybiBiYXNlR2x5
cGguaXNWYWxpZCgpICYmIGJhc2VHbHlwaC5mb250ID09ICZzdHlsZS5mb250Q2FzY2FkZSgpLnBy
aW1hcnlGb250KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVWYXJp
YW50KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCi17Ci0gICAgQVNTRVJUKHNpemVWYXJp
YW50LmlzVmFsaWQoKSAmJiBzaXplVmFyaWFudC5mb250LT5tYXRoRGF0YSgpKTsKLSAgICBtX3N0
cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50OwotICAgIG1fdmFyaWFudCA9IHNp
emVWYXJpYW50OwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRHbHlwaEFzc2Vt
Ymx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpCi17Ci0gICAgbV9zdHJl
dGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5OwotICAgIG1fYXNzZW1ibHkgPSBh
c3NlbWJseURhdGE7Ci19Ci0KLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZUds
eXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1i
bHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkg
Y29uc3QKLXsKLSAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIFR5cGUgTWF0aCB0YWJs
ZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25lIGN1cnJlbnRseSB1c2VkIGJ5IHRo
ZSBSZW5kZXJNYXRoTUxPcGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSBy
ZWFzb25hYmxlIHdheS4KLSAgICAvLyBGSVhNRTogUmVuZGVyTWF0aE1MT3BlcmF0b3Igc2hvdWxk
IHN1cHBvcnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzAzMjcpLgotICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2Yg
dGhlIGNvcHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4
LWRldi9ibG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKLQotICAgIC8v
IFdlIGNvdW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KLSAgICBpbnQgbm9u
RXh0ZW5kZXJDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykg
ewotICAgICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKLSAgICAgICAgICAgIG5vbkV4dGVuZGVy
Q291bnQrKzsKLSAgICB9Ci0gICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55
IHBpZWNlcy4KLQotICAgIC8vIFdlIG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20g
bGVmdCB0byByaWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRv
IHRvcCBmb3IgdmVydGljYWwgb3BlcmF0b3JzLgotICAgIGVudW0gUGFydFR5cGUgewotICAgICAg
ICBTdGFydCwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCi0gICAgICAg
IE1pZGRsZSwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAotICAgICAgICBF
bmQsCi0gICAgICAgIE5vbmUKLSAgICB9OwotICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUg
PSBTdGFydDsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAgICBhc3Nl
bWJseURhdGEubWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJs
eVBhcnRzKSB7Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNvdW50IDwgMykgewotICAgICAgICAg
ICAgLy8gSWYgd2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBz
a2lwIHRoZSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9
PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3Rl
ZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgZWxz
ZSBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0
ZWRQYXJ0VHlwZSA9IEVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVy
KSB7Ci0gICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCi0gICAg
ICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8v
IFdlIGNvcHkgdGhlIGV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJs
eURhdGEuZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlm
ZmVyZW50IGV4dGVuZGVycy4KLQotICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9y
ZSB0aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBl
ID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25v
cmUgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBF
eHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjYXNlIEVuZDoKLSAgICAgICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVu
ZGVyLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgRXh0
ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0
d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUg
Y29uc2VjdXRpdmUgZXh0ZW5kZXJzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7
Ci0gICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2Jv
dHRvbSBwYXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlwaCA9
IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3
ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBF
eHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgY2FzZSBNaWRkbGU6Ci0gICAg
ICAgICAgICAvLyBXZSBjb3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5
RGF0YS5taWRkbGUuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0
VHlwZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgY2Fz
ZSBFbmQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KLSAgICAg
ICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gcGFydC5nbHlwaDsKLSAgICAg
ICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBOb25lOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDog
d2UgZ290IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRl
bnNpb24uZ2x5cGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9y
dGVkOiB3ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCi0K
LSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9yaWdodCBvciBsZWZ0L2JvdHRvbSBnbHlwaHMs
IHdlIHVzZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgotICAgIGlmICghYXNzZW1ibHlEYXRhLnRvcE9y
UmlnaHQuZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoID0gYXNz
ZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5ib3R0b21P
ckxlZnQuZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBh
c3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOwotCi0gICAgYXNzZW1ibHlEYXRhLnRvcE9yUmln
aHQuZm9udCA9ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICBhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250Owot
ICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZm9udCA9IGFzc2VtYmx5RGF0YS50b3BPclJp
Z2h0LmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1p
ZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgOiBudWxscHRyOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0
ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKQotewotICAgIEFTU0VSVChtX2lzVmVydGljYWwg
JiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7Ci0KLSAgICBHbHlwaERhdGEgYmFz
ZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgfHwgIWJh
c2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8
R2x5cGg+IHNpemVWYXJpYW50czsKLSAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1i
bHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotCi0gICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVy
YXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBp
dCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4K
LSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGgu
Zm9udC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3
b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KCpiYXNl
R2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7
Ci0KLSAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VH
bHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKLQotICAgIC8v
IFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhl
IGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNr
IHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0gICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNp
emVWYXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBi
YXNlR2x5cGguZm9udCk7Ci0gICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAg
ICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJ
dGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKLSAgICAg
ICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVp
Z2h0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBM
YXlvdXRVbml0IHRhcmdldFNpemUpCi17Ci0gICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8
fCBtX2lzVmVydGljYWwpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBpZiAoIWdl
dEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgewotICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRj
aCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIGZsb2F0IGJhc2VT
aXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoYmFzZUdseXBoKSA6IGFkdmFuY2VX
aWR0aEZvckdseXBoKGJhc2VHbHlwaCk7Ci0gICAgICAgIGlmICh0YXJnZXRTaXplIDw9IGJhc2VT
aXplKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdseXBoQXNzZW1ibHlEYXRh
IGFzc2VtYmx5RGF0YTsKLSAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKLSAg
ICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgICAgIFZlY3RvcjxPcGVuVHlw
ZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7Ci0gICAgICAgIGJhc2VHbHlw
aC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lz
VmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0gICAgICAgIC8vIFdlIHZl
cmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KLSAgICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6
IHNpemVWYXJpYW50cykgewotICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFy
aWFudCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRo
KQotICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVt
R2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAg
ICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChn
bHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAg
ICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhl
cmUgaXMgYSBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJs
eUZhbGxCYWNrKGFzc2VtYmx5UGFydHMsIGFzc2VtYmx5RGF0YSkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2lzVmVydGljYWwpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEgg
dGFibGUsIHdlIGZhbGxiYWNrIHRvIHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KLSAg
ICAgICAgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIqIHN0cmV0Y2h5Q2hhcmFjdGVyID0gbnVsbHB0
cjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4SW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKHN0
cmV0Y2h5Q2hhcmFjdGVycyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IG1heEluZGV4OyArK2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0
ZXJzW2luZGV4XS5jaGFyYWN0ZXIgPT0gbV90ZXh0Q29udGVudCkgewotICAgICAgICAgICAgICAg
IHN0cmV0Y2h5Q2hhcmFjdGVyID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBpbmRleCA8
IGxlZnRSaWdodFBhaXJzQ291bnQgKiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBpbiByaWdodC10by1sZWZ0IGRpcmVjdGlvbiB3ZSBzZWxlY3QgdGhlIG1pcnJvcmVkIGZv
cm0gYnkgYWRkaW5nIC0xIG9yICsxIGFjY29yZGluZyB0byB0aGUgcGFyaXR5IG9mIGluZGV4Lgot
ICAgICAgICAgICAgICAgICAgICBpbmRleCArPSBpbmRleCAlIDIgPyAtMSA6IDE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBzdHJldGNoeSBjaGFyYWN0ZXIg
c2V0IGZvciB0aGlzIGNoYXJhY3Rlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gc3RyZXRjaCBpdC4K
LSAgICAgICAgaWYgKCFzdHJldGNoeUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBXZSBjb252ZXJ0IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRv
IGEgbGlzdCBvZiBnbHlwaCBkYXRhLgotICAgICAgICBhc3NlbWJseURhdGEudG9wT3JSaWdodCA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRv
bU9yTGVmdCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3Ry
ZXRjaHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRh
Lm1pZGRsZSA9IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hh
ciwgZmFsc2UpIDogR2x5cGhEYXRhKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIG1lYXN1
cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAgIGlmICht
YXhpbXVtR2x5cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1h
eCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50
b3BPclJpZ2h0KSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhp
bXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lv
bikpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBo
V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKLSAgICAg
ICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZh
bmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBl
bm91Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9IG1faXNW
ZXJ0aWNhbCA/Ci0gICAgICAgIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0
KSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgo
YXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkKLSAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2Vt
Ymx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9y
UmlnaHQpOwotICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc2V0R2x5cGhBc3NlbWJseShhc3NlbWJseURhdGEpOwotfQotCiB2b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSk7
CiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RyZXRj
aFR5cGUgPSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQ7Ci0gICAgbV9pdGFsaWNDb3JyZWN0aW9u
ID0gMDsKKyAgICBtX21hdGhPcGVyYXRvci51bnN0cmV0Y2goKTsKKyAgICBtX21hdGhPcGVyYXRv
ci5tX2l0YWxpY0NvcnJlY3Rpb24gPSAwOwogICAgIC8vIFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0
aGUgb3BlcmF0b3IuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0
byB0aGUgd2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91
bGQgb25seSBiZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93
d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCkBAIC02
MjYsMjUgKzM2NiwzMyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgp
CiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGUgdHlwZTsKKyAgICBpZiAoaXNMYXJnZU9wZXJh
dG9ySW5EaXNwbGF5U3R5bGUoKSkKKyAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6T3BlcmF0
b3JUeXBlOjpEaXNwbGF5T3BlcmF0b3I7CisgICAgZWxzZSBpZiAobV9pc1ZlcnRpY2FsKQorICAg
ICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7
CisgICAgZWxzZQorICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpPcGVyYXRvclR5cGU6Okhv
cml6b250YWxPcGVyYXRvcjsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihzdHlsZSgp
LCBtX3RleHRDb250ZW50LCB0eXBlKTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VP
cGVyYXRvckluRGlzcGxheVN0eWxlKCkpCi0gICAgICAgIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IoKTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgY2FsY3VsYXRl
U3RyZXRjaHlEYXRhKG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOwotICAgICAgICBpZiAobV9zdHJl
dGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpCisgICAgICAgIG1fbWF0aE9wZXJh
dG9yLmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShzdHlsZSgpLCBmYWxzZSwgc3RyZXRjaFNpemUoKSk7
CisgICAgICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsICYmIG1fc3RyZXRjaFR5cGUg
PT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7CisgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBt
X21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6
OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0aGUgb3BlcmF0b3IgdG8gbWF0
Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJpYW50LgogICAgICAgICBpZiAoaXNMYXJnZU9wZXJh
dG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIHN0cmV0Y2ggc2l6ZSBp
cyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlvbiBvZiB0aGUgc2l6ZSB2YXJp
YW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yLgogICAgICAgICAgICAgLy8gV2Ug
c2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgc2VsZWN0ZWQgc2l6ZSB2YXJp
YW50IGdseXBoLgotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJv
dW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAg
IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHJlc2NhbGUgdGhlIGhlaWdodCBhbmQgZGVw
dGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAgICAgICAgZmxvYXQgdmFyaWFudFNpemUgPSBoZWln
aHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICAgICAgZmxvYXQgdmFyaWFudFNpemUgPSBo
ZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAgICAgICAgZmxv
YXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAgICAgICAgICAgICBmbG9hdCBhc3BlY3QgPSBzaXpl
ID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6IDEuMDsKICAgICAgICAgICAgIG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwpAQCAtNjUzLDMwICs0MDEsMzAgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIH0KIAogICAgIGlmICghbV9p
c1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpT
aXplVmFyaWFudCkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRj
aFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQpIHsKKyAgICAg
ICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
ID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNl
bGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFdpZHRoID0g
YWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChtX3N0
cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7CisgICAgICAgICAgICBt
X3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFy
aWFudCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9
PSBNYXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7CiAgICAgICAgICAg
ICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHM7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lID0gMDsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9
IDA7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJs
eS5ib3R0b21PckxlZnQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CiAgICAgICAgICAgICBt
X3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAgICAgICAgICAgICBt
X3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAKLSAgICAgICAgICAg
IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BPclJpZ2h0KTsKKyAg
ICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9h
c3NlbWJseS50b3BPclJpZ2h0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
LCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNl
bGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwg
Z2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNG
b3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9
IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKICAg
ICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAg
ICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVu
aXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAot
ICAgICAgICAgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAg
ICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOwor
ICAgICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAgICBtX3N0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0
aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICB9CkBAIC02
ODYsMjM3ICs0MzQsNTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUo
KQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRjaFR5cGU6OlVuc3Ry
ZXRjaGVkKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8aW50PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKICAgICBy
ZXR1cm4gUmVuZGVyTWF0aE1MVG9rZW46OmZpcnN0TGluZUJhc2VsaW5lKCk7CiB9CiAKIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9n
aWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRW
YWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChtX3N0cmV0Y2hUeXBlICE9
IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJl
dGNoZWQoKSkKICAgICAgICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmUgKyBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVuZGVyQm94Ojpjb21w
dXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVl
cyk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgoUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBv
cmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0UmVjdCBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50
UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lk
dGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9y
aWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBn
bHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3Rpbmcg
ZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwu
IFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBp
eGVscyB0aGF0IGhhdmUgbGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRn
ZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlw
aHMuCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgc3dpdGNoICh0
cmltKSB7Ci0gICAgY2FzZSBUcmltVG9wOgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlF
ZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRz
LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRyaW1Cb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNo
aWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRS
ZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwot
ICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAg
ICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBnbHlwaFBhaW50UmVj
dC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwotICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFRyaW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhY
RWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBC
b3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Qu
c2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgZ2x5
cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigp
IC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lngo
KSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1h
eFgoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2
b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLSAgICBpbmZvLmNv
bnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAg
IGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChk
YXRhKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRl
KCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAgIHJldHVybiBnbHlw
aFBhaW50UmVjdDsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0
aWNhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZy
b20sIGNvbnN0IExheW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsK
LSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7
Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJU
KGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3Ig
dGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBp
ZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwotCi0gICAgRmxvYXRS
ZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOwot
Ci0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBk
cmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAvLyByZWdpb25zIG9m
IHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkg
cGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBMYXlvdXRSZWN0IGNs
aXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55
KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7Ci0gICAgaW5mby5j
b250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUg
dXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3
ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9
IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlv
dXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsKLSAgICBGbG9h
dFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hp
bGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgewotICAgICAgICBsYXN0
UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24s
IGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0
WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwg
ZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFu
Z2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcg
bm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQotewotICAgIEFTU0VSVCgh
bV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6
R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQo
KSk7Ci0gICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBp
cyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBh
bnl0aGluZy4KLSAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkp
OwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0
byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAvLyByZWdpb25z
IG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFp
cnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBMYXlvdXRSZWN0
IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZnJv
bS54KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7Ci0gICAgaW5m
by5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5nIG1heSByZW1v
dmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRlciBnbHlwaCwg
c28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zmc2V0VG9HbHlw
aExlZnQgPSAtMjsKLSAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZy
b20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0by55KCkpICsg
bV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAgRmxvYXRSZWN0IGxhc3RQYWludGVk
R2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKLQotICAgIHdoaWxlIChsYXN0UGFpbnRlZEds
eXBoUmVjdC5tYXhYKCkgPCB0by54KCkpIHsKLSAgICAgICAgbGFzdFBhaW50ZWRHbHlwaFJlY3Qg
PSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJp
bUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5cGhPcmlnaW4ueCgp
ICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBh
IGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGds
eXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdp
dGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAg
aWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyTWF0aE1M
VG9rZW46OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKIAotICAgIGlmIChpbmZvLmNvbnRleHQo
KS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IG1fc3RyZXRjaFR5cGUgPT0g
U3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChpbmZvLmNvbnRleHQoKS5wYWludGlu
Z0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHls
ZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8ICFtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hl
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogICAgIGluZm8uY29udGV4dCgpLnNldEZpbGxDb2xv
cihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAKLSAg
ICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQpIHsKLSAgICAg
ICAgQVNTRVJUKG1fdmFyaWFudC5pc1ZhbGlkKCkpOworICAgIGlmIChtX21hdGhPcGVyYXRvci5t
X3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7
CisgICAgICAgIEFTU0VSVChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuaXNWYWxpZCgpKTsKICAg
ICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYWRkKG1fdmFyaWFudC5n
bHlwaCwgbV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFyaWFudCkpOwor
ICAgICAgICBidWZmZXIuYWRkKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5nbHlwaCwgbV9tYXRo
T3BlcmF0b3IubV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fdmFyaWFudCkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBj
ZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAgICAgICBGbG9hdFJl
Y3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICBGbG9h
dFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3Zhcmlh
bnQpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgaW5m
by5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX3ZhcmlhbnQu
Zm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGluZm8uY29udGV4
dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9tYXRoT3BlcmF0b3IubV92
YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCkKLSAgICAgICAgcGFpbnRWZXJ0aWNh
bEdseXBoQXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOwotICAgIGVsc2UKLSAgICAgICAgcGFp
bnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KFBhaW50SW5m
byYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIEFTU0VSVCht
X2lzVmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpH
bHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0LmlzVmFsaWQo
KSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7Ci0KLSAg
ICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRo
ZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91
ciBwYWludCBib3guCisgICAgbV9tYXRoT3BlcmF0b3IubV9hc2NlbnQgPSBtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fZGVzY2VudCA9IG1fc3RyZXRj
aERlcHRoQmVsb3dCYXNlbGluZTsKKyAgICBtX21hdGhPcGVyYXRvci5tX3dpZHRoID0gbG9naWNh
bFdpZHRoKCk7CiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQg
KyBsb2NhdGlvbigpOwogICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gbV9sZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5nU3BhY2UsIDApOwot
ICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7Ci0g
ICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50
b3BPclJpZ2h0KTsKLSAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihvcGVyYXRvclRvcExl
ZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMueSgpKTsKLSAgICBM
YXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5
LnRvcE9yUmlnaHQsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAgIEZsb2F0UmVj
dCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tT3JM
ZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90dG9tR2x5cGhC
b3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBMYXlvdXRSZWN0
IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRv
bU9yTGVmdCwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAgaWYgKG1fYXNzZW1i
bHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdp
biBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hp
ZnQgaXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgotICAg
ICAgICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2Vt
Ymx5Lm1pZGRsZSk7Ci0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJh
dG9yVG9wTGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBo
T3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0g
dG9wR2x5cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9y
aWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAy
LjApKTsKLQotICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRH
bHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BB
bmRCb3R0b20pOwotICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywg
dG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3Qu
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlw
aChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlw
aFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFdp
dGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZ
Q29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotfQotCi12
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBh
aW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIEFT
U0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNo
VHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0
LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdodC5pc1ZhbGlkKCkp
OwotCi0gICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRn
ZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdl
cyBvZiBvdXIgcGFpbnQgYm94LgotICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBh
aW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKLSAgICBvcGVyYXRvclRvcExlZnQubW92ZShtX2xlYWRp
bmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0
b3JUb3BMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BM
ZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUpOwotICAgIExheW91dFJlY3QgbGVmdEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZv
LCBtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQpOwot
Ci0gICAgRmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2Vt
Ymx5LnRvcE9yUmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4ob3BlcmF0
b3JUb3BMZWZ0LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRzLndpZHRoKCks
IG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAg
ICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNz
ZW1ibHkudG9wT3JSaWdodCwgcmlnaHRHbHlwaE9yaWdpbiwgVHJpbUxlZnQpOwotCi0gICAgaWYg
KG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGds
eXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMu
Ci0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCksIGxlZnRHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3Zl
QnkoTGF5b3V0UG9pbnQoKHJpZ2h0R2x5cGhQYWludFJlY3QueCgpIC0gbGVmdEdseXBoUGFpbnRS
ZWN0Lm1heFgoKSkgLyAyLjAsIDApKTsKLSAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBh
aW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBo
T3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0
ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG1p
ZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBmaWxsV2l0aEhv
cml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5tYXhYTWlu
WUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBsZWZ0
R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5Y
TWluWUNvcm5lcigpKTsKKyAgICBpZiAobV9pc1ZlcnRpY2FsKQorICAgICAgICBtX21hdGhPcGVy
YXRvci5wYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRv
cExlZnQpOworICAgIGVsc2UKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IucGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRvcExlZnQpOwogfQogCiB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvRm9y
Q2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewogICAgIC8vIFdlIHNraXAgcGFpbnRpbmcgZm9y
IGludmlzaWJsZSBvcGVyYXRvcnMgdG9vIHRvIGF2b2lkIHNvbWUgIm1pc3NpbmcgY2hhcmFjdGVy
IiBnbHlwaCB0byBhcHBlYXIgaWYgYXBwcm9wcmlhdGUgbWF0aCBmb250cyBhcmUgbm90IGF2YWls
YWJsZS4KLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQg
fHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0
Y2hlZCgpIHx8IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJl
bmRlck1hdGhNTFRva2VuOjpwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBh
aW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJlY3QpOwogfQpAQCAtOTMxLDE5ICs0OTYsMTkgQEAg
TGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKICAg
ICAvLyBIZW5jZSB3ZSBkZXRlcm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dpY2FsIHdpZHRoIHdp
dGggcmVzcGVjdCB0byB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChzKSB1c2VkIHRvIHBh
aW50IHRoZSBvcGVyYXRvci4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7
CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6VW5zdHJldGNoZWQpIHsK
KyAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpIHsKICAgICAgICAgR2x5cGhE
YXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRl
eHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgICAg
IHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpOwogICAgIH0KIAotICAg
IGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKLSAgICAgICAg
cmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICBpZiAo
bV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBl
OjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2VtYmx5V2lkdGgg
PSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOwotICAgIGFzc2Vt
Ymx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaCht
X2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOwotICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChh
c3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbikp
OwotICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCi0gICAgICAgIGFzc2VtYmx5
V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fz
c2VtYmx5Lm1pZGRsZSkpOworICAgIGZsb2F0IGFzc2VtYmx5V2lkdGggPSBhZHZhbmNlV2lkdGhG
b3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOworICAgIGFzc2Vt
Ymx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaCht
X21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOworICAgIGFzc2VtYmx5V2lk
dGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhP
cGVyYXRvci5tX2Fzc2VtYmx5LmV4dGVuc2lvbikpOworICAgIGlmIChtX21hdGhPcGVyYXRvci5t
X2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCisgICAgICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6
Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5t
X2Fzc2VtYmx5Lm1pZGRsZSkpOwogICAgIHJldHVybiB3aWR0aCAtIGFzc2VtYmx5V2lkdGg7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuaAppbmRleCBkY2E0NTQxLi42MzIxNDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5oIgorI2luY2x1ZGUg
Ik1hdGhPcGVyYXRvci5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNpbmNsdWRl
ICJSZW5kZXJNYXRoTUxUb2tlbi5oIgogCkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAv
LyBGSVhNRTogVGhlIGRpc3BsYXlzdHlsZSBwcm9wZXJ0eSBpcyBub3QgaW1wbGVtZW50ZWQgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgogICAgIGJvb2wg
aXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSBjb25zdCB7IHJldHVybiAhaGFzT3BlcmF0
b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpICYmIGhhc09wZXJhdG9y
RmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkxhcmdlT3ApOyB9CiAgICAgYm9vbCBpc1Zl
cnRpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsOyB9Ci0gICAgTGF5b3V0VW5pdCBp
dGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0aW9uOyB9Cisg
ICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRoT3Bl
cmF0b3IuaXRhbGljQ29ycmVjdGlvbigpOyB9CiAKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKICAgICB2
b2lkIHVwZGF0ZVN0eWxlKCkgZmluYWw7CkBAIC03MywyMCArNzQsNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgVUNoYXIgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9CiAK
IHByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKLSAgICAgICAgR2x5cGhE
YXRhIHRvcE9yUmlnaHQ7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247Ci0gICAgICAgIEds
eXBoRGF0YSBib3R0b21PckxlZnQ7Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGU7Ci0gICAgfTsK
LSAgICBlbnVtIGNsYXNzIFN0cmV0Y2hUeXBlIHsgVW5zdHJldGNoZWQsIFNpemVWYXJpYW50LCBH
bHlwaEFzc2VtYmx5IH07Ci0gICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsKLSAgICB1bmlv
biB7Ci0gICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7Ci0gICAgICAgIEdseXBoQXNzZW1ibHlE
YXRhIG1fYXNzZW1ibHk7Ci0gICAgfTsKLSAgICBMYXlvdXRVbml0IG1faXRhbGljQ29ycmVjdGlv
bjsKLQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTE9wZXJhdG9yIChhbm9ueW1vdXMpIiA6ICJS
ZW5kZXJNYXRoTUxPcGVyYXRvciI7IH0KICAgICB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZv
JiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wg
dXNlUHJpbnRSZWN0KSBmaW5hbDsKICAgICBib29sIGlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDAsMjcgKzg3LDYgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgY29uc3Q7CiAKLSAgICBib29sIGdl
dEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0OwotICAgIHZv
aWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7Ci0gICAgdm9pZCBzZXRHbHlwaEFz
c2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJik7Ci0gICAgYm9vbCBjYWxjdWxhdGVHbHlw
aEFzc2VtYmx5RmFsbEJhY2soY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5
UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgY2FsY3VsYXRlRGlz
cGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpOwotICAgIHZvaWQgY2FsY3VsYXRlU3RyZXRjaHlEYXRh
KGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7Ci0K
LSAgICBlbnVtIEdseXBoUGFpbnRUcmltbWluZyB7Ci0gICAgICAgIFRyaW1Ub3AsCi0gICAgICAg
IFRyaW1Cb3R0b20sCi0gICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCi0gICAgICAgIFRyaW1MZWZ0
LAotICAgICAgICBUcmltUmlnaHQsCi0gICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKLSAgICB9Owot
Ci0gICAgTGF5b3V0UmVjdCBwYWludEdseXBoKFBhaW50SW5mbyYsIGNvbnN0IEdseXBoRGF0YSYs
IGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7Ci0gICAgdm9p
ZCBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7Ci0gICAgdm9pZCBmaWxsV2l0aEhv
cml6b250YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJv
bSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFz
c2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludEhv
cml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAg
ICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlv
bmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0T3BlcmF0b3JG
bGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgdm9pZCBzZXRPcGVyYXRvclBy
b3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpF
bnRyeSopOwpAQCAtMTM3LDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3Ry
YWlsaW5nU3BhY2U7CiAgICAgTGF5b3V0VW5pdCBtX21pblNpemU7CiAgICAgTGF5b3V0VW5pdCBt
X21heFNpemU7CisgICAgTWF0aE9wZXJhdG9yIG1fbWF0aE9wZXJhdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278842</attachid>
            <date>2016-05-13 09:42:55 -0700</date>
            <delta_ts>2016-06-09 07:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-Bug-157071-RenderMathOperator-Move-calculation-of-pr.patch</filename>
            <type>text/plain</type>
            <size>12862</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA0YmU4YTExYzJlOTU3OWMwNTM5MmMyYTAzZjBjYTZlNTkxZjc2N2JmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogV2VkLCAyNyBBcHIgMjAxNiAxNjozNDowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSBC
dWcgMTU3MDcxIC0gUmVuZGVyTWF0aE9wZXJhdG9yOiBNb3ZlIGNhbGN1bGF0aW9uIG9mCiBwcmVm
ZXJyZWQgd2lkdGggaW50byBNYXRoT3BlcmF0b3IKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNCArKysrKysrKysrKwogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwICAgfCA0NiArKysrKysrKysr
KysrKysrLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRv
ci5oICAgICB8ICA4ICsrKy0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcCAgICAgIHwgMjYgKysrKy0tLS0tLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDcxIGluc2Vy
dGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMmQ5Y2RlLi4zYWRkMzM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDQtMjcgIEZyZWRlcmljIFdhbmcg
IDxmcmVkLndhbmdAZnJlZS5mcj4KKworICAgICAgICBSZW5kZXJNYXRoT3BlcmF0b3I6IE1vdmUg
Y2FsY3VsYXRpb24gb2YgcHJlZmVycmVkIHdpZHRoIGludG8gTWF0aE9wZXJhdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwNzEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJl
aGF2aW9yIGlzIG5vdCBjaGFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9y
KTogSW50cm9kdWNlIGEgc3R5bGUgcGFyYW1ldGVyIGFuZCBjYWxsIHJlc2V0LgorICAgICAgICAo
V2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpyZXNldCk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gcmVz
ZXQgdGhlIG9wZXJhdG9yLgorICAgICAgICBGb3Igbm93IHdlIG9ubHkgc2V0IHRoZSB3aWR0aCBv
ZiB0aGUgYmFzZSBnbHlwaCBhbmQgdGhlIHByZWZlcnJlZCBtYXggd2lkdGguCisgICAgICAgIChX
ZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ip
OiBDYWxjdWxhdGUgdGhlIG1fbWF4UHJlZmVycmVkV2lkdGguCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IENoYW5nZSB0aGUgc2lnbmF0dXJl
IG9mIHRoZSBmdW5jdGlvbiBhbmQgZGlyZWN0bHkgc2V0IG1fbWF4UHJlZmVycmVkV2lkdGguCisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDogQWRkIG1fbWF4UHJlZmVy
cmVkV2lkdGggbWVtYmVyIGFuZCB1cGRhdGUgc29tZSBkZWNsYXJhdGlvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpNYXRoT3BlcmF0b3I6OndpZHRoKTogTmV3IGhlbHBlciBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6bWF4UHJlZmVycmVkV2lkdGgpOiBOZXcgaGVscGVy
IGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB3cm9uZworICAg
ICAgICBvcGVyYXRpb25zIHRoYXQgd2lsbCBiZSBmaXhlZCBpbiBidWcgMTUyMjQ0IHdoZW4gd2Ug
dXBkYXRlIHRoZSB0ZXN0cy4KKyAgICAgICAgRm9yIG5vdywgbGV0J3MganVzdCB1c2UgbWF4UHJl
ZmVycmVkV2lkdGgoKSBmb3Igbm9uLWhvcml6b250YWwgb3BlcmF0b3JzLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXNlIHRoZSBuZXcgc2ln
bmF0dXJlIG9mIHRoZSBmdW5jdGlvbnMuCisKIDIwMTYtMDQtMjUgIEZyZWRlcmljIFdhbmcgIDxm
d2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBNYXRoT3BlcmF0b3I6OlR5cGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApp
bmRleCBmMzk4MDg1Li40NTA2MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC03NSwxMCArNzUsMjggQEAgc3RhdGljIGNvbnN0
IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CiAgICAgeyAweDIy
MmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24KIH07
CiAKLXZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBU
eXBlIG9wZXJhdG9yVHlwZSkKK3ZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFVDaGFyIGJhc2VDaGFyYWN0ZXIsIFR5cGUgb3BlcmF0b3JUeXBl
KQogewogICAgIG1fYmFzZUNoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXI7CiAgICAgbV9vcGVyYXRv
clR5cGUgPSBvcGVyYXRvclR5cGU7CisgICAgcmVzZXQoc3R5bGUpOworfQorCit2b2lkIE1hdGhP
cGVyYXRvcjo6cmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIG1fbWF4UHJl
ZmVycmVkV2lkdGggPSAwOworICAgIG1fd2lkdGggPSAwOworCisgICAgLy8gV2UgdXNlIHRoZSBi
YXNlIHNpemUgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAg
IEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VH
bHlwaCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX21heFByZWZlcnJlZFdpZHRoID0gbV93aWR0
aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7CisKKyAgICBpZiAobV9vcGVyYXRv
clR5cGUgPT0gVHlwZTo6VmVydGljYWxPcGVyYXRvcikKKyAgICAgICAgY2FsY3VsYXRlU3RyZXRj
aHlEYXRhKHN0eWxlLCB0cnVlKTsgLy8gV2UgYWxzbyB0YWtlIGludG8gYWNjb3VudCB0aGUgd2lk
dGggb2YgbGFyZ2VyIHNpemVzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHByZWZlcnJlZCB3
aWR0aC4KKyAgICBlbHNlIGlmIChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpEaXNwbGF5T3BlcmF0
b3IpCisgICAgICAgIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUpOyAv
LyBXZSBjYW4gZGlyZWN0bHkgc2VsZWN0IHRoZSBzaXplIHZhcmlhbnQgYW5kIGRldGVybWluZSB0
aGUgZmluYWwgbWV0cmljcy4KIH0KIAogYm9vbCBNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdApAQCAt
MTIxLDYgKzEzOSw4IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVM
YXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBmb3IgKGF1dG8mIHNp
emVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEo
c2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5
cGhEYXRhKTsKKyAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGluIFNUSVggV29yZCBoYXZlIGlu
Y29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNlbWVudCBvZiBzdXBlcnNjcmlw
dCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkIChodHRwOi8vc291cmNlZm9yZ2Uu
bmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCisgICAgICAgIG1fbWF4UHJlZmVycmVkV2lk
dGggPSBib3VuZHNGb3JHbHlwaChnbHlwaERhdGEpLndpZHRoKCk7CiAgICAgICAgIG1faXRhbGlj
Q29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0
aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKICAgICAgICAgaWYgKGhlaWdo
dEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMjksMjQgKzI0OSwyNCBAQCBib29sIE1hdGhPcGVyYXRvcjo6Y2Fs
Y3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
cwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQqIG1heGltdW1HbHlwaFdp
ZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCit2b2lkIE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRl
U3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBjYWxjdWxhdGVNYXhQ
cmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQogewogICAgIEFTU0VSVChtX29w
ZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIHx8IG1fb3BlcmF0b3JUeXBlID09
IFR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7Ci0gICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0
aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKTsKKyAgICBBU1NF
UlQoIWNhbGN1bGF0ZU1heFByZWZlcnJlZFdpZHRoIHx8IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6
OlZlcnRpY2FsT3BlcmF0b3IpOwogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IG1fb3BlcmF0b3JUeXBl
ID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7CiAKICAgICBHbHlwaERhdGEgYmFzZUdseXBoOwog
ICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgaWYgKCFjYWxjdWxhdGVNYXhQ
cmVmZXJyZWRXaWR0aCkgewogICAgICAgICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFz
ZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCiAgICAgICAgIGZsb2F0IGJhc2VTaXplID0gaXNWZXJ0
aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChi
YXNlR2x5cGgpOwogICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6ZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNYXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRh
IGFzc2VtYmx5RGF0YTsKKyAgICBHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CiAgICAg
aWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CiAgICAgICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwpAQCAtMjU0LDExICsyNzQsMTEgQEAgdm9pZCBNYXRoT3BlcmF0
b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
KiBtYXhpbXUKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgogICAgICAg
ICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgICAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7Ci0gICAgICAg
ICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCi0gICAgICAgICAgICAgICAgKm1heGltdW1HbHlw
aFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChnbHlwaERhdGEpKTsKKyAgICAgICAgICAgIGlmIChjYWxjdWxhdGVNYXhQcmVmZXJyZWRXaWR0
aCkKKyAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0
VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRh
KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChn
bHlwaERhdGEpOwotICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBpc1ZlcnRpY2FsID8gaGVp
Z2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7
CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZv
ckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOwogICAg
ICAgICAgICAgICAgIGlmIChzaXplID49IHRhcmdldFNpemUpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI5NywxMSArMzE3LDExIEBAIHZvaWQgTWF0aE9w
ZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBm
bG9hdCogbWF4aW11CiAgICAgfQogCiAgICAgLy8gSWYgd2UgYXJlIG1lYXN1cmluZyB0aGUgbWF4
aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAgIGlmIChtYXhpbXVtR2x5cGhX
aWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUds
eXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSk7
Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0
aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOwotICAgICAg
ICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFu
Y2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKLSAgICAgICAgKm1heGltdW1H
bHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSk7CisgICAgaWYgKGNhbGN1bGF0ZU1heFBy
ZWZlcnJlZFdpZHRoKSB7CisgICAgICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSBzdGQ6Om1heDxM
YXlvdXRVbml0PihtX21heFByZWZlcnJlZFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3Nl
bWJseURhdGEudG9wT3JSaWdodCkpOworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRoID0gc3Rk
OjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICBtX21heFByZWZlcnJlZFdpZHRo
ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkpOworICAgICAgICBtX21heFByZWZlcnJlZFdp
ZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01h
dGhPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuaAppbmRleCBhZTEyNGQ5Li5iN2E2OTg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC00MSw4ICs0MSwxMSBAQCBjbGFzcyBNYXRo
T3BlcmF0b3IgewogcHVibGljOgogICAgIE1hdGhPcGVyYXRvcigpIHsgfQogICAgIGVudW0gY2xh
c3MgVHlwZSB7IFVuZGVmaW5lZE9wZXJhdG9yLCBEaXNwbGF5T3BlcmF0b3IsIFZlcnRpY2FsT3Bl
cmF0b3IsIEhvcml6b250YWxPcGVyYXRvciB9OwotICAgIHZvaWQgc2V0T3BlcmF0b3IoVUNoYXIg
YmFzZUNoYXJhY3RlciwgVHlwZSk7CisgICAgdm9pZCBzZXRPcGVyYXRvcihjb25zdCBSZW5kZXJT
dHlsZSYsIFVDaGFyIGJhc2VDaGFyYWN0ZXIsIFR5cGUpOworICAgIHZvaWQgcmVzZXQoY29uc3Qg
UmVuZGVyU3R5bGUmKTsKIAorICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4UHJlZmVycmVkV2lkdGg7IH0KICAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KIAogICAgIGJvb2wgaXNT
dHJldGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpV
bnN0cmV0Y2hlZDsgfQpAQCAtNzUsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaXpl
VmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKICAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29u
c3QgR2x5cGhBc3NlbWJseURhdGEmKTsKICAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5
b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdHJldGNoeURhdGEo
Y29uc3QgUmVuZGVyU3R5bGUmLCBib29sIGNhbGN1bGF0ZU1heFByZWZlcnJlZFdpZHRoLCBMYXlv
dXRVbml0IHRhcmdldFNpemUgPSAwKTsKICAgICBib29sIGNhbGN1bGF0ZUdseXBoQXNzZW1ibHlG
YWxsQmFjayhjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+JiwgR2x5cGhBc3NlbWJseURhdGEmKSBjb25zdDsKIAogICAgIExheW91
dFJlY3QgcGFpbnRHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IEds
eXBoRGF0YSYsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7
CkBAIC05MSw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsK
ICAgICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsKICAgICB9OworICAgIExheW91
dFVuaXQgbV9tYXhQcmVmZXJyZWRXaWR0aCA9IDA7CiAgICAgTGF5b3V0VW5pdCBtX3dpZHRoID0g
MDsKICAgICBMYXlvdXRVbml0IG1fYXNjZW50ID0gMDsKICAgICBMYXlvdXRVbml0IG1fZGVzY2Vu
dCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4IDg3MmIzZTguLmVhYmM3YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCkBAIC0yNjcsMzAgKzI2NywyMCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCB1c2Ugc3RyZXRjaFNpemUgZHVyaW5nIHRoZSBw
cmVmZXJyZWQgd2lkdGggY2FsY3VsYXRpb24gbm9yIHNob3VsZCB3ZSBsZWF2ZSBsb2dpY2FsIHdp
ZHRoIGRpcnR5IChodHRwOi8vd2Via2l0Lm9yZy9iLzE1MjI0NCkuCiAgICAgTWF0aE9wZXJhdG9y
OjpUeXBlIHR5cGU7CiAgICAgaWYgKGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCiAg
ICAgICAgIHR5cGUgPSBNYXRoT3BlcmF0b3I6OlR5cGU6OkRpc3BsYXlPcGVyYXRvcjsKICAgICBl
bHNlCiAgICAgICAgIHR5cGUgPSBtX2lzVmVydGljYWwgPyBNYXRoT3BlcmF0b3I6OlR5cGU6OlZl
cnRpY2FsT3BlcmF0b3IgOiBNYXRoT3BlcmF0b3I6OlR5cGU6Okhvcml6b250YWxPcGVyYXRvcjsK
LSAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCB0eXBlKTsKLSAg
ICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9t
YXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRv
cihzdHlsZSgpLCBtX3RleHRDb250ZW50LCB0eXBlKTsKKyAgICBmbG9hdCBtYXhpbXVtR2x5cGhX
aWR0aDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgeworICAgICAgICBtYXhpbXVtR2x5cGhXaWR0
aCA9IG1fbWF0aE9wZXJhdG9yLndpZHRoKCk7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0
aCA8IHN0cmV0Y2hTaXplKCkpCiAgICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IHN0cmV0
Y2hTaXplKCk7Ci0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9sZWFkaW5n
U3BhY2UgKyBtYXhpbXVtR2x5cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFjZTsKLSAgICAgICAgbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5
bGUoKSkgewotICAgICAgICAvLyBMYXJnZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhhdmUgaW5j
b3JyZWN0IGFkdmFuY2Ugd2lkdGgsIGNhdXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVyc2NyaXB0
LCBzbyB3ZSB1c2UgdGhlIGdseXBoIGJvdW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5u
ZXQvcC9zdGl4Zm9udHMvdHJhY2tpbmcvNDkvKS4KLSAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2Fs
Y3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKLSAgICAgICAgaWYgKG1f
bWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6
U2l6ZVZhcmlhbnQpCi0gICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0Zvckds
eXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCkud2lkdGgoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBGSVhNRTogc29tZSBnbHlwaHMgKGUuZy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNM
QVNIIiBpbiB0aGUgU1RJWCBNYXRoIGZvbnQgb3IgbGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lk
dGggdGhhdCBkZXBlbmRzIG9uIHRoZSBoZWlnaHQsIHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAg
bV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlU3RyZXRjaHlEYXRhKHN0eWxlKCksICZtYXhpbXVtR2x5
cGhXaWR0aCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9
IG1fbWF0aE9wZXJhdG9yLm1heFByZWZlcnJlZFdpZHRoKCk7CiAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNl
ICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7CiB9CiAKQEAgLTM3OSwxMSAr
MzY5LDExIEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICAg
ICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6VHlwZTo6RGlzcGxheU9wZXJhdG9yOwogICAgIGVsc2UK
ICAgICAgICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhPcGVyYXRvcjo6VHlwZTo6VmVydGlj
YWxPcGVyYXRvciA6IE1hdGhPcGVyYXRvcjo6VHlwZTo6SG9yaXpvbnRhbE9wZXJhdG9yOwotICAg
IG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIHR5cGUpOworICAgIG1f
bWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1fdGV4dENvbnRlbnQsIHR5cGUpOwog
ICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkK
ICAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRv
cihzdHlsZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRl
U3RyZXRjaHlEYXRhKHN0eWxlKCksIG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOworICAgICAgICBt
X21hdGhPcGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgZmFsc2UsIHN0cmV0
Y2hTaXplKCkpOwogICAgICAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280918</attachid>
            <date>2016-06-09 07:57:32 -0700</date>
            <delta_ts>2016-06-09 13:32:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-157071-RenderMathOperator-Move-calculation-of-pr.patch</filename>
            <type>text/plain</type>
            <size>12822</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA0MmZhMzVmMjRlYmZiOTExMDcyY2RhNjJkYWM3NjEyYjRlMTk3YzBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogV2VkLCAyNyBBcHIgMjAxNiAxNjozNDowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDEvMThd
IEJ1ZyAxNTcwNzEgLSBSZW5kZXJNYXRoT3BlcmF0b3I6IE1vdmUgY2FsY3VsYXRpb24gb2YKIHBy
ZWZlcnJlZCB3aWR0aCBpbnRvIE1hdGhPcGVyYXRvcgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI0ICsrKysrKysrKysrCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgICB8IDQ2ICsrKysrKysr
KysrKysrKystLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJh
dG9yLmggICAgIHwgIDggKysrLQogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuY3BwICAgICAgfCAyNiArKysrLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgNzEgaW5z
ZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRmOGNmMjEuLmRmOTky
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wNC0yNyAgRnJlZGVyaWMgV2Fu
ZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgorCisgICAgICAgIFJlbmRlck1hdGhPcGVyYXRvcjogTW92
ZSBjYWxjdWxhdGlvbiBvZiBwcmVmZXJyZWQgd2lkdGggaW50byBNYXRoT3BlcmF0b3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzA3MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
YmVoYXZpb3IgaXMgbm90IGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0
b3IpOiBJbnRyb2R1Y2UgYSBzdHlsZSBwYXJhbWV0ZXIgYW5kIGNhbGwgcmVzZXQuCisgICAgICAg
IChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnJlc2V0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBy
ZXNldCB0aGUgb3BlcmF0b3IuCisgICAgICAgIEZvciBub3cgd2Ugb25seSBzZXQgdGhlIHdpZHRo
IG9mIHRoZSBiYXNlIGdseXBoIGFuZCB0aGUgcHJlZmVycmVkIG1heCB3aWR0aC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRv
cik6IENhbGN1bGF0ZSB0aGUgbV9tYXhQcmVmZXJyZWRXaWR0aC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKTogQ2hhbmdlIHRoZSBzaWduYXR1
cmUgb2YgdGhlIGZ1bmN0aW9uIGFuZCBkaXJlY3RseSBzZXQgbV9tYXhQcmVmZXJyZWRXaWR0aC4K
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGQgbV9tYXhQcmVm
ZXJyZWRXaWR0aCBtZW1iZXIgYW5kIHVwZGF0ZSBzb21lIGRlY2xhcmF0aW9ucy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6d2lkdGgpOiBOZXcgaGVscGVyIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjptYXhQcmVmZXJyZWRXaWR0aCk6IE5ldyBoZWxw
ZXIgZnVuY3Rpb24uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHdyb25nCisg
ICAgICAgIG9wZXJhdGlvbnMgdGhhdCB3aWxsIGJlIGZpeGVkIGluIGJ1ZyAxNTIyNDQgd2hlbiB3
ZSB1cGRhdGUgdGhlIHRlc3RzLgorICAgICAgICBGb3Igbm93LCBsZXQncyBqdXN0IHVzZSBtYXhQ
cmVmZXJyZWRXaWR0aCgpIGZvciBub24taG9yaXpvbnRhbCBvcGVyYXRvcnMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBVc2UgdGhlIG5ldyBz
aWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9ucy4KKwogMjAxNi0wNi0wOSAgRnJlZGVyaWMgV2FuZyAg
PGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIE1hdGhPcGVyYXRvcjo6VHlw
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3Bw
CmluZGV4IGIzNjRlYjYuLjc3Y2UxYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKQEAgLTc1LDEwICs3NSwyOCBAQCBzdGF0aWMgY29u
c3QgU3RyZXRjaHlDaGFyYWN0ZXIgc3RyZXRjaHlDaGFyYWN0ZXJzWzE0XSA9IHsKICAgICB7IDB4
MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgog
fTsKIAotdm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIs
IFR5cGUgb3BlcmF0b3JUeXBlKQordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgVUNoYXIgYmFzZUNoYXJhY3RlciwgVHlwZSBvcGVyYXRvclR5
cGUpCiB7CiAgICAgbV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKICAgICBtX29wZXJh
dG9yVHlwZSA9IG9wZXJhdG9yVHlwZTsKKyAgICByZXNldChzdHlsZSk7Cit9CisKK3ZvaWQgTWF0
aE9wZXJhdG9yOjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgbV9tYXhQ
cmVmZXJyZWRXaWR0aCA9IDA7CisgICAgbV93aWR0aCA9IDA7CisKKyAgICAvLyBXZSB1c2UgdGhl
IGJhc2Ugc2l6ZSBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBwcmVmZXJyZWQgd2lkdGguCisg
ICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKKyAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFz
ZUdseXBoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWF4UHJlZmVycmVkV2lkdGggPSBtX3dp
ZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKworICAgIGlmIChtX29wZXJh
dG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yKQorICAgICAgICBjYWxjdWxhdGVTdHJl
dGNoeURhdGEoc3R5bGUsIHRydWUpOyAvLyBXZSBhbHNvIHRha2UgaW50byBhY2NvdW50IHRoZSB3
aWR0aCBvZiBsYXJnZXIgc2l6ZXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcHJlZmVycmVk
IHdpZHRoLgorICAgIGVsc2UgaWYgKG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OkRpc3BsYXlPcGVy
YXRvcikKKyAgICAgICAgY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSk7
IC8vIFdlIGNhbiBkaXJlY3RseSBzZWxlY3QgdGhlIHNpemUgdmFyaWFudCBhbmQgZGV0ZXJtaW5l
IHRoZSBmaW5hbCBtZXRyaWNzLgogfQogCiBMYXlvdXRVbml0IE1hdGhPcGVyYXRvcjo6c3RyZXRj
aFNpemUoKSBjb25zdApAQCAtMTI3LDYgKzE0NSw4IEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxj
dWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
ICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CiAgICAgICAgIEds
eXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKICAgICAgICAg
c2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgLy8gTGFyZ2Ugb3BlcmF0b3JzIGlu
IFNUSVggV29yZCBoYXZlIGluY29ycmVjdCBhZHZhbmNlIHdpZHRoLCBjYXVzaW5nIG1pc3BsYWNl
bWVudCBvZiBzdXBlcnNjcmlwdCwgc28gd2UgdXNlIHRoZSBnbHlwaCBib3VuZCBpbnN0ZWFkICho
dHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RpeGZvbnRzL3RyYWNraW5nLzQ5LykuCisgICAgICAg
IG1fbWF4UHJlZmVycmVkV2lkdGggPSBib3VuZHNGb3JHbHlwaChnbHlwaERhdGEpLndpZHRoKCk7
CiAgICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgp
LT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsK
ICAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9y
TWluSGVpZ2h0KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzUsMjQgKzI1NSwyNCBAQCBib29s
IE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxiYWNrKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hdGhPcGVy
YXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxv
YXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCit2b2lkIE1hdGhP
cGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Ym9vbCBjYWxjdWxhdGVNYXhQcmVmZXJyZWRXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQog
ewogICAgIEFTU0VSVChtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIHx8
IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6Okhvcml6b250YWxPcGVyYXRvcik7Ci0gICAgQVNTRVJU
KCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX29wZXJhdG9yVHlwZSA9PSBUeXBlOjpWZXJ0aWNhbE9w
ZXJhdG9yKTsKKyAgICBBU1NFUlQoIWNhbGN1bGF0ZU1heFByZWZlcnJlZFdpZHRoIHx8IG1fb3Bl
cmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3IpOwogICAgIGJvb2wgaXNWZXJ0aWNh
bCA9IG1fb3BlcmF0b3JUeXBlID09IFR5cGU6OlZlcnRpY2FsT3BlcmF0b3I7CiAKICAgICBHbHlw
aERhdGEgYmFzZUdseXBoOwogICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAg
aWYgKCFjYWxjdWxhdGVNYXhQcmVmZXJyZWRXaWR0aCkgewogICAgICAgICAvLyBXZSBkbyBub3Qg
c3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2guCiAgICAgICAgIGZsb2F0
IGJhc2VTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZh
bmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwogICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBi
YXNlU2l6ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNYXRoT3BlcmF0b3I6
OkdseXBoQXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0YTsKKyAgICBHbHlwaEFzc2VtYmx5RGF0YSBh
c3NlbWJseURhdGE7CiAgICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CiAgICAg
ICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwogICAgICAgICBWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwpAQCAtMjYwLDExICsyODAsMTEg
QEAgdm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXUKICAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXpl
IHZhcmlhbnRzLgogICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRz
KSB7CiAgICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5
cGguZm9udCk7Ci0gICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCi0gICAgICAgICAg
ICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKKyAgICAgICAgICAgIGlmIChjYWxjdWxh
dGVNYXhQcmVmZXJyZWRXaWR0aCkKKyAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZFdpZHRo
ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoZ2x5cGhEYXRhKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAgICAgICAgICAgIGZsb2F0IHNpemUg
PSBpc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBzaXplID0gaXNW
ZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlw
aChnbHlwaERhdGEpOwogICAgICAgICAgICAgICAgIGlmIChzaXplID49IHRhcmdldFNpemUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTMwMywxMSArMzIz
LDExIEBAIHZvaWQgTWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11CiAgICAgfQogCiAgICAgLy8gSWYgd2UgYXJl
IG1lYXN1cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAg
IGlmIChtYXhpbXVtR2x5cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBz
dGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5
RGF0YS50b3BPclJpZ2h0KSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4
KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4
dGVuc2lvbikpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11
bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsK
LSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRo
LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSk7CisgICAg
aWYgKGNhbGN1bGF0ZU1heFByZWZlcnJlZFdpZHRoKSB7CisgICAgICAgIG1fbWF4UHJlZmVycmVk
V2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX21heFByZWZlcnJlZFdpZHRoLCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkpOworICAgICAgICBtX21heFBy
ZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRXaWR0aCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICBt
X21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJyZWRX
aWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkpOworICAgICAg
ICBtX21heFByZWZlcnJlZFdpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9tYXhQcmVmZXJy
ZWRXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuaAppbmRleCA2NzYyZWQ2Li5jNzkyODljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAgLTQxLDggKzQx
LDExIEBAIGNsYXNzIE1hdGhPcGVyYXRvciB7CiBwdWJsaWM6CiAgICAgTWF0aE9wZXJhdG9yKCkg
eyB9CiAgICAgZW51bSBjbGFzcyBUeXBlIHsgVW5kZWZpbmVkT3BlcmF0b3IsIERpc3BsYXlPcGVy
YXRvciwgVmVydGljYWxPcGVyYXRvciwgSG9yaXpvbnRhbE9wZXJhdG9yIH07Ci0gICAgdm9pZCBz
ZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBUeXBlKTsKKyAgICB2b2lkIHNldE9wZXJh
dG9yKGNvbnN0IFJlbmRlclN0eWxlJiwgVUNoYXIgYmFzZUNoYXJhY3RlciwgVHlwZSk7CisgICAg
dm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSYpOwogCisgICAgTGF5b3V0VW5pdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBMYXlvdXRVbml0IG1heFByZWZlcnJlZFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhQcmVmZXJyZWRXaWR0aDsgfQogICAgIExheW91dFVu
aXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsg
fQogCiAgICAgYm9vbCBpc1N0cmV0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZXRjaFR5cGUg
IT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkOyB9CkBAIC03MSw3ICs3NCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwogICAgIHZvaWQgc2V0
R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwogICAgIHZvaWQgY2FsY3Vs
YXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYpOwotICAgIHZv
aWQgY2FsY3VsYXRlU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQqIG1heGlt
dW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKKyAgICB2b2lkIGNhbGN1
bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGJvb2wgY2FsY3VsYXRlTWF4UHJl
ZmVycmVkV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOwogICAgIGJvb2wgY2FsY3Vs
YXRlR2x5cGhBc3NlbWJseUZhbGxiYWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9y
PE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNv
bnN0OwogCiAgICAgTGF5b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFp
bnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5
cGhQYWludFRyaW1taW5nKTsKQEAgLTg3LDYgKzkwLDcgQEAgcHVibGljOgogICAgICAgICBHbHlw
aERhdGEgbV92YXJpYW50OwogICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5Owog
ICAgIH07CisgICAgTGF5b3V0VW5pdCBtX21heFByZWZlcnJlZFdpZHRoID0gMDsKICAgICBMYXlv
dXRVbml0IG1fd2lkdGggPSAwOwogICAgIExheW91dFVuaXQgbV9hc2NlbnQgPSAwOwogICAgIExh
eW91dFVuaXQgbV9kZXNjZW50ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggODcyYjNlOC4uZWFi
YzdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTI2NywzMCArMjY3LDIwIEBAIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IHVzZSBzdHJldGNo
U2l6ZSBkdXJpbmcgdGhlIHByZWZlcnJlZCB3aWR0aCBjYWxjdWxhdGlvbiBub3Igc2hvdWxkIHdl
IGxlYXZlIGxvZ2ljYWwgd2lkdGggZGlydHkgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4K
ICAgICBNYXRoT3BlcmF0b3I6OlR5cGUgdHlwZTsKICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5E
aXNwbGF5U3R5bGUoKSkKICAgICAgICAgdHlwZSA9IE1hdGhPcGVyYXRvcjo6VHlwZTo6RGlzcGxh
eU9wZXJhdG9yOwogICAgIGVsc2UKICAgICAgICAgdHlwZSA9IG1faXNWZXJ0aWNhbCA/IE1hdGhP
cGVyYXRvcjo6VHlwZTo6VmVydGljYWxPcGVyYXRvciA6IE1hdGhPcGVyYXRvcjo6VHlwZTo6SG9y
aXpvbnRhbE9wZXJhdG9yOwotICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENv
bnRlbnQsIHR5cGUpOwotICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgZmxvYXQgbWF4aW11
bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUds
eXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOworICAgIG1fbWF0aE9w
ZXJhdG9yLnNldE9wZXJhdG9yKHN0eWxlKCksIG1fdGV4dENvbnRlbnQsIHR5cGUpOworICAgIGZs
b2F0IG1heGltdW1HbHlwaFdpZHRoOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CisgICAgICAg
IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3Iud2lkdGgoKTsKICAgICAgICAgaWYg
KG1heGltdW1HbHlwaFdpZHRoIDwgc3RyZXRjaFNpemUoKSkKICAgICAgICAgICAgIG1heGltdW1H
bHlwaFdpZHRoID0gc3RyZXRjaFNpemUoKTsKLSAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90cmFpbGluZ1Nw
YWNlOwotICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc0xhcmdlT3Bl
cmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7Ci0gICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBpbiBT
VElYIFdvcmQgaGF2ZSBpbmNvcnJlY3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1l
bnQgb2Ygc3VwZXJzY3JpcHQsIHNvIHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAoaHR0
cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0aXhmb250cy90cmFja2luZy80OS8pLgotICAgICAgICBt
X21hdGhPcGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkp
OwotICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0
b3I6OlN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKLSAgICAgICAgICAgIG1heGltdW1HbHlwaFdp
ZHRoID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KS53aWR0aCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUgb25l
IGZvciAiRlJBQ1RJT04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBvcGVy
YXRvcnMpIGhhdmUgYSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0aW5n
IGluIGxhcmdlIGdhcHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzAzMjYpLgotICAgICAgICBtX21hdGhPcGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5
bGUoKSwgJm1heGltdW1HbHlwaFdpZHRoKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1h
eGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3IubWF4UHJlZmVycmVkV2lkdGgoKTsKICAg
ICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gbV9sZWFkaW5nU3BhY2UgKyBtYXhpbXVtR2x5cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFjZTsK
IH0KIApAQCAtMzc5LDExICszNjksMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlU3R5bGUoKQogICAgICAgICB0eXBlID0gTWF0aE9wZXJhdG9yOjpUeXBlOjpEaXNwbGF5T3Bl
cmF0b3I7CiAgICAgZWxzZQogICAgICAgICB0eXBlID0gbV9pc1ZlcnRpY2FsID8gTWF0aE9wZXJh
dG9yOjpUeXBlOjpWZXJ0aWNhbE9wZXJhdG9yIDogTWF0aE9wZXJhdG9yOjpUeXBlOjpIb3Jpem9u
dGFsT3BlcmF0b3I7Ci0gICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVu
dCwgdHlwZSk7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Ioc3R5bGUoKSwgbV90ZXh0
Q29udGVudCwgdHlwZSk7CiAgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJ
bkRpc3BsYXlTdHlsZSgpKQogICAgICAgICBtX21hdGhPcGVyYXRvci5jYWxjdWxhdGVEaXNwbGF5
U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotICAgICAgICBtX21hdGhP
cGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgbnVsbHB0ciwgc3RyZXRjaFNp
emUoKSk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShzdHls
ZSgpLCBmYWxzZSwgc3RyZXRjaFNpemUoKSk7CiAgICAgICAgIGlmICghbV9tYXRoT3BlcmF0b3Iu
aXNTdHJldGNoZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0tIAoyLjguMQoK
</data>
<flag name="review"
          id="304781"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>