<?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>216678</bug_id>
          
          <creation_ts>2020-09-17 18:40:40 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move inline box constructing and alignment logic to LineBoxBuilder</short_desc>
          <delta_ts>2020-09-18 04:17:26 -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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1689683</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-17 18:40:40 -0700</bug_when>
    <thetext>This makes LineBox a light, box like class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689698</commentid>
    <comment_count>1</comment_count>
      <attachid>409099</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-17 19:09:35 -0700</bug_when>
    <thetext>Created attachment 409099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689701</commentid>
    <comment_count>2</comment_count>
      <attachid>409099</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-17 19:22:12 -0700</bug_when>
    <thetext>Comment on attachment 409099
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:52
&gt; +    const Box&amp; root() const { return formattingContext().root(); }

or rootBox()?

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:59
&gt; +struct HangingContent {

It&apos;s not clear to me what &quot;hanging&quot; is in this context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689755</commentid>
    <comment_count>3</comment_count>
      <attachid>409123</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-18 03:25:32 -0700</bug_when>
    <thetext>Created attachment 409123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689760</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-18 04:16:39 -0700</bug_when>
    <thetext>Committed r267234: &lt;https://trac.webkit.org/changeset/267234&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409123.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689761</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-18 04:17:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/69140016&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409099</attachid>
            <date>2020-09-17 19:09:35 -0700</date>
            <delta_ts>2020-09-18 03:25:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216678-20200917190935.patch</filename>
            <type>text/plain</type>
            <size>55552</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E3M2Y2MzcxZjkzNmFh
NjI2NWJlYzgxZmFiMjEyNmY2YzZhMTQ1OC4uOTM2ZDViZWRmZWVhOGIwN2JiMGM5M2Y1ZTA2ZDdj
Yzc0NjU1ZmJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA5LTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBib3ggY29uc3RydWN0aW5nIGFuZCBhbGlnbm1lbnQgbG9naWMgdG8gTGluZUJveEJ1aWxk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjY3
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIExpbmVCb3ggcmVsYXRlZCBsb2dpYyBvdXQgb2YgdGhlIExpbmVCb3ggY2xhc3MgdG8gSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpMaW5lQm94QnVpbGRlci4KKyAgICAgICAg
VGhpcyBtYWtlcyB0aGUgTGluZUJveCBjbGFzcyBhIGxpZ2h0LCBib3ggbGlrZSBjbGFzcyB0aGF0
IHdlIGNhbiBjYWNoZSBpbiB0aGUgSW5saW5lRm9ybWF0dGluZ1N0YXRlLgorCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRM
aW5lTG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQpOgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpm
b3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
b3hCdWlsZGVyOjpyb290IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eEJ1aWxkZXI6OmxheW91dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SGFuZ2luZ0NvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SGFuZ2luZ0NvbnRlbnQ6OmlzQ29uZGl0aW9uYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpIYW5naW5nQ29udGVudDo6c2V0SXNDb25kaXRpb25hbCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpleHBhbmQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
Ojpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojpob3Jp
em9udGFsQWxpZ25tZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eEJ1aWxkZXI6OkxpbmVCb3hCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveEJ1aWxkZXI6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1
aWxkZXI6OmNvbnN0cnVjdElubGluZUJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveEJ1aWxkZXI6OmNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRp
Y2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50
KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcDoKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpMaW5lQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6bV9pc0xpbmVWaXN1YWxseUVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJveDo6YWRkUm9vdElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkZElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okhh
bmdpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkhhbmdpbmdDb250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9uYWwp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6ZXhw
YW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6
OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Y29sbGVjdEhhbmdp
bmdDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjphbGlnbklubGlu
ZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpyb290IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bGF5b3V0U3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6YWxpZ25tZW50
QmFzZWxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpzZXRM
b2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0SG9y
aXpvbnRhbEFsaWdubWVudE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
b3g6OnJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpu
b25Sb290SW5saW5lQm94ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjppbmxpbmVCb3hGb3JMYXlvdXRCb3gpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OmxheW91dElubGluZUNvbnRlbnQpOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisKIDIwMjAtMDktMTcgIEFudG9pbmUg
UXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBsZWdhY3kg
YW5pbWF0aW9uIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA1
MmVhMzFjNWNjOWM5NWRlMDhiMzhmYmFjYmE5NzE1Nzg1NDMxMGRhLi5mMTk2ZDJlNTA1NzBlYmE0
MTU3MDM3MjgyNjdiN2MxZDFlMmY1ZjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpCiAgICAgfQogfQogCi1JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlZExpbmVMb2dpY2FsUmVjdChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50KSBjb25zdAorSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVSZWN0
QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRMaW5lTG9n
aWNhbFJlY3QoY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVD
b250ZW50JiBsaW5lQ29udGVudCkgY29uc3QKIHsKICAgICAvLyBDb21wdXRlIHRoZSBsaW5lIGhl
aWdodCBhbmQgdGhlIGxpbmUgYm94IHZlcnRpY2FsIG9mZnNldC4KICAgICAvLyBUaGUgbGluZSBo
ZWlnaHQgaXMgZWl0aGVyIHRoZSBsaW5lLWhlaWdodCB2YWx1ZSAobmVnYXRpdmUgdmFsdWUgbWVh
bnMgbGluZSBoZWlnaHQgaXMgbm90IHNldCkgb3IgdGhlIGZvbnQgbWV0cmljcydzIGxpbmUgc3Bh
Y2luZy9saW5lIGJveCBoZWlnaHQuCkBAIC00MDksNyArNDA5LDYgQEAgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHUKICAgICAvLyB8ICAgICAgICAgICAgICAgICAgICB8IGxpbmUgc3BhY2luZyAgICAg
ICAgICB8ICAgfAogICAgIC8vIHxfX19fX19fX19fX19fX19fX19fX3ZfX19fX19fX19fX19fX19f
X19fX19fX3wgIHNjcm9sbGFibGUgb3ZlcmZsb3cKICAgICAvLwotICAgIGF1dG8mIGxpbmVCb3gg
PSBsaW5lQ29udGVudC5saW5lQm94OwogICAgIGlmIChsaW5lQ29udGVudC5ydW5zLmlzRW1wdHko
KSB8fCBsaW5lQm94LmlzTGluZVZpc3VhbGx5RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgeyB9
LCB7IGxpbmVDb250ZW50LmxvZ2ljYWxUb3BMZWZ0LCBsaW5lQ29udGVudC5saW5lTG9naWNhbFdp
ZHRoLCB7IH0gfSB9OwogCkBAIC00NDMsOCArNDQyLDggQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHUKIElubGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZv
ckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewog
ICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotICAg
IGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OwotICAgIGF1dG8gbGluZVJlY3RB
bmRMaW5lQm94T2Zmc2V0ID0gY29tcHV0ZWRMaW5lTG9naWNhbFJlY3QobGluZUNvbnRlbnQpOwor
ICAgIGNvbnN0IGF1dG8gbGluZUJveCA9IGdlb21ldHJ5KCkubGluZUJveEZvckxpbmVDb250ZW50
KGxpbmVDb250ZW50KTsKKyAgICBhdXRvIGxpbmVSZWN0QW5kTGluZUJveE9mZnNldCA9IGNvbXB1
dGVkTGluZUxvZ2ljYWxSZWN0KGxpbmVCb3gsIGxpbmVDb250ZW50KTsKICAgICBhdXRvIGxpbmVM
b2dpY2FsUmVjdCA9IGxpbmVSZWN0QW5kTGluZUJveE9mZnNldC5sb2dpY2FsUmVjdDsKICAgICBh
dXRvIGxpbmVCb3hWZXJ0aWNhbE9mZnNldCA9IGxpbmVSZWN0QW5kTGluZUJveE9mZnNldC5saW5l
Qm94VmVydGljYWxPZmZzZXQ7CiAgICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3cgPSBJbmxpbmVS
ZWN0IHsgbGluZUxvZ2ljYWxSZWN0LnRvcExlZnQoKSwgc3RkOjptYXgobGluZUxvZ2ljYWxSZWN0
LndpZHRoKCksIGxpbmVCb3gubG9naWNhbFdpZHRoKCkpLCBzdGQ6Om1heChsaW5lTG9naWNhbFJl
Y3QuaGVpZ2h0KCksIGxpbmVCb3hWZXJ0aWNhbE9mZnNldCArIGxpbmVCb3gubG9naWNhbEhlaWdo
dCgpKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYTc3NGVmZjY3ZTM3
NDVkNjBkOTYzNzVhN2ZkMDEzNTc0ZDI3YzZkZS4uNzBhYjJkZTk5MzYxOTc3MTNkNzk4ODA1ZjYy
ZGE4MWNiMWY5MDM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC02NCw2
ICs2NCw3IEBAIHByaXZhdGU6CiAKICAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnkgewogICAgIHB1YmxpYzoKKyAgICAgICAgTGluZUJveCBsaW5l
Qm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50Jik7CiAgICAg
ICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29u
c3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGVWZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OwogICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gaW5saW5l
QmxvY2tXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBjb25zdCBPdmVycmlkZUhvcml6b250YWxWYWx1ZXMmKTsKIApAQCAtOTEsNyArOTIsNyBA
QCBwcml2YXRlOgogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hWZXJ0aWNhbE9mZnNl
dDsKICAgICAgICAgSW5saW5lUmVjdCBsb2dpY2FsUmVjdDsKICAgICB9OwotICAgIExpbmVSZWN0
QW5kTGluZUJveE9mZnNldCBjb21wdXRlZExpbmVMb2dpY2FsUmVjdChjb25zdCBMaW5lQnVpbGRl
cjo6TGluZUNvbnRlbnQmKSBjb25zdDsKKyAgICBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgY29t
cHV0ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJveCYsIGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShj
b25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0
YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3Jt
YXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggNzA3
YjZlMDI1M2MzMzI2MjY1Mzg5Y2QyYzQ2ZWNkMjI1MDkyOTczMi4uYTk4ZjYwNjdhNDc2MTk3N2Jl
MGRlNzI0ODg5ZmY5OGJiZGMzMTNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgogI2luY2x1
ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgogI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94Lmgi
CkBAIC0zNyw2ICszOCwzNzUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCitjbGFzcyBMaW5lQm94QnVpbGRlciB7CitwdWJsaWM6CisgICAgTGluZUJveEJ1aWxk
ZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKKyAgICBMaW5lQm94IGJ1aWxkKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOworCitwcml2YXRlOgorICAgIHZvaWQgY29u
c3RydWN0SW5saW5lQm94ZXMoTGluZUJveCYsIGNvbnN0IExpbmU6OlJ1bkxpc3QmKTsKKyAgICB2
b2lkIGNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoTGluZUJveCYpOworICAgIHZvaWQg
YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChMaW5lQm94
Jik7CisKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29u
c3QgQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7
IH0KKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0
aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK307CisKK3N0
cnVjdCBIYW5naW5nQ29udGVudCB7CitwdWJsaWM6CisgICAgdm9pZCByZXNldCgpOworCisgICAg
SW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBi
b29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9uYWw7IH0KKwor
ICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQor
ICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0aCArPSB3aWR0
aDsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFsc2UgfTsKKyAg
ICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07Cit9OworCit2b2lkIEhhbmdpbmdDb250
ZW50OjpyZXNldCgpCit7CisgICAgbV9pc0NvbmRpdGlvbmFsID0gZmFsc2U7CisgICAgbV93aWR0
aCA9ICAwOworfQorCitzdGF0aWMgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50
KGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KQoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVudCB7IH07Cisg
ICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKKyAgICAgICAgaGFuZ2luZ0NvbnRl
bnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtlUmV2
ZXJzZWRSYW5nZShydW5zKSkgeworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8
fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElz
Q29uZGl0aW9uYWwoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNl
LgorICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlBy
ZVdyYXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBu
b3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICAg
ICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSk7
CisgICAgfQorICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKK30KKworc3RhdGljIE9wdGlvbmFs
PElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGluZTo6
UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQg
bGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBi
b29sIGlzTGFzdExpbmUpCit7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dpY2Fs
V2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBj
b2xsZWN0SGFuZ2luZ0NvbnRlbnQocnVucywgaXNMYXN0TGluZSk7CisgICAgYXZhaWxhYmxlV2lk
dGggKz0gaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKKyAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0g
MCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKKyAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKKyAgICAgICAgLy8gVGV4dCBp
cyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0
LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0
aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFz
dCwKKyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKHJ1bnMubGFz
dCgpLmlzTGluZUJyZWFrKCkgfHwgaXNMYXN0TGluZSkKKyAgICAgICAgICAgIHJldHVybiBUZXh0
QWxpZ25Nb2RlOjpTdGFydDsKKyAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7
CisgICAgfTsKKworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCkpIHsK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAgICAgIHJldHVy
biB7IH07CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAg
ICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgIHJldHVybiBh
dmFpbGFibGVXaWR0aCAvIDI7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAg
ICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEgcnVuIGFsaWdubWVudCAoYW5kIHdl
IG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitMaW5lQm94QnVpbGRlcjo6TGluZUJveEJ1aWxkZXIoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgIDogbV9p
bmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKK30KKwor
TGluZUJveCBMaW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50JiBsaW5lQ29udGVudCkKK3sKKyAgICBhdXRvJiBydW5zID0gbGluZUNvbnRlbnQucnVuczsK
KyAgICBhdXRvIGxpbmVMb2dpY2FsV2lkdGggPSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRo
OworICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IGxpbmVDb250ZW50LmxpbmVDb250ZW50
TG9naWNhbFdpZHRoOworICAgIGF1dG8gaXNMaW5lVmlzdWFsbHlFbXB0eSA9IGxpbmVDb250ZW50
LmlzTGluZVZpc3VhbGx5RW1wdHkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMg
OiBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpObzsKKyAgICBhdXRvIGxpbmVCb3ggPSBM
aW5lQm94IHsgY29udGVudExvZ2ljYWxXaWR0aCwgaXNMaW5lVmlzdWFsbHlFbXB0eSB9OworCisg
ICAgaWYgKGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldChydW5zLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZUxv
Z2ljYWxXaWR0aCwgY29udGVudExvZ2ljYWxXaWR0aCwgbGluZUNvbnRlbnQuaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KSkKKyAgICAgICAgbGluZUJveC5zZXRIb3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0KCpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KTsKKyAgICBjb25zdHJ1Y3RJbmxpbmVC
b3hlcyhsaW5lQm94LCBydW5zKTsKKyAgICBjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0
KGxpbmVCb3gpOworICAgIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVC
b3hIZWlnaHQobGluZUJveCk7CisgICAgcmV0dXJuIGxpbmVCb3g7Cit9CisKK3ZvaWQgTGluZUJv
eEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExp
bmU6OlJ1bkxpc3QmIHJ1bnMpCit7CisgICAgYXV0byBhZGp1c3RWZXJ0aWNhbEdlb21ldHJ5Rm9y
Tm9uRW1wdHlJbmxpbmVCb3ggPSBbXShhdXRvJiBpbmxpbmVCb3gpIHsKKyAgICAgICAgLy8gSW5s
aW5lIGJveCB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBkcml2ZW4gYnkgZWl0aGVyIGNoaWxkIGlubGlu
ZSBib3hlcyAoc2VlIGNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQpCisgICAgICAgIC8v
IG9yIHRoZSB0ZXh0IHJ1bnMnIGZvbnQgbWV0cmljcyAodGV4dCBydW5zIGRvbid0IGdlbmVyYXRl
IGlubGluZSBib3hlcykuCisgICAgICAgIEFTU0VSVCghaW5saW5lQm94LmlzRW1wdHkoKSk7Cisg
ICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lQm94LmZvbnRNZXRyaWNzKCk7CisgICAg
ICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgp
OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lID0gZm9udE1ldHJpY3MuYXNjZW50
KCk7CisKKyAgICAgICAgaW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCk7
CisgICAgICAgIGlubGluZUJveC5zZXRCYXNlbGluZShiYXNlbGluZSk7CisgICAgICAgIGlubGlu
ZUJveC5zZXREZXNjZW50KGxvZ2ljYWxIZWlnaHQgLSBiYXNlbGluZSk7CisgICAgICAgIGlmIChh
dXRvIGxpbmVTcGFjaW5nID0gZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2ljYWxIZWln
aHQpCisgICAgICAgICAgICBpbmxpbmVCb3guc2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOwor
ICAgIH07CisKKyAgICBhdXRvIGNvbnN0cnVjdFJvb3RJbmxpbmVCb3ggPSBbJl0geworICAgICAg
ICBhdXRvIHJvb3RJbmxpbmVCb3ggPSBtYWtlVW5pcXVlPExpbmVCb3g6OklubGluZUJveD4ocm9v
dCgpLCBsaW5lQm94Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKS52YWx1ZU9yKElubGluZUxh
eW91dFVuaXQgeyB9KSwgbGluZUJveC5sb2dpY2FsV2lkdGgoKSk7CisKKyAgICAgICAgYXV0byBs
aW5lSGFzSW1hZ2luYXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKTsKKyAg
ICAgICAgYXV0byBpc0luaXRpYWxseUNvbnNpZGVyZWROb25FbXB0eSA9ICFsaW5lQm94LmlzTGlu
ZVZpc3VhbGx5RW1wdHkoKSAmJiBsaW5lSGFzSW1hZ2luYXJ5U3RydXQ7CisgICAgICAgIGlmIChp
c0luaXRpYWxseUNvbnNpZGVyZWROb25FbXB0eSkgeworICAgICAgICAgICAgcm9vdElubGluZUJv
eC0+c2V0SXNOb25FbXB0eSgpOworICAgICAgICAgICAgYWRqdXN0VmVydGljYWxHZW9tZXRyeUZv
ck5vbkVtcHR5SW5saW5lQm94KCpyb290SW5saW5lQm94KTsKKyAgICAgICAgfQorICAgICAgICBs
aW5lQm94LmFkZFJvb3RJbmxpbmVCb3goV1RGTW92ZShyb290SW5saW5lQm94KSk7CisgICAgfTsK
KyAgICBjb25zdHJ1Y3RSb290SW5saW5lQm94KCk7CisgICAgaWYgKCFydW5zLmlzRW1wdHkoKSkg
eworICAgICAgICAvLyBBbiBpbmxpbmUgYm94IG1heSBub3QgbmVjZXNzYXJpbHkgc3RhcnQgb24g
dGhlIGN1cnJlbnQgbGluZToKKyAgICAgICAgLy8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBicmVhazxi
cj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5saW5lIGJveCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5l
cj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxpbmU8L3NwYW4+PC9zcGFuPgorICAgICAgICAvLyBX
ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3MgYW4gTGluZUJveDo6SW5saW5lQm94IGZv
ciBldmVyeSBpbmxpbmUgYm94IHRoYXQncyBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCisg
ICAgICAgIC8vIEluIG5lc3RpbmcgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBMaW5lQm94OjpJbmxp
bmVCb3hlcyBmb3IgdGhlIGlubGluZSBib3ggYW5jZXN0b3JzLgorICAgICAgICAvLyBXZSBvbmx5
IGhhdmUgdG8gZG8gaXQgb24gdGhlIGZpcnN0IHJ1biBhcyBhbnkgc3Vic2VxdWVudCBpbmxpbmUg
Y29udGVudCBpcyBlaXRoZXIgYXQgdGhlIHNhbWUvaGlnaGVyIG5lc3RpbmcgbGV2ZWwgb3IKKyAg
ICAgICAgLy8gbmVzdGVkIHdpdGggYSBbY29udGFpbmVyIHN0YXJ0XSBydW4uCisgICAgICAgIGF1
dG8mIGZpcnN0UnVuID0gcnVuc1swXTsKKyAgICAgICAgYXV0byYgZmlyc3RSdW5QYXJlbnRJbmxp
bmVCb3ggPSBmaXJzdFJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKTsKKyAgICAgICAgLy8gSWYgdGhl
IHBhcmVudCBpcyB0aGUgcm9vdCgpLCB3ZSBjYW4gc3RvcCBoZXJlLiBUaGlzIGlzIHJvb3QgaW5s
aW5lIGJveCBjb250ZW50LCB0aGVyZSdzIG5vIG5lc3RpbmcgaW5saW5lIGJveCBmcm9tIHRoZSBw
cmV2aW91cyBsaW5lKHMpCisgICAgICAgIC8vIHVubGVzcyB0aGUgaW5saW5lIGJveCBjbG9zaW5n
IChjb250YWluZXIgZW5kIHJ1bikgaXMgZm9yY2VkIG92ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4K
KyAgICAgICAgLy8gZS5nLgorICAgICAgICAvLyA8c3Bhbj5ub3JtYWxseSB0aGUgaW5saW5lIGJv
eCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBjb250ZW50PC9zcGFuPgorICAgICAgICAvLyA8
c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhlIG5leHQgbGluZTxicj48L3NwYW4+CisgICAg
ICAgIGlmIChmaXJzdFJ1bi5pc0NvbnRhaW5lckVuZCgpIHx8ICZmaXJzdFJ1blBhcmVudElubGlu
ZUJveCAhPSAmcm9vdCgpKSB7CisgICAgICAgICAgICBhdXRvKiBhbmNlc3RvciA9ICZmaXJzdFJ1
blBhcmVudElubGluZUJveDsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBhbmNlc3Rv
cnNXaXRob3V0SW5saW5lQm94ZXM7CisgICAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IgIT0gJnJv
b3QoKSkgeworICAgICAgICAgICAgICAgIGFuY2VzdG9yc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBl
bmQoYW5jZXN0b3IpOworICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gJmFuY2VzdG9yLT5wYXJl
bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2lu
ZyBMaW5lQm94OjpJbmxpbmVCb3hlcyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGFuY2VzdG9y
LgorICAgICAgICAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA6IFdURjo6bWFrZVJldmVyc2VkUmFu
Z2UoYW5jZXN0b3JzV2l0aG91dElubGluZUJveGVzKSkgeworICAgICAgICAgICAgICAgIGF1dG8g
aW5saW5lQm94ID0gbWFrZVVuaXF1ZTxMaW5lQm94OjpJbmxpbmVCb3g+KCphbmNlc3RvciwgbGlu
ZUJveC5ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KCkudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0
IHsgfSksIGxpbmVCb3gubG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgICAgIGlubGluZUJv
eC0+c2V0SXNOb25FbXB0eSgpOworICAgICAgICAgICAgICAgIGFkanVzdFZlcnRpY2FsR2VvbWV0
cnlGb3JOb25FbXB0eUlubGluZUJveCgqaW5saW5lQm94KTsKKyAgICAgICAgICAgICAgICBsaW5l
Qm94LmFkZElubGluZUJveChXVEZNb3ZlKGlubGluZUJveCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKSB7CisgICAgICAgIGF1
dG8mIGlubGluZUxldmVsQm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBpZiAocnVuLmlz
Qm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbExlZnQgPSBsaW5lQm94Lmhvcml6b250
YWxBbGlnbm1lbnRPZmZzZXQoKS52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSArIHJ1bi5s
b2dpY2FsTGVmdCgpOworICAgICAgICAgICAgYXV0byYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5lTGV2ZWxCb3gpOworICAg
ICAgICAgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJn
aW5Cb3hIZWlnaHQoKTsKKyAgICAgICAgICAgIGF1dG8gYmFzZWxpbmUgPSBsb2dpY2FsSGVpZ2h0
OworICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBp
bmxpbmVMZXZlbEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgaW5saW5lLWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJl
bGF0aXZlIHRvIGl0cyBjb250ZW50IGJveC4gTGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0
aGUgbWFyZ2luIGJveC4KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgX19fX19fX19fX19f
X19fIDwtIG1hcmdpbiBib3gKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgfCAgX19fX19fX19fX19fICA8LSBib3JkZXIgYm94CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgfCB8CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8ICBfX19fX19fX18gIDwtIGNvbnRlbnQgYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgfCB8IHwgICBeCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8ICA8LSBi
YXNlbGluZSBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwKKyAg
ICAgICAgICAgICAgICAvLyAgICAgdGV4dCB8IHwgfCAgIHYgdGV4dAorICAgICAgICAgICAgICAg
IC8vICAgICAtLS0tLXwtfC18LS0tLS0tLS0tLSA8LSBiYXNlbGluZQorICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUo
KS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+
KGlubGluZUxldmVsQm94KSk7CisgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmUgPSBmb3Jt
YXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZXMubGFzdCgpOworICAgICAg
ICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxhc3RMaW5lLnRvcCgpICsgbGFz
dExpbmUuYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICBiYXNlbGluZSA9IGlubGluZUxldmVs
Qm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LmJvcmRl
clRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSAr
IGlubGluZUJsb2NrQmFzZWxpbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIHJl
Y3QgPSBJbmxpbmVSZWN0IHsgeyB9LCBsb2dpY2FsTGVmdCwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0IH07CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUJveChtYWtlVW5p
cXVlPExpbmVCb3g6OklubGluZUJveD4oaW5saW5lTGV2ZWxCb3gsIHJlY3QsIGJhc2VsaW5lKSk7
CisgICAgICAgIH0gZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAg
ICAgYXV0byBsb2dpY2FsTGVmdCA9IGxpbmVCb3guaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgp
LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAg
ICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LmxvZ2ljYWxXaWR0aCgp
IC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbExvZ2ljYWxX
aWR0aCA+PSAwKTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lQm94KG1ha2VVbmlxdWU8
TGluZUJveDo6SW5saW5lQm94PihpbmxpbmVMZXZlbEJveCwgbG9naWNhbExlZnQsIGluaXRpYWxM
b2dpY2FsV2lkdGgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkg
eworICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2FsIHdpZHRoIHdoZW4gdGhlIGlubGlu
ZSBsZXZlbCBjb250YWluZXIgY2xvc2VzIG9uIHRoaXMgbGluZS4KKyAgICAgICAgICAgIGF1dG8m
IGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGlubGluZUxldmVsQm94
KTsKKyAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsV2lkdGgocnVuLmxvZ2ljYWxSaWdo
dCgpIC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bi5p
c1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgYXV0byYgcGFyZW50
Qm94ID0gaW5saW5lTGV2ZWxCb3gucGFyZW50KCk7CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSAmcGFyZW50Qm94ID09ICZyb290KCkgPyBsaW5lQm94LnJvb3RJbmxpbmVCb3go
KSA6IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudEJveCk7CisgICAgICAgICAg
ICBpZiAocGFyZW50SW5saW5lQm94LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBBZGp1c3Qgbm9uLWVtcHR5IGlubGluZSBib3ggaGVpZ2h0IHdoZW4gZ2x5cGhzIGZyb20g
dGhlIG5vbi1wcmltYXJ5IGZvbnQgc3RyZXRjaCB0aGUgYm94LgorICAgICAgICAgICAgICAgIHBh
cmVudElubGluZUJveC5zZXRJc05vbkVtcHR5KCk7CisgICAgICAgICAgICAgICAgYWRqdXN0VmVy
dGljYWxHZW9tZXRyeUZvck5vbkVtcHR5SW5saW5lQm94KHBhcmVudElubGluZUJveCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OmNv
bXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoTGluZUJveCYgbGluZUJveCkKK3sKKyAgICAv
LyBCeSB0cmF2ZXJzaW5nIHRoZSBpbmxpbmUgYm94IGxpc3QgYmFja3dhcmRzLCBpdCdzIGd1YXJh
bnRlZWQgdGhhdCBkZXNjZW5kYW50IGlubGluZSBib3hlcyBhcmUgc2l6ZWQgZmlyc3QuCisgICAg
Zm9yIChhdXRvJiBpbmxpbmVCb3ggOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGxpbmVCb3gubm9u
Um9vdElubGluZUJveGVzKCkpKSB7CisgICAgICAgIGlmIChpbmxpbmVCb3gtPmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGlu
ZUJveC0+bGF5b3V0Qm94KCk7CisgICAgICAgIHN3aXRjaCAobGF5b3V0Qm94LnN0eWxlKCkudmVy
dGljYWxBbGlnbigpKSB7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKKyAgICAgICAgICAgIC8vIHRvcCBhbmQgYm90
dG9tIGFsaWdubWVudHMgb25seSBzdHJldGNoIHRoZSBsaW5lIGJveC4gVGhleSBkb24ndCBzdHJl
dGNoIGFueSBvZiB0aGUgaW5saW5lIGJveGVzLCBub3QgZXZlbiB0aGUgcm9vdCBpbmxpbmUgYm94
LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRv
cDogeworICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGF1dG8gcGFy
ZW50VGV4dExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIHBhcmVudElu
bGluZUJveC5mb250TWV0cmljcygpLmFzY2VudCgpOworICAgICAgICAgICAgcGFyZW50SW5saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXgocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWln
aHQoKSwgcGFyZW50VGV4dExvZ2ljYWxUb3AgKyBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGlu
ZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gYmFzZWxpbmVPdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlubGluZUJveC0+YmFz
ZWxpbmUoKSAtIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAgICAgICAgIGlmIChi
YXNlbGluZU92ZXJmbG93KSB7CisgICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldEJh
c2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsgYmFzZWxpbmVPdmVyZmxvdyk7Cisg
ICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQocGFyZW50SW5s
aW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIGJhc2VsaW5lT3ZlcmZsb3cpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYXV0byBwYXJlbnRMaW5lQm94QmVsb3dCYXNlbGluZSA9IHBhcmVudElu
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKTsKKyAg
ICAgICAgICAgIGF1dG8gaW5saW5lQm94QmVsb3dCYXNlbGluZSA9IGlubGluZUJveC0+bG9naWNh
bEhlaWdodCgpIC0gaW5saW5lQm94LT5iYXNlbGluZSgpOworICAgICAgICAgICAgYXV0byBiZWxv
d0Jhc2VsaW5lT3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxpbmVCb3hCZWxvd0Jhc2VsaW5l
IC0gcGFyZW50TGluZUJveEJlbG93QmFzZWxpbmUpOworICAgICAgICAgICAgaWYgKGJlbG93QmFz
ZWxpbmVPdmVyZmxvdykKKyAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNh
bEhlaWdodChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpICsgYmVsb3dCYXNlbGluZU92
ZXJmbG93KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VGV4dEJvdHRvbTogeworICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5l
Qm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsK
KyAgICAgICAgICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVC
b3guYmFzZWxpbmUoKSArIHBhcmVudElubGluZUJveC5kZXNjZW50KCkudmFsdWVPcihJbmxpbmVM
YXlvdXRVbml0IHsgfSk7CisgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4w
ZiwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkgLSBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSk7
CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cpIHsKKyAgICAgICAgICAgICAgICAvLyBUZXh0Qm90
dG9tIHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93bndhcmQgdGhlIHNhbWUgd2F5ICdib3R0b20nIGRv
ZXMuCisgICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQocGFy
ZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAg
ICBwYXJlbnRJbmxpbmVCb3guc2V0QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkg
KyBvdmVyZmxvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogeworICAgICAgICAgICAgYXV0
byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOworICAgICAgICAgICAgYXV0
byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFyZW50
TGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpIC0gKGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIC8gMiArIHBhcmVudElu
bGluZUJveC5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgaWYgKGxv
Z2ljYWxUb3AgPCAwKSB7CisgICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IC1sb2dpY2Fs
VG9wOworICAgICAgICAgICAgICAgIC8vIENoaWxkIGlubGluZSBib3ggd2l0aCBtaWRkbGUgYWxp
Z25tZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93biB3aGVuIG92ZXJmbG93cy4KKyAgICAgICAg
ICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCkgKyBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExv
Z2ljYWxIZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIG92ZXJmbG93KTsK
KyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0geyB9OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYXV0byBsb2dpY2FsQm90dG9tID0gbG9naWNhbFRvcCArIGlubGluZUJveC0+bG9naWNh
bEhlaWdodCgpOworICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQo
c3RkOjptYXgocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgbG9naWNhbEJvdHRvbSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMaW5lQm94QnVpbGRlcjo6YWxpZ25JbmxpbmVC
b3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChMaW5lQm94JiBsaW5lQm94KQor
eworICAgIC8vIElubGluZSBib3hlcyBhcmUgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRo
ZSBsaW5lIGJveCAoYW5kIG5vdCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlaXIgcGFy
ZW50cykuCisgICAgLy8gU3RhcnRpbmcgd2l0aCB0aGUgcm9vdCBpbmxpbmUgYm94LCBwb3NpdGlv
biB0aGUgYW5jZXN0b3JzIGZpcnN0IHNvIHRoYXQgdGhlIGRlc2NlbmRhbnQgbGluZSBib3hlcyBz
ZWUgYWJzb2x1dGUgdmVydGljYWwgcG9zaXRpb25zLgorICAgIGF1dG8mIHJvb3RJbmxpbmVCb3gg
PSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKyAgICBhdXRvIGNvbnRlbnRMb2dpY2FsSGVpZ2h0
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBhbGlnblJvb3RJbmxpbmVCb3ggPSBb
Jl0geworICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCA9IHJvb3RJbmxpbmVCb3gubG9naWNh
bEhlaWdodCgpOworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUJveCA6IGxpbmVCb3gubm9uUm9v
dElubGluZUJveGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGlubGlu
ZUJveC0+bGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgICAgICBp
ZiAodmVydGljYWxBbGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b20pIHsKKyAgICAgICAgICAg
ICAgICAvLyBib3R0b20gYWxpZ24gYWx3YXlzIHB1c2hlcyB0aGUgcm9vdCBpbmxpbmUgYm94IGRv
d253YXJkcy4KKyAgICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwg
aW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkgLSByb290SW5saW5lQm94LmxvZ2ljYWxCb3R0b20o
KSk7CisgICAgICAgICAgICAgICAgcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJbmxp
bmVCb3gubG9naWNhbFRvcCgpICsgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIGNvbnRlbnRM
b2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OworICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNh
bEFsaWduID09IFZlcnRpY2FsQWxpZ246OlRvcCkKKyAgICAgICAgICAgICAgICBjb250ZW50TG9n
aWNhbEhlaWdodCA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2FsSGVpZ2h0LCBpbmxpbmVCb3gtPmxv
Z2ljYWxIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGFsaWduUm9vdElubGluZUJv
eCgpOworCisgICAgZm9yIChhdXRvJiBpbmxpbmVCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVC
b3hlcygpKSB7CisgICAgICAgIGF1dG8gaW5saW5lQm94TG9naWNhbFRvcCA9IElubGluZUxheW91
dFVuaXQgeyB9OworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gtPmxheW91dEJv
eCgpOworICAgICAgICBzd2l0Y2ggKGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSkg
eworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7CisgICAgICAgICAgICBh
dXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChsYXlv
dXRCb3gucGFyZW50KCkpOworICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9IHBhcmVu
dElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlu
bGluZUJveC0+YmFzZWxpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogeworICAgICAgICAgICAgYXV0byYgcGFy
ZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOworICAgICAgICAgICAgYXV0byYgcGFy
ZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFyZW50TGF5b3V0
Qm94KTsKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
bG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxpbmVC
b3guZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbTogeworICAgICAgICAgICAg
YXV0byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOworICAgICAgICAgICAg
YXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFy
ZW50TGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20g
PSBwYXJlbnRJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5l
KCkgKyBwYXJlbnRJbmxpbmVCb3guZm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CisgICAgICAgICAg
ICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gLSBpbmxpbmVC
b3gtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNh
bFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNh
bFRvcCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0IC0gaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6
IHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQo
KTsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94
Rm9yTGF5b3V0Qm94KHBhcmVudExheW91dEJveCk7CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dp
Y2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5i
YXNlbGluZSgpIC0gKGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIC8gMiArIHBhcmVudElubGlu
ZUJveC5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbmxp
bmVCb3gtPnNldExvZ2ljYWxUb3AoaW5saW5lQm94TG9naWNhbFRvcCk7CisgICAgfQorICAgIGlm
ICghbGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkpCisgICAgICAgIGxpbmVCb3guc2V0TG9n
aWNhbEhlaWdodChjb250ZW50TG9naWNhbEhlaWdodCk7Cit9CisKK0xpbmVCb3ggSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGlu
ZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKK3sKKyAgICByZXR1cm4gTGluZUJv
eEJ1aWxkZXIoZm9ybWF0dGluZ0NvbnRleHQoKSkuYnVpbGQobGluZUNvbnRlbnQpOworfQorCiBD
b250ZW50V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpp
bmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGVIb3Jpem9udGFsVmFsdWVzJiBvdmVycmlkZUhvcml6b250YWxWYWx1ZXMpCiB7
CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc0luRmxvdygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAK
aW5kZXggNWMxMjg3MTQxZGE1MWM3YzQ2NDNiNGNlZmViZTg2YTUwMTRmZWE0ZS4uNmUyY2Q2MTZh
NzcyZDU2YmVjZTk4ZmM5YWIxMjkwY2Q5ZjgwZTc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJUZXh0Rmxh
Z3MuaCIKICNpbmNsdWRlICJUZXh0VXRpbC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCAzMWIyZjkz
N2M5ZWI4ZjRhZmQ4NGFhZGE3OTlhZWNjOGM5MTM1YjEyLi40OGEzNzhjMGM1MmUzYjI3YzIwZTMw
ZWRhNTcyYTZiYTE1ZDMwZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtMjYsMTA2ICsyNiwxOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKIAotI2lu
Y2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0KICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91
dCB7CiAKLXN0cnVjdCBIYW5naW5nQ29udGVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCByZXNldCgp
OwotCi0gICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KLSAgICBib29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29uZGl0aW9u
YWw7IH0KLQotICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlvbmFsID0g
dHJ1ZTsgfQotICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV93aWR0
aCArPSB3aWR0aDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFsIHsgZmFs
c2UgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07Ci19OwotCi12b2lkIEhh
bmdpbmdDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlvbmFsID0gZmFsc2U7Ci0g
ICAgbV93aWR0aCA9ICAwOwotfQotCi1zdGF0aWMgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdp
bmdDb250ZW50KGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIExpbmVCb3g6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCi17Ci0gICAgYXV0
byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dDo6WWVzKQotICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAg
Zm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7Ci0gICAgICAg
IGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewotICAg
ICAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBh
IHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChydW4uc3R5bGUoKS53
aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdp
bmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1
bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmdpbmdD
b250ZW50OwotfQotCi1zdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBUZXh0QWxpZ25Nb2Rl
IHRleHRBbGlnbiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlv
dXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCBpc0xhc3RMaW5lKQotewotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lTG9n
aWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aDsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50
ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KHJ1bnMsIGlzTGFzdExpbmUpOwotICAgIGF2YWlsYWJs
ZVdpZHRoICs9IGhhbmdpbmdDb250ZW50LndpZHRoKCk7Ci0gICAgaWYgKGF2YWlsYWJsZVdpZHRo
IDw9IDApCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRh
bEFsaWdubWVudCA9IFsmXSB7Ci0gICAgICAgIGlmICh0ZXh0QWxpZ24gIT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0QWxpZ247Ci0gICAgICAgIC8vIFRl
eHQgaXMganVzdGlmaWVkIGFjY29yZGluZyB0byB0aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUg
dGV4dC1qdXN0aWZ5IHByb3BlcnR5LAotICAgICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZp
bGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWdu
LWxhc3QsCi0gICAgICAgIC8vIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9y
IHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0LWFsaWduZWQuCi0gICAgICAgIGlmIChydW5z
Lmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGluZUJveDo6SXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9k
ZTo6U3RhcnQ7Ci0gICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIH07
Ci0KLSAgICBzd2l0Y2ggKGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCgpKSB7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVm
dDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICByZXR1cm4geyB9Owot
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgcmV0dXJu
IGF2YWlsYWJsZVdpZHRoOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICByZXR1cm4gYXZhaWxhYmxl
V2lkdGggLyAyOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgLy8g
VGV4dEFsaWduTW9kZTo6SnVzdGlmeSBpcyBhIHJ1biBhbGlnbm1lbnQgKGFuZCB3ZSBvbmx5IGRv
IGlubGluZSBib3ggYWxpZ25tZW50IGhlcmUpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsg
fTsKLX0KLQotTGluZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgQm94JiBsYXlvdXRC
b3gsIGNvbnN0IElubGluZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUsIElu
bGluZUxheW91dFVuaXQgZGVzY2VudCkKK0xpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRV
bml0IGJhc2VsaW5lKQogICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIobGF5b3V0Qm94KSkK
ICAgICAsIG1fbG9naWNhbFJlY3QocmVjdCkKICAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmUpCi0g
ICAgLCBtX2Rlc2NlbnQoZGVzY2VudCkKICAgICAsIG1faXNFbXB0eShmYWxzZSkKIHsKKyAgICBB
U1NFUlQocmVjdC5oZWlnaHQoKSk7CiB9CiAKIExpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKQEAgLTEzNCwxNSArNDYsMjIgQEAgTGluZUJveDo6
SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIElubGluZUxheW91dFVu
aXQgbG9naWNhbExlZnQKIHsKIH0KIAotTGluZUJveDo6TGluZUJveChjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIElubGluZUxheW91dFVuaXQg
bGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBj
b25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3Vh
bGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQpCitMaW5lQm94OjpMaW5lQm94KElubGluZUxheW91dFVuaXQgY29udGVudExvZ2lj
YWxXaWR0aCwgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5KQogICAgIDog
bV9sb2dpY2FsU2l6ZShjb250ZW50TG9naWNhbFdpZHRoLCB7IH0pCiAgICAgLCBtX2lzTGluZVZp
c3VhbGx5RW1wdHkoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpZ
ZXMpCi0gICAgLCBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250
ZXh0KQogewotICAgIG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpv
bnRhbEFsaWdubWVudE9mZnNldChydW5zLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGlu
ZUxvZ2ljYWxXaWR0aCwgY29udGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKLSAgICBjb25zdHJ1Y3RJbmxpbmVCb3hlcyhydW5zKTsKLSAgICBjb21wdXRlSW5s
aW5lQm94ZXNMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlB
bmRDb21wdXRlTGluZUJveEhlaWdodCgpOworfQorCit2b2lkIExpbmVCb3g6OmFkZFJvb3RJbmxp
bmVCb3goc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4mJiByb290SW5saW5lQm94KQoreworICAg
IHN0ZDo6ZXhjaGFuZ2UobV9yb290SW5saW5lQm94LCBXVEZNb3ZlKHJvb3RJbmxpbmVCb3gpKTsK
KyAgICBtX2lubGluZUJveFJlY3RNYXAuc2V0KCZtX3Jvb3RJbmxpbmVCb3gtPmxheW91dEJveCgp
LCBtX3Jvb3RJbmxpbmVCb3guZ2V0KCkpOworfQorCit2b2lkIExpbmVCb3g6OmFkZElubGluZUJv
eChzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lQm94PiYmIGlubGluZUJveCkKK3sKKyAgICBtX2lubGlu
ZUJveFJlY3RNYXAuc2V0KCZpbmxpbmVCb3gtPmxheW91dEJveCgpLCBpbmxpbmVCb3guZ2V0KCkp
OworICAgIG1fbm9uUm9vdElubGluZUJveExpc3QuYXBwZW5kKFdURk1vdmUoaW5saW5lQm94KSk7
CiB9CiAKIElubGluZVJlY3QgTGluZUJveDo6bG9naWNhbFJlY3RGb3JUZXh0UnVuKGNvbnN0IExp
bmU6OlJ1biYgcnVuKSBjb25zdApAQCAtMTU1LDI2NCArNzQsNiBAQCBJbmxpbmVSZWN0IExpbmVC
b3g6OmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lOjpSdW4mIHJ1bikgY29uc3QKICAg
ICByZXR1cm4geyBydW5sb2dpY2FsVG9wLCBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFs
dWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSkgKyBydW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2lj
YWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0IH07CiB9CiAKLXZvaWQgTGluZUJveDo6Y29uc3RydWN0
SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucykKLXsKLSAgICBhdXRvIGFkanVz
dFZlcnRpY2FsR2VvbWV0cnlGb3JOb25FbXB0eUlubGluZUJveCA9IFtdKGF1dG8mIGlubGluZUJv
eCkgewotICAgICAgICAvLyBJbmxpbmUgYm94IHZlcnRpY2FsIGdlb21ldHJ5IGlzIGRyaXZlbiBi
eSBlaXRoZXIgY2hpbGQgaW5saW5lIGJveGVzIChzZWUgY29tcHV0ZUlubGluZUJveGVzTG9naWNh
bEhlaWdodCkKLSAgICAgICAgLy8gb3IgdGhlIHRleHQgcnVucycgZm9udCBtZXRyaWNzICh0ZXh0
IHJ1bnMgZG9uJ3QgZ2VuZXJhdGUgaW5saW5lIGJveGVzKS4gCi0gICAgICAgIEFTU0VSVCghaW5s
aW5lQm94LmlzRW1wdHkoKSk7Ci0gICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lQm94
LmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCA9
IGZvbnRNZXRyaWNzLmhlaWdodCgpOwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5l
ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0KLSAgICAgICAgaW5saW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQobG9naWNhbEhlaWdodCk7Ci0gICAgICAgIGlubGluZUJveC5zZXRCYXNlbGluZShiYXNl
bGluZSk7Ci0gICAgICAgIGlubGluZUJveC5zZXREZXNjZW50KGxvZ2ljYWxIZWlnaHQgLSBiYXNl
bGluZSk7Ci0gICAgICAgIGlmIChhdXRvIGxpbmVTcGFjaW5nID0gZm9udE1ldHJpY3MubGluZVNw
YWNpbmcoKSAtIGxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICBpbmxpbmVCb3guc2V0TGluZVNw
YWNpbmcobGluZVNwYWNpbmcpOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbnN0cnVjdFJvb3RJbmxp
bmVCb3ggPSBbJl0gewotICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBJbmxpbmVCb3ggeyByb290
KCksIG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQg
eyB9KSwgbG9naWNhbFdpZHRoKCkgfTsKLSAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgm
cm9vdCgpLCAmbV9yb290SW5saW5lQm94KTsKLQotICAgICAgICBhdXRvIGxpbmVIYXNJbWFnaW5h
cnlTdHJ1dCA9ICFsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpOwotICAgICAgICBhdXRvIGlz
SW5pdGlhbGx5Q29uc2lkZXJlZE5vbkVtcHR5ID0gIW1faXNMaW5lVmlzdWFsbHlFbXB0eSAmJiBs
aW5lSGFzSW1hZ2luYXJ5U3RydXQ7Ci0gICAgICAgIGlmIChpc0luaXRpYWxseUNvbnNpZGVyZWRO
b25FbXB0eSkgewotICAgICAgICAgICAgbV9yb290SW5saW5lQm94LnNldElzTm9uRW1wdHkoKTsK
LSAgICAgICAgICAgIGFkanVzdFZlcnRpY2FsR2VvbWV0cnlGb3JOb25FbXB0eUlubGluZUJveCht
X3Jvb3RJbmxpbmVCb3gpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBjb25zdHJ1Y3RSb290SW5s
aW5lQm94KCk7Ci0gICAgaWYgKCFydW5zLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBbiBpbmxp
bmUgYm94IG1heSBub3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToKLSAg
ICAgICAgLy8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJl
bnQgaW5saW5lIGJveCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZp
b3VzIGxpbmU8L3NwYW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZXJlJ3MgYW4gTGluZUJveDo6SW5saW5lQm94IGZvciBldmVyeSBpbmxpbmUgYm94IHRo
YXQncyBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIC8vIEluIG5lc3Rpbmcg
Y2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBMaW5lQm94OjpJbmxpbmVCb3hlcyBmb3IgdGhlIGlubGlu
ZSBib3ggYW5jZXN0b3JzLiAKLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRo
ZSBmaXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0
IHRoZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRo
IGEgW2NvbnRhaW5lciBzdGFydF0gcnVuLgotICAgICAgICBhdXRvJiBmaXJzdFJ1biA9IHJ1bnNb
MF07Ci0gICAgICAgIGF1dG8mIGZpcnN0UnVuUGFyZW50SW5saW5lQm94ID0gZmlyc3RSdW4ubGF5
b3V0Qm94KCkucGFyZW50KCk7Ci0gICAgICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgdGhlIHJvb3Qo
KSwgd2UgY2FuIHN0b3AgaGVyZS4gVGhpcyBpcyByb290IGlubGluZSBib3ggY29udGVudCwgdGhl
cmUncyBubyBuZXN0aW5nIGlubGluZSBib3ggZnJvbSB0aGUgcHJldmlvdXMgbGluZShzKQotICAg
ICAgICAvLyB1bmxlc3MgdGhlIGlubGluZSBib3ggY2xvc2luZyAoY29udGFpbmVyIGVuZCBydW4p
IGlzIGZvcmNlZCBvdmVyIHRvIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIC8vIGUuZy4KLSAg
ICAgICAgLy8gPHNwYW4+bm9ybWFsbHkgdGhlIGlubGluZSBib3ggY2xvc2luZyBmb3JtcyBhIGNv
bnRpbnVvdXMgY29udGVudDwvc3Bhbj4KLSAgICAgICAgLy8gPHNwYW4+dW5sZXNzIGl0J3MgZm9y
Y2VkIHRvIHRoZSBuZXh0IGxpbmU8YnI+PC9zcGFuPgotICAgICAgICBpZiAoZmlyc3RSdW4uaXND
b250YWluZXJFbmQoKSB8fCAmZmlyc3RSdW5QYXJlbnRJbmxpbmVCb3ggIT0gJnJvb3QoKSkgewot
ICAgICAgICAgICAgYXV0byogYW5jZXN0b3IgPSAmZmlyc3RSdW5QYXJlbnRJbmxpbmVCb3g7Ci0g
ICAgICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gYW5jZXN0b3JzV2l0aG91dElubGluZUJveGVz
OwotICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yICE9ICZyb290KCkpIHsKLSAgICAgICAgICAg
ICAgICBhbmNlc3RvcnNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKGFuY2VzdG9yKTsKLSAgICAg
ICAgICAgICAgICBhbmNlc3RvciA9ICZhbmNlc3Rvci0+cGFyZW50KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIG1pc3NpbmcgTGluZUJveDo6SW5saW5lQm94
ZXMgc3RhcnRpbmcgd2l0aCB0aGUgdG9wbW9zdCBhbmNlc3Rvci4KLSAgICAgICAgICAgIGZvciAo
YXV0byogYW5jZXN0b3IgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGFuY2VzdG9yc1dpdGhvdXRJ
bmxpbmVCb3hlcykpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJveCA9IG1ha2VVbmlx
dWU8SW5saW5lQm94PigqYW5jZXN0b3IsIG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1
ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSwgbG9naWNhbFdpZHRoKCkpOwotICAgICAgICAgICAg
ICAgIGlubGluZUJveC0+c2V0SXNOb25FbXB0eSgpOwotICAgICAgICAgICAgICAgIGFkanVzdFZl
cnRpY2FsR2VvbWV0cnlGb3JOb25FbXB0eUlubGluZUJveCgqaW5saW5lQm94KTsKLSAgICAgICAg
ICAgICAgICBtX2lubGluZUJveFJlY3RNYXAuc2V0KGFuY2VzdG9yLCBpbmxpbmVCb3guZ2V0KCkp
OwotICAgICAgICAgICAgICAgIG1faW5saW5lQm94TGlzdC5hcHBlbmQoV1RGTW92ZShpbmxpbmVC
b3gpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoYXV0byYg
cnVuIDogcnVucykgewotICAgICAgICBhdXRvJiBpbmxpbmVMZXZlbEJveCA9IHJ1bi5sYXlvdXRC
b3goKTsKLSAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGxvZ2lj
YWxMZWZ0ID0gbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0
VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVM
ZXZlbEJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChpbmxp
bmVMZXZlbEJveCk7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxIZWlnaHQgPSBpbmxpbmVMZXZl
bEJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotICAgICAgICAgICAgYXV0byBiYXNlbGlu
ZSA9IGxvZ2ljYWxIZWlnaHQ7Ci0gICAgICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxp
bmVCbG9ja0JveCgpICYmIGlubGluZUxldmVsQm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmUtYmxvY2sncyBiYXNl
bGluZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94LiBMZXQncyBjb252ZXJ0
IGl0IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgotICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAotICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBfX19fX19fX19fX18gIDwt
IGJvcmRlciBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwKLSAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVudCBib3gKLSAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KLSAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICB8IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAotICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgIHwgfCB8ICAgfAotICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0IHwgfCB8ICAgdiB0ZXh0
Ci0gICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0tLS0tIDwtIGJhc2VsaW5l
Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25j
YXN0PENvbnRhaW5lckJveD4oaW5saW5lTGV2ZWxCb3gpKTsKLSAgICAgICAgICAgICAgICBhdXRv
JiBsYXN0TGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5l
cy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2VsaW5lID0gbGFz
dExpbmUudG9wKCkgKyBsYXN0TGluZS5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIGJhc2Vs
aW5lID0gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGlubGluZUxldmVs
Qm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LnBhZGRpbmdU
b3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGF1dG8gcmVjdCA9IElubGluZVJlY3QgeyB7IH0sIGxvZ2ljYWxMZWZ0LCBydW4u
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQgfTsKLSAgICAgICAgICAgIGF1dG8gaW5saW5l
Qm94ID0gbWFrZVVuaXF1ZTxJbmxpbmVCb3g+KGlubGluZUxldmVsQm94LCByZWN0LCBiYXNlbGlu
ZSwgSW5saW5lTGF5b3V0VW5pdCB7IH0pOwotICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFw
LnNldCgmaW5saW5lTGV2ZWxCb3gsIGlubGluZUJveC5nZXQoKSk7Ci0gICAgICAgICAgICBtX2lu
bGluZUJveExpc3QuYXBwZW5kKFdURk1vdmUoaW5saW5lQm94KSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgYXV0byBsb2dpY2FsTGVm
dCA9IG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQg
eyB9KSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgYXV0byBpbml0aWFsTG9naWNh
bFdpZHRoID0gbG9naWNhbFdpZHRoKCkgLSBydW4ubG9naWNhbExlZnQoKTsKLSAgICAgICAgICAg
IEFTU0VSVChpbml0aWFsTG9naWNhbFdpZHRoID49IDApOwotICAgICAgICAgICAgYXV0byBpbmxp
bmVCb3ggPSBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lTGV2ZWxCb3gsIGxvZ2ljYWxMZWZ0
LCBpbml0aWFsTG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgIG1faW5saW5lQm94UmVjdE1hcC5z
ZXQoJmlubGluZUxldmVsQm94LCBpbmxpbmVCb3guZ2V0KCkpOwotICAgICAgICAgICAgbV9pbmxp
bmVCb3hMaXN0LmFwcGVuZChXVEZNb3ZlKGlubGluZUJveCkpOwotICAgICAgICB9IGVsc2UgaWYg
KHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Ci0gICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGxvZ2lj
YWwgd2lkdGggd2hlbiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lciBjbG9zZXMgb24gdGhpcyBs
aW5lLgotICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gKm1faW5saW5lQm94UmVjdE1hcC5n
ZXQoJmlubGluZUxldmVsQm94KTsKLSAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsV2lk
dGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAg
ICAgICAgYXV0byYgcGFyZW50Qm94ID0gaW5saW5lTGV2ZWxCb3gucGFyZW50KCk7Ci0gICAgICAg
ICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSAmcGFyZW50Qm94ID09ICZyb290KCkgPyBtX3Jv
b3RJbmxpbmVCb3ggOiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmcGFyZW50Qm94KTsKLSAgICAg
ICAgICAgIGlmIChwYXJlbnRJbmxpbmVCb3guaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5saW5lIGJveCBoZWlnaHQgd2hlbiBnbHlwaHMg
ZnJvbSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJldGNoIHRoZSBib3guCi0gICAgICAgICAgICAg
ICAgcGFyZW50SW5saW5lQm94LnNldElzTm9uRW1wdHkoKTsKLSAgICAgICAgICAgICAgICBhZGp1
c3RWZXJ0aWNhbEdlb21ldHJ5Rm9yTm9uRW1wdHlJbmxpbmVCb3gocGFyZW50SW5saW5lQm94KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMaW5lQm94Ojpjb21w
dXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KCkKLXsKLSAgICAvLyBCeSB0cmF2ZXJzaW5nIHRo
ZSBpbmxpbmUgYm94IGxpc3QgYmFja3dhcmRzLCBpdCdzIGd1YXJhbnRlZWQgdGhhdCBkZXNjZW5k
YW50IGlubGluZSBib3hlcyBhcmUgc2l6ZWQgZmlyc3QuCi0gICAgZm9yIChhdXRvJiBpbmxpbmVC
b3ggOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1faW5saW5lQm94TGlzdCkpIHsKLSAgICAgICAg
aWYgKGlubGluZUJveC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lQm94LT5sYXlvdXRCb3goKTsKLSAgICAgICAgc3dp
dGNoIChsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgot
ICAgICAgICAgICAgLy8gdG9wIGFuZCBib3R0b20gYWxpZ25tZW50cyBvbmx5IHN0cmV0Y2ggdGhl
IGxpbmUgYm94LiBUaGV5IGRvbid0IHN0cmV0Y2ggYW55IG9mIHRoZSBpbmxpbmUgYm94ZXMsIG5v
dCBldmVuIHRoZSByb290IGlubGluZSBib3guCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOiB7Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSBpbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAg
ICAgICAgICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFz
ZWxpbmUoKSAtIHBhcmVudElubGluZUJveC5mb250TWV0cmljcygpLmFzY2VudCgpOwotICAgICAg
ICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXgocGFyZW50SW5s
aW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgcGFyZW50VGV4dExvZ2ljYWxUb3AgKyBpbmxpbmVCb3gt
PmxvZ2ljYWxIZWlnaHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgYXV0byYgcGFy
ZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7
Ci0gICAgICAgICAgICBhdXRvIGJhc2VsaW5lT3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxp
bmVCb3gtPmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAg
ICAgICBpZiAoYmFzZWxpbmVPdmVyZmxvdykgewotICAgICAgICAgICAgICAgIHBhcmVudElubGlu
ZUJveC5zZXRCYXNlbGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIGJhc2VsaW5lT3Zl
cmZsb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBiYXNlbGluZU92ZXJmbG93KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50TGluZUJveEJlbG93QmFzZWxpbmUg
PSBwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCk7Ci0gICAgICAgICAgICBhdXRvIGlubGluZUJveEJlbG93QmFzZWxpbmUgPSBpbmxpbmVC
b3gtPmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUJveC0+YmFzZWxpbmUoKTsKLSAgICAgICAgICAg
IGF1dG8gYmVsb3dCYXNlbGluZU92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lQm94QmVs
b3dCYXNlbGluZSAtIHBhcmVudExpbmVCb3hCZWxvd0Jhc2VsaW5lKTsKLSAgICAgICAgICAgIGlm
IChiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94
LnNldExvZ2ljYWxIZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIGJlbG93
QmFzZWxpbmVPdmVyZmxvdyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAgICAgICAgIGF1dG8mIHBh
cmVudElubGluZUJveCA9IGlubGluZUJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkp
OwotICAgICAgICAgICAgYXV0byBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSA9IHBhcmVudElubGlu
ZUJveC5iYXNlbGluZSgpICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKElubGlu
ZUxheW91dFVuaXQgeyB9KTsKLSAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBzdGQ6Om1heCgw
LjBmLCBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSAtIHBhcmVudFRleHRMb2dpY2FsQm90dG9t
KTsKLSAgICAgICAgICAgIGlmIChvdmVyZmxvdykgewotICAgICAgICAgICAgICAgIC8vIFRleHRC
b3R0b20gcHVzaGVzIHRoZSBiYXNlbGluZSBkb3dud2FyZCB0aGUgc2FtZSB3YXkgJ2JvdHRvbScg
ZG9lcy4KLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChw
YXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAg
ICAgIHBhcmVudElubGluZUJveC5zZXRCYXNlbGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUo
KSArIG92ZXJmbG93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICBh
dXRvJiBwYXJlbnRMYXlvdXRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICBh
dXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBpbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFyZW50TGF5b3V0
Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpIC0gKGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJv
eC5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOwotICAgICAgICAgICAgaWYgKGxvZ2ljYWxU
b3AgPCAwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IC1sb2dpY2FsVG9wOwot
ICAgICAgICAgICAgICAgIC8vIENoaWxkIGlubGluZSBib3ggd2l0aCBtaWRkbGUgYWxpZ25tZW50
IHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93biB3aGVuIG92ZXJmbG93cy4gCi0gICAgICAgICAgICAg
ICAgcGFyZW50SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
ICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBvdmVyZmxvdyk7Ci0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IHsgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxUb3AgKyBpbmxpbmVCb3gtPmxvZ2ljYWxIZWln
aHQoKTsKLSAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6
bWF4KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCksIGxvZ2ljYWxCb3R0b20pKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2Fs
bHlBbmRDb21wdXRlTGluZUJveEhlaWdodCgpCi17Ci0gICAgLy8gSW5saW5lIGJveGVzIGFyZSBp
biB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGxpbmUgYm94IChhbmQgbm90IGluIHRoZSBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGVpciBwYXJlbnRzKS4KLSAgICAvLyBTdGFydGluZyB3aXRo
IHRoZSByb290IGlubGluZSBib3gsIHBvc2l0aW9uIHRoZSBhbmNlc3RvcnMgZmlyc3Qgc28gdGhh
dCB0aGUgZGVzY2VuZGFudCBsaW5lIGJveGVzIHNlZSBhYnNvbHV0ZSB2ZXJ0aWNhbCBwb3NpdGlv
bnMuCi0gICAgYXV0byBjb250ZW50TG9naWNhbEhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9
OwotICAgIGF1dG8gYWxpZ25Sb290SW5saW5lQm94ID0gWyZdIHsKLSAgICAgICAgY29udGVudExv
Z2ljYWxIZWlnaHQgPSBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpOwotICAgICAgICBm
b3IgKGF1dG8mIGlubGluZUJveCA6IG1faW5saW5lQm94TGlzdCkgewotICAgICAgICAgICAgYXV0
byB2ZXJ0aWNhbEFsaWduID0gaW5saW5lQm94LT5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2Fs
QWxpZ24oKTsKLSAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246
OkJvdHRvbSkgewotICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBhbGlnbiBhbHdheXMgcHVzaGVz
IHRoZSByb290IGlubGluZSBib3ggZG93bndhcmRzLgotICAgICAgICAgICAgICAgIGF1dG8gb3Zl
cmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxpbmVCb3gtPmxvZ2ljYWxCb3R0b20oKSAtIG1fcm9v
dElubGluZUJveC5sb2dpY2FsQm90dG9tKCkpOwotICAgICAgICAgICAgICAgIG1fcm9vdElubGlu
ZUJveC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBvdmVyZmxv
dyk7Ci0gICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gVmVydGljYWxBbGlnbjo6VG9w
KQotICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgoY29udGVu
dExvZ2ljYWxIZWlnaHQsIGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgfQot
ICAgIH07Ci0gICAgYWxpZ25Sb290SW5saW5lQm94KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGlubGlu
ZUJveCA6IG1faW5saW5lQm94TGlzdCkgewotICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxU
b3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5s
aW5lQm94LT5sYXlvdXRCb3goKTsKLSAgICAgICAgc3dpdGNoIChsYXlvdXRCb3guc3R5bGUoKS52
ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTog
ewotICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGlu
ZSgpIC0gaW5saW5lQm94LT5iYXNlbGluZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOiB7Ci0gICAgICAgICAgICBh
dXRvJiBwYXJlbnRMYXlvdXRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICBh
dXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBpbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFyZW50TGF5b3V0
Qm94KTsKLSAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
bG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxpbmVC
b3guZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbTogewotICAgICAgICAgICAg
YXV0byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwotICAgICAgICAgICAg
YXV0byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudExheW91
dEJveCk7Ci0gICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsQm90dG9tID0gcGFyZW50
SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsgcGFy
ZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpOwotICAgICAgICAgICAgaW5saW5l
Qm94TG9naWNhbFRvcCA9IHBhcmVudFRleHRMb2dpY2FsQm90dG9tIC0gaW5saW5lQm94LT5sb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBJ
bmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBj
b250ZW50TG9naWNhbEhlaWdodCAtIGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAg
ICAgICAgICBhdXRvJiBwYXJlbnRMYXlvdXRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0gICAg
ICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBpbmxpbmVCb3hGb3JMYXlvdXRCb3gocGFy
ZW50TGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBwYXJlbnRJ
bmxpbmVCb3gubG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSAoaW5s
aW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNz
KCkueEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlubGluZUJveC0+c2V0TG9naWNh
bFRvcChpbmxpbmVCb3hMb2dpY2FsVG9wKTsKLSAgICB9Ci0gICAgaWYgKCFtX2lzTGluZVZpc3Vh
bGx5RW1wdHkpCi0gICAgICAgIG1fbG9naWNhbFNpemUuc2V0SGVpZ2h0KGNvbnRlbnRMb2dpY2Fs
SGVpZ2h0KTsKLX0KLQotY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIExpbmVCb3g6OmZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDsKLX0KLQotY29uc3QgQm94JiBMaW5lQm94Ojpyb290KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7Ci19Ci0KLUxheW91dFN0YXRlJiBMaW5l
Qm94OjpsYXlvdXRTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkubGF5b3V0U3RhdGUoKTsKLX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKaW5kZXggNjY4MGU4ZWRj
ZjFjM2MyZjZiNTUzM2M1NmE0OTJiZjYyNjY5NmZiNS4uNTFmOTlmOWJlMmI4Yjc2NDcwMWU0NDVl
OWRiMjQ4NTM1NDRiYTEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ7CitjbGFzcyBMaW5lQm94QnVpbGRlcjsKIAogLy8gTGluZUJveCBjb250YWlucyBh
bGwgdGhlIGlubGluZSBib3hlcyBib3RoIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseS4gSXQg
b25seSBoYXMgd2lkdGggYW5kIGhlaWdodCBnZW9tZXRyeS4KIC8vCkBAIC01OSw3ICs2MCw3IEBA
IHB1YmxpYzoKICAgICBzdHJ1Y3QgSW5saW5lQm94IHsKICAgICAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTkxJTkUoSW5saW5lQm94KTsKICAgICBwdWJsaWM6Ci0gICAgICAgIElubGluZUJv
eChjb25zdCBCb3gmLCBjb25zdCBJbmxpbmVSZWN0JiwgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGlu
ZSwgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50KTsKKyAgICAgICAgSW5saW5lQm94KGNvbnN0IEJv
eCYsIGNvbnN0IElubGluZVJlY3QmLCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKTsKICAgICAg
ICAgSW5saW5lQm94KGNvbnN0IEJveCYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElu
bGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKICAgICAgICAgSW5saW5lQm94KCkgPSBkZWZh
dWx0OwogCkBAIC04MSw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgQm94JiBsYXlv
dXRCb3goKSBjb25zdCB7IHJldHVybiAqbV9sYXlvdXRCb3g7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94OworICAgICAgICBmcmllbmQgY2xhc3MgTGluZUJv
eEJ1aWxkZXI7CiAKICAgICAgICAgdm9pZCBzZXRMb2dpY2FsVG9wKElubGluZUxheW91dFVuaXQg
bG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsgfQogICAgICAg
ICB2b2lkIHNldExvZ2ljYWxXaWR0aChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkgeyBt
X2xvZ2ljYWxSZWN0LnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7IH0KQEAgLTk4LDkgKzk5LDggQEAg
cHVibGljOgogICAgICAgICBib29sIG1faXNFbXB0eSB7IHRydWUgfTsKICAgICB9OwogCi0gICAg
ZW51bSBjbGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CiAgICAg
ZW51bSBjbGFzcyBJc0xpbmVWaXN1YWxseUVtcHR5IHsgTm8sIFllcyB9OwotICAgIExpbmVCb3go
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dp
Y2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGlu
ZTo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7CisgICAgTGluZUJveChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgSXNMaW5l
VmlzdWFsbHlFbXB0eSk7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemUud2lkdGgoKTsgfQogICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7
IH0KQEAgLTExNSwyOSArMTE1LDMyIEBAIHB1YmxpYzoKICAgICB1c2luZyBJbmxpbmVCb3hNYXAg
PSBIYXNoTWFwPGNvbnN0IEJveCosIElubGluZUJveCo+OwogICAgIGF1dG8gaW5saW5lQm94TGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94UmVjdE1hcC52YWx1ZXMoKTsgfQogCi0gICAg
SW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsgfQor
ICAgIElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKSArIG1fcm9vdElubGluZUJveC0+YmFzZWxpbmUo
KTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGlu
ZTo6UnVuTGlzdCYpOwotICAgIHZvaWQgY29tcHV0ZUlubGluZUJveGVzTG9naWNhbEhlaWdodCgp
OwotICAgIHZvaWQgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhl
aWdodCgpOworICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94QnVpbGRlcjsKIAotICAgIElubGluZUJv
eCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSB7IHJldHVybiAq
bV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsgfQorICAgIHZvaWQgc2V0TG9naWNh
bEhlaWdodChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9sb2dpY2FsU2l6ZS5z
ZXRIZWlnaHQobG9naWNhbEhlaWdodCk7IH0KKyAgICB2b2lkIHNldEhvcml6b250YWxBbGlnbm1l
bnRPZmZzZXQoSW5saW5lTGF5b3V0VW5pdCBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KSB7IG1f
aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQ7IH0K
KworICAgIHZvaWQgYWRkUm9vdElubGluZUJveChzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lQm94PiYm
KTsKKyAgICB2b2lkIGFkZElubGluZUJveChzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lQm94PiYmKTsK
KworICAgIElubGluZUJveCYgcm9vdElubGluZUJveCgpIHsgcmV0dXJuICptX3Jvb3RJbmxpbmVC
b3g7IH0KKyAgICB1c2luZyBJbmxpbmVCb3hMaXN0ID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJ
bmxpbmVCb3g+PjsKKyAgICBjb25zdCBJbmxpbmVCb3hMaXN0JiBub25Sb290SW5saW5lQm94ZXMo
KSBjb25zdCB7IHJldHVybiBtX25vblJvb3RJbmxpbmVCb3hMaXN0OyB9CiAKLSAgICBjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKLSAgICBj
b25zdCBCb3gmIHJvb3QoKSBjb25zdDsKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBj
b25zdDsKKyAgICBJbmxpbmVCb3gmIGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxh
eW91dEJveCkgeyByZXR1cm4gKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0K
IAogcHJpdmF0ZToKICAgICBJbmxpbmVMYXlvdXRTaXplIG1fbG9naWNhbFNpemU7CisgICAgT3B0
aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0OwogICAg
IGJvb2wgbV9pc0xpbmVWaXN1YWxseUVtcHR5IHsgdHJ1ZSB9OwogCi0gICAgSW5saW5lQm94IG1f
cm9vdElubGluZUJveDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lQm94PiBtX3Jvb3RJbmxp
bmVCb3g7CisgICAgSW5saW5lQm94TGlzdCBtX25vblJvb3RJbmxpbmVCb3hMaXN0OwogCi0gICAg
T3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0Owog
ICAgIElubGluZUJveE1hcCBtX2lubGluZUJveFJlY3RNYXA7Ci0gICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxJbmxpbmVCb3g+PiBtX2lubGluZUJveExpc3Q7Ci0gICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5jcHAKaW5kZXggNDY4NmE0ZWM1YzY2Yjc1ZDZhNGMxMWQzN2NmMmJlMzdh
ZTExOWU4ZC4uY2ZmNWZmMGIzN2UyMmZiMjg1YTA4NWVkYzNkYzVmMDMwOWMxMGFjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMzAxLDEzICszMDEsMTMgQEAgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0
ZW1SYW5nZSYKIAogICAgIGF1dG8gbGluZUxvZ2ljYWxUb3BMZWZ0ID0gSW5saW5lTGF5b3V0UG9p
bnQgeyB1c2VkQ29uc3RyYWludHMubG9naWNhbExlZnQsIGluaXRpYWxDb25zdHJhaW50cy52ZXJ0
aWNhbC5sb2dpY2FsVG9wIH07CiAgICAgYXV0byBpc0xhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50KGNvbW1pdHRlZFJhbmdlLCBuZWVkc0xheW91dFJhbmdlLmVuZCwgY29tbWl0
dGVkQ29udGVudC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50Lmhhc1ZhbHVlKCkpOwotICAgIGF1dG8g
bGluZUlzVmlzdWFsbHlFbXB0eSA9IG1fbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6
OklzTGluZVZpc3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6
Ok5vOwogICAgIHJldHVybiBMaW5lQ29udGVudCB7IGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRy
YWlsaW5nQ29udGVudCwgY29tbWl0dGVkUmFuZ2UsIG1fZmxvYXRzLCBtX2NvbnRlbnRJc0NvbnN0
cmFpbmVkQnlGbG9hdAogICAgICAgICAsIGxpbmVMb2dpY2FsVG9wTGVmdAogICAgICAgICAsIG1f
bGluZS5ob3Jpem9udGFsQ29uc3RyYWludCgpCi0gICAgICAgICwgTGluZUJveCB7IGZvcm1hdHRp
bmdDb250ZXh0KCksIG1fbGluZS5ob3Jpem9udGFsQ29uc3RyYWludCgpLCBtX2xpbmUuY29udGVu
dExvZ2ljYWxXaWR0aCgpLCBtX2xpbmUucnVucygpLCBsaW5lSXNWaXN1YWxseUVtcHR5Ci0gICAg
ICAgICwgaXNMYXN0TGluZSA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6
WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObyB9Ci0gICAgICAg
ICwgbV9saW5lLnJ1bnMoKSB9OworICAgICAgICAsIG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRo
KCkKKyAgICAgICAgLCBtX2xpbmUuaXNWaXN1YWxseUVtcHR5KCkKKyAgICAgICAgLCBpc0xhc3RM
aW5lCisgICAgICAgICwgbV9saW5lLnJ1bnMoKX07CiB9CiAKIExpbmVCdWlsZGVyOjpJbnRyaW5z
aWNDb250ZW50IExpbmVCdWlsZGVyOjpjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IElubGlu
ZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVX
aWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDcxZDZlZDY4ZjIzYTA4ZjYyNGQwMmUzZWI3
ZTMzZjgyNjViOGE3ZWUuLjU2ZDBmMDUzZTU5YmVjMDhiNmQwNjNkNDkzYTg0YzM4Yzc2MTRmNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiSW5saW5lTGluZS5oIgotI2luY2x1
ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw3ICs2Miw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBoYXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07CiAgICAgICAgIElubGluZUxheW91dFBvaW50
IGxvZ2ljYWxUb3BMZWZ0OwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lk
dGg7Ci0gICAgICAgIGNvbnN0IExpbmVCb3ggbGluZUJveDsKKyAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBsaW5lQ29udGVudExvZ2ljYWxXaWR0aDsKKyAgICAgICAgYm9vbCBpc0xpbmVWaXN1YWxs
eUVtcHR5IHsgdHJ1ZSB9OworICAgICAgICBib29sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCB7IHRydWUgfTsKICAgICAgICAgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVuczsKICAgICB9Owog
ICAgIExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhbmdl
JiwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgY29uc3Qg
Rm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExp
bmVDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409123</attachid>
            <date>2020-09-18 03:25:32 -0700</date>
            <delta_ts>2020-09-18 04:16:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216678-20200918032531.patch</filename>
            <type>text/plain</type>
            <size>55721</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E3M2Y2MzcxZjkzNmFh
NjI2NWJlYzgxZmFiMjEyNmY2YzZhMTQ1OC4uZWE5MzQ5ZGEwZmY5MWVjZjlmMDY5OWZhM2UwOTIw
MmZlYTVjMDEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA5LTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBib3ggY29uc3RydWN0aW5nIGFuZCBhbGlnbm1lbnQgbG9naWMgdG8gTGluZUJveEJ1aWxk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjY3
OAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBNb3ZlIHRo
ZSBMaW5lQm94IHJlbGF0ZWQgbG9naWMgb3V0IG9mIHRoZSBMaW5lQm94IGNsYXNzIHRvIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TGluZUJveEJ1aWxkZXIuCisgICAgICAgIFRo
aXMgbWFrZXMgdGhlIExpbmVCb3ggY2xhc3MgYSBsaWdodCwgYm94IGxpa2UgY2xhc3MgdGhhdCB3
ZSBjYW4gY2FjaGUgaW4gdGhlIElubGluZUZvcm1hdHRpbmdTdGF0ZS4KKworICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkTGlu
ZUxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KToKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6Zm9y
bWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
QnVpbGRlcjo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hC
dWlsZGVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okhh
bmdpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okhh
bmdpbmdDb250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9uYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Y29sbGVjdEhhbmdpbmdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aG9yaXpv
bnRhbEFsaWdubWVudE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hC
dWlsZGVyOjpMaW5lQm94QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
b3hCdWlsZGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWls
ZGVyOjpjb25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3hCdWlsZGVyOjpjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNh
bGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudCk6
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHA6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6TGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6Om1faXNMaW5lVmlzdWFsbHlFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkZFJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94OjphZGRJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5n
aW5nQ29udGVudDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpIYW5naW5nQ29udGVudDo6aXNDb25kaXRpb25hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpzZXRJc0NvbmRpdGlvbmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OmV4cGFu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojpy
ZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNvbGxlY3RIYW5naW5n
Q29udGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6b250YWxB
bGlnbm1lbnRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjptX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6Y29uc3RydWN0SW5saW5lQm94ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQm94Ojpjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6YWxpZ25JbmxpbmVC
b3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6cm9vdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmxheW91dFN0YXRlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmFsaWdubWVudEJh
c2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0TG9n
aWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldEhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
Ojpyb290SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bm9u
Um9vdElubGluZUJveGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6aW5saW5lQm94Rm9yTGF5b3V0Qm94KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgorCiAyMDIwLTA5LTE3ICBBbnRvaW5lIFF1
aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFu
aW1hdGlvbiBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggNTJl
YTMxYzVjYzljOTVkZTA4YjM4ZmJhY2JhOTcxNTc4NTQzMTBkYS4uZjE5NmQyZTUwNTcwZWJhNDE1
NzAzNzI4MjY3YjdjMWQxZTJmNWY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcApAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKQogICAgIH0KIH0KIAotSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50
JiBsaW5lQ29udGVudCkgY29uc3QKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lUmVjdEFu
ZExpbmVCb3hPZmZzZXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkTGluZUxvZ2lj
YWxSZWN0KGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgbGluZSBoZWln
aHQgYW5kIHRoZSBsaW5lIGJveCB2ZXJ0aWNhbCBvZmZzZXQuCiAgICAgLy8gVGhlIGxpbmUgaGVp
Z2h0IGlzIGVpdGhlciB0aGUgbGluZS1oZWlnaHQgdmFsdWUgKG5lZ2F0aXZlIHZhbHVlIG1lYW5z
IGxpbmUgaGVpZ2h0IGlzIG5vdCBzZXQpIG9yIHRoZSBmb250IG1ldHJpY3MncyBsaW5lIHNwYWNp
bmcvbGluZSBib3ggaGVpZ2h0LgpAQCAtNDA5LDcgKzQwOSw2IEBAIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1CiAgICAgLy8gfCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAg
ICAgfCAgIHwKICAgICAvLyB8X19fX19fX19fX19fX19fX19fX192X19fX19fX19fX19fX19fX19f
X19fX198ICBzY3JvbGxhYmxlIG92ZXJmbG93CiAgICAgLy8KLSAgICBhdXRvJiBsaW5lQm94ID0g
bGluZUNvbnRlbnQubGluZUJveDsKICAgICBpZiAobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkg
fHwgbGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IHsgfSwg
eyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVmdCwgbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0
aCwgeyB9IH0gfTsKIApAQCAtNDQzLDggKzQ0Miw4IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
CiBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JM
aW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKICAg
ICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBh
dXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJveDsKLSAgICBhdXRvIGxpbmVSZWN0QW5k
TGluZUJveE9mZnNldCA9IGNvbXB1dGVkTGluZUxvZ2ljYWxSZWN0KGxpbmVDb250ZW50KTsKKyAg
ICBjb25zdCBhdXRvIGxpbmVCb3ggPSBnZW9tZXRyeSgpLmxpbmVCb3hGb3JMaW5lQ29udGVudChs
aW5lQ29udGVudCk7CisgICAgYXV0byBsaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgPSBjb21wdXRl
ZExpbmVMb2dpY2FsUmVjdChsaW5lQm94LCBsaW5lQ29udGVudCk7CiAgICAgYXV0byBsaW5lTG9n
aWNhbFJlY3QgPSBsaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQubG9naWNhbFJlY3Q7CiAgICAgYXV0
byBsaW5lQm94VmVydGljYWxPZmZzZXQgPSBsaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQubGluZUJv
eFZlcnRpY2FsT2Zmc2V0OwogICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93ID0gSW5saW5lUmVj
dCB7IGxpbmVMb2dpY2FsUmVjdC50b3BMZWZ0KCksIHN0ZDo6bWF4KGxpbmVMb2dpY2FsUmVjdC53
aWR0aCgpLCBsaW5lQm94LmxvZ2ljYWxXaWR0aCgpKSwgc3RkOjptYXgobGluZUxvZ2ljYWxSZWN0
LmhlaWdodCgpLCBsaW5lQm94VmVydGljYWxPZmZzZXQgKyBsaW5lQm94LmxvZ2ljYWxIZWlnaHQo
KSkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGE3NzRlZmY2N2UzNzQ1
ZDYwZDk2Mzc1YTdmZDAxMzU3NGQyN2M2ZGUuLjcwYWIyZGU5OTM2MTk3NzEzZDc5ODgwNWY2MmRh
ODFjYjFmOTAzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNjQsNiAr
NjQsNyBAQCBwcml2YXRlOgogCiAgICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5IHsKICAgICBwdWJsaWM6CisgICAgICAgIExpbmVCb3ggbGluZUJv
eEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOwogICAgICAg
ICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRlVmVydGlj
YWxWYWx1ZXMmKSBjb25zdDsKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZUJs
b2NrV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRz
JiwgY29uc3QgT3ZlcnJpZGVIb3Jpem9udGFsVmFsdWVzJik7CiAKQEAgLTkxLDcgKzkyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94VmVydGljYWxPZmZzZXQ7
CiAgICAgICAgIElubGluZVJlY3QgbG9naWNhbFJlY3Q7CiAgICAgfTsKLSAgICBMaW5lUmVjdEFu
ZExpbmVCb3hPZmZzZXQgY29tcHV0ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50JikgY29uc3Q7CisgICAgTGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IGNvbXB1
dGVkTGluZUxvZ2ljYWxSZWN0KGNvbnN0IExpbmVCb3gmLCBjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUNvbnRlbnQmKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29u
c3QgSW52YWxpZGF0aW9uU3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0
ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0
dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDcwN2I2
ZTAyNTNjMzMyNjI2NTM4OWNkMmM0NmVjZDIyNTA5Mjk3MzIuLjAyODliZTNiY2RmYWU4OGZmNTVl
YmY5Zjk4YTA5NDMxZWYyZjM1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKICNpbmNsdWRl
ICJMYXlvdXRDb250YWluZXJCb3guaCIKICNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgpA
QCAtMzcsNiArMzgsMzc1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAorY2xhc3MgTGluZUJveEJ1aWxkZXIgeworcHVibGljOgorICAgIExpbmVCb3hCdWlsZGVy
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7CisgICAgTGluZUJveCBidWlsZChjb25z
dCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbnN0
cnVjdElubGluZUJveGVzKExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7CisgICAgdm9p
ZCBjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KExpbmVCb3gmKTsKKyAgICB2b2lkIGFs
aWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoTGluZUJveCYp
OworCisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsgfQorICAgIGNvbnN0
IEJveCYgcm9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgp
OyB9CisgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0
dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Cit9OworCitz
dHJ1Y3QgSGFuZ2luZ1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQgeworcHVibGljOgorICAgIHZv
aWQgcmVzZXQoKTsKKworICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CisgICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbmRpdGlvbmFsOyB9CisKKyAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25k
aXRpb25hbCA9IHRydWU7IH0KKyAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRo
KSB7IG1fd2lkdGggKz0gd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNDb25kaXRp
b25hbCB7IGZhbHNlIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OworfTsK
Kwordm9pZCBIYW5naW5nVHJhaWxpbmdXaGl0ZXNwYWNlQ29udGVudDo6cmVzZXQoKQoreworICAg
IG1faXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAgMDsKK30KKworc3RhdGlj
IEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50IGNvbGxlY3RIYW5naW5nVHJhaWxpbmdX
aGl0ZXNwYWNlQ29udGVudChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBib29sIGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCkKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2lu
Z1RyYWlsaW5nV2hpdGVzcGFjZUNvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpCisgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykpIHsKKyAg
ICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7
CisgICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1do
aXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBo
YXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHls
ZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkg
aGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBh
bmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gaGFu
Z2luZ0NvbnRlbnQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBob3Jp
em9udGFsQWxpZ25tZW50T2Zmc2V0KGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIFRleHRBbGln
bk1vZGUgdGV4dEFsaWduLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGlu
ZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgYm9vbCBpc0xhc3RMaW5lKQoreworICAg
IGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxX
aWR0aDsKKyAgICBhdXRvIGhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50ID0gY29sbGVj
dEhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50KHJ1bnMsIGlzTGFzdExpbmUpOworICAg
IGF2YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdUcmFpbGluZ1doaXRlc3BhY2VDb250ZW50LndpZHRo
KCk7CisgICAgaWYgKGF2YWlsYWJsZVdpZHRoIDw9IDApCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CisgICAgICAgIGlm
ICh0ZXh0QWxpZ24gIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVy
biB0ZXh0QWxpZ247CisgICAgICAgIC8vIFRleHQgaXMganVzdGlmaWVkIGFjY29yZGluZyB0byB0
aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUgdGV4dC1qdXN0aWZ5IHByb3BlcnR5LAorICAgICAg
ICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3RoZXJ3
aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCisgICAgICAgIC8vIHRoZSBsYXN0IGxp
bmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0
LWFsaWduZWQuCisgICAgICAgIGlmIChydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFz
dExpbmUpCisgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CisgICAgICAg
IHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OworICAgIH07CisKKyAgICBzd2l0Y2ggKGNv
bXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCgpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpM
ZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICByZXR1cm4geyB9OworICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoOwor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
V2ViS2l0Q2VudGVyOgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGggLyAyOworICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgLy8gVGV4dEFsaWduTW9kZTo6SnVz
dGlmeSBpcyBhIHJ1biBhbGlnbm1lbnQgKGFuZCB3ZSBvbmx5IGRvIGlubGluZSBib3ggYWxpZ25t
ZW50IGhlcmUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworTGluZUJveEJ1
aWxkZXI6OkxpbmVCb3hCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQpCit7Cit9CisKK0xpbmVCb3ggTGluZUJveEJ1aWxkZXI6OmJ1
aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQpCit7CisgICAg
YXV0byYgcnVucyA9IGxpbmVDb250ZW50LnJ1bnM7CisgICAgYXV0byBsaW5lTG9naWNhbFdpZHRo
ID0gbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGNvbnRlbnRMb2dpY2Fs
V2lkdGggPSBsaW5lQ29udGVudC5saW5lQ29udGVudExvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGlz
TGluZVZpc3VhbGx5RW1wdHkgPSBsaW5lQ29udGVudC5pc0xpbmVWaXN1YWxseUVtcHR5ID8gTGlu
ZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlF
bXB0eTo6Tm87CisgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7IGNvbnRlbnRMb2dpY2FsV2lk
dGgsIGlzTGluZVZpc3VhbGx5RW1wdHkgfTsKKworICAgIGlmIChhdXRvIGhvcml6b250YWxBbGln
bm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9v
dEJveCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dp
Y2FsV2lkdGgsIGxpbmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkpCisgICAg
ICAgIGxpbmVCb3guc2V0SG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgqaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldCk7CisgICAgY29uc3RydWN0SW5saW5lQm94ZXMobGluZUJveCwgcnVucyk7Cisg
ICAgY29tcHV0ZUlubGluZUJveGVzTG9naWNhbEhlaWdodChsaW5lQm94KTsKKyAgICBhbGlnbklu
bGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KGxpbmVCb3gpOworICAg
IHJldHVybiBsaW5lQm94OworfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RJbmxp
bmVCb3hlcyhMaW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zKQorewor
ICAgIGF1dG8gYWRqdXN0VmVydGljYWxHZW9tZXRyeUZvck5vbkVtcHR5SW5saW5lQm94ID0gW10o
YXV0byYgaW5saW5lQm94KSB7CisgICAgICAgIC8vIElubGluZSBib3ggdmVydGljYWwgZ2VvbWV0
cnkgaXMgZHJpdmVuIGJ5IGVpdGhlciBjaGlsZCBpbmxpbmUgYm94ZXMgKHNlZSBjb21wdXRlSW5s
aW5lQm94ZXNMb2dpY2FsSGVpZ2h0KQorICAgICAgICAvLyBvciB0aGUgdGV4dCBydW5zJyBmb250
IG1ldHJpY3MgKHRleHQgcnVucyBkb24ndCBnZW5lcmF0ZSBpbmxpbmUgYm94ZXMpLgorICAgICAg
ICBBU1NFUlQoIWlubGluZUJveC5pc0VtcHR5KCkpOworICAgICAgICBhdXRvJiBmb250TWV0cmlj
cyA9IGlubGluZUJveC5mb250TWV0cmljcygpOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQgPSBmb250TWV0cmljcy5oZWlnaHQoKTsKKyAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBiYXNlbGluZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworCisgICAgICAgIGlubGluZUJv
eC5zZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOworICAgICAgICBpbmxpbmVCb3guc2V0
QmFzZWxpbmUoYmFzZWxpbmUpOworICAgICAgICBpbmxpbmVCb3guc2V0RGVzY2VudChsb2dpY2Fs
SGVpZ2h0IC0gYmFzZWxpbmUpOworICAgICAgICBpZiAoYXV0byBsaW5lU3BhY2luZyA9IGZvbnRN
ZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0KQorICAgICAgICAgICAgaW5saW5l
Qm94LnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKKyAgICB9OworCisgICAgYXV0byBjb25z
dHJ1Y3RSb290SW5saW5lQm94ID0gWyZdIHsKKyAgICAgICAgYXV0byByb290SW5saW5lQm94ID0g
bWFrZVVuaXF1ZTxMaW5lQm94OjpJbmxpbmVCb3g+KHJvb3RCb3goKSwgbGluZUJveC5ob3Jpem9u
dGFsQWxpZ25tZW50T2Zmc2V0KCkudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGxpbmVC
b3gubG9naWNhbFdpZHRoKCkpOworCisgICAgICAgIGF1dG8gbGluZUhhc0ltYWdpbmFyeVN0cnV0
ID0gIWxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCk7CisgICAgICAgIGF1dG8gaXNJbml0aWFs
bHlDb25zaWRlcmVkTm9uRW1wdHkgPSAhbGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkgJiYg
bGluZUhhc0ltYWdpbmFyeVN0cnV0OworICAgICAgICBpZiAoaXNJbml0aWFsbHlDb25zaWRlcmVk
Tm9uRW1wdHkpIHsKKyAgICAgICAgICAgIHJvb3RJbmxpbmVCb3gtPnNldElzTm9uRW1wdHkoKTsK
KyAgICAgICAgICAgIGFkanVzdFZlcnRpY2FsR2VvbWV0cnlGb3JOb25FbXB0eUlubGluZUJveCgq
cm9vdElubGluZUJveCk7CisgICAgICAgIH0KKyAgICAgICAgbGluZUJveC5hZGRSb290SW5saW5l
Qm94KFdURk1vdmUocm9vdElubGluZUJveCkpOworICAgIH07CisgICAgY29uc3RydWN0Um9vdElu
bGluZUJveCgpOworICAgIGlmICghcnVucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQW4gaW5s
aW5lIGJveCBtYXkgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IG9uIHRoZSBjdXJyZW50IGxpbmU6Cisg
ICAgICAgIC8vIDxzcGFuIGlkPW91dGVyPmxpbmUgYnJlYWs8YnI+dGhpcyBjb250ZW50J3MgcGFy
ZW50IGlubGluZSBib3goJ291dGVyJykgPHNwYW4gaWQ9aW5uZXI+c3RhcnRzIG9uIHRoZSBwcmV2
aW91cyBsaW5lPC9zcGFuPjwvc3Bhbj4KKyAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB0aGVyZSdzIGFuIExpbmVCb3g6OklubGluZUJveCBmb3IgZXZlcnkgaW5saW5lIGJveCB0
aGF0J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAvLyBJbiBuZXN0aW5n
IGNhc2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJveDo6SW5saW5lQm94ZXMgZm9yIHRoZSBpbmxp
bmUgYm94IGFuY2VzdG9ycy4KKyAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRo
ZSBmaXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0
IHRoZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCisgICAgICAgIC8vIG5lc3RlZCB3aXRo
IGEgW2NvbnRhaW5lciBzdGFydF0gcnVuLgorICAgICAgICBhdXRvJiBmaXJzdFJ1biA9IHJ1bnNb
MF07CisgICAgICAgIGF1dG8mIGZpcnN0UnVuUGFyZW50SW5saW5lQm94ID0gZmlyc3RSdW4ubGF5
b3V0Qm94KCkucGFyZW50KCk7CisgICAgICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgdGhlIGZvcm1h
dHRpbmcgcm9vdCwgd2UgY2FuIHN0b3AgaGVyZS4gVGhpcyBpcyByb290IGlubGluZSBib3ggY29u
dGVudCwgdGhlcmUncyBubyBuZXN0aW5nIGlubGluZSBib3ggZnJvbSB0aGUgcHJldmlvdXMgbGlu
ZShzKQorICAgICAgICAvLyB1bmxlc3MgdGhlIGlubGluZSBib3ggY2xvc2luZyAoY29udGFpbmVy
IGVuZCBydW4pIGlzIGZvcmNlZCBvdmVyIHRvIHRoZSBjdXJyZW50IGxpbmUuCisgICAgICAgIC8v
IGUuZy4KKyAgICAgICAgLy8gPHNwYW4+bm9ybWFsbHkgdGhlIGlubGluZSBib3ggY2xvc2luZyBm
b3JtcyBhIGNvbnRpbnVvdXMgY29udGVudDwvc3Bhbj4KKyAgICAgICAgLy8gPHNwYW4+dW5sZXNz
IGl0J3MgZm9yY2VkIHRvIHRoZSBuZXh0IGxpbmU8YnI+PC9zcGFuPgorICAgICAgICBpZiAoZmly
c3RSdW4uaXNDb250YWluZXJFbmQoKSB8fCAmZmlyc3RSdW5QYXJlbnRJbmxpbmVCb3ggIT0gJnJv
b3RCb3goKSkgeworICAgICAgICAgICAgYXV0byogYW5jZXN0b3IgPSAmZmlyc3RSdW5QYXJlbnRJ
bmxpbmVCb3g7CisgICAgICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gYW5jZXN0b3JzV2l0aG91
dElubGluZUJveGVzOworICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yICE9ICZyb290Qm94KCkp
IHsKKyAgICAgICAgICAgICAgICBhbmNlc3RvcnNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKGFu
Y2VzdG9yKTsKKyAgICAgICAgICAgICAgICBhbmNlc3RvciA9ICZhbmNlc3Rvci0+cGFyZW50KCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIG1pc3NpbmcgTGlu
ZUJveDo6SW5saW5lQm94ZXMgc3RhcnRpbmcgd2l0aCB0aGUgdG9wbW9zdCBhbmNlc3Rvci4KKyAg
ICAgICAgICAgIGZvciAoYXV0byogYW5jZXN0b3IgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGFu
Y2VzdG9yc1dpdGhvdXRJbmxpbmVCb3hlcykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGlu
ZUJveCA9IG1ha2VVbmlxdWU8TGluZUJveDo6SW5saW5lQm94PigqYW5jZXN0b3IsIGxpbmVCb3gu
aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0p
LCBsaW5lQm94LmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVCb3gtPnNl
dElzTm9uRW1wdHkoKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RWZXJ0aWNhbEdlb21ldHJ5Rm9y
Tm9uRW1wdHlJbmxpbmVCb3goKmlubGluZUJveCk7CisgICAgICAgICAgICAgICAgbGluZUJveC5h
ZGRJbmxpbmVCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBp
bmxpbmVMZXZlbEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgp
KSB7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0gbGluZUJveC5ob3Jpem9udGFsQWxp
Z25tZW50T2Zmc2V0KCkudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSkgKyBydW4ubG9naWNh
bExlZnQoKTsKKyAgICAgICAgICAgIGF1dG8mIGlubGluZUxldmVsQm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGlubGluZUxldmVsQm94KTsKKyAgICAgICAg
ICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQm94
SGVpZ2h0KCk7CisgICAgICAgICAgICBhdXRvIGJhc2VsaW5lID0gbG9naWNhbEhlaWdodDsKKyAg
ICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgaW5saW5l
TGV2ZWxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2
ZSB0byBpdHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1h
cmdpbiBib3guCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8
LSBtYXJnaW4gYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAorICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJveAorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCAg
X19fX19fX19fICA8LSBjb250ZW50IGJveAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwg
fCB8ICAgXgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfCAgPC0gYmFzZWxp
bmUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8CisgICAgICAg
ICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKKyAgICAgICAgICAgICAgICAvLyAg
ICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0
YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94Pihpbmxp
bmVMZXZlbEJveCkpOworICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lID0gZm9ybWF0dGlu
Z1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVzLmxhc3QoKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS50b3AoKSArIGxhc3RMaW5l
LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSArIGlubGluZUxldmVsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxp
bmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byByZWN0ID0g
SW5saW5lUmVjdCB7IHsgfSwgbG9naWNhbExlZnQsIHJ1bi5sb2dpY2FsV2lkdGgoKSwgbG9naWNh
bEhlaWdodCB9OworICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVCb3gobWFrZVVuaXF1ZTxM
aW5lQm94OjpJbmxpbmVCb3g+KGlubGluZUxldmVsQm94LCByZWN0LCBiYXNlbGluZSkpOworICAg
ICAgICB9IGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgIGF1
dG8gbG9naWNhbExlZnQgPSBsaW5lQm94Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKS52YWx1
ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSArIHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAg
ICAgYXV0byBpbml0aWFsTG9naWNhbFdpZHRoID0gbGluZUJveC5sb2dpY2FsV2lkdGgoKSAtIHJ1
bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMb2dpY2FsV2lkdGgg
Pj0gMCk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUJveChtYWtlVW5pcXVlPExpbmVC
b3g6OklubGluZUJveD4oaW5saW5lTGV2ZWxCb3gsIGxvZ2ljYWxMZWZ0LCBpbml0aWFsTG9naWNh
bFdpZHRoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAg
ICAgICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgbGV2
ZWwgY29udGFpbmVyIGNsb3NlcyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChpbmxpbmVMZXZlbEJveCk7Cisg
ICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9naWNhbFdpZHRoKHJ1bi5sb2dpY2FsUmlnaHQoKSAt
IGlubGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChydW4uaXNUZXh0
KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudEJveCA9
IGlubGluZUxldmVsQm94LnBhcmVudCgpOworICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5l
Qm94ID0gJnBhcmVudEJveCA9PSAmcm9vdEJveCgpID8gbGluZUJveC5yb290SW5saW5lQm94KCkg
OiBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChwYXJlbnRCb3gpOworICAgICAgICAgICAg
aWYgKHBhcmVudElubGluZUJveC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhlaWdodCB3aGVuIGdseXBocyBmcm9tIHRo
ZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJveC4KKyAgICAgICAgICAgICAgICBwYXJl
bnRJbmxpbmVCb3guc2V0SXNOb25FbXB0eSgpOworICAgICAgICAgICAgICAgIGFkanVzdFZlcnRp
Y2FsR2VvbWV0cnlGb3JOb25FbXB0eUlubGluZUJveChwYXJlbnRJbmxpbmVCb3gpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExpbmVCb3hCdWlsZGVyOjpjb21w
dXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KExpbmVCb3gmIGxpbmVCb3gpCit7CisgICAgLy8g
QnkgdHJhdmVyc2luZyB0aGUgaW5saW5lIGJveCBsaXN0IGJhY2t3YXJkcywgaXQncyBndWFyYW50
ZWVkIHRoYXQgZGVzY2VuZGFudCBpbmxpbmUgYm94ZXMgYXJlIHNpemVkIGZpcnN0LgorICAgIGZv
ciAoYXV0byYgaW5saW5lQm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsaW5lQm94Lm5vblJv
b3RJbmxpbmVCb3hlcygpKSkgeworICAgICAgICBpZiAoaW5saW5lQm94LT5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVC
b3gtPmxheW91dEJveCgpOworICAgICAgICBzd2l0Y2ggKGxheW91dEJveC5zdHlsZSgpLnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICAvLyB0b3AgYW5kIGJvdHRv
bSBhbGlnbm1lbnRzIG9ubHkgc3RyZXRjaCB0aGUgbGluZSBib3guIFRoZXkgZG9uJ3Qgc3RyZXRj
aCBhbnkgb2YgdGhlIGlubGluZSBib3hlcywgbm90IGV2ZW4gdGhlIHJvb3QgaW5saW5lIGJveC4K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6
IHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94
Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7CisgICAgICAgICAgICBhdXRvIHBhcmVu
dFRleHRMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxp
bmVCb3guZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICAgICAgICAgIHBhcmVudElubGluZUJv
eC5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0
KCksIHBhcmVudFRleHRMb2dpY2FsVG9wICsgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVC
b3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7CisgICAgICAgICAg
ICBhdXRvIGJhc2VsaW5lT3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxpbmVCb3gtPmJhc2Vs
aW5lKCkgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgICAgICBpZiAoYmFz
ZWxpbmVPdmVyZmxvdykgeworICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRCYXNl
bGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIGJhc2VsaW5lT3ZlcmZsb3cpOworICAg
ICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHBhcmVudElubGlu
ZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBiYXNlbGluZU92ZXJmbG93KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gcGFyZW50TGluZUJveEJlbG93QmFzZWxpbmUgPSBwYXJlbnRJbmxp
bmVCb3gubG9naWNhbEhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCk7CisgICAg
ICAgICAgICBhdXRvIGlubGluZUJveEJlbG93QmFzZWxpbmUgPSBpbmxpbmVCb3gtPmxvZ2ljYWxI
ZWlnaHQoKSAtIGlubGluZUJveC0+YmFzZWxpbmUoKTsKKyAgICAgICAgICAgIGF1dG8gYmVsb3dC
YXNlbGluZU92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lQm94QmVsb3dCYXNlbGluZSAt
IHBhcmVudExpbmVCb3hCZWxvd0Jhc2VsaW5lKTsKKyAgICAgICAgICAgIGlmIChiZWxvd0Jhc2Vs
aW5lT3ZlcmZsb3cpCisgICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIGJlbG93QmFzZWxpbmVPdmVy
Zmxvdyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OlRleHRCb3R0b206IHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJv
eCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Cisg
ICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94
LmJhc2VsaW5lKCkgKyBwYXJlbnRJbmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoSW5saW5lTGF5
b3V0VW5pdCB7IH0pOworICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYs
IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpIC0gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20pOwor
ICAgICAgICAgICAgaWYgKG92ZXJmbG93KSB7CisgICAgICAgICAgICAgICAgLy8gVGV4dEJvdHRv
bSBwdXNoZXMgdGhlIGJhc2VsaW5lIGRvd253YXJkIHRoZSBzYW1lIHdheSAnYm90dG9tJyBkb2Vz
LgorICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHBhcmVu
dElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBvdmVyZmxvdyk7CisgICAgICAgICAgICAgICAg
cGFyZW50SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsg
b3ZlcmZsb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKKyAgICAgICAgICAgIGF1dG8m
IHBhcmVudExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQoKTsKKyAgICAgICAgICAgIGF1dG8m
IHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudExh
eW91dEJveCk7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
YmFzZWxpbmUoKSAtIChpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxp
bmVCb3guZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgIGlmIChsb2dp
Y2FsVG9wIDwgMCkgeworICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSAtbG9naWNhbFRv
cDsKKyAgICAgICAgICAgICAgICAvLyBDaGlsZCBpbmxpbmUgYm94IHdpdGggbWlkZGxlIGFsaWdu
bWVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGRvd24gd2hlbiBvdmVyZmxvd3MuCisgICAgICAgICAg
ICAgICAgcGFyZW50SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGlu
ZSgpICsgb3ZlcmZsb3cpOworICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBvdmVyZmxvdyk7Cisg
ICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHsgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGF1dG8gbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxUb3AgKyBpbmxpbmVCb3gtPmxvZ2ljYWxI
ZWlnaHQoKTsKKyAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHN0
ZDo6bWF4KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCksIGxvZ2ljYWxCb3R0b20pKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OmFsaWduSW5saW5lQm94
ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoTGluZUJveCYgbGluZUJveCkKK3sK
KyAgICAvLyBJbmxpbmUgYm94ZXMgYXJlIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUg
bGluZSBib3ggKGFuZCBub3QgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZWlyIHBhcmVu
dHMpLgorICAgIC8vIFN0YXJ0aW5nIHdpdGggdGhlIHJvb3QgaW5saW5lIGJveCwgcG9zaXRpb24g
dGhlIGFuY2VzdG9ycyBmaXJzdCBzbyB0aGF0IHRoZSBkZXNjZW5kYW50IGxpbmUgYm94ZXMgc2Vl
IGFic29sdXRlIHZlcnRpY2FsIHBvc2l0aW9ucy4KKyAgICBhdXRvJiByb290SW5saW5lQm94ID0g
bGluZUJveC5yb290SW5saW5lQm94KCk7CisgICAgYXV0byBjb250ZW50TG9naWNhbEhlaWdodCA9
IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1dG8gYWxpZ25Sb290SW5saW5lQm94ID0gWyZd
IHsKKyAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgPSByb290SW5saW5lQm94LmxvZ2ljYWxI
ZWlnaHQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVCb3ggOiBsaW5lQm94Lm5vblJvb3RJ
bmxpbmVCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBpbmxpbmVC
b3gtPmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxBbGlnbigpOworICAgICAgICAgICAgaWYg
KHZlcnRpY2FsQWxpZ24gPT0gVmVydGljYWxBbGlnbjo6Qm90dG9tKSB7CisgICAgICAgICAgICAg
ICAgLy8gYm90dG9tIGFsaWduIGFsd2F5cyBwdXNoZXMgdGhlIHJvb3QgaW5saW5lIGJveCBkb3du
d2FyZHMuCisgICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlu
bGluZUJveC0+bG9naWNhbEJvdHRvbSgpIC0gcm9vdElubGluZUJveC5sb2dpY2FsQm90dG9tKCkp
OworICAgICAgICAgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5l
Qm94LmxvZ2ljYWxUb3AoKSArIG92ZXJmbG93KTsKKyAgICAgICAgICAgICAgICBjb250ZW50TG9n
aWNhbEhlaWdodCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxB
bGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpUb3ApCisgICAgICAgICAgICAgICAgY29udGVudExvZ2lj
YWxIZWlnaHQgPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5saW5lQm94LT5sb2dp
Y2FsSGVpZ2h0KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICBhbGlnblJvb3RJbmxpbmVCb3go
KTsKKworICAgIGZvciAoYXV0byYgaW5saW5lQm94IDogbGluZUJveC5ub25Sb290SW5saW5lQm94
ZXMoKSkgeworICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRV
bml0IHsgfTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lQm94LT5sYXlvdXRCb3go
KTsKKyAgICAgICAgc3dpdGNoIChsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpIHsK
KyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgYXV0
byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94LnBhcmVudCgpKTsKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBwYXJlbnRJ
bmxpbmVCb3gubG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxp
bmVCb3gtPmJhc2VsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6IHsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVu
dExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQoKTsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVu
dElubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudExheW91dEJv
eCk7CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94Lmxv
Z2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKKyAgICAgICAgICAgIGF1
dG8mIHBhcmVudExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQoKTsKKyAgICAgICAgICAgIGF1
dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVu
dExheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsQm90dG9tID0g
cGFyZW50SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgp
ICsgcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpOworICAgICAgICAgICAg
aW5saW5lQm94TG9naWNhbFRvcCA9IHBhcmVudFRleHRMb2dpY2FsQm90dG9tIC0gaW5saW5lQm94
LT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxU
b3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxU
b3AgPSBjb250ZW50TG9naWNhbEhlaWdodCAtIGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7
CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRMYXlvdXRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7
CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUJveEZv
ckxheW91dEJveChwYXJlbnRMYXlvdXRCb3gpOworICAgICAgICAgICAgaW5saW5lQm94TG9naWNh
bFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFz
ZWxpbmUoKSAtIChpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVC
b3guZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW5saW5l
Qm94LT5zZXRMb2dpY2FsVG9wKGlubGluZUJveExvZ2ljYWxUb3ApOworICAgIH0KKyAgICBpZiAo
IWxpbmVCb3guaXNMaW5lVmlzdWFsbHlFbXB0eSgpKQorICAgICAgICBsaW5lQm94LnNldExvZ2lj
YWxIZWlnaHQoY29udGVudExvZ2ljYWxIZWlnaHQpOworfQorCitMaW5lQm94IElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQpCit7CisgICAgcmV0dXJuIExpbmVCb3hC
dWlsZGVyKGZvcm1hdHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsKK30KKwogQ29u
dGVudFdpZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5s
aW5lQmxvY2tXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0
IE92ZXJyaWRlSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGVIb3Jpem9udGFsVmFsdWVzKQogewog
ICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNJbkZsb3coKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCmlu
ZGV4IDVjMTI4NzE0MWRhNTFjN2M0NjQzYjRjZWZlYmU4NmE1MDE0ZmVhNGUuLjZlMmNkNjE2YTc3
MmQ1NmJlY2U5OGZjOWFiMTI5MGNkOWY4MGU3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIklu
bGluZVNvZnRMaW5lQnJlYWtJdGVtLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIK
ICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdz
LmgiCiAjaW5jbHVkZSAiVGV4dFV0aWwuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKaW5kZXggMzFiMmY5Mzdj
OWViOGY0YWZkODRhYWRhNzk5YWVjYzhjOTEzNWIxMi4uNDhhMzc4YzBjNTJlM2IyN2MyMGUzMGVk
YTU3MmE2YmExNWQzMGYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTI2LDEwNiArMjYsMTggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCiAKLSNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgotCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQg
ewogCi1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgewotcHVibGljOgotICAgIHZvaWQgcmVzZXQoKTsK
LQotICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFs
OyB9Ci0KLSAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRy
dWU7IH0KLSAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGgg
Kz0gd2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNl
IH07Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OwotfTsKLQotdm9pZCBIYW5n
aW5nQ29udGVudDo6cmVzZXQoKQotewotICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOwotICAg
IG1fd2lkdGggPSAgMDsKLX0KLQotc3RhdGljIEhhbmdpbmdDb250ZW50IGNvbGxlY3RIYW5naW5n
Q29udGVudChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1dG8g
aGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVudCB7IH07Ci0gICAgaWYgKGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCA9PSBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6
OlllcykKLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZv
ciAoYXV0byYgcnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShydW5zKSkgewotICAgICAgICBp
ZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAg
ICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFj
ZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBw
cmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hp
dGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5n
IHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4u
dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29u
dGVudDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxB
bGlnbm1lbnRPZmZzZXQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0
ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZUxvZ2lj
YWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBoYW5naW5nQ29udGVudCA9
IGNvbGxlY3RIYW5naW5nQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsKLSAgICBhdmFpbGFibGVX
aWR0aCArPSBoYW5naW5nQ29udGVudC53aWR0aCgpOwotICAgIGlmIChhdmFpbGFibGVXaWR0aCA8
PSAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxB
bGlnbm1lbnQgPSBbJl0gewotICAgICAgICBpZiAodGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6
Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwotICAgICAgICAvLyBUZXh0
IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRl
eHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxs
IHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1s
YXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0
aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAocnVucy5s
YXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09IExpbmVCb3g6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6
OlN0YXJ0OwotICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICB9Owot
Ci0gICAgc3dpdGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSkgewotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2Vi
S2l0UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBh
dmFpbGFibGVXaWR0aDsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdp
ZHRoIC8gMjsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgIC8vIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBp
bmxpbmUgYm94IGFsaWdubWVudCBoZXJlKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07
Ci19Ci0KLUxpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQpCitMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSW5saW5lUmVjdCYgcmVjdCwgSW5saW5lTGF5b3V0VW5p
dCBiYXNlbGluZSkKICAgICA6IG1fbGF5b3V0Qm94KG1ha2VXZWFrUHRyKGxheW91dEJveCkpCiAg
ICAgLCBtX2xvZ2ljYWxSZWN0KHJlY3QpCiAgICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lKQotICAg
ICwgbV9kZXNjZW50KGRlc2NlbnQpCiAgICAgLCBtX2lzRW1wdHkoZmFsc2UpCiB7CisgICAgQVNT
RVJUKHJlY3QuaGVpZ2h0KCkpOwogfQogCiBMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChj
b25zdCBCb3gmIGxheW91dEJveCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCkBAIC0xMzQsMTUgKzQ2LDIyIEBAIExpbmVCb3g6Oklu
bGluZUJveDo6SW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0CiB7CiB9CiAKLUxpbmVCb3g6OkxpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBJbmxpbmVMYXlvdXRVbml0IGxp
bmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgY29u
c3QgTGluZTo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxs
eUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KQorTGluZUJveDo6TGluZUJveChJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
V2lkdGgsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSkKICAgICA6IG1f
bG9naWNhbFNpemUoY29udGVudExvZ2ljYWxXaWR0aCwgeyB9KQogICAgICwgbV9pc0xpbmVWaXN1
YWxseUVtcHR5KGlzTGluZVZpc3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVz
KQotICAgICwgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCkKIHsKLSAgICBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250
YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVM
b2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7Ci0gICAgY29uc3RydWN0SW5saW5lQm94ZXMocnVucyk7Ci0gICAgY29tcHV0ZUlubGlu
ZUJveGVzTG9naWNhbEhlaWdodCgpOwotICAgIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5k
Q29tcHV0ZUxpbmVCb3hIZWlnaHQoKTsKK30KKwordm9pZCBMaW5lQm94OjphZGRSb290SW5saW5l
Qm94KHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVCb3g+JiYgcm9vdElubGluZUJveCkKK3sKKyAgICBz
dGQ6OmV4Y2hhbmdlKG1fcm9vdElubGluZUJveCwgV1RGTW92ZShyb290SW5saW5lQm94KSk7Cisg
ICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbV9yb290SW5saW5lQm94LT5sYXlvdXRCb3goKSwg
bV9yb290SW5saW5lQm94LmdldCgpKTsKK30KKwordm9pZCBMaW5lQm94OjphZGRJbmxpbmVCb3go
c3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4mJiBpbmxpbmVCb3gpCit7CisgICAgbV9pbmxpbmVC
b3hSZWN0TWFwLnNldCgmaW5saW5lQm94LT5sYXlvdXRCb3goKSwgaW5saW5lQm94LmdldCgpKTsK
KyAgICBtX25vblJvb3RJbmxpbmVCb3hMaXN0LmFwcGVuZChXVEZNb3ZlKGlubGluZUJveCkpOwog
fQogCiBJbmxpbmVSZWN0IExpbmVCb3g6OmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5l
OjpSdW4mIHJ1bikgY29uc3QKQEAgLTE1NSwyNjQgKzc0LDYgQEAgSW5saW5lUmVjdCBMaW5lQm94
Ojpsb2dpY2FsUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVuJiBydW4pIGNvbnN0CiAgICAg
cmV0dXJuIHsgcnVubG9naWNhbFRvcCwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVl
T3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2Fs
V2lkdGgoKSwgbG9naWNhbEhlaWdodCB9OwogfQogCi12b2lkIExpbmVCb3g6OmNvbnN0cnVjdElu
bGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCi17Ci0gICAgYXV0byBhZGp1c3RW
ZXJ0aWNhbEdlb21ldHJ5Rm9yTm9uRW1wdHlJbmxpbmVCb3ggPSBbXShhdXRvJiBpbmxpbmVCb3gp
IHsKLSAgICAgICAgLy8gSW5saW5lIGJveCB2ZXJ0aWNhbCBnZW9tZXRyeSBpcyBkcml2ZW4gYnkg
ZWl0aGVyIGNoaWxkIGlubGluZSBib3hlcyAoc2VlIGNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxI
ZWlnaHQpCi0gICAgICAgIC8vIG9yIHRoZSB0ZXh0IHJ1bnMnIGZvbnQgbWV0cmljcyAodGV4dCBy
dW5zIGRvbid0IGdlbmVyYXRlIGlubGluZSBib3hlcykuIAotICAgICAgICBBU1NFUlQoIWlubGlu
ZUJveC5pc0VtcHR5KCkpOwotICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGlubGluZUJveC5m
b250TWV0cmljcygpOwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBm
b250TWV0cmljcy5oZWlnaHQoKTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSA9
IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotCi0gICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsSGVp
Z2h0KGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICBpbmxpbmVCb3guc2V0QmFzZWxpbmUoYmFzZWxp
bmUpOwotICAgICAgICBpbmxpbmVCb3guc2V0RGVzY2VudChsb2dpY2FsSGVpZ2h0IC0gYmFzZWxp
bmUpOwotICAgICAgICBpZiAoYXV0byBsaW5lU3BhY2luZyA9IGZvbnRNZXRyaWNzLmxpbmVTcGFj
aW5nKCkgLSBsb2dpY2FsSGVpZ2h0KQotICAgICAgICAgICAgaW5saW5lQm94LnNldExpbmVTcGFj
aW5nKGxpbmVTcGFjaW5nKTsKLSAgICB9OwotCi0gICAgYXV0byBjb25zdHJ1Y3RSb290SW5saW5l
Qm94ID0gWyZdIHsKLSAgICAgICAgbV9yb290SW5saW5lQm94ID0gSW5saW5lQm94IHsgcm9vdCgp
LCBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsg
fSksIGxvZ2ljYWxXaWR0aCgpIH07Ci0gICAgICAgIG1faW5saW5lQm94UmVjdE1hcC5zZXQoJnJv
b3QoKSwgJm1fcm9vdElubGluZUJveCk7Ci0KLSAgICAgICAgYXV0byBsaW5lSGFzSW1hZ2luYXJ5
U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKTsKLSAgICAgICAgYXV0byBpc0lu
aXRpYWxseUNvbnNpZGVyZWROb25FbXB0eSA9ICFtX2lzTGluZVZpc3VhbGx5RW1wdHkgJiYgbGlu
ZUhhc0ltYWdpbmFyeVN0cnV0OwotICAgICAgICBpZiAoaXNJbml0aWFsbHlDb25zaWRlcmVkTm9u
RW1wdHkpIHsKLSAgICAgICAgICAgIG1fcm9vdElubGluZUJveC5zZXRJc05vbkVtcHR5KCk7Ci0g
ICAgICAgICAgICBhZGp1c3RWZXJ0aWNhbEdlb21ldHJ5Rm9yTm9uRW1wdHlJbmxpbmVCb3gobV9y
b290SW5saW5lQm94KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgY29uc3RydWN0Um9vdElubGlu
ZUJveCgpOwotICAgIGlmICghcnVucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQW4gaW5saW5l
IGJveCBtYXkgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IG9uIHRoZSBjdXJyZW50IGxpbmU6Ci0gICAg
ICAgIC8vIDxzcGFuIGlkPW91dGVyPmxpbmUgYnJlYWs8YnI+dGhpcyBjb250ZW50J3MgcGFyZW50
IGlubGluZSBib3goJ291dGVyJykgPHNwYW4gaWQ9aW5uZXI+c3RhcnRzIG9uIHRoZSBwcmV2aW91
cyBsaW5lPC9zcGFuPjwvc3Bhbj4KLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB0aGVyZSdzIGFuIExpbmVCb3g6OklubGluZUJveCBmb3IgZXZlcnkgaW5saW5lIGJveCB0aGF0
J3MgcHJlc2VudCBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAvLyBJbiBuZXN0aW5nIGNh
c2Ugd2UgbmVlZCB0byBjcmVhdGUgTGluZUJveDo6SW5saW5lQm94ZXMgZm9yIHRoZSBpbmxpbmUg
Ym94IGFuY2VzdG9ycy4gCi0gICAgICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBkbyBpdCBvbiB0aGUg
Zmlyc3QgcnVuIGFzIGFueSBzdWJzZXF1ZW50IGlubGluZSBjb250ZW50IGlzIGVpdGhlciBhdCB0
aGUgc2FtZS9oaWdoZXIgbmVzdGluZyBsZXZlbCBvcgotICAgICAgICAvLyBuZXN0ZWQgd2l0aCBh
IFtjb250YWluZXIgc3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5zWzBd
OwotICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudElubGluZUJveCA9IGZpcnN0UnVuLmxheW91
dEJveCgpLnBhcmVudCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSByb290KCks
IHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNvbnRlbnQsIHRoZXJl
J3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxpbmUocykKLSAgICAg
ICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgKGNvbnRhaW5lciBlbmQgcnVuKSBp
cyBmb3JjZWQgb3ZlciB0byB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAvLyBlLmcuCi0gICAg
ICAgIC8vIDxzcGFuPm5vcm1hbGx5IHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgZm9ybXMgYSBjb250
aW51b3VzIGNvbnRlbnQ8L3NwYW4+Ci0gICAgICAgIC8vIDxzcGFuPnVubGVzcyBpdCdzIGZvcmNl
ZCB0byB0aGUgbmV4dCBsaW5lPGJyPjwvc3Bhbj4KLSAgICAgICAgaWYgKGZpcnN0UnVuLmlzQ29u
dGFpbmVyRW5kKCkgfHwgJmZpcnN0UnVuUGFyZW50SW5saW5lQm94ICE9ICZyb290KCkpIHsKLSAg
ICAgICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFyZW50SW5saW5lQm94OwotICAg
ICAgICAgICAgVmVjdG9yPGNvbnN0IEJveCo+IGFuY2VzdG9yc1dpdGhvdXRJbmxpbmVCb3hlczsK
LSAgICAgICAgICAgIHdoaWxlIChhbmNlc3RvciAhPSAmcm9vdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgYW5jZXN0b3JzV2l0aG91dElubGluZUJveGVzLmFwcGVuZChhbmNlc3Rvcik7Ci0gICAgICAg
ICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBtaXNzaW5nIExpbmVCb3g6OklubGluZUJveGVz
IHN0YXJ0aW5nIHdpdGggdGhlIHRvcG1vc3QgYW5jZXN0b3IuCi0gICAgICAgICAgICBmb3IgKGF1
dG8qIGFuY2VzdG9yIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShhbmNlc3RvcnNXaXRob3V0SW5s
aW5lQm94ZXMpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBtYWtlVW5pcXVl
PElubGluZUJveD4oKmFuY2VzdG9yLCBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVP
cihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGxvZ2ljYWxXaWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICBpbmxpbmVCb3gtPnNldElzTm9uRW1wdHkoKTsKLSAgICAgICAgICAgICAgICBhZGp1c3RWZXJ0
aWNhbEdlb21ldHJ5Rm9yTm9uRW1wdHlJbmxpbmVCb3goKmlubGluZUJveCk7Ci0gICAgICAgICAg
ICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldChhbmNlc3RvciwgaW5saW5lQm94LmdldCgpKTsK
LSAgICAgICAgICAgICAgICBtX2lubGluZUJveExpc3QuYXBwZW5kKFdURk1vdmUoaW5saW5lQm94
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJ1
biA6IHJ1bnMpIHsKLSAgICAgICAgYXV0byYgaW5saW5lTGV2ZWxCb3ggPSBydW4ubGF5b3V0Qm94
KCk7Ci0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byBsb2dpY2Fs
TGVmdCA9IG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVu
aXQgeyB9KSArIHJ1bi5sb2dpY2FsTGVmdCgpOwotICAgICAgICAgICAgYXV0byYgaW5saW5lTGV2
ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5l
TGV2ZWxCb3gpOwotICAgICAgICAgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gaW5saW5lTGV2ZWxC
b3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLSAgICAgICAgICAgIGF1dG8gYmFzZWxpbmUg
PSBsb2dpY2FsSGVpZ2h0OwotICAgICAgICAgICAgaWYgKGlubGluZUxldmVsQm94LmlzSW5saW5l
QmxvY2tCb3goKSAmJiBpbmxpbmVMZXZlbEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdD
b250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5saW5lLWJsb2NrJ3MgYmFzZWxp
bmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJveC4gTGV0J3MgY29udmVydCBp
dCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KLSAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICB8Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAgX19fX19fX19fX19fICA8LSBi
b3JkZXIgYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8Ci0gICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRlbnQgYm94Ci0gICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAg
fCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKLSAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICB8IHwgfCAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgdGV4dCB8IHwgfCAgIHYgdGV4dAot
ICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0tLS0tLSA8LSBiYXNlbGluZQot
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2Fz
dDxDb250YWluZXJCb3g+KGlubGluZUxldmVsQm94KSk7Ci0gICAgICAgICAgICAgICAgYXV0byYg
bGFzdExpbmUgPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZXMu
bGFzdCgpOwotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxhc3RM
aW5lLnRvcCgpICsgbGFzdExpbmUuYmFzZWxpbmUoKTsKLSAgICAgICAgICAgICAgICBiYXNlbGlu
ZSA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJv
eEdlb21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBhdXRvIHJlY3QgPSBJbmxpbmVSZWN0IHsgeyB9LCBsb2dpY2FsTGVmdCwgcnVuLmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0IH07Ci0gICAgICAgICAgICBhdXRvIGlubGluZUJv
eCA9IG1ha2VVbmlxdWU8SW5saW5lQm94PihpbmxpbmVMZXZlbEJveCwgcmVjdCwgYmFzZWxpbmUs
IElubGluZUxheW91dFVuaXQgeyB9KTsKLSAgICAgICAgICAgIG1faW5saW5lQm94UmVjdE1hcC5z
ZXQoJmlubGluZUxldmVsQm94LCBpbmxpbmVCb3guZ2V0KCkpOwotICAgICAgICAgICAgbV9pbmxp
bmVCb3hMaXN0LmFwcGVuZChXVEZNb3ZlKGlubGluZUJveCkpOwotICAgICAgICB9IGVsc2UgaWYg
KHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbG9naWNhbExlZnQg
PSBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsg
fSkgKyBydW4ubG9naWNhbExlZnQoKTsKLSAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxX
aWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaW5pdGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKLSAgICAgICAgICAgIGF1dG8gaW5saW5l
Qm94ID0gbWFrZVVuaXF1ZTxJbmxpbmVCb3g+KGlubGluZUxldmVsQm94LCBsb2dpY2FsTGVmdCwg
aW5pdGlhbExvZ2ljYWxXaWR0aCk7Ci0gICAgICAgICAgICBtX2lubGluZUJveFJlY3RNYXAuc2V0
KCZpbmxpbmVMZXZlbEJveCwgaW5saW5lQm94LmdldCgpKTsKLSAgICAgICAgICAgIG1faW5saW5l
Qm94TGlzdC5hcHBlbmQoV1RGTW92ZShpbmxpbmVCb3gpKTsKLSAgICAgICAgfSBlbHNlIGlmIChy
dW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2Fs
IHdpZHRoIHdoZW4gdGhlIGlubGluZSBsZXZlbCBjb250YWluZXIgY2xvc2VzIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIGF1dG8mIGlubGluZUJveCA9ICptX2lubGluZUJveFJlY3RNYXAuZ2V0
KCZpbmxpbmVMZXZlbEJveCk7Ci0gICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9naWNhbFdpZHRo
KHJ1bi5sb2dpY2FsUmlnaHQoKSAtIGlubGluZUJveC5sb2dpY2FsTGVmdCgpKTsKLSAgICAgICAg
fSBlbHNlIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8mIHBhcmVudEJveCA9IGlubGluZUxldmVsQm94LnBhcmVudCgpOwotICAgICAgICAg
ICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gJnBhcmVudEJveCA9PSAmcm9vdCgpID8gbV9yb290
SW5saW5lQm94IDogKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJnBhcmVudEJveCk7Ci0gICAgICAg
ICAgICBpZiAocGFyZW50SW5saW5lQm94LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBBZGp1c3Qgbm9uLWVtcHR5IGlubGluZSBib3ggaGVpZ2h0IHdoZW4gZ2x5cGhzIGZy
b20gdGhlIG5vbi1wcmltYXJ5IGZvbnQgc3RyZXRjaCB0aGUgYm94LgotICAgICAgICAgICAgICAg
IHBhcmVudElubGluZUJveC5zZXRJc05vbkVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgYWRqdXN0
VmVydGljYWxHZW9tZXRyeUZvck5vbkVtcHR5SW5saW5lQm94KHBhcmVudElubGluZUJveCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTGluZUJveDo6Y29tcHV0
ZUlubGluZUJveGVzTG9naWNhbEhlaWdodCgpCi17Ci0gICAgLy8gQnkgdHJhdmVyc2luZyB0aGUg
aW5saW5lIGJveCBsaXN0IGJhY2t3YXJkcywgaXQncyBndWFyYW50ZWVkIHRoYXQgZGVzY2VuZGFu
dCBpbmxpbmUgYm94ZXMgYXJlIHNpemVkIGZpcnN0LgotICAgIGZvciAoYXV0byYgaW5saW5lQm94
IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX2lubGluZUJveExpc3QpKSB7Ci0gICAgICAgIGlm
IChpbmxpbmVCb3gtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGF1dG8mIGxheW91dEJveCA9IGlubGluZUJveC0+bGF5b3V0Qm94KCk7Ci0gICAgICAgIHN3aXRj
aCAobGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VG9wOgotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAg
ICAgICAgICAgIC8vIHRvcCBhbmQgYm90dG9tIGFsaWdubWVudHMgb25seSBzdHJldGNoIHRoZSBs
aW5lIGJveC4gVGhleSBkb24ndCBzdHJldGNoIGFueSBvZiB0aGUgaW5saW5lIGJveGVzLCBub3Qg
ZXZlbiB0aGUgcm9vdCBpbmxpbmUgYm94LgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewotICAgICAgICAgICAgYXV0byYgcGFyZW50SW5s
aW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAg
ICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2Vs
aW5lKCkgLSBwYXJlbnRJbmxpbmVCb3guZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICAgICAg
ICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KHBhcmVudElubGlu
ZUJveC5sb2dpY2FsSGVpZ2h0KCksIHBhcmVudFRleHRMb2dpY2FsVG9wICsgaW5saW5lQm94LT5s
b2dpY2FsSGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKLSAgICAgICAgICAgIGF1dG8mIHBhcmVu
dElubGluZUJveCA9IGlubGluZUJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwot
ICAgICAgICAgICAgYXV0byBiYXNlbGluZU92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5l
Qm94LT5iYXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAgICAg
ICAgaWYgKGJhc2VsaW5lT3ZlcmZsb3cpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVC
b3guc2V0QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgKyBiYXNlbGluZU92ZXJm
bG93KTsKLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChw
YXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpICsgYmFzZWxpbmVPdmVyZmxvdyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIHBhcmVudExpbmVCb3hCZWxvd0Jhc2VsaW5lID0g
cGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIHBhcmVudElubGluZUJveC5iYXNlbGlu
ZSgpOwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hCZWxvd0Jhc2VsaW5lID0gaW5saW5lQm94
LT5sb2dpY2FsSGVpZ2h0KCkgLSBpbmxpbmVCb3gtPmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICBh
dXRvIGJlbG93QmFzZWxpbmVPdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlubGluZUJveEJlbG93
QmFzZWxpbmUgLSBwYXJlbnRMaW5lQm94QmVsb3dCYXNlbGluZSk7Ci0gICAgICAgICAgICBpZiAo
YmVsb3dCYXNlbGluZU92ZXJmbG93KQotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5z
ZXRMb2dpY2FsSGVpZ2h0KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBiZWxvd0Jh
c2VsaW5lT3ZlcmZsb3cpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7Ci0gICAgICAgICAgICBhdXRvJiBwYXJl
bnRJbmxpbmVCb3ggPSBpbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsK
LSAgICAgICAgICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVC
b3guYmFzZWxpbmUoKSArIHBhcmVudElubGluZUJveC5kZXNjZW50KCkudmFsdWVPcihJbmxpbmVM
YXlvdXRVbml0IHsgfSk7Ci0gICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4w
ZiwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkgLSBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSk7
Ci0gICAgICAgICAgICBpZiAob3ZlcmZsb3cpIHsKLSAgICAgICAgICAgICAgICAvLyBUZXh0Qm90
dG9tIHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93bndhcmQgdGhlIHNhbWUgd2F5ICdib3R0b20nIGRv
ZXMuCi0gICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQocGFy
ZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIG92ZXJmbG93KTsKLSAgICAgICAgICAgICAg
ICBwYXJlbnRJbmxpbmVCb3guc2V0QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkg
KyBvdmVyZmxvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAgICAgICAgYXV0
byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwotICAgICAgICAgICAgYXV0
byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudExheW91dEJv
eCk7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxp
bmUoKSAtIChpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3gu
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgICAgIGlmIChsb2dpY2FsVG9w
IDwgMCkgewotICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSAtbG9naWNhbFRvcDsKLSAg
ICAgICAgICAgICAgICAvLyBDaGlsZCBpbmxpbmUgYm94IHdpdGggbWlkZGxlIGFsaWdubWVudCBw
dXNoZXMgdGhlIGJhc2VsaW5lIGRvd24gd2hlbiBvdmVyZmxvd3MuIAotICAgICAgICAgICAgICAg
IHBhcmVudElubGluZUJveC5zZXRCYXNlbGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAr
IG92ZXJmbG93KTsKLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhl
aWdodChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpICsgb3ZlcmZsb3cpOwotICAgICAg
ICAgICAgICAgIGxvZ2ljYWxUb3AgPSB7IH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBh
dXRvIGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsVG9wICsgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0
KCk7Ci0gICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChzdGQ6Om1h
eChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBsb2dpY2FsQm90dG9tKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5
QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoKQotewotICAgIC8vIElubGluZSBib3hlcyBhcmUgaW4g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBsaW5lIGJveCAoYW5kIG5vdCBpbiB0aGUgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlaXIgcGFyZW50cykuCi0gICAgLy8gU3RhcnRpbmcgd2l0aCB0
aGUgcm9vdCBpbmxpbmUgYm94LCBwb3NpdGlvbiB0aGUgYW5jZXN0b3JzIGZpcnN0IHNvIHRoYXQg
dGhlIGRlc2NlbmRhbnQgbGluZSBib3hlcyBzZWUgYWJzb2x1dGUgdmVydGljYWwgcG9zaXRpb25z
LgotICAgIGF1dG8gY29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
LSAgICBhdXRvIGFsaWduUm9vdElubGluZUJveCA9IFsmXSB7Ci0gICAgICAgIGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0ID0gbV9yb290SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgZm9y
IChhdXRvJiBpbmxpbmVCb3ggOiBtX2lubGluZUJveExpc3QpIHsKLSAgICAgICAgICAgIGF1dG8g
dmVydGljYWxBbGlnbiA9IGlubGluZUJveC0+bGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFs
aWduKCk7Ci0gICAgICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpC
b3R0b20pIHsKLSAgICAgICAgICAgICAgICAvLyBib3R0b20gYWxpZ24gYWx3YXlzIHB1c2hlcyB0
aGUgcm9vdCBpbmxpbmUgYm94IGRvd253YXJkcy4KLSAgICAgICAgICAgICAgICBhdXRvIG92ZXJm
bG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkgLSBtX3Jvb3RJ
bmxpbmVCb3gubG9naWNhbEJvdHRvbSgpKTsKLSAgICAgICAgICAgICAgICBtX3Jvb3RJbmxpbmVC
b3guc2V0TG9naWNhbFRvcChtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgb3ZlcmZsb3cp
OwotICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OwotICAg
ICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246OlRvcCkK
LSAgICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGNvbnRlbnRM
b2dpY2FsSGVpZ2h0LCBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotICAgIGFsaWduUm9vdElubGluZUJveCgpOwotCi0gICAgZm9yIChhdXRvJiBpbmxpbmVC
b3ggOiBtX2lubGluZUJveExpc3QpIHsKLSAgICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsVG9w
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGlu
ZUJveC0+bGF5b3V0Qm94KCk7Ci0gICAgICAgIHN3aXRjaCAobGF5b3V0Qm94LnN0eWxlKCkudmVy
dGljYWxBbGlnbigpKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsK
LSAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGlubGluZUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9
IHBhcmVudElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUo
KSAtIGlubGluZUJveC0+YmFzZWxpbmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDogewotICAgICAgICAgICAgYXV0
byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwotICAgICAgICAgICAgYXV0
byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVudExheW91dEJv
eCk7Ci0gICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94Lmxv
Z2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAgICAgICAgIGF1
dG8mIHBhcmVudExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQoKTsKLSAgICAgICAgICAgIGF1
dG8mIHBhcmVudElubGluZUJveCA9IGlubGluZUJveEZvckxheW91dEJveChwYXJlbnRMYXlvdXRC
b3gpOwotICAgICAgICAgICAgYXV0byBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSA9IHBhcmVudElu
bGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIHBhcmVu
dElubGluZUJveC5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKLSAgICAgICAgICAgIGlubGluZUJv
eExvZ2ljYWxUb3AgPSBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSAtIGlubGluZUJveC0+bG9naWNh
bEhlaWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gSW5s
aW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gY29u
dGVudExvZ2ljYWxIZWlnaHQgLSBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAg
ICAgICAgYXV0byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwotICAgICAg
ICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lQm94Rm9yTGF5b3V0Qm94KHBhcmVu
dExheW91dEJveCk7Ci0gICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gcGFyZW50SW5s
aW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gKGlubGlu
ZUJveC0+bG9naWNhbEhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5mb250TWV0cmljcygp
LnhIZWlnaHQoKSAvIDIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpbmxpbmVCb3gtPnNldExvZ2ljYWxU
b3AoaW5saW5lQm94TG9naWNhbFRvcCk7Ci0gICAgfQotICAgIGlmICghbV9pc0xpbmVWaXN1YWxs
eUVtcHR5KQotICAgICAgICBtX2xvZ2ljYWxTaXplLnNldEhlaWdodChjb250ZW50TG9naWNhbEhl
aWdodCk7Ci19Ci0KLWNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBMaW5lQm94Ojpmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ7Ci19Ci0KLWNvbnN0IEJveCYgTGluZUJveDo6cm9vdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOwotfQotCi1MYXlvdXRTdGF0ZSYgTGluZUJv
eDo6bGF5b3V0U3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgp
LmxheW91dFN0YXRlKCk7Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCmluZGV4IDY2ODBlOGVkY2Yx
YzNjMmY2YjU1MzNjNTZhNDkyYmY2MjY2OTZmYjUuLjUxZjk5ZjliZTJiOGI3NjQ3MDFlNDQ1ZTlk
YjI0ODUzNTQ0YmExMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OworY2xhc3MgTGluZUJveEJ1aWxkZXI7CiAKIC8vIExpbmVCb3ggY29udGFpbnMgYWxs
IHRoZSBpbmxpbmUgYm94ZXMgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuIEl0IG9u
bHkgaGFzIHdpZHRoIGFuZCBoZWlnaHQgZ2VvbWV0cnkuCiAvLwpAQCAtNTksNyArNjAsNyBAQCBw
dWJsaWM6CiAgICAgc3RydWN0IElubGluZUJveCB7CiAgICAgICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURURfSU5MSU5FKElubGluZUJveCk7CiAgICAgcHVibGljOgotICAgICAgICBJbmxpbmVCb3go
Y29uc3QgQm94JiwgY29uc3QgSW5saW5lUmVjdCYsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUs
IElubGluZUxheW91dFVuaXQgZGVzY2VudCk7CisgICAgICAgIElubGluZUJveChjb25zdCBCb3gm
LCBjb25zdCBJbmxpbmVSZWN0JiwgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSk7CiAgICAgICAg
IElubGluZUJveChjb25zdCBCb3gmLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIElubGluZUJveCgpID0gZGVmYXVs
dDsKIApAQCAtODEsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEJveCYgbGF5b3V0
Qm94KCkgY29uc3QgeyByZXR1cm4gKm1fbGF5b3V0Qm94OyB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBmcmllbmQgY2xhc3MgTGluZUJveDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCb3hC
dWlsZGVyOwogCiAgICAgICAgIHZvaWQgc2V0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVjdC5zZXRUb3AobG9naWNhbFRvcCk7IH0KICAgICAgICAg
dm9pZCBzZXRMb2dpY2FsV2lkdGgoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpIHsgbV9s
b2dpY2FsUmVjdC5zZXRXaWR0aChsb2dpY2FsV2lkdGgpOyB9CkBAIC05OCw5ICs5OSw4IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBtX2lzRW1wdHkgeyB0cnVlIH07CiAgICAgfTsKIAotICAgIGVu
dW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OwogICAgIGVu
dW0gY2xhc3MgSXNMaW5lVmlzdWFsbHlFbXB0eSB7IE5vLCBZZXMgfTsKLSAgICBMaW5lQm94KGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNh
bFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmU6
OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQpOworICAgIExpbmVCb3goSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIElzTGluZVZp
c3VhbGx5RW1wdHkpOwogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyB9
CkBAIC0xMTUsMjkgKzExNSwzMiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgSW5saW5lQm94TWFwID0g
SGFzaE1hcDxjb25zdCBCb3gqLCBJbmxpbmVCb3gqPjsKICAgICBhdXRvIGlubGluZUJveExpc3Qo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveFJlY3RNYXAudmFsdWVzKCk7IH0KIAotICAgIElu
bGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJ
bmxpbmVCb3gubG9naWNhbFRvcCgpICsgbV9yb290SW5saW5lQm94LmJhc2VsaW5lKCk7IH0KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9y
b290SW5saW5lQm94LT5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3gtPmJhc2VsaW5lKCk7
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6
OlJ1bkxpc3QmKTsKLSAgICB2b2lkIGNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoKTsK
LSAgICB2b2lkIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWln
aHQoKTsKKyAgICBmcmllbmQgY2xhc3MgTGluZUJveEJ1aWxkZXI7CiAKLSAgICBJbmxpbmVCb3gm
IGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgeyByZXR1cm4gKm1f
aW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxI
ZWlnaHQoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSB7IG1fbG9naWNhbFNpemUuc2V0
SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOyB9CisgICAgdm9pZCBzZXRIb3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0KElubGluZUxheW91dFVuaXQgaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCkgeyBtX2hv
cml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0OyB9CisK
KyAgICB2b2lkIGFkZFJvb3RJbmxpbmVCb3goc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4mJik7
CisgICAgdm9pZCBhZGRJbmxpbmVCb3goc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4mJik7CisK
KyAgICBJbmxpbmVCb3gmIHJvb3RJbmxpbmVCb3goKSB7IHJldHVybiAqbV9yb290SW5saW5lQm94
OyB9CisgICAgdXNpbmcgSW5saW5lQm94TGlzdCA9IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lQm94Pj47CisgICAgY29uc3QgSW5saW5lQm94TGlzdCYgbm9uUm9vdElubGluZUJveGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9ub25Sb290SW5saW5lQm94TGlzdDsgfQogCi0gICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Q7Ci0gICAgY29u
c3QgQm94JiByb290KCkgY29uc3Q7Ci0gICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29u
c3Q7CisgICAgSW5saW5lQm94JiBpbmxpbmVCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlv
dXRCb3gpIHsgcmV0dXJuICptX2lubGluZUJveFJlY3RNYXAuZ2V0KCZsYXlvdXRCb3gpOyB9CiAK
IHByaXZhdGU6CiAgICAgSW5saW5lTGF5b3V0U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIE9wdGlv
bmFsPElubGluZUxheW91dFVuaXQ+IG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldDsKICAgICBi
b29sIG1faXNMaW5lVmlzdWFsbHlFbXB0eSB7IHRydWUgfTsKIAotICAgIElubGluZUJveCBtX3Jv
b3RJbmxpbmVCb3g7CisgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4gbV9yb290SW5saW5l
Qm94OworICAgIElubGluZUJveExpc3QgbV9ub25Sb290SW5saW5lQm94TGlzdDsKIAotICAgIE9w
dGlvbmFsPElubGluZUxheW91dFVuaXQ+IG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldDsKICAg
ICBJbmxpbmVCb3hNYXAgbV9pbmxpbmVCb3hSZWN0TWFwOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8SW5saW5lQm94Pj4gbV9pbmxpbmVCb3hMaXN0OwotICAgIGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwCmluZGV4IDQ2ODZhNGVjNWM2NmI3NWQ2YTRjMTFkMzdjZjJiZTM3YWUx
MTllOGQuLmNmZjVmZjBiMzdlMjJmYjI4NWEwODVlZGMzZGM1ZjAzMDljMTBhYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5jcHAKQEAgLTMwMSwxMyArMzAxLDEzIEBAIExpbmVCdWlsZGVyOjpMaW5l
Q29udGVudCBMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVt
UmFuZ2UmCiAKICAgICBhdXRvIGxpbmVMb2dpY2FsVG9wTGVmdCA9IElubGluZUxheW91dFBvaW50
IHsgdXNlZENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0LCBpbml0aWFsQ29uc3RyYWludHMudmVydGlj
YWwubG9naWNhbFRvcCB9OwogICAgIGF1dG8gaXNMYXN0TGluZSA9IGlzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudChjb21taXR0ZWRSYW5nZSwgbmVlZHNMYXlvdXRSYW5nZS5lbmQsIGNvbW1pdHRl
ZENvbnRlbnQucGFydGlhbFRyYWlsaW5nQ29udGVudC5oYXNWYWx1ZSgpKTsKLSAgICBhdXRvIGxp
bmVJc1Zpc3VhbGx5RW1wdHkgPSBtX2xpbmUuaXNWaXN1YWxseUVtcHR5KCkgPyBMaW5lQm94OjpJ
c0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpO
bzsKICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFp
bGluZ0NvbnRlbnQsIGNvbW1pdHRlZFJhbmdlLCBtX2Zsb2F0cywgbV9jb250ZW50SXNDb25zdHJh
aW5lZEJ5RmxvYXQKICAgICAgICAgLCBsaW5lTG9naWNhbFRvcExlZnQKICAgICAgICAgLCBtX2xp
bmUuaG9yaXpvbnRhbENvbnN0cmFpbnQoKQotICAgICAgICAsIExpbmVCb3ggeyBmb3JtYXR0aW5n
Q29udGV4dCgpLCBtX2xpbmUuaG9yaXpvbnRhbENvbnN0cmFpbnQoKSwgbV9saW5lLmNvbnRlbnRM
b2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1bnMoKSwgbGluZUlzVmlzdWFsbHlFbXB0eQotICAgICAg
ICAsIGlzTGFzdExpbmUgPyBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8gfQotICAgICAgICAs
IG1fbGluZS5ydW5zKCkgfTsKKyAgICAgICAgLCBtX2xpbmUuY29udGVudExvZ2ljYWxXaWR0aCgp
CisgICAgICAgICwgbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgpCisgICAgICAgICwgaXNMYXN0TGlu
ZQorICAgICAgICAsIG1fbGluZS5ydW5zKCl9OwogfQogCiBMaW5lQnVpbGRlcjo6SW50cmluc2lj
Q29udGVudCBMaW5lQnVpbGRlcjo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aChjb25zdCBJbmxpbmVJ
dGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lk
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA3MWQ2ZWQ2OGYyM2EwOGY2MjRkMDJlM2ViN2Uz
M2Y4MjY1YjhhN2VlLi41NmQwZjA1M2U1OWJlYzA4YjZkMDYzZDQ5M2E4NGMzOGM3NjE0ZjZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIklubGluZUxpbmUuaCIKLSNpbmNsdWRl
ICJJbmxpbmVMaW5lQm94LmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjMsNyArNjIsOSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wg
aGFzSW50cnVzaXZlRmxvYXQgeyBmYWxzZSB9OwogICAgICAgICBJbmxpbmVMYXlvdXRQb2ludCBs
b2dpY2FsVG9wTGVmdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRo
OwotICAgICAgICBjb25zdCBMaW5lQm94IGxpbmVCb3g7CisgICAgICAgIElubGluZUxheW91dFVu
aXQgbGluZUNvbnRlbnRMb2dpY2FsV2lkdGg7CisgICAgICAgIGJvb2wgaXNMaW5lVmlzdWFsbHlF
bXB0eSB7IHRydWUgfTsKKyAgICAgICAgYm9vbCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
eyB0cnVlIH07CiAgICAgICAgIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnM7CiAgICAgfTsKICAg
ICBMaW5lQ29udGVudCBsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYs
IE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGNvbnN0IEZv
cm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGluaXRpYWxMaW5l
Q29uc3RyYWludHMsIGJvb2wgaXNGaXJzdExpbmUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>