<?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>7749</bug_id>
          
          <creation_ts>2006-03-12 20:46:29 -0800</creation_ts>
          <short_desc>canvas should be in DOM, not implemented in the JS bindings</short_desc>
          <delta_ts>2006-03-16 00:38:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dacarson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>36070</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-12 20:46:29 -0800</bug_when>
    <thetext>First step of improvements to canvas is to move it out of the JavaScript bindings directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36071</commentid>
    <comment_count>1</comment_count>
      <attachid>7042</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-12 20:47:08 -0800</bug_when>
    <thetext>Created attachment 7042
notes on what I learned about canvas while working on this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36072</commentid>
    <comment_count>2</comment_count>
      <attachid>7043</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-12 21:07:54 -0800</bug_when>
    <thetext>Created attachment 7043
move canvas to DOM, merge JS wrap functions into one called toJS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36156</commentid>
    <comment_count>3</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-03-13 16:43:48 -0800</bug_when>
    <thetext>This patch may also correct this bug:
http://bugzilla.opendarwin.org/show_bug.cgi?id=4884</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36505</commentid>
    <comment_count>4</comment_count>
      <attachid>7043</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-03-15 19:33:55 -0800</bug_when>
    <thetext>Comment on attachment 7043
move canvas to DOM, merge JS wrap functions into one called toJS

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>7042</attachid>
            <date>2006-03-12 20:47:08 -0800</date>
            <delta_ts>2006-03-12 20:47:08 -0800</delta_ts>
            <desc>notes on what I learned about canvas while working on this</desc>
            <filename>CanvasNotes.txt</filename>
            <type>text/plain</type>
            <size>4318</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">LSBjYW52YXMgaW1wcm92ZW1lbnRzIHRoYXQgc2hvdWxkIGJlIGRvbmUgKGJ1dCB3aGljaCBtaWdo
dCBoYXZlIGNvbXBhdGliaWxpdHkgcmlza3MpCgogICAgY2hhbmdlIGNhbnZhcyBlbGVtZW50IHNv
IHRoYXQgaXQncyBub3QgYSBzdWJjbGFzcyBvZiBpbWFnZQogICAgbW92ZSBjYW52YXMgYnVmZmVy
IHRvIERPTSBmcm9tIHJlbmRlciB0cmVlLCBjaGFuZ2UgdG8gbWF0Y2ggd2lkdGggYW5kIGhlaWdo
dCBhdHRyaWJ1dGVzLCB1c2luZyAzMDB4MTUwIGRlZmF1bHQgYXMgaW4gc3BlY2lmaWNhdGlvbiwg
YW5kIG1ha2UgQ1NTIHNpemluZyBjYXVzZSBzY2FsaW5nIHdoZW4gZHJhd2luZywgd2hlbiB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBjaGFuZ2VkLCByZWFsbG9jYXRlIGFuZCBjbGVhciBidWZmZXIgYW5k
IHJlc2V0IDJEIGNvbnRleHQKICAgIGFkZCB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMgdG8g
Y2FudmFzCiAgICBpbXBsZW1lbnQgdGhlIHRvRGF0YVVSTCBtZXRob2QgbWVudGlvbmVkIGluIFdl
YiBBcHBsaWNhdGlvbnMKICAgIGltcGxlbWVudCBmYWxsYmFjayBmb3Igd2hlbiBzY3JpcHRpbmcg
aXMgdHVybmVkIG9mZgoKLSBidWdzCgogICAgaW1hZ2UgbWVudSBpdGVtcyBhcHBlYXIgZm9yIGNh
bnZhc2VzLCB3aXRoIGJvZ3VzIFVSTHMKICAgIGNhbid0IGRyYXcgb24gY2FudmFzZXMgdGhhdCBh
cmUgbm90IGN1cnJlbnRseSBpbiB0aGUgcmVuZGVyIHRyZWUKCi0gc29tZSBkaWZmZXJlbmNlcyBi
ZXR3ZWVuIFdlYktpdCdzIGNhbnZhcyBhbmQgV2ViIEFwcGxpY2F0aW9ucyAxLjAgMjAwNi0wMy0x
MjoKCiAgICBjYW52YXMncyBiaXRtYXAgaXMgbm90IGNyZWF0ZWQgdW50aWwgc3R5bGUgaXMgcmVz
b2x2ZWQgKHdlIGNvbnNpZGVyIHRoaXMgYSBidWcpCgogICAgc3R5bGUgc2hlZXQgY2FuIGluZmx1
ZW5jZSB0aGUgc2l6ZSBvZiBhIGNhbnZhcydzIGJpdG1hcCAoV0Egc2F5cyB0aGF0IHRoaXMgY29u
dHJvbHMgb25seSBsYXlvdXQgc2l6ZSwgc2NhbGVkIHRvIGZpdCB3aGVuIHJlbmRlcmluZywgd2hp
Y2ggaXMgYSBiZXR0ZXIgZGVzaWduKQogICAgY2FudmFzJ3Mgd2lkdGggZG9lcyBub3QgZGVmYXVs
dCB0byAzMDAsIGhlaWdodCBkb2VzIG5vdCBkZWZhdWx0IHRvIDE1MAoKICAgIEhUTUxDYW52YXNF
bGVtZW50IGRvZXMgbm90IGhhdmUgYSB0b0RhdGFVUkwgZnVuY3Rpb24KCiAgICB0aGUgZm9sbG93
aW5nIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHRoYXQgYXJlIG5vdCBtZW50aW9u
ZWQgaW4gdGhlIHN0YW5kYXJkOgogICAgICAgIHNldFN0cm9rZUNvbG9yCiAgICAgICAgc2V0Rmls
bENvbG9yCiAgICAgICAgc2V0U2hhZG93CiAgICAgICAgZHJhd0ltYWdlRnJvbVJlY3QKCiAgICBn
ZXRDb250ZXh0IHJldHVybnMgdGhlIDJEIGNvbnRleHQgd2hlbiBwYXNzZWQgbm8gcGFyYW1ldGVy
LCBhbmQgd2hlbiBwYXNzZWQgIjJEIiAoIjJkIiBvbmx5IGluIFdBKQoKICAgIGZpbGwsIHN0cm9r
ZSwgYW5kIGNsaXAgZnVuY3Rpb25zIGFsbCBkZXN0cm95IHRoZSBjdXJyZW50IHBhdGgsIGJlY2F1
c2UgdGhhdCdzIHdoYXQgdGhleSBkbyBpbiBDb3JlR3JhcGhpY3MgKFdBIGlzIG5vdCBjbGVhciBv
biB0aGlzIHBvaW50KQoKICAgIGNyZWF0ZVBhdHRlcm4gZnVuY3Rpb24gZG9lcyBub3Qgd29yayB3
aXRoIGEgY2FudmFzIHBhcmFtZXRlciAocmVxdWlyZWQgaW4gV0EpCgogICAgd2hlbiBnZXR0aW5n
IHN0cm9rZVN0eWxlIG9yIGZpbGxTdHlsZSB0aGF0IGlzIGEgY29sb3IsIHRoZSBhY3R1YWwgY29s
b3Igc3RyaW5nIHBhc3NlZCBpbiBpcyByZXR1cm5lZCAoV0Egc2F5cyB0aGF0IGl0IG11c3QgYmUg
I3h4eHh4eCBvciByZ2JhKHh4LHh4LHh4LDAueHgpIGluc3RlYWQpCgogICAgY3JlYXRlUGF0dGVy
biBmdW5jdGlvbiBkb2VzIG5vdCByYWlzZSBTWU5UQVhfRVJSIHdoZW4gYW4gaW5jb3JyZWN0IHBh
dHRlcm4gc3RyaW5nIGlzIHBhc3NlZAogICAgY3JlYXRlUGF0dGVybiBmdW5jdGlvbiBwYXJzZXMg
cGF0dGVybiB2YWx1ZXMgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIG1hbm5lcgoKICAgIGF0dGVtcHRz
IHRvIGNoYW5nZSBnbG9iYWxBbHBoYSB0byB2YWx1ZXMgPDAgYW5kID4xIGFyZSBub3QgaWdub3Jl
ZAogICAgYXR0ZW1wdHMgdG8gY2hhbmdlIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiB0byB2YWx1
ZXMgPDAgYW5kID4xIGFyZSBub3QgaWdub3JlZAogICAgYXR0ZW1wdHMgdG8gY2hhbmdlIGxpbmVX
aWR0aCB0byB2YWx1ZXMgPD0wIGFyZSBub3QgaWdub3JlZAogICAgYXR0ZW1wdHMgdG8gY2hhbmdl
IG1pdGVyTGltaXQgdG8gdmFsdWVzIDw9MCBhcmUgbm90IGlnbm9yZWQKICAgIChpbiBhbGwgdGhl
c2UgY2FzZXMsIHRoZSBib2d1cyB2YWx1ZSBpcyBzdG9yZWQgYW5kIGNhbiBiZSByZXRyaWV2ZWQg
W2FsYmVpdCB3aXRoIGxvc3Mgb2YgcHJlY2lzaW9uXSwgYW5kIGluIHNvbWUgY2FzZXMgaXMgYWxz
byBwYXNzZWQgYWxvbmcgdG8gQ29yZUdyYXBoaWNzIC0tIHdoYXQgZWZmZWN0IGRvZXMgdGhpcyBo
YXZlPykKCiAgICBhdHRlbXB0cyB0byBjaGFuZ2UgbGluZUNhcCB0byBhbiB1bnJlY29nbml6ZWQg
dmFsdWUgYXJlIG5vdCBpZ25vcmVkCiAgICBhdHRlbXB0cyB0byBjaGFuZ2UgbGluZUpvaW4gdG8g
YW4gdW5yZWNvZ25pemVkIHZhbHVlIGFyZSBub3QgaWdub3JlZAogICAgKGluIGFsbCB0aGVzZSBj
YXNlcywgdGhlIGJvZ3VzIHZhbHVlIGlzIHN0b3JlZCBhbmQgY2FuIGJlIHJldHJpZXZlZCkKCiAg
ICBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHdpZHRoIGFuZCBoZWlnaHQgaW4gY2xlYXJSZWN0LCBmaWxs
UmVjdCwgc3Ryb2tlUmVjdCwgcmVjdCwgYW5kIGRyYXdJbWFnZSBkbyBub3QgcmFpc2UgSU5ERVhf
U0laRV9FUlIKICAgIG5lZ2F0aXZlIHZhbHVlcyBmb3IgcmFkaXVzIGluIGFyY1RvIGFuZCBhcmMg
ZG8gbm90IHJhaXNlIElOREVYX1NJWkVfRVJSCgogICAgSSdtIG5vdCBzdXJlIHdoYXQgVFlQRV9N
SVNNQVRDSF9FUlIgaXMgLS0gd2UgcmFpc2UgYSBUeXBlRXJyb3IgZXhjZXB0aW9uCgogICAgYSBs
aW5lIHdpZHRoIGNhbiBiZSBwYXNzZWQgYXMgYW4gb3B0aW9uYWwgNXRoIHBhcmFtZXRlciB0byBz
dHJva2VSZWN0CgogICAgbm8gZmFsbGJhY2sgd2hlbiBzY3JpcHRpbmcgaXMgZGlzYWJsZWQKCiAg
ICBjYW52YXMgaGFzIGEgY29tbXBvc2l0aW5nIG9wZXJhdG9yIGF0dHJpYnV0ZSwgdXNlZCB3aGVu
IGNvbXBvc2l0aW5nIHRoZSBjYW52YXMncyBiaXRtYXAgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZWxl
bWVudHMKCiAgICBCZWNhdXNlIG91ciBpbXBsZW1lbnRhdGlvbiBpbmhlcml0ZWQgZnJvbSBpbWFn
ZSBpbnRlcm5hbGx5LCBjYW52YXMgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgog
ICAgICAgIGFsdAogICAgICAgIHNyYwogICAgICAgIGJvcmRlcgogICAgICAgIHZzcGFjZQogICAg
ICAgIGhzcGFjZQogICAgICAgIGFsaWduCiAgICAgICAgdmFsaWduCiAgICAgICAgbmFtZQogICAg
ICAgIGNvbXBvc2l0ZQogICAgYXMgd2VsbCBhcyBzb21lIHRoYXQgYXJlIGp1c3QgcGxhaW4gYml6
YXJyZQogICAgICAgIHVzZW1hcAogICAgICAgIGlzbWFwCiAgICAgICAgb25hYm9ydAogICAgICAg
IG9uZXJyb3IKICAgICAgICBvbmxvYWQKICAgIEkgdGhpbmsgd2UgZGVmaW5pdGVseSB3YW50IHRv
IGtlZXAgY29tcG9zaXRlLiBJdCdzIG5vdCBjbGVhciBob3cgZGVwZW5kZW50IGNsaWVudHMgYXJl
IG9uIG90aGVycy4KCi0gaXNzdWVzIG5vdCBjbGVhciBpbiBXZWIgQXBwbGljYXRpb25zIDEuMCAy
MDA2LTAzLTEyCgogICAgTm8gbWVudGlvbiBvZiB3aGF0IGhhcHBlbnMgaWYgZnVuY3Rpb25zIGFy
ZSBwYXNzZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIChpbXBvcnRhbnQgdG8gc3BlY2lmeSBiZWNh
dXNlIGl0IGhhcHBlbnMgYnkgYWNjaWRlbnQ7IGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBvdmVy
bG9hZGVkIGZ1bmN0aW9ucykuCiAgICBObyBtZW50aW9uIG9mIHdoYXQgaGFwcGVucyB3aXRoIE5h
TiBmb3IgdmFyaW91cyBwYXJhbWV0ZXJzIChlc3BlY2lhbGx5IGltcG9ydGFudCBzaW5jZSBhcmJp
dHJhcnkgc3RyaW5ncyB0dXJuIGludG8gTmFOIGluIEphdmFTY3JpcHQpLgogICAgRG9lcyBjYWxs
aW5nIHNldFdpZHRoIHdpdGggYSB3aWR0aCB0aGF0IGp1c3QgaGFwcGVucyB0byBiZSB0aGUgc2Ft
ZSBsZWF2ZSB0aGUgY2FudmFzIGFsb25lIG9yIGRvZXMgaXQgcmVzZXQgdGhlIGJpdG1hcCBhbmQg
Y29udGV4dHM/CiAgICAgICAgKFNhbWUgZm9yIGhlaWdodCwgYW5kIGZvciBzZXR0aW5nIGF0dHJp
YnV0ZXMgdmlhIGF0dHJpYnV0ZS1zZXR0aW5nIEFQSXMgYXMgd2VsbC4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7043</attachid>
            <date>2006-03-12 21:07:54 -0800</date>
            <delta_ts>2006-03-15 19:33:55 -0800</delta_ts>
            <desc>move canvas to DOM, merge JS wrap functions into one called toJS</desc>
            <filename>CanvasPatch.txt</filename>
            <type>text/plain</type>
            <size>312426</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCShyZXZpc2lvbiAxMzI1NikKKysrIGtodG1sL2h0bWwv
aHRtbF9pbWFnZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsOSArNTAwLDkgQEAgdm9p
ZCBIVE1MTWFwRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cgogICAgICAgICBIVE1MRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1SZWZQdHI8SFRNTENvbGxl
Y3Rpb25JbXBsPiBIVE1MTWFwRWxlbWVudEltcGw6OmFyZWFzKCkKK1Bhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb25JbXBsPiBIVE1MTWFwRWxlbWVudEltcGw6OmFyZWFzKCkKIHsKLSAgICByZXR1cm4g
UmVmUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4obmV3IEhUTUxDb2xsZWN0aW9uSW1wbCh0aGlzLCBI
VE1MQ29sbGVjdGlvbkltcGw6Ok1BUF9BUkVBUykpOworICAgIHJldHVybiBuZXcgSFRNTENvbGxl
Y3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9uSW1wbDo6TUFQX0FSRUFTKTsKIH0KIAogRE9N
U3RyaW5nIEhUTUxNYXBFbGVtZW50SW1wbDo6bmFtZSgpIGNvbnN0CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfY2FudmFzaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmgJKHJldmlzaW9uIDEzMjU2KQorKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDI0IEBACiAKICNpbmNsdWRlICJodG1sX2ltYWdl
aW1wbC5oIgogCisjaWYgX19BUFBMRV9fCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdl
UmVmOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTENhbnZhc0Vs
ZW1lbnRJbXBsCi0gICAgOiBwdWJsaWMgSFRNTEltYWdlRWxlbWVudEltcGwKLXsKK2NsYXNzIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDsKK3R5cGVkZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CisKKy8vIEZJWE1FOiBTaG91bGQgaW5oZXJpdCBmcm9t
IEhUTUxFbGVtZW50SW1wbCBpbnN0ZWFkIG9mIEhUTUxJbWFnZUVsZW1lbnRJbXBsLgorY2xhc3Mg
SFRNTENhbnZhc0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxJbWFnZUVsZW1lbnRJbXBsIHsKIHB1
YmxpYzoKICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsKik7CisgICAgfkhU
TUxDYW52YXNFbGVtZW50SW1wbCgpOworCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogZ2V0
Q29udGV4dChjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIEZJWE1FOiBXZWIgQXBwbGljYXRpb25z
IDEuMCBkZXNjcmliZXMgYSB0b0RhdGFVUkwgZnVuY3Rpb24uCiAKICAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqKTsKQEAgLTQ0LDYgKzU1LDE3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZUltcGwqKSBjb25zdDsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
OworCisjaWYgX19BUFBMRV9fCisgICAgQ0dJbWFnZVJlZiBjcmVhdGVQbGF0Zm9ybUltYWdlKCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPiBtXzJEQ29udGV4dDsKKyAgICAvLyBGSVhNRTogV2ViIEFwcGxpY2F0aW9ucyAxLjAg
ZGVzY3JpYmVzIGEgc2VjdXJpdHkgZmVhdHVyZSB3aGVyZSB3ZSB0cmFjayBpZiB3ZSBldmVyIGRy
ZXcKKyAgICAvLyBhbnkgaW1hZ2VzIG91dHNpZGUgdGhlIGRvbWFpbi4KIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgJKHJldmlzaW9uIDEzMjU2KQorKysga2h0bWwvaHRt
bC9odG1sX2ltYWdlaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01TdHJpbmc7CiBjbGFzcyBIVE1MQ29sbGVj
dGlvbkltcGw7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnRJbXBsOwogY2xhc3MgSW1hZ2U7CitjbGFz
cyBTdHJpbmc7CiAKIHN0cnVjdCBMZW5ndGg7CiAKIGNsYXNzIEhUTUxJbWFnZUxvYWRlciA6IHB1
YmxpYyBDYWNoZWRPYmplY3RDbGllbnQgewogcHVibGljOgotICAgIEhUTUxJbWFnZUxvYWRlcihF
bGVtZW50SW1wbCogZWx0KTsKKyAgICBIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqKTsKICAg
ICB2aXJ0dWFsIH5IVE1MSW1hZ2VMb2FkZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
cm9tRWxlbWVudCgpOwpAQCAtNTQsMTEgKzU0LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWRJbWFn
ZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CiAKICAgICAvLyBDYWNoZWRPYmpl
Y3RDbGllbnQgQVBJCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZE9iamVj
dCAqZmluaXNoZWRPYmopOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRP
YmplY3QqKTsKIAogcHJvdGVjdGVkOgotCi0gICAgdm9pZCBzZXRMb2FkaW5nSW1hZ2UoQ2FjaGVk
SW1hZ2UgKmxvYWRpbmdJbWFnZSk7CisgICAgdm9pZCBzZXRMb2FkaW5nSW1hZ2UoQ2FjaGVkSW1h
Z2UqKTsKIAogcHJpdmF0ZToKICAgICBFbGVtZW50SW1wbCogbV9lbGVtZW50OwpAQCAtNjcsOTMg
KzY2LDkwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ltYWdlQ29tcGxldGUgOiAxOwogfTsKIAot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Citj
bGFzcyBIVE1MSW1hZ2VFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwgewogICAg
IGZyaWVuZCBjbGFzcyBIVE1MRm9ybUVsZW1lbnRJbXBsOwogcHVibGljOgotICAgIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7Ci0gICAgSFRNTEltYWdlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnRJbXBsKiBkb2MpOworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKERvY3VtZW50
SW1wbCosIEhUTUxGb3JtRWxlbWVudEltcGwqID0gMCk7CisgICAgSFRNTEltYWdlRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRJbXBsKik7CiAgICAgfkhU
TUxJbWFnZUVsZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCopOwogCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSAqLCBSZW5kZXJTdHlsZSAqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bURvY3VtZW50KCk7CiAKICAgICBpbnQgd2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMgPSBmYWxzZSkgY29uc3Q7CiAgICAgaW50IGhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKIAotICAgIGJvb2wgaXNTZXJ2ZXJNYXAoKSBjb25zdCB7
IHJldHVybiAoIGlzbWFwICYmICF1c2VtYXAubGVuZ3RoKCkgKTsgIH0KKyAgICBib29sIGlzU2Vy
dmVyTWFwKCkgY29uc3QgeyByZXR1cm4gaXNtYXAgJiYgdXNlbWFwLmlzRW1wdHkoKTsgfQogCi0g
ICAgRE9NU3RyaW5nIGFsdFRleHQoKSBjb25zdDsKKyAgICBTdHJpbmcgYWx0VGV4dCgpIGNvbnN0
OwogCi0gICAgRE9NU3RyaW5nIGltYWdlTWFwKCkgY29uc3QgeyByZXR1cm4gdXNlbWFwOyB9Cisg
ICAgU3RyaW5nIGltYWdlTWFwKCkgY29uc3QgeyByZXR1cm4gdXNlbWFwOyB9CiAgICAgCi0gICAg
dmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsKikgY29uc3Q7CiAK
ICAgICBJbWFnZTo6Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBJbWFnZTo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5nKF9jb21wb3NpdGVPcGVy
YXRvci5hc2NpaSgpKTsgfQogCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgeyByZXR1
cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpOyB9CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZSgpOyB9CiAgICAgCi0gICAgRE9N
U3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoIGNvbnN0IERPTVN0cmluZyAm
ICk7CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3Ry
aW5nJik7CiAKLSAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWdu
KCBjb25zdCBET01TdHJpbmcgJiApOworICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OworICAgIHZv
aWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CiAKLSAgICBET01TdHJpbmcgYWx0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBbHQoIGNvbnN0IERPTVN0cmluZyAmICk7CisgICAgU3RyaW5nIGFsdCgp
IGNvbnN0OworICAgIHZvaWQgc2V0QWx0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgaW50IGJvcmRl
cigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qm9yZGVyKCBpbnQgKTsKKyAgICB2b2lkIHNldEJvcmRl
cihpbnQpOwogCi0gICAgdm9pZCBzZXRIZWlnaHQoIGludCApOworICAgIHZvaWQgc2V0SGVpZ2h0
KGludCk7CiAKICAgICBpbnQgaHNwYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIc3BhY2UoIGlu
dCApOworICAgIHZvaWQgc2V0SHNwYWNlKGludCk7CiAKICAgICBib29sIGlzTWFwKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRJc01hcCggYm9vbCApOworICAgIHZvaWQgc2V0SXNNYXAoYm9vbCk7CiAK
LSAgICBET01TdHJpbmcgbG9uZ0Rlc2MoKSBjb25zdDsKLSAgICB2b2lkIHNldExvbmdEZXNjKCBj
b25zdCBET01TdHJpbmcgJiApOworICAgIFN0cmluZyBsb25nRGVzYygpIGNvbnN0OworICAgIHZv
aWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5nJik7CiAKLSAgICBET01TdHJpbmcgc3JjKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTcmMoIGNvbnN0IERPTVN0cmluZyAmICk7CisgICAgU3RyaW5nIHNy
YygpIGNvbnN0OworICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwogCi0gICAgRE9NU3Ry
aW5nIHVzZU1hcCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VXNlTWFwKCBjb25zdCBET01TdHJpbmcg
JiApOworICAgIFN0cmluZyB1c2VNYXAoKSBjb25zdDsKKyAgICB2b2lkIHNldFVzZU1hcChjb25z
dCBTdHJpbmcmKTsKIAogICAgIGludCB2c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFj
ZSggaW50ICk7CisgICAgdm9pZCBzZXRWc3BhY2UoaW50KTsKIAotICAgIHZvaWQgc2V0V2lkdGgo
IGludCApOworICAgIHZvaWQgc2V0V2lkdGgoaW50KTsKIAogICAgIGludCB4KCkgY29uc3Q7CiAg
ICAgaW50IHkoKSBjb25zdDsKIAogICAgIGJvb2wgY29tcGxldGUoKSBjb25zdDsKLSAgICAKKwog
cHJvdGVjdGVkOgogICAgIEhUTUxJbWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwotICAgIERPTVN0
cmluZyB1c2VtYXA7CisgICAgU3RyaW5nIHVzZW1hcDsKICAgICBib29sIGlzbWFwOwotICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgKm1fZm9ybTsKLSAgICBET01TdHJpbmcgb2xkTmFtZUF0dHI7Cisg
ICAgSFRNTEZvcm1FbGVtZW50SW1wbCogbV9mb3JtOworICAgIFN0cmluZyBvbGROYW1lQXR0cjsK
ICAgICBRU3RyaW5nIF9jb21wb3NpdGVPcGVyYXRvcjsKIH07CiAKLQogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
Y2xhc3MgSFRNTEFyZWFFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MQW5jaG9yRWxlbWVudEltcGwK
LXsKK2NsYXNzIEhUTUxBcmVhRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnRJ
bXBsIHsKIHB1YmxpYzoKICAgICBlbnVtIFNoYXBlIHsgRGVmYXVsdCwgUG9seSwgUmVjdCwgQ2ly
Y2xlLCBVbmtub3duIH07CiAKQEAgLTE2Myw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqKTsKIAogICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CiAKQEAgLTE3MSwyOSArMTY3LDI5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNvbnN0
OwogCi0gICAgRE9NU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNz
S2V5KCBjb25zdCBET01TdHJpbmcgJiApOworICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsK
KyAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKIAotICAgIERPTVN0cmluZyBh
bHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEFsdCggY29uc3QgRE9NU3RyaW5nICYgKTsKKyAgICBT
dHJpbmcgYWx0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7CiAKLSAg
ICBET01TdHJpbmcgY29vcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb29yZHMoIGNvbnN0IERP
TVN0cmluZyAmICk7CisgICAgU3RyaW5nIGNvb3JkcygpIGNvbnN0OworICAgIHZvaWQgc2V0Q29v
cmRzKGNvbnN0IFN0cmluZyYpOwogCi0gICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdDsKLSAgICB2
b2lkIHNldEhyZWYoIGNvbnN0IERPTVN0cmluZyAmICk7CisgICAgU3RyaW5nIGhyZWYoKSBjb25z
dDsKKyAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIG5vSHJlZigp
IGNvbnN0OwotICAgIHZvaWQgc2V0Tm9IcmVmKCBib29sICk7CisgICAgdm9pZCBzZXROb0hyZWYo
Ym9vbCk7CiAKLSAgICBET01TdHJpbmcgc2hhcGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNoYXBl
KCBjb25zdCBET01TdHJpbmcgJiApOworICAgIFN0cmluZyBzaGFwZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0U2hhcGUoY29uc3QgU3RyaW5nJik7CiAKICAgICBpbnQgdGFiSW5kZXgoKSBjb25zdDsK
LSAgICB2b2lkIHNldFRhYkluZGV4KCBpbnQgKTsKKyAgICB2b2lkIHNldFRhYkluZGV4KGludCk7
CiAKLSAgICBET01TdHJpbmcgdGFyZ2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUYXJnZXQoIGNv
bnN0IERPTVN0cmluZyAmICk7CisgICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0OworICAgIHZvaWQg
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgUGF0aCBnZXRSZWdp
b24oaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKQEAgLTIwNCwxMyArMjAwLDExIEBAIHBy
b3RlY3RlZDoKICAgICBTaGFwZSBtX3NoYXBlOwogfTsKIAotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLWNsYXNzIEhUTUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsK
K2NsYXNzIEhUTUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwgewogcHVi
bGljOgotICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYyk7CisgICAgSFRN
TE1hcEVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCopOwogICAgIH5IVE1MTWFwRWxlbWVudEltcGwo
KTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkBAIC0yMjMsMTAgKzIxNywxMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIFJlbmRlck9iamVjdDo6Tm9kZUluZm8mKTsKIAotICAgIFJlZlB0cjxIVE1MQ29s
bGVjdGlvbkltcGw+IGFyZWFzKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbkltcGw+
IGFyZWFzKCk7CiAKLSAgICBET01TdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFt
ZSggY29uc3QgRE9NU3RyaW5nICYgKTsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcg
bV9uYW1lOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAkocmV2aXNpb24gMTMyNTYpCisrKyBr
aHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNCwyMCArMjQsMjggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwuaCIKLSNpbmNsdWRlICJodG1sbmFtZXMuaCIK
KyNpbmNsdWRlICJodG1sX2NhbnZhc2ltcGwuaCIKIAorI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50
LmgiCisjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyX2NhbnZhc2ltYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCiBIVE1MQ2FudmFzRWxlbWVudEltcGw6OkhUTUxDYW52YXNFbGVtZW50SW1wbChEb2N1bWVu
dEltcGwgKmRvYykKLSAgICA6IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGNhbnZhc1RhZywgZG9jKQor
ICAgIDogSFRNTEltYWdlRWxlbWVudEltcGwoY2FudmFzVGFnLCBkb2MpLCBtXzJEQ29udGV4dCgw
KQoreworfQorCitIVE1MQ2FudmFzRWxlbWVudEltcGw6On5IVE1MQ2FudmFzRWxlbWVudEltcGwo
KQogeworICAgIGlmIChtXzJEQ29udGV4dCkKKyAgICAgICAgbV8yRENvbnRleHQtPmRldGFjaENh
bnZhcygpOwogfQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkg
Y29uc3QKQEAgLTcyLDYgKzgwLDkgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudEltcGw6OmRldGFj
aCgpCiB7CiAgICAgLy8gRG9uJ3Qgd2FudCB0byBjYWxsIGltYWdlJ3MgZGV0YWNoKCkuCiAgICAg
SFRNTEVsZW1lbnRJbXBsOjpkZXRhY2goKTsKKworICAgIGlmIChtXzJEQ29udGV4dCkKKyAgICAg
ICAgbV8yRENvbnRleHQtPnJlc2V0KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnRJbXBs
Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdApAQCAtNzksNCArOTAs
NDIgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidQogICAgIHJldHVy
biAoKGF0dHItPm5hbWUoKSA9PSB1c2VtYXBBdHRyICYmIGF0dHItPnZhbHVlKCkuZG9tU3RyaW5n
KClbMF0gIT0gJyMnKSk7CiB9CiAKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNF
bGVtZW50SW1wbDo6Z2V0Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgLy8gRklY
TUU6IFdlYiBBcHBsaWNhdGlvbnMgMS4wIHNheXMgIjJkIiBvbmx5LCBidXQgdGhlIGNvZGUgaGVy
ZSBtYXRjaGVzIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgV2ViS2l0LgorICAgIGlmICh0eXBlLmlz
TnVsbCgpIHx8IHR5cGUgPT0gIjJkIiB8fCB0eXBlID09ICIyRCIpIHsKKyAgICAgICAgaWYgKCFt
XzJEQ29udGV4dCkKKyAgICAgICAgICAgIG1fMkRDb250ZXh0ID0gbmV3IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fMkRDb250ZXh0LmdldCgpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworSW50U2l6ZSBIVE1MQ2FudmFzRWxlbWVudEltcGw6OnNp
emUoKSBjb25zdAoreworICAgIFJlbmRlckNhbnZhc0ltYWdlKiBjYW52YXNSZW5kZXJlciA9IHN0
YXRpY19jYXN0PFJlbmRlckNhbnZhc0ltYWdlKj4ocmVuZGVyZXIoKSk7CisgICAgaWYgKCFjYW52
YXNSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyNpZiBfX0FQUExFX18KKyAg
ICBpZiAoQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjYW52YXNSZW5kZXJlci0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoY29u
dGV4dCksIENHQml0bWFwQ29udGV4dEdldEhlaWdodChjb250ZXh0KSk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gSW50U2l6ZSgpOworfQorCisjaWYgX19BUFBMRV9fCisKK0NHSW1hZ2VSZWYgSFRNTENh
bnZhc0VsZW1lbnRJbXBsOjpjcmVhdGVQbGF0Zm9ybUltYWdlKCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJDYW52YXNJbWFnZSogY2FudmFzUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXNJ
bWFnZSo+KHJlbmRlcmVyKCkpOworICAgIGlmICghY2FudmFzUmVuZGVyZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY2FudmFzUmVuZGVyZXItPmRyYXdp
bmdDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCk7Cit9CisKKyNlbmRpZgor
CiB9CkluZGV4OiBraHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2Vj
bWEva2pzX2Nzcy5jcHAJKHJldmlzaW9uIDEzMjU2KQorKysga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIEpTVmFsdWUgKkRPTUNTU1N0eWxl
RGVjbGFyYXRpb246OmdldFZhbHUKICAgY2FzZSBMZW5ndGg6CiAgICAgcmV0dXJuIGpzTnVtYmVy
KG1faW1wbC0+bGVuZ3RoKCkpOwogICBjYXNlIFBhcmVudFJ1bGU6Ci0gICAgcmV0dXJuIGdldERP
TUNTU1J1bGUoZXhlYywgbV9pbXBsLT5wYXJlbnRSdWxlKCkpOworICAgIHJldHVybiB0b0pTKGV4
ZWMsIG1faW1wbC0+cGFyZW50UnVsZSgpKTsKICAgZGVmYXVsdDoKICAgICBhc3NlcnQoMCk7CiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yMjksNyArMjI5LDcgQEAgSlNWYWx1ZSAqRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvblByb3RvRnVuYwogICAgIGNhc2UgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6R2V0UHJvcGVydHlWYWx1ZToKICAgICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChzdHls
ZURlY2wuZ2V0UHJvcGVydHlWYWx1ZShzKSk7CiAgICAgY2FzZSBET01DU1NTdHlsZURlY2xhcmF0
aW9uOjpHZXRQcm9wZXJ0eUNTU1ZhbHVlOgotICAgICAgcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4
ZWMsIHN0eWxlRGVjbC5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHMpLmdldCgpKTsKKyAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIHN0eWxlRGVjbC5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHMpLmdldCgpKTsKICAg
ICBjYXNlIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OlJlbW92ZVByb3BlcnR5OgogICAgICAgcmV0
dXJuIGpzU3RyaW5nT3JOdWxsKHN0eWxlRGVjbC5yZW1vdmVQcm9wZXJ0eShzLCBleGNlcHRpb24p
KTsKICAgICBjYXNlIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OkdldFByb3BlcnR5UHJpb3JpdHk6
CkBAIC0yNDgsNyArMjQ4LDcgQEAgSlNWYWx1ZSAqRE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByb3Rv
RnVuYwogICB9CiB9CiAKLUpTVmFsdWUgKmdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oRXhlY1N0
YXRlICpleGVjLCBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqcykKK0pTVmFsdWUgKnRvSlMoRXhl
Y1N0YXRlICpleGVjLCBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqcykKIHsKICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PENTU1N0eWxlRGVjbGFyYXRpb25JbXBsLCBET01DU1NTdHlsZURlY2xhcmF0
aW9uPihleGVjLCBzKTsKIH0KQEAgLTI4NywxNSArMjg3LDE1IEBAIEpTVmFsdWUgKkRPTVN0eWxl
U2hlZXQ6OmdldFZhbHVlUHJvcGVydHkKICAgY2FzZSBEaXNhYmxlZDoKICAgICByZXR1cm4ganNC
b29sZWFuKHN0eWxlU2hlZXQuZGlzYWJsZWQoKSk7CiAgIGNhc2UgT3duZXJOb2RlOgotICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsc3R5bGVTaGVldC5vd25lck5vZGUoKSk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYyxzdHlsZVNoZWV0Lm93bmVyTm9kZSgpKTsKICAgY2FzZSBQYXJlbnRTdHlsZVNo
ZWV0OgotICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsc3R5bGVTaGVldC5wYXJlbnRT
dHlsZVNoZWV0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsc3R5bGVTaGVldC5wYXJlbnRTdHls
ZVNoZWV0KCkpOwogICBjYXNlIEhyZWY6CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKHN0eWxl
U2hlZXQuaHJlZigpKTsKICAgY2FzZSBUaXRsZToKICAgICByZXR1cm4ganNTdHJpbmdPck51bGwo
c3R5bGVTaGVldC50aXRsZSgpKTsKICAgY2FzZSBNZWRpYToKLSAgICByZXR1cm4gZ2V0RE9NTWVk
aWFMaXN0KGV4ZWMsIHN0eWxlU2hlZXQubWVkaWEoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywg
c3R5bGVTaGVldC5tZWRpYSgpKTsKICAgfQogICByZXR1cm4gTlVMTDsKIH0KQEAgLTMwOSw3ICsz
MDksNyBAQCB2b2lkIERPTVN0eWxlU2hlZXQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgRE9N
T2JqZWN0OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CiB9CiAKLUpTVmFs
dWUqIGdldERPTVN0eWxlU2hlZXQoRXhlY1N0YXRlICpleGVjLCBQYXNzUmVmUHRyPFN0eWxlU2hl
ZXRJbXBsPiBzcykKK0pTVmFsdWUqIHRvSlMoRXhlY1N0YXRlICpleGVjLCBQYXNzUmVmUHRyPFN0
eWxlU2hlZXRJbXBsPiBzcykKIHsKICAgRE9NT2JqZWN0ICpyZXQ7CiAgIGlmICghc3MpCkBAIC0z
NTgsMTQgKzM1OCwxNCBAQCBKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6Z2V0VmFsdWVQcm9w
CiBKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01TdHlsZVNoZWV0TGlzdCAqdGhp
c09iaiA9IHN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXRMaXN0ICo+KHNsb3Quc2xvdEJhc2UoKSk7
Ci0gIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShz
bG90LmluZGV4KCkpKTsKKyAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVt
KHNsb3QuaW5kZXgoKSkpOwogfQogCiBKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6bmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERP
TVN0eWxlU2hlZXRMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3Qg
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSB0aGlzT2JqLT5t
X2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lLmRvbVN0cmluZygpLmltcGwoKSk7Ci0g
IHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1l
bnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKKyAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGlj
X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4oZWxlbWVudCktPnNoZWV0KCkpOwogfQogCiBi
b29sIERPTVN0eWxlU2hlZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTQyOSw3ICs0MjksNyBAQCBKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdEZ1bmM6OmNhbGxBc0Z1
CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgU3R5bGVTaGVldExp
c3RJbXBsICZzdHlsZVNoZWV0TGlzdCA9ICpzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0TGlzdCAq
Pih0aGlzT2JqKS0+aW1wbCgpOwogICBpZiAoaWQgPT0gRE9NU3R5bGVTaGVldExpc3Q6Okl0ZW0p
Ci0gICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGVTaGVldExpc3QuaXRlbShh
cmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgc3R5bGVTaGVl
dExpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CiAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBET01NZWRpYUxpc3Q6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIAogICAgIERPTU9iamVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIGF0dHIpOwogfQogCi1KU1ZhbHVlICpnZXRET01NZWRpYUxpc3QoRXhlY1N0YXRlICpleGVj
LCBNZWRpYUxpc3RJbXBsICptbCkKK0pTVmFsdWUgKnRvSlMoRXhlY1N0YXRlICpleGVjLCBNZWRp
YUxpc3RJbXBsICptbCkKIHsKICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE1lZGlhTGlzdEltcGws
IERPTU1lZGlhTGlzdD4oZXhlYywgbWwpOwogfQpAQCAtNTcwLDEwICs1NzAsMTAgQEAgSlNWYWx1
ZSAqRE9NQ1NTU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZQogewogICBzd2l0Y2ggKHRva2VuKSB7
CiAgIGNhc2UgT3duZXJSdWxlOgotICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsICo+KGltcGwoKSktPm93bmVyUnVsZSgpKTsKKyAgICBy
ZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihpbXBsKCkp
LT5vd25lclJ1bGUoKSk7CiAgIGNhc2UgQ3NzUnVsZXM6CiAgIGNhc2UgUnVsZXM6Ci0gICAgcmV0
dXJuIGdldERPTUNTU1J1bGVMaXN0KGV4ZWMsIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBs
ICo+KGltcGwoKSktPmNzc1J1bGVzKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXRJbXBsICo+KGltcGwoKSktPmNzc1J1bGVzKCkpOwogICBkZWZhdWx0
OgogICAgIGFzc2VydCgwKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTY0Miw3ICs2
NDIsNyBAQCBKU1ZhbHVlICpET01DU1NSdWxlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0CiBKU1ZhbHVl
ICpET01DU1NSdWxlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAq
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICBET01DU1NSdWxlTGlzdCAqdGhpc09iaiA9IHN0YXRpY19j
YXN0PERPTUNTU1J1bGVMaXN0ICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIHJldHVybiBnZXRET01D
U1NSdWxlKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkpKTsKKyAgcmV0
dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwogfQog
CiBib29sIERPTUNTU1J1bGVMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTY3NiwxMyArNjc2LDEzIEBAIEpTVmFsdWUgKkRPTUNTU1J1bGVMaXN0RnVuYzo6Y2FsbEFzRnVu
Y3QKICAgQ1NTUnVsZUxpc3RJbXBsICZjc3NSdWxlTGlzdCA9ICpzdGF0aWNfY2FzdDxET01DU1NS
dWxlTGlzdCAqPih0aGlzT2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgICAgY2FzZSBE
T01DU1NSdWxlTGlzdDo6SXRlbToKLSAgICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsY3Nz
UnVsZUxpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CisgICAgICByZXR1cm4gdG9K
UyhleGVjLGNzc1J1bGVMaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihleGVjKSkpOwogICAgIGRl
ZmF1bHQ6CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgfQogfQogCi1KU1ZhbHVlICpn
ZXRET01DU1NSdWxlTGlzdChFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGVMaXN0SW1wbCAqcmwpCitK
U1ZhbHVlICp0b0pTKEV4ZWNTdGF0ZSAqZXhlYywgQ1NTUnVsZUxpc3RJbXBsICpybCkKIHsKICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1J1bGVMaXN0SW1wbCwgRE9NQ1NTUnVsZUxpc3Q+KGV4
ZWMsIHJsKTsKIH0KQEAgLTc4MCwzOSArNzgwLDM5IEBAIEpTVmFsdWUgKkRPTUNTU1J1bGU6Omdl
dFZhbHVlUHJvcGVydHkoRXgKICAgY2FzZSBDc3NUZXh0OgogICAgIHJldHVybiBqc1N0cmluZ09y
TnVsbChjc3NSdWxlLmNzc1RleHQoKSk7CiAgIGNhc2UgUGFyZW50U3R5bGVTaGVldDoKLSAgICBy
ZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLGNzc1J1bGUucGFyZW50U3R5bGVTaGVldCgpKTsK
KyAgICByZXR1cm4gdG9KUyhleGVjLGNzc1J1bGUucGFyZW50U3R5bGVTaGVldCgpKTsKICAgY2Fz
ZSBQYXJlbnRSdWxlOgotICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsY3NzUnVsZS5wYXJl
bnRSdWxlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsY3NzUnVsZS5wYXJlbnRSdWxlKCkpOwog
CiAgIC8vIGZvciBTVFlMRV9SVUxFOgogICBjYXNlIFN0eWxlX1NlbGVjdG9yVGV4dDoKICAgICBy
ZXR1cm4ganNTdHJpbmdPck51bGwoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlSW1wbCAqPihtX2lt
cGwuZ2V0KCkpLT5zZWxlY3RvclRleHQoKSk7CiAgIGNhc2UgU3R5bGVfU3R5bGU6Ci0gICAgcmV0
dXJuIGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYywgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zdHlsZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVj
LCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPnN0eWxlKCkp
OwogCiAgIC8vIGZvciBNRURJQV9SVUxFOgogICBjYXNlIE1lZGlhX01lZGlhOgotICAgIHJldHVy
biBnZXRET01NZWRpYUxpc3QoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlSW1wbCAqPiht
X2ltcGwuZ2V0KCkpLT5tZWRpYSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2Fz
dDxDU1NNZWRpYVJ1bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPm1lZGlhKCkpOwogICBjYXNlIE1l
ZGlhX0Nzc1J1bGVzOgotICAgIHJldHVybiBnZXRET01DU1NSdWxlTGlzdChleGVjLCBzdGF0aWNf
Y2FzdDxDU1NNZWRpYVJ1bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPmNzc1J1bGVzKCkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZUltcGwgKj4obV9pbXBs
LmdldCgpKS0+Y3NzUnVsZXMoKSk7CiAKICAgLy8gZm9yIEZPTlRfRkFDRV9SVUxFOgogICBjYXNl
IEZvbnRGYWNlX1N0eWxlOgotICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4
ZWMsIHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c3R5
bGUoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxl
SW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zdHlsZSgpKTsKIAogICAvLyBmb3IgUEFHRV9SVUxFOgog
ICBjYXNlIFBhZ2VfU2VsZWN0b3JUZXh0OgogICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChzdGF0
aWNfY2FzdDxDU1NQYWdlUnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+c2VsZWN0b3JUZXh0KCkp
OwogICBjYXNlIFBhZ2VfU3R5bGU6Ci0gICAgcmV0dXJuIGdldERPTUNTU1N0eWxlRGVjbGFyYXRp
b24oZXhlYywgc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPnN0
eWxlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlSW1w
bCAqPihtX2ltcGwuZ2V0KCkpLT5zdHlsZSgpKTsKIAogICAvLyBmb3IgSU1QT1JUX1JVTEU6CiAg
IGNhc2UgSW1wb3J0X0hyZWY6CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKHN0YXRpY19jYXN0
PENTU0ltcG9ydFJ1bGVJbXBsICo+KG1faW1wbC5nZXQoKSktPmhyZWYoKSk7CiAgIGNhc2UgSW1w
b3J0X01lZGlhOgotICAgIHJldHVybiBnZXRET01NZWRpYUxpc3QoZXhlYywgc3RhdGljX2Nhc3Q8
Q1NTSW1wb3J0UnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+bWVkaWEoKSk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZUltcGwgKj4obV9pbXBsLmdldCgp
KS0+bWVkaWEoKSk7CiAgIGNhc2UgSW1wb3J0X1N0eWxlU2hlZXQ6Ci0gICAgcmV0dXJuIGdldERP
TVN0eWxlU2hlZXQoZXhlYywgc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZUltcGwgKj4obV9pbXBs
LmdldCgpKS0+c3R5bGVTaGVldCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2Fz
dDxDU1NJbXBvcnRSdWxlSW1wbCAqPihtX2ltcGwuZ2V0KCkpLT5zdHlsZVNoZWV0KCkpOwogCiAg
IC8vIGZvciBDSEFSU0VUX1JVTEU6CiAgIGNhc2UgQ2hhcnNldF9FbmNvZGluZzoKQEAgLTg4MCw3
ICs4ODAsNyBAQCBKU1ZhbHVlICpET01DU1NSdWxlRnVuYzo6Y2FsbEFzRnVuY3Rpb24oCiAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpnZXRET01DU1NSdWxlKEV4ZWNTdGF0
ZSAqZXhlYywgQ1NTUnVsZUltcGwgKnIpCitKU1ZhbHVlICp0b0pTKEV4ZWNTdGF0ZSAqZXhlYywg
Q1NTUnVsZUltcGwgKnIpCiB7CiAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDU1NSdWxlSW1wbCwg
RE9NQ1NTUnVsZT4oZXhlYywgcik7CiB9CkBAIC05NzQsNyArOTc0LDcgQEAgdm9pZCBET01DU1NW
YWx1ZTo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgYwogICAgIERPTU9iamVjdDo6cHV0KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwogfQogCi1KU1ZhbHVlICpnZXRET01DU1NWYWx1ZShF
eGVjU3RhdGUgKmV4ZWMsIENTU1ZhbHVlSW1wbCAqdikKK0pTVmFsdWUgKnRvSlMoRXhlY1N0YXRl
ICpleGVjLCBDU1NWYWx1ZUltcGwgKnYpCiB7CiAgIERPTU9iamVjdCAqcmV0OwogICBpZiAoIXYp
CkBAIC0xMDg2LDkgKzEwODYsOSBAQCBKU1ZhbHVlICpET01DU1NQcmltaXRpdmVWYWx1ZVByb3Rv
RnVuYzo6CiAgICAgY2FzZSBET01DU1NQcmltaXRpdmVWYWx1ZTo6R2V0U3RyaW5nVmFsdWU6CiAg
ICAgICByZXR1cm4ganNTdHJpbmdPck51bGwodmFsLmdldFN0cmluZ1ZhbHVlKCkpOwogICAgIGNh
c2UgRE9NQ1NTUHJpbWl0aXZlVmFsdWU6OkdldENvdW50ZXJWYWx1ZToKLSAgICAgIHJldHVybiBn
ZXRET01Db3VudGVyKGV4ZWMsdmFsLmdldENvdW50ZXJWYWx1ZSgpKTsKKyAgICAgIHJldHVybiB0
b0pTKGV4ZWMsdmFsLmdldENvdW50ZXJWYWx1ZSgpKTsKICAgICBjYXNlIERPTUNTU1ByaW1pdGl2
ZVZhbHVlOjpHZXRSZWN0VmFsdWU6Ci0gICAgICByZXR1cm4gZ2V0RE9NUmVjdChleGVjLHZhbC5n
ZXRSZWN0VmFsdWUoKSk7CisgICAgICByZXR1cm4gdG9KUyhleGVjLHZhbC5nZXRSZWN0VmFsdWUo
KSk7CiAgICAgY2FzZSBET01DU1NQcmltaXRpdmVWYWx1ZTo6R2V0UkdCQ29sb3JWYWx1ZToKICAg
ICAgIHJldHVybiBnZXRET01SR0JDb2xvcihleGVjLHZhbC5nZXRSR0JDb2xvclZhbHVlKCkpOwog
ICAgIGRlZmF1bHQ6CkBAIC0xMTczLDcgKzExNzMsNyBAQCBKU1ZhbHVlICpET01DU1NWYWx1ZUxp
c3Q6OmdldFZhbHVlUHJvcGVyCiBKU1ZhbHVlICpET01DU1NWYWx1ZUxpc3Q6OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NQ1NT
VmFsdWVMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NQ1NTVmFsdWVMaXN0ICo+KHNsb3Qu
c2xvdEJhc2UoKSk7Ci0gIHJldHVybiBnZXRET01DU1NWYWx1ZShleGVjLCBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3RJbXBsICo+KHRoaXNPYmotPmltcGwoKSktPml0ZW0oc2xvdC5pbmRleCgpKSk7
CisgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdEltcGwgKj4odGhp
c09iai0+aW1wbCgpKS0+aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAogYm9vbCBET01DU1NWYWx1
ZUxpc3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMTIwNCw3ICsxMjA0LDcg
QEAgSlNWYWx1ZSAqRE9NQ1NTVmFsdWVMaXN0RnVuYzo6Y2FsbEFzRnVuYwogICBDU1NWYWx1ZUxp
c3RJbXBsICZ2YWx1ZUxpc3QgPSAqc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0SW1wbCAqPihzdGF0
aWNfY2FzdDxET01DU1NWYWx1ZUxpc3QgKj4odGhpc09iaiktPmltcGwoKSk7CiAgIHN3aXRjaCAo
aWQpIHsKICAgICBjYXNlIERPTUNTU1ZhbHVlTGlzdDo6SXRlbToKLSAgICAgIHJldHVybiBnZXRE
T01DU1NWYWx1ZShleGVjLHZhbHVlTGlzdC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsK
KyAgICAgIHJldHVybiB0b0pTKGV4ZWMsdmFsdWVMaXN0Lml0ZW0oYXJnc1swXS0+dG9JbnQzMihl
eGVjKSkpOwogICAgIGRlZmF1bHQ6CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgfQpA
QCAtMTI4MCwxOSArMTI4MCwxOSBAQCBKU1ZhbHVlICpET01SZWN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTCiAgIFJlY3RJbXBsICZyZWN0ID0gKm1fcmVjdDsKICAgc3dpdGNoICh0b2tlbikgewog
ICBjYXNlIFRvcDoKLSAgICByZXR1cm4gZ2V0RE9NQ1NTVmFsdWUoZXhlYywgcmVjdC50b3AoKSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgcmVjdC50b3AoKSk7CiAgIGNhc2UgUmlnaHQ6Ci0gICAg
cmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIHJlY3QucmlnaHQoKSk7CisgICAgcmV0dXJuIHRv
SlMoZXhlYywgcmVjdC5yaWdodCgpKTsKICAgY2FzZSBCb3R0b206Ci0gICAgcmV0dXJuIGdldERP
TUNTU1ZhbHVlKGV4ZWMsIHJlY3QuYm90dG9tKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHJl
Y3QuYm90dG9tKCkpOwogICBjYXNlIExlZnQ6Ci0gICAgcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4
ZWMsIHJlY3QubGVmdCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCByZWN0LmxlZnQoKSk7CiAg
IGRlZmF1bHQ6CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotSlNWYWx1ZSAqZ2V0RE9NUmVj
dChFeGVjU3RhdGUgKmV4ZWMsIFJlY3RJbXBsICpyKQorSlNWYWx1ZSAqdG9KUyhFeGVjU3RhdGUg
KmV4ZWMsIFJlY3RJbXBsICpyKQogewogICByZXR1cm4gY2FjaGVET01PYmplY3Q8UmVjdEltcGws
IERPTVJlY3Q+KGV4ZWMsIHIpOwogfQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgSlNWYWx1ZSAqRE9N
Q291bnRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogICB9CiB9CiAKLUpTVmFsdWUgKmdldERPTUNv
dW50ZXIoRXhlY1N0YXRlICpleGVjLCBDb3VudGVySW1wbCAqYykKK0pTVmFsdWUgKnRvSlMoRXhl
Y1N0YXRlICpleGVjLCBDb3VudGVySW1wbCAqYykKIHsKICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0
PENvdW50ZXJJbXBsLCBET01Db3VudGVyPihleGVjLCBjKTsKIH0KSW5kZXg6IGtodG1sL2VjbWEv
a2pzX3JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19yYW5nZS5jcHAJKHJl
dmlzaW9uIDEzMjU2KQorKysga2h0bWwvZWNtYS9ranNfcmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MiwxNyArOTIsMTcgQEAgSlNWYWx1ZSAqRE9NUmFuZ2U6OmdldFZhbHVlUHJvcGVydHko
RXhlYwogICBSYW5nZUltcGwgJnJhbmdlID0gKm1faW1wbDsKICAgc3dpdGNoICh0b2tlbikgewog
ICBjYXNlIFN0YXJ0Q29udGFpbmVyOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHJhbmdl
LnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHJhbmdl
LnN0YXJ0Q29udGFpbmVyKGV4Y2VwdGlvbikpOwogICBjYXNlIFN0YXJ0T2Zmc2V0OgogICAgIHJl
dHVybiBqc051bWJlcihyYW5nZS5zdGFydE9mZnNldChleGNlcHRpb24pKTsKICAgY2FzZSBFbmRD
b250YWluZXI6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcmFuZ2UuZW5kQ29udGFpbmVy
KGV4Y2VwdGlvbikpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHJhbmdlLmVuZENvbnRhaW5lcihl
eGNlcHRpb24pKTsKICAgY2FzZSBFbmRPZmZzZXQ6CiAgICAgcmV0dXJuIGpzTnVtYmVyKHJhbmdl
LmVuZE9mZnNldChleGNlcHRpb24pKTsKICAgY2FzZSBDb2xsYXBzZWQ6CiAgICAgcmV0dXJuIGpz
Qm9vbGVhbihyYW5nZS5jb2xsYXBzZWQoZXhjZXB0aW9uKSk7CiAgIGNhc2UgQ29tbW9uQW5jZXN0
b3JDb250YWluZXI6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcmFuZ2UuY29tbW9uQW5j
ZXN0b3JDb250YWluZXIoZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgcmFuZ2Uu
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoZXhjZXB0aW9uKSk7CiAgIGRlZmF1bHQ6CiAgICAgcmV0
dXJuIDA7CiAgIH0KQEAgLTE1MSwxMCArMTUxLDEwIEBAIEpTVmFsdWUgKkRPTVJhbmdlUHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGkKICAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKGV4Y2VwdGlvbik7
CiAgICAgICBicmVhazsKICAgICBjYXNlIERPTVJhbmdlOjpFeHRyYWN0Q29udGVudHM6Ci0gICAg
ICByZXN1bHQgPSBnZXRET01Ob2RlKGV4ZWMsIHJhbmdlLmV4dHJhY3RDb250ZW50cyhleGNlcHRp
b24pKTsKKyAgICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgcmFuZ2UuZXh0cmFjdENvbnRlbnRzKGV4
Y2VwdGlvbikpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01SYW5nZTo6Q2xvbmVDb250ZW50
czoKLSAgICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywgcmFuZ2UuY2xvbmVDb250ZW50cyhl
eGNlcHRpb24pKTsKKyAgICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgcmFuZ2UuY2xvbmVDb250ZW50
cyhleGNlcHRpb24pKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRE9NUmFuZ2U6Okluc2VydE5v
ZGU6CiAgICAgICByYW5nZS5pbnNlcnROb2RlKHRvTm9kZShhcmdzWzBdKSwgZXhjZXB0aW9uKTsK
QEAgLTE2Myw3ICsxNjMsNyBAQCBKU1ZhbHVlICpET01SYW5nZVByb3RvRnVuYzo6Y2FsbEFzRnVu
Y3RpCiAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHRvTm9kZShhcmdzWzBdKSwgZXhjZXB0
aW9uKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRE9NUmFuZ2U6OkNsb25lUmFuZ2U6Ci0gICAg
ICByZXN1bHQgPSBnZXRET01SYW5nZShleGVjLCByYW5nZS5jbG9uZVJhbmdlKGV4Y2VwdGlvbiku
Z2V0KCkpOworICAgICAgcmVzdWx0ID0gdG9KUyhleGVjLCByYW5nZS5jbG9uZVJhbmdlKGV4Y2Vw
dGlvbikuZ2V0KCkpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBET01SYW5nZTo6VG9TdHJpbmc6
CiAgICAgICByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChyYW5nZS50b1N0cmluZyhleGNlcHRpb24p
KTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBKU1ZhbHVlICpET01SYW5nZVByb3RvRnVuYzo6Y2FsbEFz
RnVuY3RpCiAgICAgICByYW5nZS5kZXRhY2goZXhjZXB0aW9uKTsKICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRE9NUmFuZ2U6OkNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudDoKLSAgICAgIHJlc3VsdCA9
IGdldERPTU5vZGUoZXhlYywgcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBleGNlcHRpb24pKTsKKyAgICAgIHJlc3VsdCA9
IHRvSlMoZXhlYywgcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpLmRvbVN0cmluZygpLCBleGNlcHRpb24pKTsKICAgICAgIGJyZWFrOwogICB9Owog
CkBAIC0xODAsNyArMTgwLDcgQEAgSlNWYWx1ZSAqRE9NUmFuZ2VQcm90b0Z1bmM6OmNhbGxBc0Z1
bmN0aQogICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlICpnZXRET01SYW5nZShFeGVjU3Rh
dGUgKmV4ZWMsIFJhbmdlSW1wbCAqcikKK0pTVmFsdWUgKnRvSlMoRXhlY1N0YXRlICpleGVjLCBS
YW5nZUltcGwgKnIpCiB7CiAgIHJldHVybiBjYWNoZURPTU9iamVjdDxSYW5nZUltcGwsIERPTVJh
bmdlPihleGVjLCByKTsKIH0KSW5kZXg6IGtodG1sL2VjbWEva2pzX3ZpZXdzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBraHRtbC9lY21hL2tqc192aWV3cy5jcHAJKHJldmlzaW9uIDEzMjU2KQorKysga2h0
bWwvZWNtYS9ranNfdmlld3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIERP
TUFic3RyYWN0Vmlldzo6fkRPTUFic3RyYWN0VmlldygpCiBKU1ZhbHVlICpET01BYnN0cmFjdFZp
ZXc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pCiB7CiAgICAg
YXNzZXJ0KHRva2VuID09IERvY3VtZW50KTsKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBp
bXBsKCktPmRvY3VtZW50KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+ZG9jdW1l
bnQoKSk7CiB9CiAKIGJvb2wgRE9NQWJzdHJhY3RWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKQEAgLTkwLDcgKzkwLDcgQEAgSlNWYWx1ZSAqRE9NQWJzdHJhY3RWaWV3UHJvdG9G
dW5jOjpjYWxsQQogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBk
b2MgPSBhcmcwLT5nZXREb2N1bWVudCgpKQogICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbihleGVjLCBhYnN0cmFjdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhcmcwLCBh
cmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKS5pbXBsKCkpKTsKKyAgICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBhYnN0cmFjdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhcmcwLCBhcmdz
WzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKS5pbXBsKCkpKTsKICAgICAgICAgfQogICAg
ICAgfQogICAgIGNhc2UgRE9NQWJzdHJhY3RWaWV3OjpHZXRNYXRjaGVkQ1NTUnVsZXM6IHsKQEAg
LTk5LDcgKzk5LDcgQEAgSlNWYWx1ZSAqRE9NQWJzdHJhY3RWaWV3UHJvdG9GdW5jOjpjYWxsQQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IC8vIHRocm93IGV4Y2VwdGlvbj8KICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSBsYXlvdXQsIHNp
bmNlIHdlIGp1c3Qgd2FudCB0aGUgYmFjay1lbmQgcnVsZXMuCi0gICAgICAgICAgICByZXR1cm4g
Z2V0RE9NQ1NTUnVsZUxpc3QoZXhlYywgYWJzdHJhY3RWaWV3LmdldE1hdGNoZWRDU1NSdWxlcyhh
cmcwLAorICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgYWJzdHJhY3RWaWV3LmdldE1hdGNo
ZWRDU1NSdWxlcyhhcmcwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmltcGwoKSkuZ2V0KCkpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTA3LDcgKzEwNyw3IEBAIEpTVmFsdWUgKkRPTUFic3RyYWN0Vmlld1By
b3RvRnVuYzo6Y2FsbEEKICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgKmdl
dERPTUFic3RyYWN0VmlldyhFeGVjU3RhdGUgKmV4ZWMsIEFic3RyYWN0Vmlld0ltcGwgKmF2KQor
SlNWYWx1ZSAqdG9KUyhFeGVjU3RhdGUgKmV4ZWMsIEFic3RyYWN0Vmlld0ltcGwgKmF2KQogewog
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8QWJzdHJhY3RWaWV3SW1wbCwgRE9NQWJzdHJhY3RWaWV3
PihleGVjLCBhdik7CiB9CkluZGV4OiBraHRtbC9lY21hL2tqc19jc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9lY21hL2tqc19jc3MuaAkocmV2aXNpb24gMTMyNTYpCisrKyBraHRtbC9lY21hL2tq
c19jc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTIgKzIwLDExIEBACiAgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg
IFVTQQogICovCiAKLSNpZm5kZWYgX0tKU19DU1NfSF8KLSNkZWZpbmUgX0tKU19DU1NfSF8KLQot
I2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisjaWZuZGVmIEtKU19DU1NfSF8KKyNkZWZpbmUgS0pT
X0NTU19IXwogCiAjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgog
CiBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBDb3VudGVySW1wbDsKQEAgLTY1LDcgKzY0LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUmVmUHRyPERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbklt
cGw+IG1faW1wbDsKICAgfTsKIAotICBKU1ZhbHVlICpnZXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqZCk7CisgIEpT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwq
KTsKIAogICBjbGFzcyBET01TdHlsZVNoZWV0IDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1Ymxp
YzoKQEAgLTg2LDcgKzg1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUmVmUHRyPERPTTo6U3R5
bGVTaGVldEltcGw+IG1faW1wbDsKICAgfTsKIAotICBKU1ZhbHVlKiBnZXRET01TdHlsZVNoZWV0
KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldEltcGw+KTsKKyAgSlNW
YWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hlZXRJbXBs
Pik7CiAKICAgY2xhc3MgRE9NU3R5bGVTaGVldExpc3QgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAg
cHVibGljOgpAQCAtMTMwLDcgKzEyOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxE
T006Ok1lZGlhTGlzdEltcGw+IG1faW1wbDsKICAgfTsKIAotICBKU1ZhbHVlICpnZXRET01NZWRp
YUxpc3QoRXhlY1N0YXRlICpleGVjLCBET006Ok1lZGlhTGlzdEltcGwgKm1sKTsKKyAgSlNWYWx1
ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpNZWRpYUxpc3RJbXBsKik7CiAKICAgY2xhc3Mg
RE9NQ1NTU3R5bGVTaGVldCA6IHB1YmxpYyBET01TdHlsZVNoZWV0IHsKICAgcHVibGljOgpAQCAt
MTYxLDcgKzE2MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxET006OkNTU1J1bGVM
aXN0SW1wbD4gbV9pbXBsOwogICB9OwogCi0gIEpTVmFsdWUgKmdldERPTUNTU1J1bGVMaXN0KEV4
ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NSdWxlTGlzdEltcGwgKnJsKTsKKyAgSlNWYWx1ZSogdG9K
UyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpDU1NSdWxlTGlzdEltcGwqKTsKIAogICBjbGFzcyBET01D
U1NSdWxlIDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKQEAgLTE4Myw3ICsxODIsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBSZWZQdHI8RE9NOjpDU1NSdWxlSW1wbD4gbV9pbXBsOwog
ICB9OwogCi0gIEpTVmFsdWUgKmdldERPTUNTU1J1bGUoRXhlY1N0YXRlICpleGVjLCBET006OkNT
U1J1bGVJbXBsICpyKTsKKyAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpDU1NS
dWxlSW1wbCopOwogCiAgIC8vIENvbnN0cnVjdG9yIGZvciBDU1NSdWxlIC0gY3VycmVudGx5IG9u
bHkgdXNlZCBmb3Igc29tZSBnbG9iYWwgdmFsdWVzCiAgIGNsYXNzIENTU1J1bGVDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01PYmplY3QgewpAQCAtMjE3LDcgKzIxNiw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIFJlZlB0cjxET006OkNTU1ZhbHVlSW1wbD4gbV9pbXBsOwogICB9OwogCi0gIEpTVmFs
dWUgKmdldERPTUNTU1ZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NWYWx1ZUltcGwgKnYp
OworICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkNTU1ZhbHVlSW1wbCopOwog
CiAgIC8vIENvbnN0cnVjdG9yIGZvciBDU1NWYWx1ZSAtIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9y
IHNvbWUgZ2xvYmFsIHZhbHVlcwogICBjbGFzcyBDU1NWYWx1ZUNvbnN0cnVjdG9yIDogcHVibGlj
IERPTU9iamVjdCB7CkBAIC0zMDEsNyArMzAwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUmVm
UHRyPERPTTo6UmVjdEltcGw+IG1fcmVjdDsKICAgfTsKIAotICBKU1ZhbHVlICpnZXRET01SZWN0
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpSZWN0SW1wbCAqcik7CisgIEpTVmFsdWUqIHRvSlMoRXhl
Y1N0YXRlKiwgV2ViQ29yZTo6UmVjdEltcGwqKTsKIAogICBjbGFzcyBET01Db3VudGVyIDogcHVi
bGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKQEAgLTMxNyw3ICszMTYsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBSZWZQdHI8RE9NOjpDb3VudGVySW1wbD4gbV9jb3VudGVyOwogICB9OwogCi0g
IEpTVmFsdWUgKmdldERPTUNvdW50ZXIoRXhlY1N0YXRlICpleGVjLCBET006OkNvdW50ZXJJbXBs
ICpjKTsKKyAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpDb3VudGVySW1wbCop
OwogCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBraHRtbC9lY21hL0pTWE1MSHR0cFJlcXVlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlz
aW9uIDEzMjU2KQorKysga2h0bWwvZWNtYS9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTksNyArOTksNyBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1
ZVByb3BlCiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKG1faW1wbC0+Z2V0UmVzcG9uc2VUZXh0
KCkpOwogICBjYXNlIFJlc3BvbnNlWE1MOgogICAgIGlmIChEb2N1bWVudEltcGwqIHJlc3BvbnNl
WE1MID0gbV9pbXBsLT5nZXRSZXNwb25zZVhNTCgpKQotICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgcmVzcG9uc2VYTUwpOworICAgICAgcmV0dXJuIHRvSlMoZXhlYywgcmVzcG9uc2VYTUwp
OwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICBjYXNlIFN0YXR1czogewogICAgIGludCBz
dGF0dXMgPSBtX2ltcGwtPmdldFN0YXR1cygpOwpJbmRleDoga2h0bWwvZWNtYS9ranNfcmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19yYW5nZS5oCShyZXZpc2lvbiAxMzI1NikK
KysrIGtodG1sL2VjbWEva2pzX3JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9
OwogCi0gIEpTVmFsdWUgKmdldERPTVJhbmdlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpSYW5nZUlt
cGwgKnIpOworICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlJhbmdlSW1wbCop
OwogICBKU1ZhbHVlICpnZXRSYW5nZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKICAg
RE9NOjpSYW5nZUltcGwgKnRvUmFuZ2UoSlNWYWx1ZSAqKTsgLy8gcmV0dXJucyAwIGlmIHRoZSB2
YWx1ZSBpcyBub3QgYSBET01SYW5nZSBvYmplY3QKSW5kZXg6IGtodG1sL2VjbWEva2pzX3ZpZXdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfdmlld3MuaAkocmV2aXNpb24gMTMyNTYp
CisrKyBraHRtbC9lY21hL2tqc192aWV3cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw4ICsxOCw4
IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJv
c3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpZm5kZWYgX0tKU19WSUVXU19IXwot
I2RlZmluZSBfS0pTX1ZJRVdTX0hfCisjaWZuZGVmIEtKU19WSUVXU19IXworI2RlZmluZSBLSlNf
VklFV1NfSF8KIAogI2luY2x1ZGUgImtqc19kb20uaCIKIApAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBSZWZQdHI8RE9NOjpBYnN0cmFjdFZpZXdJbXBsPiBtX2ltcGw7CiAg
IH07CiAKLSAgSlNWYWx1ZSAqZ2V0RE9NQWJzdHJhY3RWaWV3KEV4ZWNTdGF0ZSAqZXhlYywgRE9N
OjpBYnN0cmFjdFZpZXdJbXBsICphdik7CisgIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiwgV2Vi
Q29yZTo6QWJzdHJhY3RWaWV3SW1wbCopOwogCiAgIERPTTo6QWJzdHJhY3RWaWV3SW1wbCAqdG9B
YnN0cmFjdFZpZXcoSlNWYWx1ZSAqKTsKIApJbmRleDoga2h0bWwvZWNtYS9ranNfdHJhdmVyc2Fs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCShyZXZpc2lv
biAxMzI1NikKKysrIGtodG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDE1ICs3OSwxNSBAQCBKU1ZhbHVlICpET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJv
cGVyCiAgIE5vZGVJdGVyYXRvckltcGwgJm5pID0gKm1faW1wbDsKICAgc3dpdGNoICh0b2tlbikg
ewogICBjYXNlIFJvb3Q6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxuaS5yb290KCkpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsbmkucm9vdCgpKTsKICAgY2FzZSBXaGF0VG9TaG93OgogICAg
IHJldHVybiBqc051bWJlcihuaS53aGF0VG9TaG93KCkpOwogICBjYXNlIEZpbHRlcjoKLSAgICBy
ZXR1cm4gZ2V0RE9NTm9kZUZpbHRlcihleGVjLG5pLmZpbHRlcigpKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLG5pLmZpbHRlcigpKTsKICAgY2FzZSBFeHBhbmRFbnRpdHlSZWZlcmVuY2VzOgogICAg
IHJldHVybiBqc0Jvb2xlYW4obmkuZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpKTsKICAgY2FzZSBS
ZWZlcmVuY2VOb2RlOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbmkucmVmZXJlbmNlTm9k
ZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLG5pLnJlZmVyZW5jZU5vZGUoKSk7CiAgIGNhc2Ug
UG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGU6CiAgICAgcmV0dXJuIGpzQm9vbGVhbihuaS5wb2lu
dGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpKTsKICBkZWZhdWx0OgpAQCAtMTAzLDkgKzEwMyw5IEBA
IEpTVmFsdWUgKkRPTU5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2FsbEEKICAgTm9kZUl0ZXJhdG9y
SW1wbCAmbm9kZUl0ZXJhdG9yID0gKnN0YXRpY19jYXN0PERPTU5vZGVJdGVyYXRvciAqPih0aGlz
T2JqKS0+aW1wbCgpOwogICBzd2l0Y2ggKGlkKSB7CiAgIGNhc2UgRE9NTm9kZUl0ZXJhdG9yOjpQ
cmV2aW91c05vZGU6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxub2RlSXRlcmF0b3IucHJl
dmlvdXNOb2RlKGV4Y2VwdGlvbikpOworICAgIHJldHVybiB0b0pTKGV4ZWMsbm9kZUl0ZXJhdG9y
LnByZXZpb3VzTm9kZShleGNlcHRpb24pKTsKICAgY2FzZSBET01Ob2RlSXRlcmF0b3I6Ok5leHRO
b2RlOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZUl0ZXJhdG9yLm5leHROb2RlKGV4
Y2VwdGlvbikpOworICAgIHJldHVybiB0b0pTKGV4ZWMsbm9kZUl0ZXJhdG9yLm5leHROb2RlKGV4
Y2VwdGlvbikpOwogICBjYXNlIERPTU5vZGVJdGVyYXRvcjo6RGV0YWNoOgogICAgIG5vZGVJdGVy
YXRvci5kZXRhY2goZXhjZXB0aW9uKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEx
Myw3ICsxMTMsNyBAQCBKU1ZhbHVlICpET01Ob2RlSXRlcmF0b3JQcm90b0Z1bmM6OmNhbGxBCiAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpnZXRET01Ob2RlSXRlcmF0b3Io
RXhlY1N0YXRlICpleGVjLCBOb2RlSXRlcmF0b3JJbXBsICpuaSkKK0pTVmFsdWUgKnRvSlMoRXhl
Y1N0YXRlICpleGVjLCBOb2RlSXRlcmF0b3JJbXBsICpuaSkKIHsKICAgcmV0dXJuIGNhY2hlRE9N
T2JqZWN0PE5vZGVJdGVyYXRvckltcGwsIERPTU5vZGVJdGVyYXRvcj4oZXhlYywgbmkpOwogfQpA
QCAtMTk5LDcgKzE5OSw3IEBAIEpTVmFsdWUgKkRPTU5vZGVGaWx0ZXJQcm90b0Z1bmM6OmNhbGxB
c0YKICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgKmdldERPTU5vZGVGaWx0
ZXIoRXhlY1N0YXRlICpleGVjLCBOb2RlRmlsdGVySW1wbCAqbmYpCitKU1ZhbHVlICp0b0pTKEV4
ZWNTdGF0ZSAqZXhlYywgTm9kZUZpbHRlckltcGwgKm5mKQogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxOb2RlRmlsdGVySW1wbCwgRE9NTm9kZUZpbHRlcj4oZXhlYywgbmYpOwogfQpAQCAt
MjYzLDE1ICsyNjMsMTUgQEAgSlNWYWx1ZSAqRE9NVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0
eQogICBUcmVlV2Fsa2VySW1wbCAmdHcgPSAqbV9pbXBsOwogICBzd2l0Y2ggKHRva2VuKSB7CiAg
IGNhc2UgUm9vdDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHR3LnJvb3QoKSk7CisgICAg
cmV0dXJuIHRvSlMoZXhlYyx0dy5yb290KCkpOwogICBjYXNlIFdoYXRUb1Nob3c6CiAgICAgcmV0
dXJuIGpzTnVtYmVyKHR3LndoYXRUb1Nob3coKSk7CiAgIGNhc2UgRmlsdGVyOgotICAgIHJldHVy
biBnZXRET01Ob2RlRmlsdGVyKGV4ZWMsdHcuZmlsdGVyKCkpOworICAgIHJldHVybiB0b0pTKGV4
ZWMsdHcuZmlsdGVyKCkpOwogICBjYXNlIEV4cGFuZEVudGl0eVJlZmVyZW5jZXM6CiAgICAgcmV0
dXJuIGpzQm9vbGVhbih0dy5leHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkpOwogICBjYXNlIEN1cnJl
bnROb2RlOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdHcuY3VycmVudE5vZGUoKSk7Cisg
ICAgcmV0dXJuIHRvSlMoZXhlYyx0dy5jdXJyZW50Tm9kZSgpKTsKICAgZGVmYXVsdDoKICAgICBy
ZXR1cm4gMDsKICAgfQpAQCAtMjk1LDI0ICsyOTUsMjQgQEAgSlNWYWx1ZSAqRE9NVHJlZVdhbGtl
clByb3RvRnVuYzo6Y2FsbEFzRgogICBUcmVlV2Fsa2VySW1wbCAmdHJlZVdhbGtlciA9ICpzdGF0
aWNfY2FzdDxET01UcmVlV2Fsa2VyICo+KHRoaXNPYmopLT5pbXBsKCk7CiAgIHN3aXRjaCAoaWQp
IHsKICAgICBjYXNlIERPTVRyZWVXYWxrZXI6OlBhcmVudE5vZGU6Ci0gICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRyZWVXYWxrZXIucGFyZW50Tm9kZSgpKTsKKyAgICAgIHJldHVybiB0b0pT
KGV4ZWMsdHJlZVdhbGtlci5wYXJlbnROb2RlKCkpOwogICAgIGNhc2UgRE9NVHJlZVdhbGtlcjo6
Rmlyc3RDaGlsZDoKLSAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdHJlZVdhbGtlci5maXJz
dENoaWxkKCkpOworICAgICAgcmV0dXJuIHRvSlMoZXhlYyx0cmVlV2Fsa2VyLmZpcnN0Q2hpbGQo
KSk7CiAgICAgY2FzZSBET01UcmVlV2Fsa2VyOjpMYXN0Q2hpbGQ6Ci0gICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRyZWVXYWxrZXIubGFzdENoaWxkKCkpOworICAgICAgcmV0dXJuIHRvSlMo
ZXhlYyx0cmVlV2Fsa2VyLmxhc3RDaGlsZCgpKTsKICAgICBjYXNlIERPTVRyZWVXYWxrZXI6OlBy
ZXZpb3VzU2libGluZzoKLSAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdHJlZVdhbGtlci5w
cmV2aW91c1NpYmxpbmcoKSk7CisgICAgICByZXR1cm4gdG9KUyhleGVjLHRyZWVXYWxrZXIucHJl
dmlvdXNTaWJsaW5nKCkpOwogICAgIGNhc2UgRE9NVHJlZVdhbGtlcjo6TmV4dFNpYmxpbmc6Ci0g
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRyZWVXYWxrZXIubmV4dFNpYmxpbmcoKSk7Cisg
ICAgICByZXR1cm4gdG9KUyhleGVjLHRyZWVXYWxrZXIubmV4dFNpYmxpbmcoKSk7CiAgICAgY2Fz
ZSBET01UcmVlV2Fsa2VyOjpQcmV2aW91c05vZGU6Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRyZWVXYWxrZXIucHJldmlvdXNOb2RlKCkpOworICAgICAgcmV0dXJuIHRvSlMoZXhlYyx0
cmVlV2Fsa2VyLnByZXZpb3VzTm9kZSgpKTsKICAgICBjYXNlIERPTVRyZWVXYWxrZXI6Ok5leHRO
b2RlOgotICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0cmVlV2Fsa2VyLm5leHROb2RlKCkp
OworICAgICAgcmV0dXJuIHRvSlMoZXhlYyx0cmVlV2Fsa2VyLm5leHROb2RlKCkpOwogICB9CiAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpnZXRET01UcmVlV2Fsa2VyKEV4
ZWNTdGF0ZSAqZXhlYywgVHJlZVdhbGtlckltcGwgKnR3KQorSlNWYWx1ZSAqdG9KUyhFeGVjU3Rh
dGUgKmV4ZWMsIFRyZWVXYWxrZXJJbXBsICp0dykKIHsKICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0
PFRyZWVXYWxrZXJJbXBsLCBET01UcmVlV2Fsa2VyPihleGVjLCB0dyk7CiB9CkBAIC0zMzgsNyAr
MzM4LDcgQEAgc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKAogICAgICAg
ICBKU0xvY2sgbG9jazsKICAgICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJl
dGVyKCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgTGlzdCBhcmdzOwotICAgICAgICBhcmdzLmFw
cGVuZChnZXRET01Ob2RlKGV4ZWMsIG5vZGUpKTsKKyAgICAgICAgYXJncy5hcHBlbmQodG9KUyhl
eGVjLCBub2RlKSk7CiAgICAgICAgIEpTT2JqZWN0ICpvYmogPSBmaWx0ZXI7CiAgICAgICAgIEpT
VmFsdWUgKnJlc3VsdCA9IG9iai0+Y2FsbChleGVjLCBvYmosIGFyZ3MpOwogICAgICAgICByZXR1
cm4gcmVzdWx0LT50b0ludDMyKGV4ZWMpOwpJbmRleDoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCShyZXZpc2lvbiAxMzI1
NikKKysrIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAg
ICByZWYoKTsKICAgICAgIAogICAgICAgICBMaXN0IGFyZ3M7Ci0gICAgICAgIGFyZ3MuYXBwZW5k
KGdldERPTUV2ZW50KGV4ZWMsIGV2ZW50KSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhl
YywgZXZlbnQpKTsKICAgICAgIAogICAgICAgICAvLyBTZXQgdGhlIGV2ZW50IHdlJ3JlIGhhbmRs
aW5nIGluIHRoZSBXaW5kb3cgb2JqZWN0CiAgICAgICAgIHdpbmRvdy0+c2V0Q3VycmVudEV2ZW50
KGV2ZW50KTsKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVuCiAgICAgICAgICAgICBpZiAoaXNXaW5kb3dFdmVudCkKICAgICAgICAgICAg
ICAgICB0aGlzT2JqID0gd2luZG93OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGdldERPTU5vZGUoZXhlYywgZXZlbnQt
PmN1cnJlbnRUYXJnZXQoKSkpOworICAgICAgICAgICAgICAgIHRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCo+KHRvSlMoZXhlYywgZXZlbnQtPmN1cnJlbnRUYXJnZXQoKSkpOwogICAgICAg
ICAgICAgcmV0dmFsID0gbGlzdGVuZXItPmNhbGwoZXhlYywgdGhpc09iaiwgYXJncyk7CiAgICAg
ICAgIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFy
c2VDb2RlKCkgY28KICAgICAgICAgICAgIC8vIChhbmQgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGZv
cm0gLSBzZWUgSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQogICAgICAgICAgICAgU2Nv
cGVDaGFpbiBzY29wZSA9IGxpc3RlbmVyLT5zY29wZSgpOwogCi0gICAgICAgICAgICBKU1ZhbHVl
KiB0aGlzT2JqID0gZ2V0RE9NTm9kZShleGVjLCBvcmlnaW5hbE5vZGUpOworICAgICAgICAgICAg
SlNWYWx1ZSogdGhpc09iaiA9IHRvSlMoZXhlYywgb3JpZ2luYWxOb2RlKTsKICAgICAgICAgICAg
IGlmICh0aGlzT2JqLT5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
RE9NTm9kZSo+KHRoaXNPYmopLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgc2NvcGUpOwog
ICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5zZXRTY29wZShzY29wZSk7CkBAIC0zOTgsOSArMzk4
LDkgQEAgSlNWYWx1ZSAqRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlYwogICAgIHJldHVy
biBqc1N0cmluZyhldmVudC50eXBlKCkuZG9tU3RyaW5nKCkpOwogICBjYXNlIFRhcmdldDoKICAg
Y2FzZSBTcmNFbGVtZW50OiAvKk1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmplY3QgdGhhdCBmaXJl
ZCB0aGUgZXZlbnQiKi8KLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBldmVudC50YXJnZXQo
KSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZXZlbnQudGFyZ2V0KCkpOwogICBjYXNlIEN1cnJl
bnRUYXJnZXQ6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZXZlbnQuY3VycmVudFRhcmdl
dCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC5jdXJyZW50VGFyZ2V0KCkpOwogICBj
YXNlIEV2ZW50UGhhc2U6CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV2ZW50LmV2ZW50UGhhc2UoKSk7
CiAgIGNhc2UgQnViYmxlczoKQEAgLTQ4Myw3ICs0ODMsNyBAQCBKU1ZhbHVlICpET01FdmVudFBy
b3RvRnVuYzo6Y2FsbEFzRnVuY3RpCiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1Zh
bHVlICpnZXRET01FdmVudChFeGVjU3RhdGUgKmV4ZWMsIEV2ZW50SW1wbCAqZSkKK0pTVmFsdWUg
KnRvSlMoRXhlY1N0YXRlICpleGVjLCBFdmVudEltcGwgKmUpCiB7CiAgIGlmICghZSkKICAgICBy
ZXR1cm4ganNOdWxsKCk7CkBAIC01ODMsNyArNTgzLDcgQEAgSlNWYWx1ZSAqRE9NVUlFdmVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeAogICBVSUV2ZW50SW1wbCAmZXZlbnQgPSAqc3RhdGljX2Nhc3Q8
VUlFdmVudEltcGwgKj4oaW1wbCgpKTsKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFZpZXc6
Ci0gICAgcmV0dXJuIGdldERPTUFic3RyYWN0VmlldyhleGVjLCBldmVudC52aWV3KCkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LnZpZXcoKSk7CiAgIGNhc2UgRGV0YWlsOgogICAgIHJl
dHVybiBqc051bWJlcihldmVudC5kZXRhaWwoKSk7CiAgIGNhc2UgS2V5Q29kZToKQEAgLTY5MSwx
MSArNjkxLDExIEBAIEpTVmFsdWUgKkRPTU1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkKICAg
Y2FzZSBCdXR0b246CiAgICAgcmV0dXJuIGpzTnVtYmVyKGV2ZW50LmJ1dHRvbigpKTsKICAgY2Fz
ZSBUb0VsZW1lbnQ6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZXZlbnQudG9FbGVtZW50
KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50LnRvRWxlbWVudCgpKTsKICAgY2FzZSBG
cm9tRWxlbWVudDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBldmVudC5mcm9tRWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBldmVudC5mcm9tRWxlbWVudCgpKTsKICAgY2Fz
ZSBSZWxhdGVkVGFyZ2V0OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGV2ZW50LnJlbGF0
ZWRUYXJnZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZXZlbnQucmVsYXRlZFRhcmdldCgp
KTsKICAgY2FzZSBYOgogICAgIHJldHVybiBqc051bWJlcihldmVudC54KCkpOwogICBjYXNlIFk6
CkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21h
L2tqc19odG1sLmNwcAkocmV2aXNpb24gMTMyNTcpCisrKyBraHRtbC9lY21hL2tqc19odG1sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDEwIEBACiAjaW5jbHVkZSAia2pzX2h0bWwu
aCIKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTEJhc2VGb250RWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJIVE1M
QnV0dG9uRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50SW1wbC5o
IgpAQCAtNDMsNDEgKzQxLDMzIEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnRJbXBsLmgi
CiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAiTmFt
ZU5vZGVMaXN0SW1wbC5oIgogI2luY2x1ZGUgIlRleHRJbXBsLmgiCi0jaW5jbHVkZSAiY3NzL2Nz
c19ydWxlaW1wbC5oIgotI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNs
dWRlICJjc3MvY3NzcGFyc2VyLmgiCisjaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVk
ZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCi0j
aW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52
YXNpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9oZWFkaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIK
LSNpbmNsdWRlICJodG1sL2h0bWxfaW5saW5laW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9s
aXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCi0jaW5jbHVkZSAi
aHRtbC9odG1sX3RhYmxlaW1wbC5oIgorI2luY2x1ZGUgImh0bWxfYmFzZWltcGwuaCIKKyNpbmNs
dWRlICJodG1sX2Jsb2NraW1wbC5oIgorI2luY2x1ZGUgImh0bWxfY2FudmFzaW1wbC5oIgorI2lu
Y2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9oZWFkaW1wbC5oIgor
I2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9pbmxpbmVpbXBsLmgi
CisjaW5jbHVkZSAiaHRtbF9saXN0aW1wbC5oIgorI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5o
IgorI2luY2x1ZGUgImh0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAia2pzX2Nzcy5oIgogI2lu
Y2x1ZGUgImtqc19ldmVudHMuaCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKICNpbmNsdWRlICJr
anNfd2luZG93LmgiCi0jaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oIgot
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuaCIKLSNpbmNsdWRlICJyZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5oIgotCi0jaWYgX19BUFBMRV9fCi0jaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci11c2luZyBraHRtbDo6UmVuZGVyQ2FudmFz
SW1hZ2U7Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBE
T006OkhUTUxOYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7CisjaW5jbHVk
ZSAicmVuZGVyX2xheWVyLmgiCiAKICNpbmNsdWRlICJranNfaHRtbC5sdXQuaCIKIAordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CisKIG5hbWVzcGFjZSBLSlMgewogCiBjbGFzcyBIVE1MRWxlbWVu
dEZ1bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewpAQCAtOTAsNyArODAsNyBA
QCBwcml2YXRlOgogCiBLSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhIVE1MRG9jRnVuY3Rpb24pCiAK
LUpTVmFsdWUgKktKUzo6SFRNTERvY0Z1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1ZSAqSFRN
TERvY0Z1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZI
VE1MRG9jdW1lbnQ6OmluZm8pKQogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CkBAIC0xMzYsNyArMTI2LDcgQEAgSlNWYWx1ZSAqS0pTOjpIVE1MRG9jRnVuY3Rpb246OmNh
bGxBc0Z1bgogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICB9CiAgIGNhc2UgSFRNTERvY3Vt
ZW50OjpHZXRFbGVtZW50c0J5TmFtZToKLSAgICByZXR1cm4gZ2V0RE9NTm9kZUxpc3QoZXhlYywg
ZG9jLmdldEVsZW1lbnRzQnlOYW1lKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygp
KS5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZG9jLmdldEVsZW1lbnRzQnlOYW1lKGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKS5nZXQoKSk7CiAgIGNhc2UgSFRNTERv
Y3VtZW50OjpDYXB0dXJlRXZlbnRzOgogICBjYXNlIEhUTUxEb2N1bWVudDo6UmVsZWFzZUV2ZW50
czoKICAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuIFRoZXNlIGFyZSBOUy1zcGVjaWZpYyBsZWdh
Y3kgY2FsbHMuCkBAIC0xNDYsNyArMTM2LDcgQEAgSlNWYWx1ZSAqS0pTOjpIVE1MRG9jRnVuY3Rp
b246OmNhbGxBc0Z1bgogICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotY29uc3QgQ2xhc3NJ
bmZvIEtKUzo6SFRNTERvY3VtZW50OjppbmZvID0KK2NvbnN0IENsYXNzSW5mbyBIVE1MRG9jdW1l
bnQ6OmluZm8gPQogICB7ICJIVE1MRG9jdW1lbnQiLCAmRE9NRG9jdW1lbnQ6OmluZm8sICZIVE1M
RG9jdW1lbnRUYWJsZSwgMCB9OwogLyogU291cmNlIGZvciBIVE1MRG9jdW1lbnRUYWJsZS4gVXNl
ICJtYWtlIGhhc2h0YWJsZXMiIHRvIHJlZ2VuZXJhdGUuCiBAYmVnaW4gSFRNTERvY3VtZW50VGFi
bGUgMzAKQEAgLTIxMiw3ICsyMDIsNyBAQCBKU1ZhbHVlICpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRl
bUdldHRlcihFCiAgICAgRnJhbWUgKmZyYW1lOwogICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlm
cmFtZVRhZykgJiYgKGZyYW1lID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MSUZyYW1lRWxlbWVudElt
cGwgKj4obm9kZSktPmNvbnRlbnRGcmFtZSgpKSkKICAgICAgIHJldHVybiBXaW5kb3c6OnJldHJp
ZXZlKGZyYW1lKTsKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBub2RlKTsKKyAgICByZXR1
cm4gdG9KUyhleGVjLCBub2RlKTsKICAgfQogCiAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBjb2xsZWN0aW9uLmdldCgpKTsKQEAgLTIzOCw3ICsyMjgsNyBAQCBKU1ZhbHVlICpIVE1M
RG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoCiAgIGNhc2UgVVJMOgogICAgIHJldHVybiBqc1N0
cmluZyhkb2MuVVJMKCkpOwogICBjYXNlIEJvZHk6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YywgYm9keSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgYm9keSk7CiAgIGNhc2UgTG9jYXRpb246
CiAgICAgaWYgKFdpbmRvdyogd2luID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSkpCiAg
ICAgICByZXR1cm4gd2luLT5sb2NhdGlvbigpOwpAQCAtMzMwLDEyICszMjAsMTIgQEAgYm9vbCBI
VE1MRG9jdW1lbnQ6OmdldE93blByb3BlcnR5U2xvdChFeAogICByZXR1cm4gRE9NRG9jdW1lbnQ6
OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lk
IEtKUzo6SFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSFRNTERvY3Vt
ZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKIHsKICAgICBsb29rdXBQdXQ8SFRNTERvY3VtZW50
LCBET01Eb2N1bWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxEb2N1
bWVudFRhYmxlLCB0aGlzKTsKIH0KIAotdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAv
KmF0dHIqLykKK3ZvaWQgSFRNTERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogICBET01F
eGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgSFRNTERvY3VtZW50SW1wbCAm
ZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsKQEAgLTM2NCw3
ICszNTQsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5CiAgICAg
ICAvLyBXaGVuIGFzc2lnbmluZyBsb2NhdGlvbiwgSUUgYW5kIE1vemlsbGEgYm90aCByZXNvbHZl
IHRoZSBVUkwKICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSB3aGVyZSB0aGUgSmF2YVNj
cmlwdCBpcyBleGVjdXRpbmcgbm90CiAgICAgICAvLyB0aGUgdGFyZ2V0IGZyYW1lLgotICAgICAg
RnJhbWUgKmFjdGl2ZVBhcnQgPSBzdGF0aWNfY2FzdDxLSlM6OlNjcmlwdEludGVycHJldGVyICo+
KCBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSApLT5mcmFtZSgpOworICAgICAgRnJhbWUgKmFj
dGl2ZVBhcnQgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPiggZXhlYy0+ZHluYW1p
Y0ludGVycHJldGVyKCkgKS0+ZnJhbWUoKTsKICAgICAgIGlmIChhY3RpdmVQYXJ0KQogICAgICAg
ICBzdHIgPSBhY3RpdmVQYXJ0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHIpOwogCkBAIC00
MzcsNjQgKzQyNyw2NCBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1l
bnQ6OmFfaW5mbyA9IHsgIkhUTUxBbmNob3JFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6Omlu
Zm8sICZIVE1MQW5jaG9yRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpI
VE1MRWxlbWVudDo6YXBwbGV0X2luZm8gPSB7ICJIVE1MQXBwbGV0RWxlbWVudCIsICZLSlM6OkhU
TUxFbGVtZW50OjppbmZvLCAmSFRNTEFwcGxldEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xh
c3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmFyZWFfaW5mbyA9IHsgIkhUTUxBcmVhRWxlbWVudCIs
ICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEFyZWFFbGVtZW50VGFibGUsIDAgfTsKLWNv
bnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpiYXNlRm9udF9pbmZvID0geyAiSFRNTEJh
c2VGb250RWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEJhc2VGb250RWxl
bWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6YmFzZV9p
bmZvID0geyAiSFRNTEJhc2VFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1M
QmFzZUVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6
OmJsb2NrUXVvdGVfaW5mbyA9IHsgIkhUTUxCbG9ja1F1b3RlRWxlbWVudCIsICZLSlM6OkhUTUxF
bGVtZW50OjppbmZvLCAmSFRNTEJsb2NrUXVvdGVFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENs
YXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpib2R5X2luZm8gPSB7ICJIVE1MQm9keUVsZW1lbnQi
LCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxCb2R5RWxlbWVudFRhYmxlLCAwIH07Ci1j
b25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6YnJfaW5mbyA9IHsgIkhUTUxCUkVsZW1l
bnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxCUkVsZW1lbnRUYWJsZSwgMCB9Owot
Y29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmJ1dHRvbl9pbmZvID0geyAiSFRNTEJ1
dHRvbkVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxCdXR0b25FbGVtZW50
VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpjYW52YXNfaW5m
byA9IHsgIkhUTUxDYW52YXNFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1M
Q2FudmFzRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVu
dDo6Y2FwdGlvbl9pbmZvID0geyAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQiLCAmS0pTOjpIVE1M
RWxlbWVudDo6aW5mbywgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0
IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpjb2xfaW5mbyA9IHsgIkhUTUxUYWJsZUNvbEVs
ZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxUYWJsZUNvbEVsZW1lbnRUYWJs
ZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmRpcl9pbmZvID0geyAi
SFRNTERpcmVjdG9yeUVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxEaXJl
Y3RvcnlFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50
OjpkaXZfaW5mbyA9IHsgIkhUTUxEaXZFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8s
ICZIVE1MRGl2RWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxl
bWVudDo6ZGxfaW5mbyA9IHsgIkhUTUxETGlzdEVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6
aW5mbywgJkhUTUxETGlzdEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2luZm8gPSB7ICJIVE1MRmllbGRTZXRFbGVtZW50IiwgJktK
Uzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MRmllbGRTZXRFbGVtZW50VGFibGUsIDAgfTsKLWNv
bnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpmb250X2luZm8gPSB7ICJIVE1MRm9udEVs
ZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxGb250RWxlbWVudFRhYmxlLCAw
IH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6Zm9ybV9pbmZvID0geyAiSFRN
TEZvcm1FbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MRm9ybUVsZW1lbnRU
YWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmZyYW1lU2V0X2lu
Zm8gPSB7ICJIVE1MRnJhbWVTZXRFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZI
VE1MRnJhbWVTZXRFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxF
bGVtZW50OjpmcmFtZV9pbmZvID0geyAiSFRNTEZyYW1lRWxlbWVudCIsICZLSlM6OkhUTUxFbGVt
ZW50OjppbmZvLCAmSFRNTEZyYW1lRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8g
S0pTOjpIVE1MRWxlbWVudDo6aGVhZF9pbmZvID0geyAiSFRNTEhlYWRFbGVtZW50IiwgJktKUzo6
SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MSGVhZEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xh
c3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmhlYWRpbmdfaW5mbyA9IHsgIkhUTUxIZWFkaW5nRWxl
bWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEhlYWRpbmdFbGVtZW50VGFibGUs
IDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpocl9pbmZvID0geyAiSFRN
TEhSRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEhSRWxlbWVudFRhYmxl
LCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6aHRtbF9pbmZvID0geyAi
SFRNTEh0bWxFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MSHRtbEVsZW1l
bnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmlGcmFtZV9p
bmZvID0geyAiSFRNTElGcmFtZUVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhU
TUxJRnJhbWVFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVt
ZW50OjppbWdfaW5mbyA9IHsgIkhUTUxJbWFnZUVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6
aW5mbywgJkhUTUxJbWFnZUVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6
SFRNTEVsZW1lbnQ6OmluZm8gPSB7ICJIVE1MRWxlbWVudCIsICZKU0VsZW1lbnQ6OmluZm8sICZI
VE1MRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6
aW5wdXRfaW5mbyA9IHsgIkhUTUxJbnB1dEVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5m
bywgJkhUTUxJbnB1dEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRN
TEVsZW1lbnQ6OmlzSW5kZXhfaW5mbyA9IHsgIkhUTUxJc0luZGV4RWxlbWVudCIsICZLSlM6OkhU
TUxFbGVtZW50OjppbmZvLCAmSFRNTElzSW5kZXhFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENs
YXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpsYWJlbF9pbmZvID0geyAiSFRNTExhYmVsRWxlbWVu
dCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTExhYmVsRWxlbWVudFRhYmxlLCAwIH07
Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6bGVnZW5kX2luZm8gPSB7ICJIVE1M
TGVnZW5kRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTExlZ2VuZEVsZW1l
bnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OmxpX2luZm8g
PSB7ICJIVE1MTElFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MTElFbGVt
ZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpsaW5rX2lu
Zm8gPSB7ICJIVE1MTGlua0VsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxM
aW5rRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6
bWFwX2luZm8gPSB7ICJIVE1MTWFwRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAm
SFRNTE1hcEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1l
bnQ6Om1hcnF1ZWVfaW5mbyA9IHsgIkhUTUxNYXJxdWVlRWxlbWVudCIsICZLSlM6OkhUTUxFbGVt
ZW50OjppbmZvLCAmSFRNTE1hcnF1ZWVFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5m
byBLSlM6OkhUTUxFbGVtZW50OjptZW51X2luZm8gPSB7ICJIVE1MTWVudUVsZW1lbnQiLCAmS0pT
OjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxNZW51RWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBD
bGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6bWV0YV9pbmZvID0geyAiSFRNTE1ldGFFbGVtZW50
IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MTWV0YUVsZW1lbnRUYWJsZSwgMCB9Owot
Y29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6Om1vZF9pbmZvID0geyAiSFRNTE1vZEVs
ZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxNb2RFbGVtZW50VGFibGUsIDAg
fTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpvYmplY3RfaW5mbyA9IHsgIkhU
TUxPYmplY3RFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MT2JqZWN0RWxl
bWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6b2xfaW5m
byA9IHsgIkhUTUxPTGlzdEVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxP
TGlzdEVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6
Om9wdEdyb3VwX2luZm8gPSB7ICJIVE1MT3B0R3JvdXBFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1l
bnQ6OmluZm8sICZIVE1MT3B0R3JvdXBFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5m
byBLSlM6OkhUTUxFbGVtZW50OjpvcHRpb25faW5mbyA9IHsgIkhUTUxPcHRpb25FbGVtZW50Iiwg
JktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MT3B0aW9uRWxlbWVudFRhYmxlLCAwIH07Ci1j
b25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6cF9pbmZvID0geyAiSFRNTFBhcmFncmFw
aEVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxQYXJhZ3JhcGhFbGVtZW50
VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjpwYXJhbV9pbmZv
ID0geyAiSFRNTFBhcmFtRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFBh
cmFtRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6
cHJlX2luZm8gPSB7ICJIVE1MUHJlRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAm
SFRNTFByZUVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1l
bnQ6OnFfaW5mbyA9IHsgIkhUTUxRdW90ZUVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5m
bywgJkhUTUxRdW90ZUVsZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRN
TEVsZW1lbnQ6OnNjcmlwdF9pbmZvID0geyAiSFRNTFNjcmlwdEVsZW1lbnQiLCAmS0pTOjpIVE1M
RWxlbWVudDo6aW5mbywgJkhUTUxTY3JpcHRFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNz
SW5mbyBLSlM6OkhUTUxFbGVtZW50OjpzZWxlY3RfaW5mbyA9IHsgIkhUTUxTZWxlY3RFbGVtZW50
IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MU2VsZWN0RWxlbWVudFRhYmxlLCAwIH07
Ci1jb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6c3R5bGVfaW5mbyA9IHsgIkhUTUxT
dHlsZUVsZW1lbnQiLCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxTdHlsZUVsZW1lbnRU
YWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OnRhYmxlX2luZm8g
PSB7ICJIVE1MVGFibGVFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MVGFi
bGVFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojp0
YWJsZWNlbGxfaW5mbyA9IHsgIkhUTUxUYWJsZUNlbGxFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1l
bnQ6OmluZm8sICZIVE1MVGFibGVDZWxsRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0lu
Zm8gS0pTOjpIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2luZm8gPSB7ICJIVE1MVGFibGVTZWN0
aW9uRWxlbWVudCIsICZLSlM6OkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRUYWJsZSwgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OnRleHRB
cmVhX2luZm8gPSB7ICJIVE1MVGV4dEFyZWFFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6Omlu
Zm8sICZIVE1MVGV4dEFyZWFFbGVtZW50VGFibGUsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBLSlM6
OkhUTUxFbGVtZW50Ojp0aXRsZV9pbmZvID0geyAiSFRNTFRpdGxlRWxlbWVudCIsICZLSlM6OkhU
TUxFbGVtZW50OjppbmZvLCAmSFRNTFRpdGxlRWxlbWVudFRhYmxlLCAwIH07Ci1jb25zdCBDbGFz
c0luZm8gS0pTOjpIVE1MRWxlbWVudDo6dHJfaW5mbyA9IHsgIkhUTUxUYWJsZVJvd0VsZW1lbnQi
LCAmS0pTOjpIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxUYWJsZVJvd0VsZW1lbnRUYWJsZSwgMCB9
OwotY29uc3QgQ2xhc3NJbmZvIEtKUzo6SFRNTEVsZW1lbnQ6OnVsX2luZm8gPSB7ICJIVE1MVUxp
c3RFbGVtZW50IiwgJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MVUxpc3RFbGVtZW50VGFi
bGUsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBIVE1MRWxlbWVudDo6YV9pbmZvID0geyAiSFRNTEFu
Y2hvckVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MQW5jaG9yRWxlbWVudFRhYmxl
LCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmFwcGxldF9pbmZvID0geyAiSFRN
TEFwcGxldEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MQXBwbGV0RWxlbWVudFRh
YmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmFyZWFfaW5mbyA9IHsgIkhU
TUxBcmVhRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxBcmVhRWxlbWVudFRhYmxl
LCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2luZm8gPSB7ICJI
VE1MQmFzZUZvbnRFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEJhc2VGb250RWxl
bWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmJhc2VfaW5mbyA9
IHsgIkhUTUxCYXNlRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxCYXNlRWxlbWVu
dFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVfaW5m
byA9IHsgIkhUTUxCbG9ja1F1b3RlRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxC
bG9ja1F1b3RlRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6
OmJvZHlfaW5mbyA9IHsgIkhUTUxCb2R5RWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhU
TUxCb2R5RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmJy
X2luZm8gPSB7ICJIVE1MQlJFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEJSRWxl
bWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmJ1dHRvbl9pbmZv
ID0geyAiSFRNTEJ1dHRvbkVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MQnV0dG9u
RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmNhbnZhc19p
bmZvID0geyAiSFRNTENhbnZhc0VsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MQ2Fu
dmFzRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OmNhcHRp
b25faW5mbyA9IHsgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZv
LCAmSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRUYWJsZSwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEhU
TUxFbGVtZW50Ojpjb2xfaW5mbyA9IHsgIkhUTUxUYWJsZUNvbEVsZW1lbnQiLCAmSFRNTEVsZW1l
bnQ6OmluZm8sICZIVE1MVGFibGVDb2xFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5m
byBIVE1MRWxlbWVudDo6ZGlyX2luZm8gPSB7ICJIVE1MRGlyZWN0b3J5RWxlbWVudCIsICZIVE1M
RWxlbWVudDo6aW5mbywgJkhUTUxEaXJlY3RvcnlFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENs
YXNzSW5mbyBIVE1MRWxlbWVudDo6ZGl2X2luZm8gPSB7ICJIVE1MRGl2RWxlbWVudCIsICZIVE1M
RWxlbWVudDo6aW5mbywgJkhUTUxEaXZFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5m
byBIVE1MRWxlbWVudDo6ZGxfaW5mbyA9IHsgIkhUTUxETGlzdEVsZW1lbnQiLCAmSFRNTEVsZW1l
bnQ6OmluZm8sICZIVE1MRExpc3RFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBI
VE1MRWxlbWVudDo6ZmllbGRTZXRfaW5mbyA9IHsgIkhUTUxGaWVsZFNldEVsZW1lbnQiLCAmSFRN
TEVsZW1lbnQ6OmluZm8sICZIVE1MRmllbGRTZXRFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENs
YXNzSW5mbyBIVE1MRWxlbWVudDo6Zm9udF9pbmZvID0geyAiSFRNTEZvbnRFbGVtZW50IiwgJkhU
TUxFbGVtZW50OjppbmZvLCAmSFRNTEZvbnRFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNz
SW5mbyBIVE1MRWxlbWVudDo6Zm9ybV9pbmZvID0geyAiSFRNTEZvcm1FbGVtZW50IiwgJkhUTUxF
bGVtZW50OjppbmZvLCAmSFRNTEZvcm1FbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5m
byBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfaW5mbyA9IHsgIkhUTUxGcmFtZVNldEVsZW1lbnQiLCAm
SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MRnJhbWVTZXRFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0
IENsYXNzSW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfaW5mbyA9IHsgIkhUTUxGcmFtZUVsZW1lbnQi
LCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MRnJhbWVFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0
IENsYXNzSW5mbyBIVE1MRWxlbWVudDo6aGVhZF9pbmZvID0geyAiSFRNTEhlYWRFbGVtZW50Iiwg
JkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEhlYWRFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENs
YXNzSW5mbyBIVE1MRWxlbWVudDo6aGVhZGluZ19pbmZvID0geyAiSFRNTEhlYWRpbmdFbGVtZW50
IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTEhlYWRpbmdFbGVtZW50VGFibGUsIDAgfTsKK2Nv
bnN0IENsYXNzSW5mbyBIVE1MRWxlbWVudDo6aHJfaW5mbyA9IHsgIkhUTUxIUkVsZW1lbnQiLCAm
SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MSFJFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNz
SW5mbyBIVE1MRWxlbWVudDo6aHRtbF9pbmZvID0geyAiSFRNTEh0bWxFbGVtZW50IiwgJkhUTUxF
bGVtZW50OjppbmZvLCAmSFRNTEh0bWxFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5m
byBIVE1MRWxlbWVudDo6aUZyYW1lX2luZm8gPSB7ICJIVE1MSUZyYW1lRWxlbWVudCIsICZIVE1M
RWxlbWVudDo6aW5mbywgJkhUTUxJRnJhbWVFbGVtZW50VGFibGUsIDAgfTsKK2NvbnN0IENsYXNz
SW5mbyBIVE1MRWxlbWVudDo6aW1nX2luZm8gPSB7ICJIVE1MSW1hZ2VFbGVtZW50IiwgJkhUTUxF
bGVtZW50OjppbmZvLCAmSFRNTEltYWdlRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0lu
Zm8gSFRNTEVsZW1lbnQ6OmluZm8gPSB7ICJIVE1MRWxlbWVudCIsICZKU0VsZW1lbnQ6OmluZm8s
ICZIVE1MRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Omlu
cHV0X2luZm8gPSB7ICJIVE1MSW5wdXRFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRN
TElucHV0RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Omlz
SW5kZXhfaW5mbyA9IHsgIkhUTUxJc0luZGV4RWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywg
JkhUTUxJc0luZGV4RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1l
bnQ6OmxhYmVsX2luZm8gPSB7ICJIVE1MTGFiZWxFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZv
LCAmSFRNTExhYmVsRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1l
bnQ6OmxlZ2VuZF9pbmZvID0geyAiSFRNTExlZ2VuZEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6Omlu
Zm8sICZIVE1MTGVnZW5kRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVs
ZW1lbnQ6OmxpX2luZm8gPSB7ICJIVE1MTElFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAm
SFRNTExJRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Omxp
bmtfaW5mbyA9IHsgIkhUTUxMaW5rRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxM
aW5rRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om1hcF9p
bmZvID0geyAiSFRNTE1hcEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MTWFwRWxl
bWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om1hcnF1ZWVfaW5m
byA9IHsgIkhUTUxNYXJxdWVlRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxNYXJx
dWVlRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om1lbnVf
aW5mbyA9IHsgIkhUTUxNZW51RWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxNZW51
RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om1ldGFfaW5m
byA9IHsgIkhUTUxNZXRhRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhUTUxNZXRhRWxl
bWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om1vZF9pbmZvID0g
eyAiSFRNTE1vZEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MTW9kRWxlbWVudFRh
YmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om9iamVjdF9pbmZvID0geyAi
SFRNTE9iamVjdEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MT2JqZWN0RWxlbWVu
dFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om9sX2luZm8gPSB7ICJI
VE1MT0xpc3RFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTE9MaXN0RWxlbWVudFRh
YmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2luZm8gPSB7
ICJIVE1MT3B0R3JvdXBFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTE9wdEdyb3Vw
RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9p
bmZvID0geyAiSFRNTE9wdGlvbkVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MT3B0
aW9uRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnBfaW5m
byA9IHsgIkhUTUxQYXJhZ3JhcGhFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFBh
cmFncmFwaEVsZW1lbnRUYWJsZSwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEhUTUxFbGVtZW50Ojpw
YXJhbV9pbmZvID0geyAiSFRNTFBhcmFtRWxlbWVudCIsICZIVE1MRWxlbWVudDo6aW5mbywgJkhU
TUxQYXJhbUVsZW1lbnRUYWJsZSwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEhUTUxFbGVtZW50Ojpw
cmVfaW5mbyA9IHsgIkhUTUxQcmVFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFBy
ZUVsZW1lbnRUYWJsZSwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEhUTUxFbGVtZW50OjpxX2luZm8g
PSB7ICJIVE1MUXVvdGVFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFF1b3RlRWxl
bWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnNjcmlwdF9pbmZv
ID0geyAiSFRNTFNjcmlwdEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MU2NyaXB0
RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9p
bmZvID0geyAiSFRNTFNlbGVjdEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MU2Vs
ZWN0RWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnN0eWxl
X2luZm8gPSB7ICJIVE1MU3R5bGVFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFN0
eWxlRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnRhYmxl
X2luZm8gPSB7ICJIVE1MVGFibGVFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFRh
YmxlRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnRhYmxl
Y2VsbF9pbmZvID0geyAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQiLCAmSFRNTEVsZW1lbnQ6OmluZm8s
ICZIVE1MVGFibGVDZWxsRWxlbWVudFRhYmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVs
ZW1lbnQ6OnRhYmxlc2VjdGlvbl9pbmZvID0geyAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQiLCAm
SFRNTEVsZW1lbnQ6OmluZm8sICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudFRhYmxlLCAwIH07Citj
b25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVhX2luZm8gPSB7ICJIVE1MVGV4dEFy
ZWFFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFRleHRBcmVhRWxlbWVudFRhYmxl
LCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnRpdGxlX2luZm8gPSB7ICJIVE1M
VGl0bGVFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFRpdGxlRWxlbWVudFRhYmxl
LCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnRyX2luZm8gPSB7ICJIVE1MVGFi
bGVSb3dFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFRhYmxlUm93RWxlbWVudFRh
YmxlLCAwIH07Citjb25zdCBDbGFzc0luZm8gSFRNTEVsZW1lbnQ6OnVsX2luZm8gPSB7ICJIVE1M
VUxpc3RFbGVtZW50IiwgJkhUTUxFbGVtZW50OjppbmZvLCAmSFRNTFVMaXN0RWxlbWVudFRhYmxl
LCAwIH07CiAKLWNvbnN0IENsYXNzSW5mbyogS0pTOjpIVE1MRWxlbWVudDo6Y2xhc3NJbmZvKCkg
Y29uc3QKK2NvbnN0IENsYXNzSW5mbyogSFRNTEVsZW1lbnQ6OmNsYXNzSW5mbygpIGNvbnN0CiB7
CiAgICAgc3RhdGljIEhhc2hNYXA8RE9NOjpBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgQ2xhc3NJ
bmZvKj4gY2xhc3NJbmZvTWFwOwogICAgIGlmIChjbGFzc0luZm9NYXAuaXNFbXB0eSgpKSB7CkBA
IC0xMTk1LDcgKzExODUsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVy
KEV4CiAgICAgSFRNTEVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAq
PihzbG90LnNsb3RCYXNlKCkpOwogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwoKSk7CiAKLSAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLT5lbGVtZW50cygpLT5pdGVtKHNsb3QuaW5kZXgo
KSkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGZvcm0tPmVsZW1lbnRzKCktPml0ZW0oc2xvdC5p
bmRleCgpKSk7CiB9CiAKIEpTVmFsdWUgKkhUTUxFbGVtZW50Ojpmb3JtTmFtZUdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMjExLDcgKzEyMDEs
NyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6c2VsZWN0SW5kZXhHZXR0ZXIoCiAgICAgSFRNTEVs
ZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihzbG90LnNsb3RCYXNl
KCkpOwogICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwoKSk7CiAKLSAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBzZWxlY3QtPm9wdGlvbnMoKS0+aXRlbShzbG90LmluZGV4KCkpKTsKKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBzZWxlY3QtPm9wdGlvbnMoKS0+aXRlbShzbG90LmluZGV4KCkp
KTsKIH0KIAogSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OmZyYW1lc2V0TmFtZUdldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0xMzI1LDcgKzEzMTUsNyBA
QCBib29sIEhUTUxFbGVtZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlCiAgICAgcmV0dXJuIGdl
dFN0YXRpY1Byb3BlcnR5U2xvdDxIVE1MRWxlbWVudEZ1bmN0aW9uLCBIVE1MRWxlbWVudCwgSlNF
bGVtZW50PihleGVjLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90
KTsKIH0KIAotYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0Citi
b29sIEhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1l
bnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7
CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykpIHsKQEAg
LTEzMzgsNyArMTMyOCw3IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1wbGVtZW50c0NhbGwo
KSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUpTVmFsdWUgKktKUzo6SFRNTEVsZW1lbnQ6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExp
c3QmYXJncykKK0pTVmFsdWUgKkhUTUxFbGVtZW50OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0JmFyZ3MpCiB7CiAgICAgSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwo
KSk7CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUob2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykpIHsK
QEAgLTEzODcsNyArMTM3Nyw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4
ZWNTdGEKICAgICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICAKICAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhsaW5rLnR5cGUoKSk7CiAgICAgICAgIGNhc2UgTGlua1NoZWV0OiAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNo
ZWV0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbGluay5zaGVldCgpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0xNDI2LDcgKzE0MTYsNyBAQCBK
U1ZhbHVlICpIVE1MRWxlbWVudDo6aXNJbmRleEdldHRlcihFeGVjCiB7CiAgICAgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9y
bUVsZW1lbnQKICAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICByZXR1cm4ganNT
dHJpbmcoaXNpbmRleC5wcm9tcHQoKSk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpAQCAtMTQzOSw3ICsxNDI5LDcgQEAgSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVy
KEV4ZWNTdAogICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4ganNCb29s
ZWFuKHN0eWxlLmRpc2FibGVkKCkpOwogICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAg
ICByZXR1cm4ganNTdHJpbmcoc3R5bGUubWVkaWEoKSk7CiAgICAgICAgIGNhc2UgU3R5bGVUeXBl
OiAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhzdHlsZS50eXBlKCkpOwotICAgICAgICBjYXNl
IFN0eWxlU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHls
ZS5zaGVldCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgc3R5bGUuc2hlZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQpAQCAtMTQ5OSw3ICsxNDg5LDcgQEAgSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OnNlbGVjdEdl
dHRlcihFeGVjUwogICAgICAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAgcmV0dXJuIGpz
TnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOwogICAgICAgICBjYXNlIFNlbGVjdFZhbHVl
OiAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKICAgICAgICAgY2Fz
ZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBqc051bWJlcihzZWxlY3QubGVuZ3RoKCkp
OwotICAgICAgICBjYXNlIFNlbGVjdEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgc2VsZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzZWxlY3QuZm9ybSgp
KTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOiAg
ICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9u
cygpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgogICAgICAgICBjYXNl
IFNlbGVjdERpc2FibGVkOiAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihzZWxlY3QuZGlzYWJsZWQo
KSk7CiAgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4ganNCb29sZWFu
KHNlbGVjdC5tdWx0aXBsZSgpKTsKQEAgLTE1MjQsNyArMTUxNCw3IEBAIEpTVmFsdWUgKkhUTUxF
bGVtZW50OjpvcHRpb25HZXR0ZXIoRXhlY1MKIHsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwm
IG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBPcHRpb25Gb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAogICAgICAgICBjYXNl
IE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0dXJuIGpzQm9vbGVhbihvcHRpb24uZGVmYXVsdFNl
bGVjdGVkKCkpOwogICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKG9wdGlvbi50ZXh0KCkpOwogICAgICAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKG9wdGlvbi5pbmRleCgpKTsKQEAgLTE1NTYsNyArMTU0Niw3IEBA
IEpTVmFsdWUgKkhUTUxFbGVtZW50OjppbnB1dEdldHRlcihFeGVjU3QKICAgICBzd2l0Y2ggKHRv
a2VuKSB7CiAgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBqc1N0cmlu
ZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7CiAgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tl
ZDogIHJldHVybiBqc0Jvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0gICAgICAgIGNh
c2UgSW5wdXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9y
bSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJbnB1dEZvcm06ICAg
ICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYyxpbnB1dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3Jt
RWxlbWVudAogICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4ganNTdHJp
bmcoaW5wdXQuYWNjZXB0KCkpOwogICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4ganNTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwogICAgICAgICBjYXNlIElucHV0QWxp
Z246ICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoaW5wdXQuYWxpZ24oKSk7CkBAIC0xNTg0LDcg
KzE1NzQsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIoRXhlCiAgICAg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAg
IGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHJldHVybiBqc1N0cmluZyh0ZXh0YXJlYS5k
ZWZhdWx0VmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgVGV4dEFyZWFGb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGV4dGFyZWEuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAogICAgICAgICBj
YXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4ganNTdHJpbmcodGV4dGFyZWEuYWNj
ZXNzS2V5KCkpOwogICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIodGV4dGFyZWEuY29scygpKTsKICAgICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVk
OiAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKQEAgLTE2MDQs
NyArMTU5NCw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpidXR0b25HZXR0ZXIoRXhlY1MKIHsK
ICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0
dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAg
Y2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsYnV0dG9u
LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgQnV0dG9uRm9y
bTogICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLGJ1dHRvbi5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAogICAgICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJu
IGpzU3RyaW5nKGJ1dHRvbi5hY2Nlc3NLZXkoKSk7CiAgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4ganNCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKICAgICAgICAg
Y2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhidXR0b24ubmFtZSgp
KTsKQEAgLTE2MTksNyArMTYwOSw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpsYWJlbEdldHRl
cihFeGVjU3QKIHsKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nh
c3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExh
YmVsRm9ybTogICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5
cGUgSFRNTEZvcm1FbGVtZW50CiAgICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHJl
dHVybiBqc1N0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7CiAgICAgICAgIGNhc2UgTGFiZWxIdG1s
Rm9yOiAgICAgICAgIHJldHVybiBqc1N0cmluZyhsYWJlbC5odG1sRm9yKCkpOwogICAgIH0KQEAg
LTE2MzAsNyArMTYyMCw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRlcihF
eGUKIHsKICAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEZpZWxkU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIGlmICh0b2tlbiA9PSBG
aWVsZFNldEZvcm0pCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9y
bSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYyxm
aWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCkBAIC0xNjM4LDcgKzE2MjgsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVu
dDo6bGVnZW5kR2V0dGVyKEV4ZWNTCiB7CiAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdl
bmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVu
dAorICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYyxs
ZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgY2FzZSBMZWdl
bmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBqc1N0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOwog
ICAgICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGxlZ2Vu
ZC5hbGlnbigpKTsKICAgICB9CkBAIC0xODY3LDcgKzE4NTcsNyBAQCBKU1ZhbHVlICpIVE1MRWxl
bWVudDo6b2JqZWN0R2V0dGVyKEV4ZWNTCiB7CiAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsJiBv
YmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxl
bWVudAorICAgICAgICBjYXNlIE9iamVjdEZvcm06ICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YyxvYmplY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgY2FzZSBP
YmplY3RDb2RlOiAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhvYmplY3QuY29kZSgpKTsKICAg
ICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVybiBqc1N0cmluZyhvYmplY3Qu
YWxpZ24oKSk7CiAgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4ganNT
dHJpbmcob2JqZWN0LmFyY2hpdmUoKSk7CkBAIC0xODc1LDcgKzE4NjUsNyBAQCBKU1ZhbHVlICpI
VE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyKEV4ZWNTCiAgICAgICAgIGNhc2UgT2JqZWN0Q29kZUJh
c2U6ICAgICAgICByZXR1cm4ganNTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOwogICAgICAgICBj
YXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKICAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5j
b250ZW50RG9jdW1lbnQoKSkgOiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvSlMoZXhlYywgb2JqZWN0LmNvbnRlbnREb2N1bWVudCgp
KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICBy
ZXR1cm4ganNTdHJpbmcob2JqZWN0LmRhdGEoKSk7CiAgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFy
ZTogICAgICAgICByZXR1cm4ganNCb29sZWFuKG9iamVjdC5kZWNsYXJlKCkpOwogICAgICAgICBj
YXNlIE9iamVjdEhlaWdodDogICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG9iamVjdC5oZWlnaHQo
KSk7CkBAIC0xOTgwLDkgKzE5NzAsOSBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6dGFibGVHZXR0
ZXIoRXhlY1N0CiB7CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19j
YXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAg
ICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLnRIZWFkKCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci0gICAgICAgIGNh
c2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZv
b3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJs
ZUNhcHRpb246ICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYyx0YWJsZS5jYXB0aW9uKCkpOyAvLyB0
eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVUSGVhZDogICAg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dAogICAgICAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxl
Y3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgog
ICAgICAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rp
b24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgog
ICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodGFibGUu
YWxpZ24oKSk7CkBAIC0yMDg3LDcgKzIwNzcsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6ZnJh
bWVHZXR0ZXIoRXhlY1N0CiAgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewogICAgICAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hl
Y2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMs
IGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9KUyhleGVjLCBmcmFtZUVsZW1l
bnQuY29udGVudERvY3VtZW50KCkpIDoganNVbmRlZmluZWQoKTsKICAgICAgICAgY2FzZSBGcmFt
ZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVt
ZW50LmNvbnRlbnREb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShmcmFtZUVsZW1lbnQuY29udGVudEZyYW1lKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqc1VuZGVmaW5lZCgpOwpA
QCAtMjExNCw3ICsyMTA0LDcgQEAgSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OmlGcmFtZUdldHRlcihF
eGVjUwogICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBjaGVjayA/CiAgICAgICAgIGNhc2UgSUZy
YW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAog
ICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1l
bnQoKSkgOiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b0pTKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRG
cmFtZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoganNVbmRl
ZmluZWQoKTsKQEAgLTIxNjUsNyArMjE1NSw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEUKICAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgogICAgICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKGVsZW1lbnQub3V0ZXJUZXh0KCkpOwogICAgICAgICBjYXNlIEVs
ZW1lbnREb2N1bWVudDoKLSAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVu
dC5vd25lckRvY3VtZW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYyxlbGVtZW50
Lm93bmVyRG9jdW1lbnQoKSk7CiAgICAgICAgIGNhc2UgRWxlbWVudENoaWxkcmVuOgogICAgICAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5n
ZXQoKSk7CiAgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKQEAgLTIxODEsNyAr
MjE3MSw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEUKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotVVN0cmluZyBLSlM6OkhUTUxFbGVtZW50Ojp0b1N0
cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitVU3RyaW5nIEhUTUxFbGVtZW50Ojp0b1N0cmlu
ZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShh
VGFnKSkKICAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hv
ckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CkBAIC0yMjAxLDEyICsyMTkxLDEyIEBA
IHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUwKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0
YXRlICpleGVjLCBTY29wZUNoYWluICZzY29wZSkgY29uc3QKK3ZvaWQgSFRNTEVsZW1lbnQ6OnB1
c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBj
b25zdAogewogICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4oaW1wbCgpKTsKIAogICAvLyBUaGUgZG9jdW1lbnQgaXMgcHV0IG9uIGZpcnN0
LCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGl0IG9ubHkgYWZ0ZXIgdGhlIGVsZW1lbnQgYW5kIGZv
cm0uCi0gIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZ2V0RE9NTm9kZShleGVj
LCBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpKSk7CisgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8
SlNPYmplY3QgKj4odG9KUyhleGVjLCBlbGVtZW50LT5vd25lckRvY3VtZW50KCkpKSk7CiAKICAg
Ly8gVGhlIGZvcm0gaXMgbmV4dCwgc2VhcmNoZWQgYmVmb3JlIHRoZSBkb2N1bWVudCwgYnV0IGFm
dGVyIHRoZSBlbGVtZW50IGl0c2VsZi4KICAgCkBAIC0yMjE1LDE4ICsyMjA1LDE4IEBAIHZvaWQg
S0pTOjpIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclMKICAgLy8gPHRhYmxlPiBvciA8dGJv
ZHk+LgogICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtID0gZ2V0Rm9ybShlbGVtZW50KTsKICAg
aWYgKGZvcm0pCi0gICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxKU09iamVjdCAqPihnZXRET01O
b2RlKGV4ZWMsIGZvcm0pKSk7CisgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxKU09iamVjdCAq
Pih0b0pTKGV4ZWMsIGZvcm0pKSk7CiAgIGVsc2UgewogICAgIE5vZGVJbXBsICpmb3JtID0gZWxl
bWVudC0+cGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdOYW1l
KGZvcm1UYWcpKQogICAgICAgZm9ybSA9IGZvcm0tPnBhcmVudE5vZGUoKTsKICAgICAKICAgICBp
ZiAoZm9ybSkKLSAgICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZ2V0RE9N
Tm9kZShleGVjLCBmb3JtKSkpOworICAgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxKU09iamVj
dCAqPih0b0pTKGV4ZWMsIGZvcm0pKSk7CiAgIH0KICAgCiAgIC8vIFRoZSBlbGVtZW50IGlzIG9u
IHRvcCwgc2VhcmNoZWQgZmlyc3QuCi0gIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8SlNPYmplY3Qg
Kj4oZ2V0RE9NTm9kZShleGVjLCBlbGVtZW50KSkpOworICBzY29wZS5wdXNoKHN0YXRpY19jYXN0
PEpTT2JqZWN0ICo+KHRvSlMoZXhlYywgZWxlbWVudCkpKTsKIH0KIAogSFRNTEVsZW1lbnRGdW5j
dGlvbjo6SFRNTEVsZW1lbnRGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGludCBpLCBpbnQgbGVu
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQpAQCAtMjIzNiwxNDYgKzIyMjYsMTUxIEBAIEhUTUxF
bGVtZW50RnVuY3Rpb246OkhUTUxFbGVtZW50RnVuY3Rpb24KICAgcHV0KGV4ZWMsbGVuZ3RoUHJv
cGVydHlOYW1lLGpzTnVtYmVyKGxlbiksRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CiB9
CiAKLUpTVmFsdWUgKktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK3N0YXRp
YyBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBjb250ZXh0KQoreworICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQsIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihleGVjLCBjb250ZXh0KTsKK30K
KworSlNWYWx1ZSAqSFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgICBpZiAo
IXRoaXNPYmotPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkKKyAgICBpZiAoIXRo
aXNPYmotPmluaGVyaXRzKCZIVE1MRWxlbWVudDo6aW5mbykpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CiAgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPih0aGlzT2JqKS0+
aW1wbCgpKTsKIAogICAgIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShmb3JtVGFnKSkgewogICAg
ICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgaWYgKGlkID09IEhUTUxFbGVtZW50OjpGb3JtU3VibWl0
KSB7CiAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpG
b3JtUmVzZXQpIHsKICAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKHNlbGVjdFRhZykpIHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
ICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKKyAgICAg
ICAgaWYgKGlkID09IEhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKICAgICAgICAgICAgIHNlbGVj
dC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSwgZXhj
ZXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgewor
ICAgICAgICBlbHNlIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7CiAgICAg
ICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgeworICAgICAgICBlbHNlIGlm
IChpZCA9PSBIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewogICAgICAgICAgICAgc2VsZWN0LmJs
dXIoKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEZvY3VzKSB7CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykgewogICAgICAgICAg
ICAgc2VsZWN0LmZvY3VzKCk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShpbnB1dFRh
ZykpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIpIHsKKyAgICAgICAgaWYgKGlkID09IEhUTUxFbGVtZW50
OjpJbnB1dEJsdXIpIHsKICAgICAgICAgICAgIGlucHV0LmJsdXIoKTsKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRN
TEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgeworICAgICAgICBlbHNlIGlm
IChpZCA9PSBIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKICAgICAgICAgICAgIGlucHV0LnNl
bGVjdCgpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgeworICAg
ICAgICBlbHNlIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgewogICAgICAgICAg
ICAgaW5wdXQuY2xpY2soKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2V0
U2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6Oklu
cHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKICAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJh
bmdlKGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpOwogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoYnV0dG9uVGFnKSkgewogICAgICAgICBIVE1MQnV0
dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRv
bkJsdXIpIHsKKyAgICAgICAgaWYgKGlkID09IEhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CiAg
ICAgICAgICAgICBidXR0b24uYmx1cigpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
QnV0dG9uRm9jdXMpIHsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OkJ1dHRv
bkZvY3VzKSB7CiAgICAgICAgICAgICBidXR0b24uZm9jdXMoKTsKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKGxhYmVsVGFnKSkgewogICAgICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCAm
bGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9jdXMpIHsKKyAgICAgICAg
aWYgKGlkID09IEhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7CiAgICAgICAgICAgICBsYWJlbC5m
b2N1cygpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUobGVnZW5kVGFnKSkgewogICAg
ICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdl
bmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7CisgICAgICAgIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6TGVn
ZW5kRm9jdXMpIHsKICAgICAgICAgICAgIGxlZ2VuZC5mb2N1cygpOwogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVu
dC5oYXNMb2NhbE5hbWUodGV4dGFyZWFUYWcpKSB7CiAgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFC
bHVyKSB7CisgICAgICAgIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7CiAg
ICAgICAgICAgICB0ZXh0YXJlYS5ibHVyKCk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpUZXh0QXJlYUZvY3VzKSB7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpU
ZXh0QXJlYUZvY3VzKSB7CiAgICAgICAgICAgICB0ZXh0YXJlYS5mb2N1cygpOwogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgZWxzZSBpZiAo
aWQgPT0gSFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0KSB7CiAgICAgICAgICAgICB0ZXh0YXJl
YS5zZWxlY3QoKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2Vs
ZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OlRleHRB
cmVhU2V0U2VsZWN0aW9uUmFuZ2UpIHsKICAgICAgICAgICAgIHRleHRhcmVhLnNldFNlbGVjdGlv
blJhbmdlKGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpOwog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoYVRhZykpIHsKICAgICAgICAgSFRNTEFuY2hv
ckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JC
bHVyKSB7CisgICAgICAgIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikgewogICAg
ICAgICAgICAgYW5jaG9yLmJsdXIoKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFu
Y2hvckZvY3VzKSB7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpBbmNob3JG
b2N1cykgewogICAgICAgICAgICAgYW5jaG9yLmZvY3VzKCk7CiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpBbmNob3JUb1N0cmluZykKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRNTEVs
ZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHRoaXNP
YmotPnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUodGFibGVUYWcpKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVUSGVhZCkKLSAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEhlYWQoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKKyAgICAg
ICAgaWYgKGlkID09IEhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQorICAgICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKKyAgICAgICAgZWxzZSBpZiAo
aWQgPT0gSFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKICAgICAgICAgICAgIHRhYmxl
LmRlbGV0ZVRIZWFkKCk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0
ZVRGb290KQotICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVU
Rm9vdCgpKTsKLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVE
ZWxldGVURm9vdCkgeworICAgICAgICBlbHNlIGlmIChpZCA9PSBIVE1MRWxlbWVudDo6VGFibGVD
cmVhdGVURm9vdCkKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsdGFibGUuY3JlYXRlVEZv
b3QoKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRG
b290KSB7CiAgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOwogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVDYXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOwotICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikgewogICAgICAgICAgICAg
dGFibGUuZGVsZXRlQ2FwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVJbnNlcnRSb3cpCi0gICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmlu
c2VydFJvdyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQorICAgICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS0+dG9JbnQzMihleGVjKSwg
ZXhjZXB0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpUYWJsZURl
bGV0ZVJvdykgewogICAgICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYyksIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgfQpAQCAtMjM4NCwzMCArMjM3OSwzMCBAQCBKU1ZhbHVlICpLSlM6OkhUTUxFbGVtZW50
RnVuY3Rpb246OmNhbGxBCiAgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUodGJvZHlU
YWcpIHx8CiAgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUodGZvb3RUYWcpKSB7CiAg
ICAgICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdz
WzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVsZXRlUm93KSB7CisgICAgICAgIGlmIChp
ZCA9PSBIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLT50b0ludDMyKGV4
ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OlRh
YmxlU2VjdGlvbkRlbGV0ZVJvdykgewogICAgICAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJv
dyhhcmdzWzBdLT50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUodHJUYWcpKSB7CiAgICAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0
YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxs
KQotICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZVJvdy5pbnNlcnRDZWxs
KGFyZ3NbMF0tPnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0RlbGV0ZUNlbGwpIHsKKyAgICAgICAgaWYg
KGlkID09IEhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1
cm4gdG9KUyhleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS0+dG9JbnQzMihleGVjKSwg
ZXhjZXB0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEhUTUxFbGVtZW50OjpUYWJsZVJv
d0RlbGV0ZUNlbGwpIHsKICAgICAgICAgICAgIHRhYmxlUm93LmRlbGV0ZUNlbGwoYXJnc1swXS0+
dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KG1hcnF1ZWVUYWcpKSB7Ci0gICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpNYXJx
dWVlU3RhcnQgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAorICAgICAgICBpZiAoaWQgPT0gSFRN
TEVsZW1lbnQ6Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAg
ICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQu
cmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CiAgICAgICAgICAgICBlbGVtZW50LnJl
bmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3RhcnQoKTsKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpNYXJxdWVlU3RvcCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCisgICAgICAgIGlm
IChpZCA9PSBIVE1MRWxlbWVudDo6TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJlcigpICYm
IAogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpICYmCiAgICAgICAgICAg
ICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKSkgewogICAgICAgICAgICAg
ZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCktPnN0b3AoKTsKQEAgLTI0MTUs
MTggKzI0MTAsMTQgQEAgSlNWYWx1ZSAqS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjpjYWxsQQog
ICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKGNhbnZh
c1RhZykpIHsKLSAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkdldENvbnRleHQp
IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAwIHx8IChhcmdzLnNpemUoKSA9PSAx
ICYmIGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRleHQyRCgmZWxlbWVudCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoaWQgPT0gSFRNTEVsZW1lbnQ6OkdldENvbnRleHQpCisgICAgICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudEltcGwqPigmZWxl
bWVudCktPmdldENvbnRleHQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpKTsK
ICAgICB9CiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBLSlM6OkhUTUxF
bGVtZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSFRNTEVsZW1lbnQ6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFs
dWUsIGludCBhdHRyKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKICAgICAvLyBGaXJzdCBsb29rIGF0IGR5
bmFtaWMgcHJvcGVydGllcwpAQCAtMjQ2MSw3ICsyNDUyLDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVt
ZW50OjpwdXQoRXhlY1N0YXRlICpleAogICAgICAgICB9CiAgICAgfQogCi0gICAgbG9va3VwUHV0
PEtKUzo6SFRNTEVsZW1lbnQsIEpTRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOworICAgIGxvb2t1cFB1dDxIVE1MRWxlbWVu
dCwgSlNFbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1l
bnRUYWJsZSwgdGhpcyk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQpAQCAtMzIyNSw3ICszMjE2LDcgQEAgSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246Omxl
bmd0aEdldHRlcihFeAogSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246OmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MQ29sbGVj
dGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uICo+KHNsb3Quc2xvdEJh
c2UoKSk7Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVt
KHNsb3QuaW5kZXgoKSkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+
aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAogSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246Om5hbWVH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtMzI2
NCw3ICszMjU1LDcgQEAgYm9vbCBIVE1MQ29sbGVjdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KAog
CiAvLyBIVE1MQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJv
dGggZ2V0IGFuZCBjYWxsLAogLy8gc28gdGhhdCBkb2N1bWVudC5mb3Jtcy5pdGVtKDApIGFuZCBk
b2N1bWVudC5mb3JtcygwKSBib3RoIHdvcmsuCi1KU1ZhbHVlICpLSlM6OkhUTUxDb2xsZWN0aW9u
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IExpc3Qg
JmFyZ3MpCitKU1ZhbHVlICpIVE1MQ29sbGVjdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBMaXN0ICZhcmdzKQogewogICAvLyBEbyBub3QgdXNl
IHRoaXNPYmogaGVyZS4gSXQgY2FuIGJlIHRoZSBIVE1MRG9jdW1lbnQsIGluIHRoZSBkb2N1bWVu
dC5mb3JtcyhpKSBjYXNlLgogICBIVE1MQ29sbGVjdGlvbkltcGwgJmNvbGxlY3Rpb24gPSAqbV9p
bXBsOwpAQCAtMzI3Nyw3ICszMjY4LDcgQEAgSlNWYWx1ZSAqS0pTOjpIVE1MQ29sbGVjdGlvbjo6
Y2FsbEFzRnVuYwogICAgIFVTdHJpbmcgcyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAg
IHVuc2lnbmVkIGludCB1ID0gcy50b1VJbnQzMigmb2spOwogICAgIGlmIChvaykKLSAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIGNvbGxlY3Rpb24uaXRlbSh1KSk7CisgICAgICByZXR1cm4g
dG9KUyhleGVjLCBjb2xsZWN0aW9uLml0ZW0odSkpOwogICAgIC8vIHN1cHBvcnQgZm9yIGRvY3Vt
ZW50LmltYWdlcygnPG5hbWU+JykgZXRjLgogICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGV4ZWMs
IElkZW50aWZpZXIocykpOwogICB9CkBAIC0zMjkyLDcgKzMyODMsNyBAQCBKU1ZhbHVlICpLSlM6
OkhUTUxDb2xsZWN0aW9uOjpjYWxsQXNGdW5jCiAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGNvbGxl
Y3Rpb24ubmFtZWRJdGVtKHBzdHIpOwogICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYg
KCF1KQotICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZSk7CisgICAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYyxub2RlKTsKICAgICAgICAgbm9kZSA9IGNvbGxlY3Rpb24ubmV4dE5h
bWVkSXRlbShwc3RyKTsKICAgICAgICAgLS11OwogICAgICAgfQpAQCAtMzMwMSw3ICszMjkyLDcg
QEAgSlNWYWx1ZSAqS0pTOjpIVE1MQ29sbGVjdGlvbjo6Y2FsbEFzRnVuYwogICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSAqS0pTOjpIVE1MQ29sbGVjdGlvbjo6Z2V0TmFtZWRJ
dGVtcyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKK0pTVmFsdWUgKkhUTUxDb2xsZWN0aW9uOjpnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFFWYWx1ZUxp
c3Q8IFJlZlB0cjxOb2RlSW1wbD4gPiBuYW1lZEl0ZW1zID0gbV9pbXBsLT5uYW1lZEl0ZW1zKEF0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpKTsKIApAQCAtMzMwOSwyMyArMzMw
MCwyMyBAQCBKU1ZhbHVlICpLSlM6OkhUTUxDb2xsZWN0aW9uOjpnZXROYW1lZEl0CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuY291bnQoKSA9PSAx
KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBuYW1lZEl0ZW1zWzBdLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgbmFtZWRJdGVtc1swXS5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gbmV3IERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uKGV4ZWMsIG5hbWVkSXRlbXMpOwogfQog
Ci1KU1ZhbHVlICpLSlM6OkhUTUxDb2xsZWN0aW9uUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorSlNW
YWx1ZSAqSFRNTENvbGxlY3Rpb25Qcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJktKUzo6SFRNTENvbGxlY3Rpb246OmluZm8pKQorICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZIVE1MQ29sbGVjdGlvbjo6aW5mbykpCiAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKICAgSFRNTENvbGxlY3Rpb25JbXBsICZjb2xsID0gKnN0YXRp
Y19jYXN0PEhUTUxDb2xsZWN0aW9uICo+KHRoaXNPYmopLT5pbXBsKCk7CiAKICAgc3dpdGNoIChp
ZCkgewotICBjYXNlIEtKUzo6SFRNTENvbGxlY3Rpb246Okl0ZW06Ci0gICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxjb2xsLml0ZW0oYXJnc1swXS0+dG9VSW50MzIoZXhlYykpKTsKLSAgY2FzZSBL
SlM6OkhUTUxDb2xsZWN0aW9uOjpUYWdzOgotICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVj
LCBjb2xsLmJhc2UoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykuZG9tU3RyaW5nKCkpLmdldCgpKTsKLSAgY2FzZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjpOYW1l
ZEl0ZW06CisgIGNhc2UgSFRNTENvbGxlY3Rpb246Okl0ZW06CisgICAgcmV0dXJuIHRvSlMoZXhl
Yyxjb2xsLml0ZW0oYXJnc1swXS0+dG9VSW50MzIoZXhlYykpKTsKKyAgY2FzZSBIVE1MQ29sbGVj
dGlvbjo6VGFnczoKKyAgICByZXR1cm4gdG9KUyhleGVjLCBjb2xsLmJhc2UoKS0+Z2V0RWxlbWVu
dHNCeVRhZ05hbWUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpLmdldCgpKTsK
KyAgY2FzZSBIVE1MQ29sbGVjdGlvbjo6TmFtZWRJdGVtOgogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MQ29sbGVjdGlvbiAqPih0aGlzT2JqKS0+Z2V0TmFtZWRJdGVtcyhleGVjLCBJZGVudGlm
aWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSk7CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkBAIC0zMzU2LDEwICszMzQ3LDEwIEBAIGJvb2wgSFRNTFNlbGVjdENvbGxl
Y3Rpb246OmdldE93blByb3BlcnQKICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBLSlM6OkhUTUxT
ZWxlY3RDb2xsZWN0aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQpCit2b2lkIEhUTUxTZWxlY3RDb2xsZWN0
aW9uOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgKnZhbHVlLCBpbnQpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2
MDcwKSA8PCAiS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6cHV0ICIgPDwgcHJvcGVydHlOYW1l
LnFzdHJpbmcoKSA8PCBlbmRsOworICBrZERlYnVnKDYwNzApIDw8ICJIVE1MU2VsZWN0Q29sbGVj
dGlvbjo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCiAg
IGlmICggcHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IiApIHsKICAgICBtX2VsZW1lbnQt
PnNldFNlbGVjdGVkSW5kZXgoIHZhbHVlLT50b0ludDMyKCBleGVjICkgKTsKQEAgLTM0NzUsNyAr
MzQ2Niw3IEBAIEpTT2JqZWN0ICpPcHRpb25Db25zdHJ1Y3RvckltcDo6Y29uc3RydWMKICAgfQog
CiAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwotICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNPYmplY3QgKj4oZ2V0RE9NTm9kZShleGVjLG9wdCkpOworICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNPYmplY3QgKj4odG9KUyhleGVjLG9wdCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vIEltYWdlIE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM1MTIsMTYwMCAr
MzUwMyw3IEBAIEpTT2JqZWN0ICpJbWFnZUNvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QKICAgICBp
ZiAoaGVpZ2h0U2V0KQogICAgICAgICByZXN1bHQtPnNldEhlaWdodChoZWlnaHQpOwogICAgIAot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGdldERPTU5vZGUoZXhlYywgcmVzdWx0
KSk7Ci19Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gQ29udGV4dDJEIE9iamVjdCAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLQotS0pTX0lNUExFTUVOVF9QUk9UT0ZVTkMoQ29udGV4dDJERnVu
Y3Rpb24pCi0KLXN0YXRpYyBib29sIGlzR3JhZGllbnQoSlNWYWx1ZSAqdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHZhbHVlLT5pc09iamVjdCgmR3JhZGllbnQ6OmluZm8pOwotfQotCi1zdGF0aWMgYm9v
bCBpc0ltYWdlUGF0dGVybihKU1ZhbHVlICp2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUtPmlz
T2JqZWN0KCZJbWFnZVBhdHRlcm46OmluZm8pOwotfQotCi0jZGVmaW5lIEJJVFNfUEVSX0NPTVBP
TkVOVCA4Ci0jZGVmaW5lIEJZVEVTX1BFUl9ST1cod2lkdGgsYml0c1BlckNvbXBvbmVudCxudW1D
b21wb25lbnRzKSAoKHdpZHRoICogYml0c1BlckNvbXBvbmVudCAqIG51bUNvbXBvbmVudHMgKyA3
KS84KQotCi1KU1ZhbHVlICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQotewot
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkNvbnRleHQyRDo6aW5mbykpCi0gICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSNpZiBfX0FQUExFX18KLSAgICBD
b250ZXh0MkQgKmNvbnRleHRPYmplY3QgPSBzdGF0aWNfY2FzdDxLSlM6OkNvbnRleHQyRCAqPih0
aGlzT2JqKTsKLSAgICBraHRtbDo6UmVuZGVyQ2FudmFzSW1hZ2UgKnJlbmRlcmVyID0gc3RhdGlj
X2Nhc3Q8a2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlKj4oY29udGV4dE9iamVjdC0+X2VsZW1lbnQt
PnJlbmRlcmVyKCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgQ0dDb250ZXh0UmVmIGRyYXdpbmdDb250ZXh0ID0gcmVuZGVyZXItPmRy
YXdpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFkcmF3aW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIENv
bnRleHQyRDo6U2F2ZTogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAg
ICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkcmF3aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGNvbnRleHRPYmplY3QtPnNhdmUoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlJlc3RvcmU6
IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjb250ZXh0T2JqZWN0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpCZWdpblBhdGg6IHsKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIENHQ29udGV4dEJlZ2lu
UGF0aChkcmF3aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHQyRDo6Q2xvc2VQYXRoOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5z
aXplKCkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvcik7Ci0gICAgICAgICAgICBDR0NvbnRleHRDbG9zZVBhdGgoZHJhd2luZ0NvbnRleHQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6
OlNldFN0cm9rZUNvbG9yOiB7Ci0gICAgICAgICAgICAvLyBzdHJpbmcgYXJnID0gbmFtZWQgY29s
b3IKLSAgICAgICAgICAgIC8vIHN0cmluZyBhcmcsIG51bWJlciBhcmcgPSBuYW1lZCBjb2xvciwg
YWxwaGEKLSAgICAgICAgICAgIC8vIG51bWJlciBhcmcgPSBncmF5IGNvbG9yCi0gICAgICAgICAg
ICAvLyBudW1iZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxwaGEKLSAgICAgICAg
ICAgIC8vIDQgYXJncyAoc3RyaW5nIG9yIG51bWJlcikgPSByLCBnLCBiLCBhCi0gICAgICAgICAg
ICAvLyA1IGFyZ3MgKHN0cmluZyBvciBudW1iZXIpID0gYywgbSwgeSwgaywgYQotICAgICAgICAg
ICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKLSAgICAgICAgICAgIHN3aXRjaCAobnVtQXJn
cykgewotICAgICAgICAgICAgICAgIGNhc2UgMTogewotICAgICAgICAgICAgICAgICAgICBpZiAo
YXJnc1swXS0+aXNTdHJpbmcoKSkgeyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSR0JBMzIgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdz
WzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBDb2xvciBxYyhjb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRS
R0JTdHJva2VDb2xvcihkcmF3aW5nQ29udGV4dCwgcWMucmVkKCkvMjU1LiwgcWMuZ3JlZW4oKS8y
NTUuLCBxYy5ibHVlKCkvMjU1LiwgcWMuYWxwaGEoKS8yNTUuKTsKLQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgZyA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENHQ29udGV4dFNldEdyYXlTdHJva2VDb2xvcihkcmF3aW5nQ29udGV4dCwg
ZywgMS4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogewotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBhID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhcmdzWzBdLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSR0JBMzIgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihhcmdzWzBdLT50b1N0
cmluZyhleGVjKS5kb21TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBx
Yyhjb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VD
b2xvcihkcmF3aW5nQ29udGV4dCwgcWMucmVkKCkvMjU1LiwgcWMuZ3JlZW4oKS8yNTUuLCBxYy5i
bHVlKCkvMjU1LiwgYSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dDb250ZXh0U2V0
R3JheVN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBnLCBhKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDQ6IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgciA9IChmbG9hdClh
cmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZyA9IChm
bG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
YiA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgYSA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoZHJhd2luZ0NvbnRleHQsIHIsIGcsIGIs
IGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDU6IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgYyA9IChmbG9hdClh
cmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbSA9IChm
bG9hdClhcmdzWzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQg
eSA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgayA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgYSA9IChmbG9hdClhcmdzWzRdLT50b051bWJlcihleGVjKTsKLSAgICAgICAg
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS1N0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0LCBj
LCBtLCB5LCBrLCBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldEZpbGxDb2xvcjog
ewotICAgICAgICAgICAgLy8gc3RyaW5nIGFyZyA9IG5hbWVkIGNvbG9yCi0gICAgICAgICAgICAv
LyBzdHJpbmcgYXJnLCBudW1iZXIgYXJnID0gbmFtZWQgY29sb3IsIGFscGhhCi0gICAgICAgICAg
ICAvLyBudW1iZXIgYXJnID0gZ3JheSBjb2xvcgotICAgICAgICAgICAgLy8gbnVtYmVyIGFyZywg
bnVtYmVyIGFyZyA9IGdyYXkgY29sb3IsIGFscGhhCi0gICAgICAgICAgICAvLyA0IGFyZ3MgKHN0
cmluZyBvciBudW1iZXIpID0gciwgZywgYiwgYQotICAgICAgICAgICAgLy8gNSBhcmdzIChzdHJp
bmcgb3IgbnVtYmVyKSA9IGMsIG0sIHksIGssIGEKLSAgICAgICAgICAgIGludCBudW1BcmdzID0g
YXJncy5zaXplKCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG51bUFyZ3MpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0tPmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IERPTTo6Q1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENvbG9yIHFjKGNvbG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgcWMucmVkKCkv
MjU1LiwgcWMuZ3JlZW4oKS8yNTUuLCBxYy5ibHVlKCkvMjU1LiwgcWMuYWxwaGEoKS8yNTUuKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGcgPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5RmlsbENvbG9yKGRy
YXdpbmdDb250ZXh0LCBnLCAxLik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGEgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0tPmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9y
KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENvbG9yIHFjKGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQkZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgcWMucmVkKCkvMjU1LiwgcWMuZ3JlZW4o
KS8yNTUuLCBxYy5ibHVlKCkvMjU1LiwgYSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnID0g
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Q0dDb250ZXh0U2V0R3JheUZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwgZywgYSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHIg
PSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IGcgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGIgPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGEgPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCwg
ciwgZywgYiwgYSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgNTogewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBjID0g
KGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBmbG9h
dCBtID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
ICAgICAgICBmbG9hdCBrID0gKGZsb2F0KWFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBhID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3IoZHJhd2luZ0Nv
bnRleHQsIGMsIG0sIHksIGssIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGlu
ZVdpZHRoOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICBm
bG9hdCB3ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0TGluZVdpZHRoIChkcmF3aW5nQ29udGV4dCwgdyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6U2V0TGluZUNhcDogewotICAg
ICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgQ0dMaW5lQ2FwIGNhcCA9
IGtDR0xpbmVDYXBCdXR0OwotICAgICAgICAgICAgRE9NU3RyaW5nIGNhcFN0cmluZyA9IGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgICAgICBpZiAo
Y2FwU3RyaW5nID09ICJyb3VuZCIpCi0gICAgICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcFJv
dW5kOwotICAgICAgICAgICAgZWxzZSBpZiAoY2FwU3RyaW5nID09ICJzcXVhcmUiKQotICAgICAg
ICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBTcXVhcmU7Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwIChkcmF3aW5nQ29udGV4dCwgY2FwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRMaW5lSm9pbjogewotICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgQ0dMaW5lSm9pbiBqb2luID0ga0NH
TGluZUpvaW5NaXRlcjsKLSAgICAgICAgICAgIERPTVN0cmluZyBqb2luU3RyaW5nID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlmIChq
b2luU3RyaW5nID09ICJyb3VuZCIpCi0gICAgICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2lu
Um91bmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChqb2luU3RyaW5nID09ICJiZXZlbCIpCi0gICAg
ICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2luQmV2ZWw7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lSm9pbiAoZHJhd2luZ0NvbnRleHQsIGpvaW4pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldE1pdGVyTGltaXQ6IHsKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0IGwgPSAoZmxv
YXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRNaXRl
ckxpbWl0IChkcmF3aW5nQ29udGV4dCwgbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIENvbnRleHQyRDo6RmlsbDogewotICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNHcmFkaWVudChjb250
ZXh0T2JqZWN0LT5fZmlsbFN0eWxlKSkgewotICAgICAgICAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIFNldCB0aGUgY2xpcCBmcm9tIHRoZSBjdXJyZW50IHBhdGggYmVjYXVzZSBzaGFkaW5nIG9u
bHkKLSAgICAgICAgICAgICAgICAvLyBvcGVyYXRlcyBvbiBjbGlwcGluIHJlZ2lvbnMhICBPZGQs
IGJ1dCB0cnVlLgotICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoZHJhd2luZ0NvbnRleHQp
OwotCi0gICAgICAgICAgICAgICAgSlNPYmplY3QgKm8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KGNvbnRleHRPYmplY3QtPl9maWxsU3R5bGUpOwotICAgICAgICAgICAgICAgIEdyYWRpZW50ICpn
cmFkaWVudCA9IHN0YXRpY19jYXN0PEdyYWRpZW50Kj4obyk7Ci0gICAgICAgICAgICAgICAgQ0dT
aGFkaW5nUmVmIHNoYWRpbmcgPSBncmFkaWVudC0+Z2V0U2hhZGluZygpOwotICAgICAgICAgICAg
ICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGRyYXdpbmdDb250ZXh0LCBzaGFkaW5nKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGRyYXdp
bmdDb250ZXh0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbWFnZVBhdHRlcm4oY29udGV4
dE9iamVjdC0+X2ZpbGxTdHlsZSkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0T2JqZWN0LT51
cGRhdGVGaWxsSW1hZ2VQYXR0ZXJuKCk7Ci0gICAgICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFBh
dGgoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGRyYXdpbmdDb250ZXh0KTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6U3Ry
b2tlOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICBpZiAo
aXNHcmFkaWVudChjb250ZXh0T2JqZWN0LT5fc3Ryb2tlU3R5bGUpKSB7Ci0gICAgICAgICAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkcmF3aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgc3Ryb2tlIG5vcm1hbGx5IHBlcmZvcm1l
ZCBvbiB0aGUgcGF0aAotICAgICAgICAgICAgICAgIC8vIGludG8gYSBwYXRoLiAgVGhlbiBzZXQg
dGhlIGNsaXAgZnJvbSB0aGF0IHBhdGggCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBzaGFk
aW5nIG9ubHkgb3BlcmF0ZXMgb24gY2xpcHBpbmcgcmVnaW9ucyEgIE9kZCwgCi0gICAgICAgICAg
ICAgICAgLy8gYnV0IHRydWUuCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgICAgIENHQ29udGV4
dENsaXAoZHJhd2luZ0NvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgSlNPYmplY3QgKm8gPSBz
dGF0aWNfY2FzdDxKU09iamVjdCo+KGNvbnRleHRPYmplY3QtPl9zdHJva2VTdHlsZSk7Ci0gICAg
ICAgICAgICAgICAgR3JhZGllbnQgKmdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8R3JhZGllbnQqPihv
KTsKLSAgICAgICAgICAgICAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IGdyYWRpZW50LT5nZXRT
aGFkaW5nKCk7Ci0gICAgICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoZHJhd2luZ0Nv
bnRleHQsIHNoYWRpbmcpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0ltYWdlUGF0dGVybihjb250ZXh0T2JqZWN0LT5fc3Ryb2tlU3R5bGUpKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dE9iamVjdC0+dXBkYXRlU3Ryb2tlSW1hZ2VQYXR0ZXJuKCk7Ci0gICAg
ICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENHQ29udGV4dFN0cm9rZVBh
dGggKGRyYXdpbmdDb250ZXh0KTsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdl
VXBkYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENv
bnRleHQyRDo6U2NhbGU6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAg
ICAgICAgIGZsb2F0IHN4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAg
ICAgICAgZmxvYXQgc3kgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRTY2FsZUNUTSAoZHJhd2luZ0NvbnRleHQsIHN4LCBzeSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6Um90YXRlOiB7
Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICBmbG9hdCBhbmds
ZSA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIENHQ29udGV4
dFJvdGF0ZUNUTSAoZHJhd2luZ0NvbnRleHQsIGFuZ2xlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpUcmFuc2xhdGU6IHsKLSAgICAgICAg
ICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0IHR4ID0gKGZsb2F0KWFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgdHkgPSAoZmxvYXQpYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0g
KGRyYXdpbmdDb250ZXh0LCB0eCwgdHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDb250ZXh0MkQ6Ok1vdmVUbzogewotICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpICE9IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IpOwotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJl
cihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludCAoZHJhd2luZ0NvbnRleHQs
IHgsIHkpOwotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzSW1hZ2VVcGRhdGUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpMaW5l
VG86IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0
IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5
ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgQ0dDb250ZXh0
QWRkTGluZVRvUG9pbnQgKGRyYXdpbmdDb250ZXh0LCB4LCB5KTsKLSAgICAgICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIENvbnRleHQyRDo6UXVhZHJhdGljQ3VydmVUbzogewotICAgICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgZmxvYXQgY3B4ID0gKGZsb2F0KWFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgY3B5ID0gKGZsb2F0KWFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdz
WzJdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sz
XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRBZGRRdWFkQ3VydmVUb1Bv
aW50IChkcmF3aW5nQ29udGV4dCwgY3B4LCBjcHksIHgsIHkpOwotICAgICAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzSW1hZ2VVcGRhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpCZXppZXJDdXJ2ZVRvOiB7Ci0gICAgICAgICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gNikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAgICAgICBmbG9hdCBjcDF4ID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgY3AxeSA9IChmbG9hdClhcmdz
WzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IGNwMnggPSAoZmxvYXQpYXJn
c1syXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBjcDJ5ID0gKGZsb2F0KWFy
Z3NbM10tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdz
WzRdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1s1
XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRBZGRDdXJ2ZVRvUG9pbnQg
KGRyYXdpbmdDb250ZXh0LCBjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTsKLSAgICAgICAg
ICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBkYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6QXJjVG86IHsKLSAgICAgICAgICAg
IGlmIChhcmdzLnNpemUoKSAhPSA1KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0IHgxID0gKGZsb2F0KWFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTEgPSAoZmxvYXQpYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4MiA9IChmbG9hdClhcmdzWzJd
LT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkyID0gKGZsb2F0KWFyZ3NbM10t
PnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgciA9IChmbG9hdClhcmdzWzRdLT50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIENHQ29udGV4dEFkZEFyY1RvUG9pbnQgKGRyYXdp
bmdDb250ZXh0LCB4MSwgeTEsIHgyLCB5Miwgcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIENvbnRleHQyRDo6QXJjOiB7Ci0gICAgICAgICAgICBpZiAoYXJn
cy5zaXplKCkgIT0gNikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7Ci0gICAgICAgICAgICBmbG9hdCB4ID0gKGZsb2F0KWFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeSA9IChmbG9hdClhcmdzWzFdLT50b051bWJl
cihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHIgPSAoZmxvYXQpYXJnc1syXS0+dG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBzYSA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgIGZsb2F0IGVhID0gKGZsb2F0KWFyZ3NbNF0tPnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgYm9vbCBjbG9ja3dpc2UgPSBhcmdzWzVdLT50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRBZGRBcmMgKGRyYXdpbmdDb250ZXh0LCB4LCB5LCBy
LCBzYSwgZWEsIGNsb2Nrd2lzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHQyRDo6UmVjdDogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IpOwotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwot
ICAgICAgICAgICAgZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKLSAg
ICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QgKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKHgs
eSx3LGgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29u
dGV4dDJEOjpDbGlwOiB7Ci0gICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRDbGlwIChkcmF3aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpDbGVhclJlY3Q6IHsKLSAgICAg
ICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSA0KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQp
YXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClhcmdz
WzJdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IGggPSAoZmxvYXQpYXJnc1sz
XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QgKGRyYXdp
bmdDb250ZXh0LCBDR1JlY3RNYWtlKHgseSx3LGgpKTsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5z
ZXROZWVkc0ltYWdlVXBkYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHQyRDo6RmlsbFJlY3Q6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNp
emUoKSAhPSA0KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKLSAgICAgICAgICAgIGZsb2F0IHggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB5ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgIGZsb2F0IGggPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0dyYWRpZW50KGNvbnRleHRPYmplY3Qt
Pl9maWxsU3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkcmF3
aW5nQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gQ2FuJ3Qg
dXNlIGEgZ3JhZGllbnQgZmlsbCB3aXRoIGEgRmlsbFJlY3QsIG11c3QgdXNlIGEgcGF0aC4KLSAg
ICAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoZHJhd2luZ0NvbnRleHQpOwotICAgICAg
ICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoZHJhd2luZ0NvbnRleHQsIENHUmVjdE1ha2UoeCwg
eSwgdywgaCkpOwotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjbGlwIGZyb20gdGhlIGN1
cnJlbnQgcGF0aCBiZWNhdXNlIHNoYWRpbmcgb25seQotICAgICAgICAgICAgICAgIC8vIG9wZXJh
dGVzIG9uIGNsaXBwaW4gcmVnaW9ucyEgIE9kZCwgYnV0IHRydWUuCi0gICAgICAgICAgICAgICAg
Q0dDb250ZXh0Q2xpcChkcmF3aW5nQ29udGV4dCk7Ci0KLSAgICAgICAgICAgICAgICBKU09iamVj
dCAqbyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY29udGV4dE9iamVjdC0+X2ZpbGxTdHlsZSk7
Ci0gICAgICAgICAgICAgICAgR3JhZGllbnQgKmdyYWRpZW50ID0gc3RhdGljX2Nhc3Q8R3JhZGll
bnQqPihvKTsKLSAgICAgICAgICAgICAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IGdyYWRpZW50
LT5nZXRTaGFkaW5nKCk7Ci0gICAgICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoZHJh
d2luZ0NvbnRleHQsIHNoYWRpbmcpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNJbWFnZVBhdHRlcm4oY29udGV4dE9iamVjdC0+
X2ZpbGxTdHlsZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRPYmplY3QtPnVwZGF0ZUZp
bGxJbWFnZVBhdHRlcm4oKTsKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChkcmF3
aW5nQ29udGV4dCwgQ0dSZWN0TWFrZSh4LCB5LCB3LCBoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlN0cm9rZVJlY3Q6IHsKLSAg
ICAgICAgICAgIGludCBzaXplID0gYXJncy5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA8
IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3Ip
OwotICAgICAgICAgICAgZmxvYXQgeCA9IChmbG9hdClhcmdzWzBdLT50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0g
ICAgICAgICAgICBmbG9hdCB3ID0gKGZsb2F0KWFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgZmxvYXQgaCA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGlzSW1hZ2VQYXR0ZXJuKGNvbnRleHRPYmplY3QtPl9z
dHJva2VTdHlsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dE9iamVjdC0+dXBkYXRlU3Ryb2tl
SW1hZ2VQYXR0ZXJuKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA+IDQpCi0gICAgICAgICAgICAg
ICAgQ0dDb250ZXh0U3Ryb2tlUmVjdFdpdGhXaWR0aCAoZHJhd2luZ0NvbnRleHQsIENHUmVjdE1h
a2UoeCx5LHcsaCksIChmbG9hdClhcmdzWzRdLT50b051bWJlcihleGVjKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUmVjdCAoZHJhd2luZ0NvbnRl
eHQsIENHUmVjdE1ha2UoeCx5LHcsaCkpOwotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRz
SW1hZ2VVcGRhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ29udGV4dDJEOjpTZXRTaGFkb3c6IHsKLSAgICAgICAgICAgIGludCBudW1BcmdzID0gYXJn
cy5zaXplKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChudW1BcmdzIDwgMykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAg
ICAgICAgICBDR1NpemUgb2Zmc2V0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvZmZzZXQu
d2lkdGggPSAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBvZmZz
ZXQuaGVpZ2h0ID0gKGZsb2F0KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAg
ZmxvYXQgYmx1ciA9IChmbG9hdClhcmdzWzJdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBDb2xvcihhcmdzWzNdLT50b1N0cmluZyhleGVj
KS5hc2NpaSgpKTsKLQotICAgICAgICAgICAgIGlmIChudW1BcmdzID09IDMpIHsKLSAgICAgICAg
ICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3cgKGRyYXdpbmdDb250ZXh0LCBvZmZzZXQsIGJsdXIp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZTsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb21wb25lbnRzWzVdOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobnVtQXJncyAtIDMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
c1szXS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJHQkEzMiBj
b2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMp
LmRvbVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBxYyhjb2xv
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1swXSA9IHFjLnJlZCgp
LzI1NS47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IHFjLmdy
ZWVuKCkvMjU1LjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzJdID0g
cWMuYmx1ZSgpLzI1NS47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1sz
XSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcG9uZW50c1swXSA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzFdID0gMS4wZjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGEgPSBhcmdzWzRdLT50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzNdLT5pc1N0cmluZygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0gRE9NOjpDU1NQYXJzZXI6OnBh
cnNlQ29sb3IoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbG9yIHFjKGNvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb21wb25lbnRzWzBdID0gcWMucmVkKCkvMjU1LjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRzWzFdID0gcWMuZ3JlZW4oKS8yNTUuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSBxYy5ibHVlKCkvMjU1LjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzNdID0gYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzWzBdID0gKGZsb2F0KWFyZ3Nb
M10tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVu
dHNbMV0gPSBhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50
c1swXSA9IChmbG9hdClhcmdzWzNdLT50b051bWJlcihleGVjKTsgLy8gcgotICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcG9uZW50c1sxXSA9IChmbG9hdClhcmdzWzRdLT50b051bWJlcihleGVj
KTsgLy8gZwotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50c1syXSA9IChmbG9hdClh
cmdzWzVdLT50b051bWJlcihleGVjKTsgLy8gYgotICAgICAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50c1szXSA9IChmbG9hdClhcmdzWzZdLT50b051bWJlcihleGVjKTsgLy8gYQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudHNbMF0gPSAoZmxvYXQpYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7IC8vIGMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gPSAoZmxvYXQpYXJnc1s0XS0+dG9OdW1i
ZXIoZXhlYyk7IC8vIG0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gPSAo
ZmxvYXQpYXJnc1s1XS0+dG9OdW1iZXIoZXhlYyk7IC8vIHkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBvbmVudHNbM10gPSAoZmxvYXQpYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyk7IC8vIGsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNbNF0gPSAoZmxvYXQpYXJnc1s3XS0+
dG9OdW1iZXIoZXhlYyk7IC8vIGEKLQotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUNNWUsoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgQ0dDb2xvclJlZiBjb2xvclJlZiA9IENHQ29sb3JDcmVhdGUgKGNvbG9yU3BhY2UsIGNv
bXBvbmVudHMpOwotICAgICAgICAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvciAo
ZHJhd2luZ0NvbnRleHQsIG9mZnNldCwgYmx1ciwgY29sb3JSZWYpOwotICAgICAgICAgICAgICAg
IENGUmVsZWFzZSAoY29sb3JSZWYpOwotICAgICAgICAgICAgICAgIENGUmVsZWFzZSAoY29sb3JT
cGFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHQyRDo6Q2xlYXJTaGFkb3c6IHsKLSAgICAgICAgICAgIGlmIChhcmdz
LnNpemUoKSAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5
bnRheEVycm9yKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvciAoZHJh
d2luZ0NvbnRleHQsIENHU2l6ZU1ha2UoMCwgMCksIDAsIG5pbCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERyYXdJbWFnZSBoYXMgdGhyZWUgdmFyaWFudHM6
Ci0gICAgICAgIC8vIGRyYXdJbWFnZSAoaW1nLCBkeCwgZHkpCi0gICAgICAgIC8vIGRyYXdJbWFn
ZSAoaW1nLCBkeCwgZHksIGR3LCBkaCkKLSAgICAgICAgLy8gZHJhd0ltYWdlIChpbWcsIHN4LCBz
eSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKLSAgICAgICAgLy8gY29tcG9zaXRlIG9wZXJhdGlv
biBpcyBzcGVjaWZpZWQgd2l0aCBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24KLSAgICAgICAgLy8g
aW1nIHBhcmFtZXRlciBjYW4gYmUgYSBKYXZhU2NyaXB0IEltYWdlLCA8aW1nPiwgb3IgYSA8Y2Fu
dmFzPgotICAgICAgICBjYXNlIENvbnRleHQyRDo6RHJhd0ltYWdlOiB7Ci0gICAgICAgICAgICBp
ZiAoYXJncy5zaXplKCkgPCAzKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9iamVjdC4KLSAgICAgICAgICAgIEpTT2JqZWN0ICpvID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBdKTsKLSAgICAgICAgICAgIGlmICghby0+aXNP
YmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwotCi0gICAgICAgICAgICBmbG9hdCB3ID0gMDsgLy8gcXVpZXQgaW5jb3JyZWN0IGdjYyA0
LjAgd2FybmluZwotICAgICAgICAgICAgZmxvYXQgaCA9IDA7IC8vIHF1aWV0IGluY29ycmVjdCBn
Y2MgNC4wIHdhcm5pbmcKLSAgICAgICAgICAgIENHQ29udGV4dFJlZiBzb3VyY2VDb250ZXh0ID0g
MDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIDxpbWc+IG9yIDxjYW52
YXM+LgotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGltZ0VsdCA9IDA7Ci0gICAg
ICAgICAgICBpZiAoby0+aW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmltZ19pbmZvKSl7Ci0g
ICAgICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihh
cmdzWzBdKS0+aW1wbCgpOwotICAgICAgICAgICAgICAgIGltZ0VsdCA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgICAgICAgICAgaWYgKGltZ0VsdC0+Y2Fj
aGVkSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaW1nRWx0LT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZSgpLT53aWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBoID0gaW1nRWx0LT5j
YWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvLT5pbmhlcml0cygmS0pTOjpIVE1MRWxl
bWVudDo6Y2FudmFzX2luZm8pKXsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50ICo+KGFyZ3NbMF0pLT5pbXBsKCk7Ci0gICAgICAgICAgICAgICAg
SFRNTENhbnZhc0VsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnRJ
bXBsKj4obik7Ci0gICAgICAgICAgICAgICAga2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlICpyZW5k
ZXJlciA9IHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJDYW52YXNJbWFnZSo+KGUtPnJlbmRlcmVy
KCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gTm8gcmVuZGVyZXIsIG5vdGhpbmcgdG8gZHJhdy4KLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgc291cmNlQ29udGV4dCA9IHJlbmRlcmVyLT5kcmF3aW5nQ29udGV4dCgpOwotICAgICAgICAg
ICAgICAgIHcgPSAoZmxvYXQpQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoc291cmNlQ29udGV4dCk7
Ci0gICAgICAgICAgICAgICAgaCA9IChmbG9hdClDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQoc291
cmNlQ29udGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZmxvYXQgZHgsIGR5LCBkdyA9IHcsIGRoID0gaDsKLSAgICAgICAgICAgIGZs
b2F0IHN4ID0gMC5mLCBzeSA9IDAuZiwgc3cgPSB3LCBzaCA9IGg7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgZHggPSBh
cmdzWzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBkeSA9IGFyZ3NbMl0tPnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYXJncy5z
aXplKCkgPT0gNSkgewotICAgICAgICAgICAgICAgIGR4ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgZHkgPSBhcmdzWzJdLT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgICAgICBkdyA9IGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAg
IGRoID0gYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChhcmdzLnNpemUoKSA9PSA5KSB7Ci0gICAgICAgICAgICAgICAgc3ggPSBhcmdz
WzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBzeSA9IGFyZ3NbMl0tPnRvTnVt
YmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIHN3ID0gYXJnc1szXS0+dG9OdW1iZXIoZXhlYyk7
Ci0gICAgICAgICAgICAgICAgc2ggPSBhcmdzWzRdLT50b051bWJlcihleGVjKTsKLSAgICAgICAg
ICAgICAgICBkeCA9IGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGR5
ID0gYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZHcgPSBhcmdzWzdd
LT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBkaCA9IGFyZ3NbOF0tPnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLQotICAgICAgICAgICAgaWYg
KCFzb3VyY2VDb250ZXh0ICYmIGltZ0VsdCAmJiBpbWdFbHQtPmNhY2hlZEltYWdlKCkpIHsKLSAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgcDsKLSAgICAgICAgICAgICAgICBwLmRyYXdG
bG9hdEltYWdlKGltZ0VsdC0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSwgZHgsIGR5LCBkdywgZGgs
IHN4LCBzeSwgc3csIHNoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdl
Ojpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29udGV4dE9iamVjdC0+X2dsb2JhbENvbXBv
c2l0ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkuYXNjaWkoKSksIGRyYXdpbmdD
b250ZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIENoZWFwLCBiZWNhdXNlIHRoZSBpbWFnZSBpcyBiYWNrZWQgYnkgY29weS1vbi13cml0
ZSBtZW1vcnksIGFuZCB3ZSdyZQotICAgICAgICAgICAgICAgIC8vIGd1YXJhbnRlZWQgdG8gcmVs
ZWFzZSBiZWZvcmUgZG9pbmcgYW55IG1vcmUgZHJhd2luZyBpbiB0aGUgc291cmNlIGNvbnRleHQu
Ci0gICAgICAgICAgICAgICAgQ0dJbWFnZVJlZiBzb3VyY2VJbWFnZSA9IENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKHNvdXJjZUNvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmIChzeCA9PSAw
ICYmIHN5ID09IDAgJiYgc3cgPT0gdyAmJiBzaCA9PSBoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEZhc3QgcGF0aCwgeWF5IQotICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UgKGRyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlKGR4LCBkeSwgZHcsIGRoKSwgc291cmNlSW1h
Z2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJpdG1hcCBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6
ZSBhbmQgdGhlbiBkcmF3IHRoYXQgaW50byBvdXIgY29udGV4dC4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gU2xvdyBwYXRoLCBib28hCi0gICAgICAgICAgICAgICAgICAgIENHQ29udGV4dFJlZiBj
bGlwcGVkU291cmNlQ29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgQ0dJbWFnZVJlZiBjbGlw
cGVkU291cmNlSW1hZ2U7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBjc3cgPSAoc2l6ZV90
KXN3OwotICAgICAgICAgICAgICAgICAgICBzaXplX3QgY3NoID0gKHNpemVfdClzaDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Q0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0Io
KTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bUNvbXBvbmVudHMgPSBDR0NvbG9yU3Bh
Y2VHZXROdW1iZXJPZkNvbXBvbmVudHMoY29sb3JTcGFjZSk7Ci0gICAgICAgICAgICAgICAgICAg
IHNpemVfdCBieXRlc1BlclJvdyA9IEJZVEVTX1BFUl9ST1coY3N3LEJJVFNfUEVSX0NPTVBPTkVO
VCwobnVtQ29tcG9uZW50cysxKSk7IC8vICsgMSBmb3IgYWxwaGEKLSAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqX2RyYXdpbmdDb250ZXh0RGF0YSA9IGZhc3RNYWxsb2MoY3NoICogYnl0ZXNQZXJS
b3cpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFNv
dXJjZUNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoX2RyYXdpbmdDb250ZXh0RGF0YSwg
Y3N3LCBjc2gsIEJJVFNfUEVSX0NPTVBPTkVOVCwgYnl0ZXNQZXJSb3csIGNvbG9yU3BhY2UsIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7Ci0gICAgICAgICAgICAgICAgICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTSAoY2xpcHBlZFNvdXJjZUNvbnRleHQsIC1zeCwgLXN5KTsKLSAgICAg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlIChjbGlwcGVkU291cmNlQ29udGV4dCwg
Q0dSZWN0TWFrZSgwLDAsdyxoKSwgc291cmNlSW1hZ2UpOwotICAgICAgICAgICAgICAgICAgICBj
bGlwcGVkU291cmNlSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjbGlwcGVkU291
cmNlQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdJbWFnZSAoZHJh
d2luZ0NvbnRleHQsIENHUmVjdE1ha2UoZHgsIGR5LCBkdywgZGgpLCBjbGlwcGVkU291cmNlSW1h
Z2UpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0dJbWFnZVJl
bGVhc2UgKGNsaXBwZWRTb3VyY2VJbWFnZSk7Ci0gICAgICAgICAgICAgICAgICAgIENHQ29udGV4
dFJlbGVhc2UgKGNsaXBwZWRTb3VyY2VDb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgZmFz
dEZyZWUgKF9kcmF3aW5nQ29udGV4dERhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBDR0ltYWdlUmVsZWFzZSAoc291cmNlSW1hZ2UpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNJbWFnZVVwZGF0
ZSgpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRl
eHQyRDo6RHJhd0ltYWdlRnJvbVJlY3Q6IHsKLSAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAh
PSAxMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
cik7Ci0gICAgICAgICAgICBKU09iamVjdCAqbyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYXJn
c1swXSk7Ci0gICAgICAgICAgICBpZiAoIW8tPmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50Ojpp
bWdfaW5mbykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKLSAgICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4oYXJnc1swXSktPmltcGwoKTsKLSAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICpl
ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihuKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZmxvYXQgc3ggPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKLSAgICAgICAg
ICAgIGZsb2F0IHN5ID0gYXJnc1syXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9h
dCBzdyA9IGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgc2ggPSBh
cmdzWzRdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IGR4ID0gYXJnc1s1XS0+
dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCBkeSA9IGFyZ3NbNl0tPnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgZHcgPSBhcmdzWzddLT50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIGZsb2F0IGRoID0gYXJnc1s4XS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAg
ICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gYXJnc1s5XS0+dG9TdHJpbmcoZXhlYyku
cXN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBwOwotCi0gICAgICAgICAgICBpZiAoZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAg
ICAgICBwLmRyYXdGbG9hdEltYWdlKGUtPmNhY2hlZEltYWdlKCktPmltYWdlKCksIGR4LCBkeSwg
ZHcsIGRoLCBzeCwgc3ksIHN3LCBzaCwgSW1hZ2U6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmlu
Zyhjb21wb3NpdGVPcGVyYXRvci5hc2NpaSgpKSwgZHJhd2luZ0NvbnRleHQpOwotICAgICAgICAg
IAotICAgICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzSW1hZ2VVcGRhdGUoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpTZXRBbHBoYTog
ewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgZmxvYXQgYSA9
ICAoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRBbHBoYSAoZHJhd2luZ0NvbnRleHQsIGEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDb250ZXh0MkQ6OlNldENvbXBvc2l0ZU9wZXJhdGlvbjogewotICAg
ICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgUVN0cmluZyBjb21wb3Np
dGVPcGVyYXRvciA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwot
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oZHJhd2lu
Z0NvbnRleHQsY29tcG9zaXRlT3BlcmF0b3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpDcmVhdGVMaW5lYXJHcmFkaWVu
dDogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgZmxvYXQg
eDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkwID0gYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCB4MSA9IGFyZ3NbMl0tPnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeTEgPSBhcmdzWzNdLT50b051bWJlcihl
eGVjKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFkaWVudCh4MCwgeTAsIHgxLCB5MSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgQ29udGV4dDJEOjpDcmVhdGVSYWRp
YWxHcmFkaWVudDogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDYpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAg
ICAgZmxvYXQgeDAgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0
IHkwID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCByMCA9IGFy
Z3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgZmxvYXQgeDEgPSBhcmdzWzNdLT50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgIGZsb2F0IHkxID0gYXJnc1s0XS0+dG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgICAgICBmbG9hdCByMSA9IGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpOwot
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyYWRpZW50KHgwLCB5MCwgcjAsIHgxLCB5MSwgcjEp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIENvbnRleHQyRDo6Q3JlYXRlUGF0
dGVybjogewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotICAgICAgICAgICAgSlNP
YmplY3QgKm8gPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFyZ3NbMF0pOwotICAgICAgICAgICAg
aWYgKCFvLT5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW1nX2luZm8pKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAgICAgICBp
bnQgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVhdDsKLSAgICAgICAgICAgIERP
TVN0cmluZyByZXBldGl0aW9uU3RyaW5nID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3Ry
aW5nKCkubG93ZXIoKTsKLSAgICAgICAgICAgIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBl
YXQteCIpCi0gICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJl
cGVhdFg7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJyZXBlYXQt
eSIpCi0gICAgICAgICAgICAgICAgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBhdHRlcm46OlJlcGVh
dFk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXBldGl0aW9uU3RyaW5nID09ICJuby1yZXBlYXQi
KQotICAgICAgICAgICAgICAgIHJlcGV0aXRpb25UeXBlID0gSW1hZ2VQYXR0ZXJuOjpOb1JlcGVh
dDsKLSAgICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4o
YXJnc1swXSktPmltcGwoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VQYXR0ZXJuKHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICo+KG4pLT5jYWNoZWRJbWFnZSgpLCByZXBl
dGl0aW9uVHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotfQotCi1jb25zdCBDbGFzc0luZm8gQ29udGV4dDJEOjppbmZvID0geyAiQ29u
dGV4dDJEIiwgMCwgJkNvbnRleHQyRFRhYmxlLCAwIH07Ci0KLS8qIFNvdXJjZSBmb3IgQ29udGV4
dDJEVGFibGUuIFVzZSAibWFrZSBoYXNodGFibGVzIiB0byByZWdlbmVyYXRlLgotQGJlZ2luIENv
bnRleHQyRFRhYmxlIDQ4Ci0gIHN0cm9rZVN0eWxlICAgICAgICAgICAgICBDb250ZXh0MkQ6OlN0
cm9rZVN0eWxlICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIGZpbGxTdHlsZSAgICAgICAg
ICAgICAgICBDb250ZXh0MkQ6OkZpbGxTdHlsZSAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
Ci0gIGxpbmVXaWR0aCAgICAgICAgICAgICAgICBDb250ZXh0MkQ6OkxpbmVXaWR0aCAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlCi0gIGxpbmVDYXAgICAgICAgICAgICAgICAgICBDb250ZXh0
MkQ6OkxpbmVDYXAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIGxpbmVKb2luICAg
ICAgICAgICAgICAgICBDb250ZXh0MkQ6OkxpbmVKb2luICAgICAgICAgICAgICAgICAgICBEb250
RGVsZXRlCi0gIG1pdGVyTGltaXQgICAgICAgICAgICAgICBDb250ZXh0MkQ6Ok1pdGVyTGltaXQg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIHNoYWRvd09mZnNldFggICAgICAgICAgICBD
b250ZXh0MkQ6OlNoYWRvd09mZnNldFggICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIHNoYWRv
d09mZnNldFkgICAgICAgICAgICBDb250ZXh0MkQ6OlNoYWRvd09mZnNldFkgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi0gIHNoYWRvd0JsdXIgICAgICAgICAgICAgICBDb250ZXh0MkQ6OlNoYWRv
d0JsdXIgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0gIHNoYWRvd0NvbG9yICAgICAgICAg
ICAgICBDb250ZXh0MkQ6OlNoYWRvd0NvbG9yICAgICAgICAgICAgICAgICBEb250RGVsZXRlCi0g
IGdsb2JhbEFscGhhICAgICAgICAgICAgICBDb250ZXh0MkQ6Okdsb2JhbEFscGhhICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlCi0gIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiBDb250ZXh0MkQ6
Okdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiAgICBEb250RGVsZXRlCi0gIHNhdmUgICAgICAgICAg
ICAgICAgICAgICBDb250ZXh0MkQ6OlNhdmUgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVs
ZXRlfEZ1bmN0aW9uIDAKLSAgcmVzdG9yZSAgICAgICAgICAgICAgICAgIENvbnRleHQyRDo6UmVz
dG9yZSAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBzY2FsZSAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dDJEOjpTY2FsZSAgICAgICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZXxGdW5jdGlvbiAyCi0gIHJvdGF0ZSAgICAgICAgICAgICAgICAgICBDb250ZXh0
MkQ6OlJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDIKLSAg
dHJhbnNsYXRlICAgICAgICAgICAgICAgIENvbnRleHQyRDo6VHJhbnNsYXRlICAgICAgICAgICAg
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBiZWdpblBhdGggICAgICAgICAgICAgICAg
Q29udGV4dDJEOjpCZWdpblBhdGggICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAwCi0gIGNsb3NlUGF0aCAgICAgICAgICAgICAgICBDb250ZXh0MkQ6OkNsb3NlUGF0aCAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLSAgc2V0U3Ryb2tlQ29sb3IgICAg
ICAgICAgIENvbnRleHQyRDo6U2V0U3Ryb2tlQ29sb3IgICAgICAgICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMQotICBzZXRGaWxsQ29sb3IgICAgICAgICAgICAgQ29udGV4dDJEOjpTZXRGaWxs
Q29sb3IgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNldExpbmVXaWR0
aCAgICAgICAgICAgICBDb250ZXh0MkQ6OlNldExpbmVXaWR0aCAgICAgICAgICAgICAgICBEb250
RGVsZXRlfEZ1bmN0aW9uIDEKLSAgc2V0TGluZUNhcCAgICAgICAgICAgICAgIENvbnRleHQyRDo6
U2V0TGluZUNhcCAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBzZXRM
aW5lSm9pbiAgICAgICAgICAgICAgQ29udGV4dDJEOjpTZXRMaW5lSm9pbiAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNldE1pdGVyTGltaXQgICAgICAgICAgICBDb250
ZXh0MkQ6OlNldE1pdGVyTGltaXQgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEK
LSAgZmlsbCAgICAgICAgICAgICAgICAgICAgIENvbnRleHQyRDo6RmlsbCAgICAgICAgICAgICAg
ICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBzdHJva2UgICAgICAgICAgICAgICAg
ICAgQ29udGV4dDJEOjpTdHJva2UgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5j
dGlvbiAwCi0gIG1vdmVUbyAgICAgICAgICAgICAgICAgICBDb250ZXh0MkQ6Ok1vdmVUbyAgICAg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDIKLSAgbGluZVRvICAgICAgICAg
ICAgICAgICAgIENvbnRleHQyRDo6TGluZVRvICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGV8RnVuY3Rpb24gMgotICBxdWFkcmF0aWNDdXJ2ZVRvICAgICAgICAgQ29udGV4dDJEOjpRdWFk
cmF0aWNDdXJ2ZVRvICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiA0Ci0gIGJlemllckN1
cnZlVG8gICAgICAgICAgICBDb250ZXh0MkQ6OkJlemllckN1cnZlVG8gICAgICAgICAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDYKLSAgYXJjVG8gICAgICAgICAgICAgICAgICAgIENvbnRleHQy
RDo6QXJjVG8gICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gNQotICBh
cmMgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dDJEOjpBcmMgICAgICAgICAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiA2Ci0gIHJlY3QgICAgICAgICAgICAgICAgICAgICBD
b250ZXh0MkQ6OlJlY3QgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9u
IDQKLSAgY2xpcCAgICAgICAgICAgICAgICAgICAgIENvbnRleHQyRDo6Q2xpcCAgICAgICAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBjbGVhclJlY3QgICAgICAgICAg
ICAgICAgQ29udGV4dDJEOjpDbGVhclJlY3QgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxG
dW5jdGlvbiA0Ci0gIGZpbGxSZWN0ICAgICAgICAgICAgICAgICBDb250ZXh0MkQ6OkZpbGxSZWN0
ICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDQKLSAgc3Ryb2tlUmVjdCAg
ICAgICAgICAgICAgIENvbnRleHQyRDo6U3Ryb2tlUmVjdCAgICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8RnVuY3Rpb24gNAotICBkcmF3SW1hZ2UgICAgICAgICAgICAgICAgQ29udGV4dDJEOjpE
cmF3SW1hZ2UgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiA2Ci0gIGRyYXdJ
bWFnZUZyb21SZWN0ICAgICAgICBDb250ZXh0MkQ6OkRyYXdJbWFnZUZyb21SZWN0ICAgICAgICAg
ICBEb250RGVsZXRlfEZ1bmN0aW9uIDEwCi0gIHNldFNoYWRvdyAgICAgICAgICAgICAgICBDb250
ZXh0MkQ6OlNldFNoYWRvdyAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMK
LSAgY2xlYXJTaGFkb3cgICAgICAgICAgICAgIENvbnRleHQyRDo6Q2xlYXJTaGFkb3cgICAgICAg
ICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBzZXRBbHBoYSAgICAgICAgICAgICAg
ICAgQ29udGV4dDJEOjpTZXRBbHBoYSAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5j
dGlvbiAxCi0gIHNldENvbXBvc2l0ZU9wZXJhdGlvbiAgICBDb250ZXh0MkQ6OlNldENvbXBvc2l0
ZU9wZXJhdGlvbiAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgY3JlYXRlTGluZWFyR3Jh
ZGllbnQgICAgIENvbnRleHQyRDo6Q3JlYXRlTGluZWFyR3JhZGllbnQgICAgICAgIERvbnREZWxl
dGV8RnVuY3Rpb24gNAotICBjcmVhdGVSYWRpYWxHcmFkaWVudCAgICAgQ29udGV4dDJEOjpDcmVh
dGVSYWRpYWxHcmFkaWVudCAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiA2Ci0gIGNyZWF0ZVBh
dHRlcm4gICAgICAgICAgICBDb250ZXh0MkQ6OkNyZWF0ZVBhdHRlcm4gICAgICAgICAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDIKLUBlbmQKLSovCi0KLWJvb2wgQ29udGV4dDJEOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICAvLyBGSVhNRTogZnVuY3Rpb25zIHNob3Vs
ZCBiZSBvbiB0aGUgcHJvdG90eXBlLCBub3QgaW4gdGhlIG9iamVjdCBpdHNlbGYKLSAgICByZXR1
cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PENvbnRleHQyREZ1bmN0aW9uLCBDb250ZXh0MkQsIERP
TU9iamVjdD4oZXhlYywgJkNvbnRleHQyRFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotfQotCi1KU1ZhbHVlICpDb250ZXh0MkQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2godG9rZW4pIHsKLSAgICAgICAgY2FzZSBT
dHJva2VTdHlsZTogewotICAgICAgICAgICAgcmV0dXJuIF9zdHJva2VTdHlsZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgY2FzZSBGaWxsU3R5bGU6IHsKLSAgICAgICAgICAgIHJldHVy
biBfZmlsbFN0eWxlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIExpbmVXaWR0
aDogewotICAgICAgICAgICAgcmV0dXJuIF9saW5lV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGNhc2UgTGluZUNhcDogewotICAgICAgICAgICAgcmV0dXJuIF9saW5lQ2FwOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIExpbmVKb2luOiB7Ci0gICAgICAgICAg
ICByZXR1cm4gX2xpbmVKb2luOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIE1p
dGVyTGltaXQ6IHsKLSAgICAgICAgICAgIHJldHVybiBfbWl0ZXJMaW1pdDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgY2FzZSBTaGFkb3dPZmZzZXRYOiB7Ci0gICAgICAgICAgICByZXR1
cm4gX3NoYWRvd09mZnNldFg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgU2hh
ZG93T2Zmc2V0WTogewotICAgICAgICAgICAgcmV0dXJuIF9zaGFkb3dPZmZzZXRZOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjYXNlIFNoYWRvd0JsdXI6IHsKLSAgICAgICAgICAgIHJl
dHVybiBfc2hhZG93Qmx1cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTaGFk
b3dDb2xvcjogewotICAgICAgICAgICAgcmV0dXJuIF9zaGFkb3dDb2xvcjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgY2FzZSBHbG9iYWxBbHBoYTogewotICAgICAgICAgICAgcmV0dXJu
IF9nbG9iYWxBbHBoYTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBHbG9iYWxD
b21wb3NpdGVPcGVyYXRpb246IHsKLSAgICAgICAgICAgIHJldHVybiBfZ2xvYmFsQ29tcG9zaXRl
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXZvaWQgQ29udGV4dDJE
OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKLXsKLSAgICBsb29rdXBQdXQ8Q29udGV4dDJELERPTU9i
amVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkNvbnRleHQyRFRhYmxlLCB0
aGlzICk7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUNHQ29udGV4dFJlZiBDb250ZXh0MkQ6OmRyYXdp
bmdDb250ZXh0KCkKLXsKLSAgICBraHRtbDo6UmVuZGVyQ2FudmFzSW1hZ2UgKnJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8a2h0bWw6OlJlbmRlckNhbnZhc0ltYWdlKj4oX2VsZW1lbnQtPnJlbmRlcmVy
KCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcmVuZGVyZXItPmRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCi0gICAgcmV0dXJuIGNvbnRl
eHQ7Ci19Ci0KLQotQ0dDb2xvclJlZiBjb2xvclJlZkZyb21WYWx1ZShFeGVjU3RhdGUgKmV4ZWMs
IEpTVmFsdWUgKnZhbHVlKQotewotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotICAg
IGZsb2F0IGNvbXBvbmVudHNbNF07Ci0gICAgCi0gICAgaWYgKHZhbHVlLT5pc1N0cmluZygpKSB7
Ci0gICAgICAgIFJHQkEzMiBjb2xvciA9IERPTTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKHZhbHVl
LT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7Ci0gICAgICAgIENvbG9yIHFjKGNvbG9yKTsK
LSAgICAgICAgY29tcG9uZW50c1swXSA9IHFjLnJlZCgpLzI1NS47Ci0gICAgICAgIGNvbXBvbmVu
dHNbMV0gPSBxYy5ncmVlbigpLzI1NS47Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBxYy5ibHVl
KCkvMjU1LjsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IHFjLmFscGhhKCk7Ci0gICAgICAgIGNv
bG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gQ0dD
b2xvckNyZWF0ZSAoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7Ci0gICAgQ0ZSZWxlYXNlIChjb2xv
clNwYWNlKTsKLSAgICAKLSAgICByZXR1cm4gY29sb3JSZWY7Ci19Ci0jZW5kaWYKLQotQ29sb3Ig
Y29sb3JGcm9tVmFsdWUoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICp2YWx1ZSkKLXsKLSAgICBS
R0JBMzIgY29sb3IgPSBET006OkNTU1BhcnNlcjo6cGFyc2VDb2xvcih2YWx1ZS0+dG9TdHJpbmco
ZXhlYykuZG9tU3RyaW5nKCkpOwotICAgIHJldHVybiBDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
Q29udGV4dDJEOjpzZXRTaGFkb3coRXhlY1N0YXRlICpleGVjKQotewotI2lmIF9fQVBQTEVfXwot
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDR1NpemUgb2Zmc2V0OwotICAgIG9m
ZnNldC53aWR0aCA9IChmbG9hdClfc2hhZG93T2Zmc2V0WC0+dG9OdW1iZXIoZXhlYyk7Ci0gICAg
b2Zmc2V0LmhlaWdodCA9IChmbG9hdClfc2hhZG93T2Zmc2V0WS0+dG9OdW1iZXIoZXhlYyk7Ci0g
ICAgZmxvYXQgYmx1ciA9IChmbG9hdClfc2hhZG93Qmx1ci0+dG9OdW1iZXIoZXhlYyk7Ci0gICAg
Q0dDb2xvclJlZiBjb2xvclJlZiA9IGNvbG9yUmVmRnJvbVZhbHVlKGV4ZWMsIF9zaGFkb3dDb2xv
cik7Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yIChjb250ZXh0LCBvZmZzZXQsIGJs
dXIsIGNvbG9yUmVmKTsKLSAgICBDRlJlbGVhc2UgKGNvbG9yUmVmKTsKLSNlbmRpZgotfQotCi12
b2lkIENvbnRleHQyRDo6dXBkYXRlRmlsbEltYWdlUGF0dGVybigpCi17Ci0jaWYgX19BUFBMRV9f
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIENHQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjb250ZXh0KTsKLSAgICAK
LSAgICBpZiAoIV92YWxpZEZpbGxJbWFnZVBhdHRlcm4gfHwgIUNHQWZmaW5lVHJhbnNmb3JtRXF1
YWxUb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIF9sYXN0RmlsbEltYWdlUGF0dGVybkNUTSkpIHsKLSAg
ICAgICAgSW1hZ2VQYXR0ZXJuICppbWFnZVBhdHRlcm4gPSBzdGF0aWNfY2FzdDxJbWFnZVBhdHRl
cm4gKj4oX2ZpbGxTdHlsZSk7Ci0gICAgICAgIENHUGF0dGVyblJlZiBwYXR0ZXJuID0gaW1hZ2VQ
YXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKENHQ29udGV4dEdldENUTShjb250ZXh0KSk7Ci0gICAgICAg
IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJu
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwotICAgICAgICBDR0NvbnRleHRT
ZXRGaWxsQ29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2UpOwotICAgICAgICBDR0NvbnRl
eHRTZXRGaWxsUGF0dGVybihjb250ZXh0LCBwYXR0ZXJuLCAmcGF0dGVybkFscGhhKTsKLSAgICAg
ICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOwotICAgICAgICBDR1BhdHRlcm5S
ZWxlYXNlKHBhdHRlcm4pOwotICAgICAgICBfdmFsaWRGaWxsSW1hZ2VQYXR0ZXJuID0gdHJ1ZTsK
LSAgICAgICAgX2xhc3RGaWxsSW1hZ2VQYXR0ZXJuQ1RNID0gdHJhbnNmb3JtOwotICAgIH0KLSNl
bmRpZgotfQotCi12b2lkIENvbnRleHQyRDo6dXBkYXRlU3Ryb2tlSW1hZ2VQYXR0ZXJuKCkKLXsK
LSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGRyYXdpbmdDb250ZXh0
KCk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNv
bnRleHQpOwotICAgIAotICAgIGlmICghX3ZhbGlkU3Ryb2tlSW1hZ2VQYXR0ZXJuIHx8ICFDR0Fm
ZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0odHJhbnNmb3JtLCBfbGFzdFN0cm9rZUltYWdl
UGF0dGVybkNUTSkpIHsKLSAgICAgICAgSW1hZ2VQYXR0ZXJuICppbWFnZVBhdHRlcm4gPSBzdGF0
aWNfY2FzdDxJbWFnZVBhdHRlcm4gKj4oX2ZpbGxTdHlsZSk7Ci0gICAgICAgIENHUGF0dGVyblJl
ZiBwYXR0ZXJuID0gaW1hZ2VQYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKENHQ29udGV4dEdldENUTShj
b250ZXh0KSk7Ci0gICAgICAgIGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7Ci0gICAgICAgIENHQ29s
b3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOwot
ICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNwYWNlKGNvbnRleHQsIHBhdHRlcm5TcGFj
ZSk7Ci0gICAgICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oY29udGV4dCwgcGF0dGVybiwg
JnBhdHRlcm5BbHBoYSk7Ci0gICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UocGF0dGVyblNwYWNl
KTsKLSAgICAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwYXR0ZXJuKTsKLSAgICAgICAgX3ZhbGlkU3Ry
b2tlSW1hZ2VQYXR0ZXJuID0gdHJ1ZTsKLSAgICAgICAgX2xhc3RTdHJva2VJbWFnZVBhdHRlcm5D
VE0gPSB0cmFuc2Zvcm07Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgQ29udGV4dDJEOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwg
aW50IC8qYXR0ciovKQotewotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBzd2l0Y2godG9rZW4pIHsKLSAgICAgICAgY2FzZSBTdHJva2VTdHlsZTogewot
ICAgICAgICAgICAgX3N0cm9rZVN0eWxlID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUt
PmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBDb2xvciBxYyA9IGNvbG9yRnJvbVZhbHVl
KGV4ZWMsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xv
cihjb250ZXh0LCBxYy5yZWQoKS8yNTUuLCBxYy5ncmVlbigpLzI1NS4sIHFjLmJsdWUoKS8yNTUu
LCBxYy5hbHBoYSgpLzI1NS4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gX3N0cm9rZVN0eWxlIGlzIHVzZWQgd2hlbiBzdHJva2UoKSBpcyBj
YWxsZWQgb24gdGhlIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgLy8gQ0cgZG9lc24ndCBoYXZl
IHRoZSBub3Rpb24gb2YgYSBzZXR0aW5nIGEgc3Ryb2tlIGdyYWRpZW50LgotICAgICAgICAgICAg
ICAgIEpTT2JqZWN0ICpvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFvLT5pc09iamVjdCgpIHx8ICEoby0+aW5o
ZXJpdHMoJkdyYWRpZW50OjppbmZvKSB8fCBvLT5pbmhlcml0cygmSW1hZ2VQYXR0ZXJuOjppbmZv
KSkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjYXNlIEZpbGxTdHlsZTogewotICAgICAgICAgICAgX2ZpbGxTdHlsZSA9IHZhbHVlOwot
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgQ29s
b3IgcWMgPSBjb2xvckZyb21WYWx1ZShleGVjLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIHFjLnJlZCgpLzI1NS4sIHFjLmdyZWVuKCkv
MjU1LiwgcWMuYmx1ZSgpLzI1NS4sIHFjLmFscGhhKCkvMjU1Lik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBfZmlsbFN0eWxlIGlzIGNoZWNr
ZWQgd2hlbiBmaWxsKCkgaXMgY2FsbGVkIG9uIHRoZSBjb250ZXh0LgotICAgICAgICAgICAgICAg
IC8vIENHIGRvZXNuJ3QgaGF2ZSB0aGUgbm90aW9uIG9mIHNldHRpbmcgYSBmaWxsIGdyYWRpZW50
LgotICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFvLT5pc09iamVj
dCgpIHx8ICEoby0+aW5oZXJpdHMoJkdyYWRpZW50OjppbmZvKSB8fCBvLT5pbmhlcml0cygmSW1h
Z2VQYXR0ZXJuOjppbmZvKSkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKLQotICAgICAgICAgICAgICAgIC8vIEdyYWRpZW50cyBhbmQgaW1hZ2UgcGF0
dGVybnMgYXJlIGNvbnN0cnVjdGVkIHdoZW4gbmVlZGVkIGR1cmluZyBmaWxsIGFuZCBzdHJva2Ug
b3BlcmF0aW9ucy4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBjYXNlIExpbmVXaWR0aDogewotICAgICAgICAgICAgX2xpbmVX
aWR0aCA9IHZhbHVlOwotICAgICAgICAgICAgZmxvYXQgdyA9IChmbG9hdCl2YWx1ZS0+dG9OdW1i
ZXIoZXhlYyk7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGggKGNvbnRleHQsIHcp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2Ug
TGluZUNhcDogewotICAgICAgICAgICAgX2xpbmVDYXAgPSB2YWx1ZTsKLSAgICAgICAgCi0gICAg
ICAgICAgICBDR0xpbmVDYXAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7Ci0gICAgICAgICAgICBET01T
dHJpbmcgY2FwU3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2Vy
KCk7Ci0gICAgICAgICAgICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIpCi0gICAgICAgICAgICAg
ICAgY2FwID0ga0NHTGluZUNhcFJvdW5kOwotICAgICAgICAgICAgZWxzZSBpZiAoY2FwU3RyaW5n
ID09ICJzcXVhcmUiKQotICAgICAgICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBTcXVhcmU7Ci0g
ICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwIChjb250ZXh0LCBjYXApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgTGluZUpvaW46IHsK
LSAgICAgICAgICAgIF9saW5lSm9pbiA9IHZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBDR0xpbmVKb2luIGpvaW4gPSBrQ0dMaW5lSm9pbk1pdGVyOwotICAgICAgICAgICAgRE9NU3Ry
aW5nIGpvaW5TdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIo
KTsKLSAgICAgICAgICAgIGlmIChqb2luU3RyaW5nID09ICJyb3VuZCIpCi0gICAgICAgICAgICAg
ICAgam9pbiA9IGtDR0xpbmVKb2luUm91bmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChqb2luU3Ry
aW5nID09ICJiZXZlbCIpCi0gICAgICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2luQmV2ZWw7
Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbiAoY29udGV4dCwgam9pbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBNaXRlckxp
bWl0OiB7Ci0gICAgICAgICAgICBfbWl0ZXJMaW1pdCA9IHZhbHVlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmbG9hdCBsID0gKGZsb2F0KXZhbHVlLT50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQgKGNvbnRleHQsIGwpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgU2hhZG93T2Zmc2V0WDog
ewotICAgICAgICAgICAgX3NoYWRvd09mZnNldFggPSB2YWx1ZTsKLSAgICAgICAgICAgIHNldFNo
YWRvdyhleGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjYXNlIFNoYWRvd09mZnNldFk6IHsKLSAgICAgICAgICAgIF9zaGFkb3dPZmZzZXRZID0g
dmFsdWU7Ci0gICAgICAgICAgICBzZXRTaGFkb3coZXhlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTaGFkb3dCbHVyOiB7Ci0gICAgICAg
ICAgICBfc2hhZG93Qmx1ciA9IHZhbHVlOwotICAgICAgICAgICAgc2V0U2hhZG93KGV4ZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgU2hh
ZG93Q29sb3I6IHsKLSAgICAgICAgICAgIF9zaGFkb3dDb2xvciA9IHZhbHVlOwotICAgICAgICAg
ICAgc2V0U2hhZG93KGV4ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGNhc2UgR2xvYmFsQWxwaGE6IHsKLSAgICAgICAgICAgIF9nbG9iYWxBbHBo
YSA9IHZhbHVlOwotICAgICAgICAgICAgZmxvYXQgYSA9ICAoZmxvYXQpdmFsdWUtPnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0QWxwaGEgKGNvbnRleHQsIGEpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgR2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBfZ2xvYmFsQ29tcG9zaXRlID0gdmFs
dWU7Ci0gICAgICAgICAgICBRU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yID0gdmFsdWUtPnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOwotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIENvbnRleHQyRDo6c2F2ZSgpCi17
Ci0gICAgTGlzdCAqbGlzdCA9IG5ldyBMaXN0KCk7Ci0gICAgCi0gICAgbGlzdC0+YXBwZW5kKF9z
dHJva2VTdHlsZSk7Ci0gICAgbGlzdC0+YXBwZW5kKF9maWxsU3R5bGUpOwotICAgIGxpc3QtPmFw
cGVuZChfbGluZVdpZHRoKTsKLSAgICBsaXN0LT5hcHBlbmQoX2xpbmVDYXApOwotICAgIGxpc3Qt
PmFwcGVuZChfbGluZUpvaW4pOwotICAgIGxpc3QtPmFwcGVuZChfbWl0ZXJMaW1pdCk7Ci0gICAg
bGlzdC0+YXBwZW5kKF9zaGFkb3dPZmZzZXRYKTsKLSAgICBsaXN0LT5hcHBlbmQoX3NoYWRvd09m
ZnNldFkpOwotICAgIGxpc3QtPmFwcGVuZChfc2hhZG93Qmx1cik7Ci0gICAgbGlzdC0+YXBwZW5k
KF9zaGFkb3dDb2xvcik7Ci0gICAgbGlzdC0+YXBwZW5kKF9nbG9iYWxBbHBoYSk7Ci0gICAgbGlz
dC0+YXBwZW5kKF9nbG9iYWxDb21wb3NpdGUpOwotICAgIAotICAgIHN0YXRlU3RhY2suYXBwZW5k
KGxpc3QpOwotfQotCi12b2lkIENvbnRleHQyRDo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKHN0YXRl
U3RhY2suY291bnQoKSA8IDEpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBM
aXN0ICpsaXN0ID0gc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgCi0gICAgaW50IHBvcyA9IDA7Ci0g
ICAgX3N0cm9rZVN0eWxlID0gbGlzdC0+YXQocG9zKyspOwotICAgIF9maWxsU3R5bGUgPSBsaXN0
LT5hdChwb3MrKyk7Ci0gICAgX2xpbmVXaWR0aCA9IGxpc3QtPmF0KHBvcysrKTsKLSAgICBfbGlu
ZUNhcCA9IGxpc3QtPmF0KHBvcysrKTsKLSAgICBfbGluZUpvaW4gPSBsaXN0LT5hdChwb3MrKyk7
Ci0gICAgX21pdGVyTGltaXQgPSBsaXN0LT5hdChwb3MrKyk7Ci0gICAgX3NoYWRvd09mZnNldFgg
PSBsaXN0LT5hdChwb3MrKyk7Ci0gICAgX3NoYWRvd09mZnNldFkgPSBsaXN0LT5hdChwb3MrKyk7
Ci0gICAgX3NoYWRvd0JsdXIgPSBsaXN0LT5hdChwb3MrKyk7Ci0gICAgX3NoYWRvd0NvbG9yID0g
bGlzdC0+YXQocG9zKyspOwotICAgIF9nbG9iYWxBbHBoYSA9IGxpc3QtPmF0KHBvcysrKTsKLSAg
ICBfZ2xvYmFsQ29tcG9zaXRlID0gbGlzdC0+YXQocG9zKyspOwotCi0gICAgLy8gVGhpcyB3aWxs
IGRlbGV0ZSBsaXN0LgotICAgIHN0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1Db250ZXh0
MkQ6OkNvbnRleHQyRChIVE1MRWxlbWVudEltcGwgKmUpCi0gIDogX3ZhbGlkRmlsbEltYWdlUGF0
dGVybihmYWxzZSksIF92YWxpZFN0cm9rZUltYWdlUGF0dGVybihmYWxzZSksCi0gICAgX2VsZW1l
bnQoZSksCi0gICAgX3N0cm9rZVN0eWxlKGpzVW5kZWZpbmVkKCkpLAotICAgIF9maWxsU3R5bGUo
anNVbmRlZmluZWQoKSksCi0gICAgX2xpbmVXaWR0aChqc1VuZGVmaW5lZCgpKSwKLSAgICBfbGlu
ZUNhcChqc1VuZGVmaW5lZCgpKSwKLSAgICBfbGluZUpvaW4oanNVbmRlZmluZWQoKSksCi0gICAg
X21pdGVyTGltaXQoanNVbmRlZmluZWQoKSksCi0gICAgX3NoYWRvd09mZnNldFgoanNVbmRlZmlu
ZWQoKSksCi0gICAgX3NoYWRvd09mZnNldFkoanNVbmRlZmluZWQoKSksCi0gICAgX3NoYWRvd0Js
dXIoanNVbmRlZmluZWQoKSksCi0gICAgX3NoYWRvd0NvbG9yKGpzVW5kZWZpbmVkKCkpLAotICAg
IF9nbG9iYWxBbHBoYShqc1VuZGVmaW5lZCgpKSwKLSAgICBfZ2xvYmFsQ29tcG9zaXRlKGpzVW5k
ZWZpbmVkKCkpCi17Ci0gICAgX2xpbmVXaWR0aCA9IGpzTnVtYmVyKDEpOwotICAgIF9zdHJva2VT
dHlsZSA9IGpzU3RyaW5nKCJibGFjayIpOwotICAgIF9maWxsU3R5bGUgPSBqc1N0cmluZygiYmxh
Y2siKTsKLSAgICAKLSAgICBfbGluZUNhcCA9IGpzU3RyaW5nKCJidXR0Iik7Ci0gICAgX2xpbmVK
b2luID0ganNTdHJpbmcoIm1pdGVyIik7Ci0gICAgX21pdGVyTGltaXQgPSBqc051bWJlcigxMCk7
Ci0gICAgCi0gICAgX3NoYWRvd09mZnNldFggPSBqc051bWJlcigwKTsKLSAgICBfc2hhZG93T2Zm
c2V0WSA9IGpzTnVtYmVyKDApOwotICAgIF9zaGFkb3dCbHVyID0ganNOdW1iZXIoMCk7Ci0gICAg
X3NoYWRvd0NvbG9yID0ganNTdHJpbmcoImJsYWNrIik7Ci0gICAgICAgIAotICAgIF9nbG9iYWxB
bHBoYSA9IGpzTnVtYmVyKDEpOwotICAgIF9nbG9iYWxDb21wb3NpdGUgPSBqc1N0cmluZygic291
cmNlLW92ZXIiKTsKLSAgICAKLSAgICBzdGF0ZVN0YWNrLnNldEF1dG9EZWxldGUodHJ1ZSk7Ci19
Ci0KLUNvbnRleHQyRDo6fkNvbnRleHQyRCgpCi17Ci19Ci0KLXZvaWQgQ29udGV4dDJEOjptYXJr
KCkKLXsKLSAgICBKU1ZhbHVlICp2OwotCi0gICAgdiA9IF9zdHJva2VTdHlsZTsKLSAgICBpZiAo
IXYtPm1hcmtlZCgpKQotICAgICAgICB2LT5tYXJrKCk7Ci0KLSAgICB2ID0gX2ZpbGxTdHlsZTsK
LSAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICB2LT5tYXJrKCk7Ci0KLSAgICB2ID0gX2xp
bmVXaWR0aDsKLSAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICB2LT5tYXJrKCk7Ci0KLSAg
ICB2ID0gX2xpbmVDYXA7Ci0gICAgaWYgKCF2LT5tYXJrZWQoKSkKLSAgICAgICAgdi0+bWFyaygp
OwotCi0gICAgdiA9IF9saW5lSm9pbjsKLSAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICB2
LT5tYXJrKCk7Ci0KLSAgICB2ID0gX21pdGVyTGltaXQ7Ci0gICAgaWYgKCF2LT5tYXJrZWQoKSkK
LSAgICAgICAgdi0+bWFyaygpOwotCi0gICAgdiA9IF9zaGFkb3dPZmZzZXRYOwotICAgIGlmICgh
di0+bWFya2VkKCkpCi0gICAgICAgIHYtPm1hcmsoKTsKLQotICAgIHYgPSBfc2hhZG93T2Zmc2V0
WTsKLSAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICB2LT5tYXJrKCk7Ci0KLSAgICB2ID0g
X3NoYWRvd0JsdXI7Ci0gICAgaWYgKCF2LT5tYXJrZWQoKSkKLSAgICAgICAgdi0+bWFyaygpOwot
Ci0gICAgdiA9IF9zaGFkb3dDb2xvcjsKLSAgICBpZiAoIXYtPm1hcmtlZCgpKQotICAgICAgICB2
LT5tYXJrKCk7Ci0KLSAgICB2ID0gX2dsb2JhbEFscGhhOwotICAgIGlmICghdi0+bWFya2VkKCkp
Ci0gICAgICAgIHYtPm1hcmsoKTsKLQotICAgIHYgPSBfZ2xvYmFsQ29tcG9zaXRlOwotICAgIGlm
ICghdi0+bWFya2VkKCkpCi0gICAgICAgIHYtPm1hcmsoKTsKLQotICAgIFFQdHJMaXN0SXRlcmF0
b3I8TGlzdD4gaXQoc3RhdGVTdGFjayk7Ci0gICAgTGlzdCAqbGlzdDsKLSAgICB3aGlsZSAoKGxp
c3QgPSBpdC5jdXJyZW50KCkpKSB7Ci0gICAgICAgIGxpc3QtPm1hcmsoKTsKLSAgICAgICAgKytp
dDsKLSAgICB9Ci0gICAgCi0gICAgRE9NT2JqZWN0OjptYXJrKCk7Ci19Ci0KLWNvbnN0IENsYXNz
SW5mbyBLSlM6OkdyYWRpZW50OjppbmZvID0geyAiR3JhZGllbnQiLCAwLCAmR3JhZGllbnRUYWJs
ZSwgMCB9OwotCi0vKiBTb3VyY2UgZm9yIEdyYWRpZW50VGFibGUuIFVzZSAibWFrZSBoYXNodGFi
bGVzIiB0byByZWdlbmVyYXRlLgotQGJlZ2luIEdyYWRpZW50VGFibGUgMQotICBhZGRDb2xvclN0
b3AgICAgICAgICAgICAgR3JhZGllbnQ6OkFkZENvbG9yU3RvcCAgICAgICAgICAgICAgICBEb250
RGVsZXRlfEZ1bmN0aW9uIDIKLUBlbmQKLSovCi0KLUtKU19JTVBMRU1FTlRfUFJPVE9GVU5DKEdy
YWRpZW50RnVuY3Rpb24pCi0KLUpTVmFsdWUgKkdyYWRpZW50RnVuY3Rpb246OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
Ci17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmR3JhZGllbnQ6OmluZm8pKQotICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgR3JhZGllbnQgKmdy
YWRpZW50ID0gc3RhdGljX2Nhc3Q8S0pTOjpHcmFkaWVudCAqPih0aGlzT2JqKTsKLQotICAgIHN3
aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSBHcmFkaWVudDo6QWRkQ29sb3JTdG9wOiB7Ci0gICAg
ICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0KLSAgICAgICAgICAgIENvbG9yIGNvbG9yID0g
Y29sb3JGcm9tVmFsdWUoZXhlYywgYXJnc1sxXSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+YWRk
Q29sb3JTdG9wICgoZmxvYXQpYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGNvbG9yLnJlZCgpLzI1
NS5mLCBjb2xvci5ncmVlbigpLzI1NS5mLCBjb2xvci5ibHVlKCkvMjU1LmYsIGNvbG9yLmFscGhh
KCkvMjU1LmYpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci19Ci0KLXZvaWQgZ3JhZGllbnRDYWxsYmFjayAodm9pZCAqaW5mbywgY29uc3QgZmxvYXQgKmlu
LCBmbG9hdCAqb3V0KQotewotICAgIEdyYWRpZW50ICpncmFkaWVudCA9IHN0YXRpY19jYXN0PEdy
YWRpZW50Kj4oaW5mbyk7Ci0gICAgaW50IG51bVN0b3BzOwotICAgIGNvbnN0IENvbG9yU3RvcCAq
c3RvcHMgPSBncmFkaWVudC0+Y29sb3JTdG9wcygmbnVtU3RvcHMpOwotICAgIGZsb2F0IGN1cnJl
bnQgPSAqaW47Ci0gICAgCi0gICAgYXNzZXJ0IChudW1TdG9wcyA+PSAyKTsKLSAgICAKLSAgICBp
ZiAoY3VycmVudCA9PSAwKSB7Ci0gICAgICAgIGdyYWRpZW50LT5sYXN0U3RvcCA9IDA7Ci0gICAg
ICAgIGdyYWRpZW50LT5uZXh0U3RvcCA9IDE7Ci0KLSAgICAgICAgY29uc3QgQ29sb3JTdG9wICp0
aGlzU3RvcCA9ICZzdG9wc1swXTsKLSAgICAgICAgKm91dCsrID0gdGhpc1N0b3AtPnJlZDsKLSAg
ICAgICAgKm91dCsrID0gdGhpc1N0b3AtPmdyZWVuOwotICAgICAgICAqb3V0KysgPSB0aGlzU3Rv
cC0+Ymx1ZTsKLSAgICAgICAgKm91dCA9IHRoaXNTdG9wLT5hbHBoYTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoY3VycmVudCA9PSAxKSB7Ci0gICAgICAgIGNvbnN0IENvbG9yU3RvcCAqdGhpc1N0b3Ag
PSAmc3RvcHNbbnVtU3RvcHMtMV07Ci0gICAgICAgICpvdXQrKyA9IHRoaXNTdG9wLT5yZWQ7Ci0g
ICAgICAgICpvdXQrKyA9IHRoaXNTdG9wLT5ncmVlbjsKLSAgICAgICAgKm91dCsrID0gdGhpc1N0
b3AtPmJsdWU7Ci0gICAgICAgICpvdXQgPSB0aGlzU3RvcC0+YWxwaGE7Ci0gICAgfQotICAgIGVs
c2UgewotICAgICAgICBpZiAoY3VycmVudCA+PSBzdG9wc1tncmFkaWVudC0+bmV4dFN0b3BdLnN0
b3ApIHsKLSAgICAgICAgICAgIGdyYWRpZW50LT5sYXN0U3RvcCA9IGdyYWRpZW50LT5uZXh0U3Rv
cDsKLSAgICAgICAgICAgIGdyYWRpZW50LT5uZXh0U3RvcCA9IGdyYWRpZW50LT5sYXN0U3RvcCsx
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBZGQgYW4gaW50ZXJwb2xhdGlvbiBm
b3IgZWFjaCBjb21wb25lbnQgYmV0d2VlbgotICAgICAgICAvLyBzdG9wcy4KLSAgICAgICAgY29u
c3QgQ29sb3JTdG9wICpuZXh0U3RvcCA9ICZzdG9wc1tncmFkaWVudC0+bmV4dFN0b3BdOwotICAg
ICAgICBjb25zdCBDb2xvclN0b3AgKmxhc3RTdG9wID0gJnN0b3BzW2dyYWRpZW50LT5sYXN0U3Rv
cF07Ci0gICAgICAgIAotICAgICAgICBmbG9hdCBzdG9wRGVsdGEgPSBuZXh0U3RvcC0+c3RvcCAt
IGxhc3RTdG9wLT5zdG9wOwotICAgICAgICBmbG9hdCBzdG9wT2Zmc2V0ID0gY3VycmVudCAtIGxh
c3RTdG9wLT5zdG9wOwotICAgICAgICBmbG9hdCBzdG9wUGVyY2VudCA9IHN0b3BPZmZzZXQvc3Rv
cERlbHRhOwotICAgICAgICAKLSAgICAgICAgKm91dCsrID0gbGFzdFN0b3AtPnJlZCArIChuZXh0
U3RvcC0+cmVkIC0gbGFzdFN0b3AtPnJlZCkgKiBzdG9wUGVyY2VudDsKLSAgICAgICAgKm91dCsr
ID0gbGFzdFN0b3AtPmdyZWVuICsgKG5leHRTdG9wLT5ncmVlbiAtIGxhc3RTdG9wLT5ncmVlbikg
KiBzdG9wUGVyY2VudDsKLSAgICAgICAgKm91dCsrID0gbGFzdFN0b3AtPmJsdWUgKyAobmV4dFN0
b3AtPmJsdWUgLSBsYXN0U3RvcC0+Ymx1ZSkgKiBzdG9wUGVyY2VudDsKLSAgICAgICAgKm91dCA9
IGxhc3RTdG9wLT5hbHBoYSArIChuZXh0U3RvcC0+YWxwaGEgLSBsYXN0U3RvcC0+YWxwaGEpICog
c3RvcFBlcmNlbnQ7Ci0gICAgfQotfQotCi1zdGF0aWMgZmxvYXQgaW50ZXJ2YWxSYW5nZURvbWlu
W10gPSB7IDAuZiwgMS5mIH07Ci1zdGF0aWMgZmxvYXQgY29sb3JDb21wb25lbnRSYW5nZURvbWFp
bnNbXSA9IHsgMC5mLCAxLmYsIDAuZiwgMS5mLCAwLmYsIDEuZiwgMC5mLCAxLmYgfTsKLSNpZiBf
X0FQUExFX18KLUNHRnVuY3Rpb25DYWxsYmFja3MgZ3JhZGllbnRDYWxsYmFja3MgPSB7Ci0gICAg
MCwgZ3JhZGllbnRDYWxsYmFjaywgTlVMTAotfTsKLSNlbmRpZgotCi12b2lkIEdyYWRpZW50Ojpj
b21tb25Jbml0KCkKLXsKLSAgICBzdG9wcyA9IDA7Ci0gICAgc3RvcENvdW50ID0gMDsKLSAgICBt
YXhTdG9wcyA9IDA7Ci0gICAgc3RvcHNOZWVkQWRqdXN0aW5nID0gZmFsc2U7Ci0gICAgYWRqdXN0
ZWRTdG9wQ291bnQgPSAwOwotICAgIGFkanVzdGVkU3RvcHMgPSAwOwotCi0jaWYgX19BUFBMRV9f
Ci0gICAgX3NoYWRpbmdSZWYgPSAwOwotI2VuZGlmCi0KLSAgICByZWdlbmVyYXRlU2hhZGluZyA9
IHRydWU7Ci19Ci0KLUdyYWRpZW50OjpHcmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0
IHgxLCBmbG9hdCB5MSkKLXsKLSAgICBfZ3JhZGllbnRUeXBlID0gR3JhZGllbnQ6OkxpbmVhcjsK
LSAgICBfeDAgPSB4MDsKLSAgICBfeTAgPSB5MDsKLSAgICBfeDEgPSB4MTsKLSAgICBfeTEgPSB5
MTsKLQotICAgIGNvbW1vbkluaXQoKTsKLX0KLQotR3JhZGllbnQ6OkdyYWRpZW50KGZsb2F0IHgw
LCBmbG9hdCB5MCwgZmxvYXQgcjAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgcjEpCi17Ci0g
ICAgX2dyYWRpZW50VHlwZSA9IEdyYWRpZW50OjpSYWRpYWw7Ci0gICAgX3gwID0geDA7Ci0gICAg
X3kwID0geTA7Ci0gICAgX3IwID0gcjA7Ci0gICAgX3gxID0geDE7Ci0gICAgX3kxID0geTE7Ci0g
ICAgX3IxID0gcjE7Ci0KLSAgICBjb21tb25Jbml0KCk7Ci19Ci0KLWJvb2wgR3JhZGllbnQ6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNQcm9w
ZXJ0eVNsb3Q8R3JhZGllbnRGdW5jdGlvbiwgR3JhZGllbnQsIERPTU9iamVjdD4oZXhlYywgJkdy
YWRpZW50VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFsdWUgKkdy
YWRpZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OnB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFs
dWUsIGludCBhdHRyKQotewotICAgIGxvb2t1cFB1dDxHcmFkaWVudCxET01PYmplY3Q+KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZHcmFkaWVudFRhYmxlLCB0aGlzICk7Ci19Ci0K
LXZvaWQgR3JhZGllbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pCi17Ci19Ci0KLUdyYWRpZW50Ojp+R3Jh
ZGllbnQoKQotewotI2lmIF9fQVBQTEVfXwotICAgIGlmIChfc2hhZGluZ1JlZikgewotICAgICAg
ICBDR1NoYWRpbmdSZWxlYXNlKF9zaGFkaW5nUmVmKTsKLSAgICAgICAgX3NoYWRpbmdSZWYgPSAw
OwotICAgIH0KLSNlbmRpZgotCi0gICAgZmFzdEZyZWUoc3RvcHMpOwotICAgIHN0b3BzID0gMDsK
LSAgICAKLSAgICBmYXN0RnJlZShhZGp1c3RlZFN0b3BzKTsKLSAgICBhZGp1c3RlZFN0b3BzID0g
MDsKLX0KLQotI2lmIF9fQVBQTEVfXwotQ0dTaGFkaW5nUmVmIEdyYWRpZW50OjpnZXRTaGFkaW5n
KCkKLXsKLSAgICBpZiAoIXJlZ2VuZXJhdGVTaGFkaW5nKQotICAgICAgICByZXR1cm4gX3NoYWRp
bmdSZWY7Ci0gICAgCi0gICAgaWYgKF9zaGFkaW5nUmVmKQotICAgICAgICBDR1NoYWRpbmdSZWxl
YXNlIChfc2hhZGluZ1JlZik7Ci0gICAgICAgIAotICAgIENHRnVuY3Rpb25SZWYgX2NvbG9yRnVu
Y3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKCh2b2lkICopdGhpcywgMSwgaW50ZXJ2YWxSYW5nZURv
bWluLCA0LCBjb2xvckNvbXBvbmVudFJhbmdlRG9tYWlucywgJmdyYWRpZW50Q2FsbGJhY2tzKTsK
LSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZVJHQigpOwotICAgIAotICAgIGlmIChfZ3JhZGllbnRUeXBlID09IEdyYWRpZW50OjpSYWRpYWwp
IHsgICAgCi0gICAgICAgIF9zaGFkaW5nUmVmID0gQ0dTaGFkaW5nQ3JlYXRlUmFkaWFsKGNvbG9y
U3BhY2UsIENHUG9pbnRNYWtlKF94MCxfeTApLCBfcjAsIENHUG9pbnRNYWtlKF94MSxfeTEpLCBf
cjEsIF9jb2xvckZ1bmN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICB9Ci0gICAgZWxzZSB7ICAgIAot
ICAgICAgICBfc2hhZGluZ1JlZiA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNvbG9yU3BhY2UsIENH
UG9pbnRNYWtlKF94MCxfeTApLCBDR1BvaW50TWFrZShfeDEsX3kxKSwgX2NvbG9yRnVuY3Rpb24s
IHRydWUsIHRydWUpOwotICAgIH0KLSAgICAKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlIChjb2xv
clNwYWNlKTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZSAoX2NvbG9yRnVuY3Rpb24pOwotICAgIAot
ICAgIHJlZ2VuZXJhdGVTaGFkaW5nID0gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIF9zaGFkaW5n
UmVmOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcCAoZmxvYXQgcywg
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLXsKLSAgICBpZiAoc3RvcENvdW50
ID09IDApIHsKLSAgICAgICAgbWF4U3RvcHMgPSA0OwotICAgICAgICBzdG9wcyA9IChDb2xvclN0
b3AgKilmYXN0TWFsbG9jKG1heFN0b3BzICogc2l6ZW9mKENvbG9yU3RvcCkpOwotICAgIH0KLSAg
ICBlbHNlIGlmIChzdG9wQ291bnQrMSA+IG1heFN0b3BzKSB7Ci0gICAgICAgIG1heFN0b3BzICo9
IDI7Ci0gICAgICAgIHN0b3BzID0gKENvbG9yU3RvcCAqKWZhc3RSZWFsbG9jKHN0b3BzLCBtYXhT
dG9wcyAqIHNpemVvZihDb2xvclN0b3ApKTsKLSAgICB9Ci0gICAgc3RvcHNbc3RvcENvdW50Kytd
ID0gQ29sb3JTdG9wIChzLCByLCBnLCBiLCBhKTsKLSAgICBzdG9wc05lZWRBZGp1c3RpbmcgPSB0
cnVlOwotfQotCi1zdGF0aWMgaW50IHNvcnRTdG9wcyhjb25zdCBDb2xvclN0b3AgKmEsIGNvbnN0
IENvbG9yU3RvcCAqYikKLXsKLSAgICBpZiAoYS0+c3RvcCA+IGItPnN0b3ApCi0gICAgICAgIHJl
dHVybiAxOwotICAgIGVsc2UgaWYgKGEtPnN0b3AgPCBiLT5zdG9wKQotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFJldHVybiBhIHNvcnRlZCBhcnJheSBvZiBzdG9w
cyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYSAwIGFuZCAxIHN0b3AuCi1jb25zdCBDb2xvclN0b3Ag
KkdyYWRpZW50Ojpjb2xvclN0b3BzKGludCAqY291bnQpIGNvbnN0Ci17Ci0gICAgaWYgKHN0b3Bz
TmVlZEFkanVzdGluZyB8fCAhc3RvcHMpIHsKLSAgICAgICAgc3RvcHNOZWVkQWRqdXN0aW5nID0g
ZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBib29sIGhhdmVaZXJvU3RvcCA9IGZhbHNlOwotICAg
ICAgICBib29sIGhhdmVPbmVTdG9wID0gZmFsc2U7Ci0gICAgICAgIGlmIChzdG9wcykgewotICAg
ICAgICAgICAgcXNvcnQgKHN0b3BzLCBzdG9wQ291bnQsIHNpemVvZihDb2xvclN0b3ApLCAoaW50
ICgqKShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKXNvcnRTdG9wcyk7Ci0gICAgCi0gICAgICAg
ICAgICAvLyBJcyB0aGVyZSBhIHplcm8gc3RvcD8KLSAgICAgICAgICAgIGhhdmVaZXJvU3RvcCA9
IChzdG9wc1swXS5zdG9wID09IDAuZik7Ci0KLSAgICAgICAgICAgIC8vIElzIHRoZXJlIGEgb25l
IHN0b3AuICBJZiBub3QgYWRkIG9uZSBhdCB0aGUgZW5kLgotICAgICAgICAgICAgaGF2ZU9uZVN0
b3AgPSAoc3RvcENvdW50ID4gMCAmJiBzdG9wc1tzdG9wQ291bnQtMV0uc3RvcCA9PSAxLmYpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhZGp1c3RlZFN0b3BDb3VudCA9IHN0b3BDb3Vu
dDsKLSAgICAgICAgaWYgKCFoYXZlWmVyb1N0b3ApCi0gICAgICAgICAgICBhZGp1c3RlZFN0b3BD
b3VudCsrOwotICAgICAgICBpZiAoIWhhdmVPbmVTdG9wKQotICAgICAgICAgICAgYWRqdXN0ZWRT
dG9wQ291bnQrKzsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoYWRqdXN0ZWRTdG9wQ291bnQg
IT0gc3RvcENvdW50KSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFN0b3BzID0gKENvbG9yU3RvcCAq
KWZhc3RNYWxsb2MoYWRqdXN0ZWRTdG9wQ291bnQgKiBzaXplb2YoQ29sb3JTdG9wKSk7Ci0gICAg
ICAgICAgICBtZW1jcHkgKGhhdmVaZXJvU3RvcCA/IGFkanVzdGVkU3RvcHMgOiBhZGp1c3RlZFN0
b3BzKzEsCi0gICAgICAgICAgICAgICAgc3RvcHMsIHN0b3BDb3VudCpzaXplb2YoQ29sb3JTdG9w
KSk7Ci0KLSAgICAgICAgICAgIC8vIElmIG5vdCBzcGVjaWZpZWQgdXNlIGRlZmF1bHQgc3RhcnQg
KHN0b3AgMCkgYW5kIGVuZCAoc3RvcCAxKSBjb2xvcnMuCi0gICAgICAgICAgICAvLyBUaGlzIGNv
bG9yIHdpbGwgYmUgdHJhbnNwYXJlbnQgYmxhY2suCi0gICAgICAgICAgICBpZiAoIWhhdmVaZXJv
U3RvcCkgewotICAgICAgICAgICAgICAgIGFkanVzdGVkU3RvcHNbMF0gPSBDb2xvclN0b3AoMC5m
LCAwLmYsIDAuZiwgMC5mLCAxLmYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFo
YXZlT25lU3RvcCkgewotICAgICAgICAgICAgICAgIGFkanVzdGVkU3RvcHNbYWRqdXN0ZWRTdG9w
Q291bnQtMV0gPSBDb2xvclN0b3AoMS5mLCAwLmYsIDAuZiwgMC5mLCAxLmYpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZWdlbmVyYXRlU2hhZGluZyA9IHRy
dWU7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgaWYgKGFkanVzdGVkU3RvcHMpIHsKLSAgICAg
ICAgKmNvdW50ID0gYWRqdXN0ZWRTdG9wQ291bnQ7Ci0gICAgICAgIHJldHVybiBhZGp1c3RlZFN0
b3BzOwotICAgIH0KLSAgICAgICAgCi0gICAgKmNvdW50ID0gc3RvcENvdW50OwotICAgIHJldHVy
biBzdG9wczsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEltYWdlUGF0dGVybjo6aW5mbyA9IHsgIklt
YWdlUGF0dGVybiIsIDAsICZJbWFnZVBhdHRlcm5UYWJsZSwgMCB9OwotCi0vKiBTb3VyY2UgZm9y
IEltYWdlUGF0dGVyblRhYmxlLiBVc2UgIm1ha2UgaGFzaHRhYmxlcyIgdG8gcmVnZW5lcmF0ZS4K
LUBiZWdpbiBJbWFnZVBhdHRlcm5UYWJsZSAwCi1AZW5kCi0qLwotCi0jaWYgX19BUFBMRV9fCi1z
dGF0aWMgdm9pZCBkcmF3UGF0dGVybiAodm9pZCAqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQotewotICAgIEltYWdlUGF0dGVybiAqcGF0dGVybiA9IHN0YXRpY19jYXN0PEltYWdlUGF0dGVy
bio+KGluZm8pOwotICAgIGlmICghcGF0dGVybi0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0IHA7Ci0gICAgZmxvYXQgdyA9IHBhdHRlcm4tPmNh
Y2hlZEltYWdlKCktPmltYWdlKCktPndpZHRoKCk7Ci0gICAgZmxvYXQgaCA9IHBhdHRlcm4tPmNh
Y2hlZEltYWdlKCktPmltYWdlKCktPmhlaWdodCgpOwotICAgIAotICAgIC8vIFRyeSBhbmQgZHJh
dyBiaXRtYXAgZGlyZWN0bHkKLSAgICBDR0ltYWdlUmVmIHJlZiA9IHBhdHRlcm4tPmNhY2hlZElt
YWdlKCktPmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKLSAgICBpZiAocmVmKQotICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UgKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgdywgaCksIHJlZik7
ICAgIAotICAgIGVsc2UKLSAgICAgICAgcC5kcmF3RmxvYXRJbWFnZShwYXR0ZXJuLT5jYWNoZWRJ
bWFnZSgpLT5pbWFnZSgpLCAwLCAwLCB3LCBoLCAwLmYsIDAuZiwgdywgaCwgSW1hZ2U6OkNvbXBv
c2l0ZVNvdXJjZU92ZXIsIGNvbnRleHQpOwotfQotCi1DR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVy
bkNhbGxiYWNrcyA9IHsgMCwgZHJhd1BhdHRlcm4sIE5VTEwgfTsKLSNlbmRpZgotCi1JbWFnZVBh
dHRlcm46OkltYWdlUGF0dGVybihDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UsIGludCByZXBldGl0
aW9uVHlwZSkKLSAgICA6X3J3KDApLCBfcmgoMCkKLXsKLSAgICBtX2NhY2hlZEltYWdlID0gY2Fj
aGVkSW1hZ2U7Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7Ci0gICAgCi0gICAgZmxvYXQgdyA9IG1fY2FjaGVk
SW1hZ2UtPmltYWdlKCktPndpZHRoKCk7Ci0gICAgZmxvYXQgaCA9IG1fY2FjaGVkSW1hZ2UtPmlt
YWdlKCktPmhlaWdodCgpOwotI2lmIF9fQVBQTEVfXwotICAgIF9ib3VuZHMgPSBDR1JlY3RNYWtl
ICgwLCAwLCB3LCBoKTsKLSNlbmRpZgotICAgIGlmIChyZXBldGl0aW9uVHlwZSA9PSBSZXBlYXQp
IHsKLSAgICAgICAgX3J3ID0gdzsgX3JoID0gaDsKLSAgICB9Ci0gICAgZWxzZSBpZiAocmVwZXRp
dGlvblR5cGUgPT0gUmVwZWF0WCkgewotICAgICAgICBfcncgPSB3OyBfcmggPSAwOwotICAgIH0K
LSAgICBlbHNlIGlmIChyZXBldGl0aW9uVHlwZSA9PSBSZXBlYXRZKSB7Ci0gICAgICAgIF9ydyA9
IDA7IF9yaCA9IGg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHJlcGV0aXRpb25UeXBlID09IE5vUmVw
ZWF0KSB7Ci0gICAgICAgIF9ydyA9IDA7IF9yaCA9IDA7Ci0gICAgfQotfQotCi1JbWFnZVBhdHRl
cm46On5JbWFnZVBhdHRlcm4oKQotewotICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICBt
X2NhY2hlZEltYWdlLT5kZXJlZih0aGlzKTsKLX0KLQotI2lmIF9fQVBQTEVfXwotQ0dQYXR0ZXJu
UmVmIEltYWdlUGF0dGVybjo6Y3JlYXRlUGF0dGVybihDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0pCi17Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlIHx8IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCkt
PmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAKLSAgICBDR0FmZmluZVRy
YW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gdHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zv
cm0gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHBhdHRlcm5UcmFuc2Zvcm0sIDEsIC0xKTsKLSAg
ICBwYXR0ZXJuVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUocGF0dGVyblRy
YW5zZm9ybSwgMCwgLW1fY2FjaGVkSW1hZ2UtPmltYWdlKCktPmhlaWdodCgpKTsKLQotICAgIHJl
dHVybiBDR1BhdHRlcm5DcmVhdGUodGhpcywgX2JvdW5kcywgcGF0dGVyblRyYW5zZm9ybSwgX3J3
LCBfcmgsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcsIHRydWUsICZwYXR0ZXJuQ2Fs
bGJhY2tzKTsKLX0KLSNlbmRpZgotCi1ib29sIEltYWdlUGF0dGVybjo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxJbWFnZVBh
dHRlcm4sIERPTU9iamVjdD4oZXhlYywgJkltYWdlUGF0dGVyblRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlICpJbWFnZVBhdHRlcm46OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKLXsKLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQotdm9pZCBJbWFnZVBhdHRlcm46OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyKQotewot
ICAgIGxvb2t1cFB1dDxJbWFnZVBhdHRlcm4sRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyLCAmSW1hZ2VQYXR0ZXJuVGFibGUsIHRoaXMgKTsKLX0KLQotdm9pZCBJbWFn
ZVBhdHRlcm46OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpT
VmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pCi17CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4odG9KUyhleGVjLCByZXN1bHQpKTsKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpJbmRleDoga2h0bWwv
ZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCShyZXZpc2lvbiAxMzI1NykKKysrIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4OSw3ICs2ODksNyBAQCBKU1ZhbHVlICpXaW5kb3c6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0CiAgICAgY2FzZSBFdmVudDoKICAgICAgIGlmICghbV9ldnQpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgcmV0dXJuIGdldERPTUV2ZW50KGV4ZWMsIG1f
ZXZ0KTsKKyAgICAgIHJldHVybiB0b0pTKGV4ZWMsIG1fZXZ0KTsKICAgICBjYXNlIElubmVySGVp
Z2h0OgogICAgICAgaWYgKCFtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwpAQCAtODE0LDcgKzgxNCw3IEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3QKICAgICAgIGlmIChEb2N1bWVudEltcGwgKmRvYyA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCkpCiAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqZmUgPSBkb2MtPm93bmVyRWxlbWVudCgp
KQogICAgICAgICAgIGlmIChjaGVja05vZGVTZWN1cml0eShleGVjLCBmZSkpIHsKLSAgICAgICAg
ICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZlKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGZlKTsKICAgICAgICAgICB9CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
IH0KQEAgLTgzMCw3ICs4MzAsNyBAQCBKU1ZhbHVlICpXaW5kb3c6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0CiAgICAgICAgbV9mcmFtZS0+d3JpdGUoIjxIVE1MPjxCT0RZPiIpOwogICAgICAgIG1f
ZnJhbWUtPmVuZCgpOwogICAgICB9Ci0gICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG1fZnJh
bWUtPmRvY3VtZW50KCkpOworICAgICByZXR1cm4gdG9KUyhleGVjLCBtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKICAgIGNhc2UgT25hYm9ydDoKICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIGFi
b3J0RXZlbnQpOwogICAgY2FzZSBPbmJsdXI6CkBAIC05MTgsNyArOTE4LDcgQEAgSlNWYWx1ZSAq
V2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YQogICBET01TdHJpbmcgbmFtZSA9IHByb3Bl
cnR5TmFtZS5kb21TdHJpbmcoKTsKICAgUmVmUHRyPERPTTo6SFRNTENvbGxlY3Rpb25JbXBsPiBj
b2xsZWN0aW9uID0gZG9jLT53aW5kb3dOYW1lZEl0ZW1zKG5hbWUpOwogICBpZiAoY29sbGVjdGlv
bi0+bGVuZ3RoKCkgPT0gMSkKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBjb2xsZWN0aW9u
LT5maXJzdEl0ZW0oKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgY29sbGVjdGlvbi0+Zmlyc3RJ
dGVtKCkpOwogICBlbHNlIAogICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBjb2xs
ZWN0aW9uLmdldCgpKTsKIH0KQEAgLTIzMTUsMTcgKzIzMTUsMTcgQEAgSlNWYWx1ZSAqU2VsZWN0
aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogICAgICAgICAKICAgICBzd2l0Y2ggKHRva2VuKSB7
CiAgICAgY2FzZSBBbmNob3JOb2RlOgotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBz
LmFuY2hvck5vZGUoKSk7CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHMuYW5jaG9yTm9kZSgp
KTsKICAgICBjYXNlIEJhc2VOb2RlOgotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBz
LmJhc2VOb2RlKCkpOworICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzLmJhc2VOb2RlKCkpOwog
ICAgIGNhc2UgQW5jaG9yT2Zmc2V0OgogICAgICAgICByZXR1cm4ganNOdW1iZXIocy5hbmNob3JP
ZmZzZXQoKSk7CiAgICAgY2FzZSBCYXNlT2Zmc2V0OgogICAgICAgICByZXR1cm4ganNOdW1iZXIo
cy5iYXNlT2Zmc2V0KCkpOwogICAgIGNhc2UgRm9jdXNOb2RlOgotICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBzLmZvY3VzTm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
cy5mb2N1c05vZGUoKSk7CiAgICAgY2FzZSBFeHRlbnROb2RlOgotICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBzLmV4dGVudE5vZGUoKSk7CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IHMuZXh0ZW50Tm9kZSgpKTsKICAgICBjYXNlIEZvY3VzT2Zmc2V0OgogICAgICAgICByZXR1cm4g
anNOdW1iZXIocy5mb2N1c09mZnNldCgpKTsKICAgICBjYXNlIEV4dGVudE9mZnNldDoKQEAgLTIz
OTAsNyArMjM5MCw3IEBAIEpTVmFsdWUgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEUK
ICAgICAgICAgICAgICAgICBzLm1vZGlmeShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJp
bmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMl0tPnRvU3Ry
aW5nKGV4ZWMpLmRvbVN0cmluZygpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpHZXRSYW5nZUF0OgotICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRET01SYW5nZShleGVjLCBzLmdldFJhbmdlQXQoYXJnc1swXS0+dG9JbnQzMihleGVjKSkuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHMuZ2V0UmFuZ2VBdChhcmdz
WzBdLT50b0ludDMyKGV4ZWMpKS5nZXQoKSk7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6
VG9TdHJpbmc6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMudG9TdHJpbmcoKSk7
CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCShyZXZpc2lvbiAxMzI1NikKKysrIGtodG1s
L2VjbWEva2pzX3RyYXZlcnNhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTAgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlRyZWVXYWxrZXJJbXBsPiBtX2lt
cGw7CiAgIH07CiAKLSAgSlNWYWx1ZSogZ2V0RE9NTm9kZUl0ZXJhdG9yKEV4ZWNTdGF0ZSosIFdl
YkNvcmU6Ok5vZGVJdGVyYXRvckltcGwqKTsKKyAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqLCBX
ZWJDb3JlOjpOb2RlSXRlcmF0b3JJbXBsKik7CiAgIEpTVmFsdWUqIGdldE5vZGVGaWx0ZXJDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqKTsKLSAgSlNWYWx1ZSogZ2V0RE9NTm9kZUZpbHRlcihFeGVjU3Rh
dGUqLCBXZWJDb3JlOjpOb2RlRmlsdGVySW1wbCopOwotICBKU1ZhbHVlKiBnZXRET01UcmVlV2Fs
a2VyKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OlRyZWVXYWxrZXJJbXBsKik7CisgIEpTVmFsdWUqIHRv
SlMoRXhlY1N0YXRlKiwgV2ViQ29yZTo6Tm9kZUZpbHRlckltcGwqKTsKKyAgSlNWYWx1ZSogdG9K
UyhFeGVjU3RhdGUqLCBXZWJDb3JlOjpUcmVlV2Fsa2VySW1wbCopOwogCiAgIFdlYkNvcmU6Ok5v
ZGVGaWx0ZXJJbXBsKiB0b05vZGVGaWx0ZXIoY29uc3QgSlNWYWx1ZSopOyAvLyByZXR1cm5zIDAg
aWYgdmFsdWUgaXMgbm90IGEgRE9NTm9kZUZpbHRlcgogCkluZGV4OiBraHRtbC9lY21hL2tqc19o
dG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCShyZXZpc2lvbiAxMzI1
NikKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAKIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTkgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIy
LDI1ICsyMiwyMCBAQAogI2lmbmRlZiBLSlNfSFRNTF9IXwogI2RlZmluZSBLSlNfSFRNTF9IXwog
Ci0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgImtqc19k
b20uaCIKLSNpbmNsdWRlIDxxcHRybGlzdC5oPgogCi0jaWYgX19BUFBMRV9fCi0jaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYKLQotbmFt
ZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOwogICAgIGNsYXNzIEhUTUxDb2xsZWN0aW9uSW1wbDsKICAgICBjbGFzcyBI
VE1MRG9jdW1lbnRJbXBsOwogICAgIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsKKyAgICBjbGFzcyBD
YW52YXNHcmFkaWVudDsKKyAgICBjbGFzcyBDYW52YXNQYXR0ZXJuOwogICAgIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbDsKICAgICBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGw7
CiAgICAgY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOwotfTsKK30KIAogbmFtZXNw
YWNlIEtKUyB7CiAKQEAgLTQ4LDcgKzQzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3Mg
SFRNTERvY3VtZW50IDogcHVibGljIERPTURvY3VtZW50IHsKICAgcHVibGljOgotICAgIEhUTUxE
b2N1bWVudChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6SFRNTERvY3VtZW50SW1wbCAqZCk7CisgICAg
SFRNTERvY3VtZW50KEV4ZWNTdGF0ZSAqZXhlYywgV2ViQ29yZTo6SFRNTERvY3VtZW50SW1wbCAq
ZCk7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwpAQCAtMzY0LDE4NyArMzU5LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgUmVmUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2RvYzsKICAgfTsK
IAotICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIENvbnRleHQyRCBPYmplY3QgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gIGNsYXNzIENvbnRleHQyRCA6IHB1YmxpYyBET01PYmplY3QgewotICBm
cmllbmQgY2xhc3MgQ29udGV4dDJERnVuY3Rpb247Ci0gIHB1YmxpYzoKLSAgICBDb250ZXh0MkQo
RE9NOjpIVE1MRWxlbWVudEltcGwgKmUpOwotICAgIH5Db250ZXh0MkQoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGlu
dCBhdHRyID0gTm9uZSk7Ci0gICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKTsKLSAgICB2aXJ0dWFs
IGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87Ci0KLSAgICBlbnVtIHsgCi0gICAgICAgIFN0cm9rZVN0eWxlLAotICAgICAgICBGaWxs
U3R5bGUsCi0gICAgICAgIExpbmVXaWR0aCwKLSAgICAgICAgTGluZUNhcCwKLSAgICAgICAgTGlu
ZUpvaW4sCi0gICAgICAgIE1pdGVyTGltaXQsCi0gICAgICAgIFNoYWRvd09mZnNldFgsCi0gICAg
ICAgIFNoYWRvd09mZnNldFksCi0gICAgICAgIFNoYWRvd0JsdXIsCi0gICAgICAgIFNoYWRvd0Nv
bG9yLAotICAgICAgICBHbG9iYWxBbHBoYSwKLSAgICAgICAgR2xvYmFsQ29tcG9zaXRlT3BlcmF0
aW9uLAotICAgICAgICBTYXZlLCBSZXN0b3JlLAotICAgICAgICBTY2FsZSwgUm90YXRlLCBUcmFu
c2xhdGUsCi0gICAgICAgIEJlZ2luUGF0aCwgQ2xvc2VQYXRoLCAKLSAgICAgICAgU2V0U3Ryb2tl
Q29sb3IsIFNldEZpbGxDb2xvciwgU2V0TGluZVdpZHRoLCBTZXRMaW5lQ2FwLCBTZXRMaW5lSm9p
biwgU2V0TWl0ZXJMaW1pdCwgCi0gICAgICAgIEZpbGwsIFN0cm9rZSwgCi0gICAgICAgIE1vdmVU
bywgTGluZVRvLCBRdWFkcmF0aWNDdXJ2ZVRvLCBCZXppZXJDdXJ2ZVRvLCBBcmNUbywgQXJjLCBS
ZWN0LCBDbGlwLAotICAgICAgICBDbGVhclJlY3QsIEZpbGxSZWN0LCBTdHJva2VSZWN0LAotICAg
ICAgICBEcmF3SW1hZ2UsIERyYXdJbWFnZUZyb21SZWN0LAotICAgICAgICBTZXRTaGFkb3csIENs
ZWFyU2hhZG93LAotICAgICAgICBTZXRBbHBoYSwgU2V0Q29tcG9zaXRlT3BlcmF0aW9uLAotICAg
ICAgICBDcmVhdGVMaW5lYXJHcmFkaWVudCwKLSAgICAgICAgQ3JlYXRlUmFkaWFsR3JhZGllbnQs
Ci0gICAgICAgIENyZWF0ZVBhdHRlcm4KLSAgICB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgc2F2
ZSgpOwotICAgIHZvaWQgcmVzdG9yZSgpOwotCi0jaWYgX19BUFBMRV9fCi0gICAgLy8gRklYTUU6
IE1hY2ludG9zaCBzcGVjaWZpYywgYW5kIHNob3VsZCBiZSBhYnN0cmFjdGVkIGJ5IEdyYXBoaWNz
Q29udGV4dC4KLSAgICBDR0NvbnRleHRSZWYgZHJhd2luZ0NvbnRleHQoKTsKLSAgICBDR0FmZmlu
ZVRyYW5zZm9ybSBfbGFzdEZpbGxJbWFnZVBhdHRlcm5DVE07Ci0gICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gX2xhc3RTdHJva2VJbWFnZVBhdHRlcm5DVE07Ci0jZW5kaWYKLQotICAgIGJvb2wgX3ZhbGlk
RmlsbEltYWdlUGF0dGVybjsKLSAgICBib29sIF92YWxpZFN0cm9rZUltYWdlUGF0dGVybjsKLSAg
ICB2b2lkIHVwZGF0ZUZpbGxJbWFnZVBhdHRlcm4oKTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUlt
YWdlUGF0dGVybigpOwotICAgIAotICAgIHZvaWQgc2V0U2hhZG93KEV4ZWNTdGF0ZSAqZXhlYyk7
Ci0KLSAgICBSZWZQdHI8RE9NOjpIVE1MRWxlbWVudEltcGw+IF9lbGVtZW50OwotICAgIAotICAg
IFFQdHJMaXN0PExpc3Q+IHN0YXRlU3RhY2s7Ci0gICAgCi0gICAgSlNWYWx1ZSAqX3N0cm9rZVN0
eWxlOwotICAgIEpTVmFsdWUgKl9maWxsU3R5bGU7Ci0gICAgSlNWYWx1ZSAqX2xpbmVXaWR0aDsK
LSAgICBKU1ZhbHVlICpfbGluZUNhcDsKLSAgICBKU1ZhbHVlICpfbGluZUpvaW47Ci0gICAgSlNW
YWx1ZSAqX21pdGVyTGltaXQ7Ci0gICAgSlNWYWx1ZSAqX3NoYWRvd09mZnNldFg7Ci0gICAgSlNW
YWx1ZSAqX3NoYWRvd09mZnNldFk7Ci0gICAgSlNWYWx1ZSAqX3NoYWRvd0JsdXI7Ci0gICAgSlNW
YWx1ZSAqX3NoYWRvd0NvbG9yOwotICAgIEpTVmFsdWUgKl9nbG9iYWxBbHBoYTsKLSAgICBKU1Zh
bHVlICpfZ2xvYmFsQ29tcG9zaXRlOwotICB9OwotCi0jaWYgX19BUFBMRV9fCi0gICAgLy8gRklY
TUU6IE1hY2ludG9zaCBzcGVjaWZpYywgYW5kIHNob3VsZCBiZSBhYnN0cmFjdGVkIGJ5IEdyYXBo
aWNzQ29udGV4dC4KLSAgICBDR0NvbG9yUmVmIGNvbG9yUmVmRnJvbVZhbHVlKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNWYWx1ZSAqdmFsdWUpOwotI2VuZGlmCi0KLSAgICBDb2xvciBjb2xvckZyb21WYWx1
ZShFeGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUgKnZhbHVlKTsKLQotICAgIHN0cnVjdCBDb2xvclN0
b3AgewotICAgICAgICBmbG9hdCBzdG9wOwotICAgICAgICBmbG9hdCByZWQ7Ci0gICAgICAgIGZs
b2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBhbHBoYTsKLSAg
ICAgICAgCi0gICAgICAgIENvbG9yU3RvcChmbG9hdCBzLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKSA6IHN0b3AocyksIHJlZChyKSwgZ3JlZW4oZyksIGJsdWUoYiksIGFscGhh
KGEpIHt9OwotICAgIH07Ci0KLSAgY2xhc3MgR3JhZGllbnQgOiBwdWJsaWMgRE9NT2JqZWN0IHsK
LSAgZnJpZW5kIGNsYXNzIENvbnRleHQyREZ1bmN0aW9uOwotICBwdWJsaWM6Ci0gICAgR3JhZGll
bnQoZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEpOwotICAgIEdyYWRpZW50
KGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgcjAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQg
cjEpOwotICAgIH5HcmFkaWVudCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBK
U1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2
b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUg
KnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0
YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87Ci0KLSAgICBlbnVtIHsgCi0gICAgICAgIEFkZENvbG9yU3RvcAotICAg
IH07Ci0gICAgCi0gICAgZW51bSB7Ci0gICAgICAgIFJhZGlhbCwgTGluZWFyCi0gICAgfTsKLQot
I2lmIF9fQVBQTEVfXwotICAgIC8vIEZJWE1FOiBNYWNpbnRvc2ggc3BlY2lmaWMsIGFuZCBzaG91
bGQgYmUgYWJzdHJhY3RlZCBieSBHcmFwaGljc0NvbnRleHQuCi0gICAgQ0dTaGFkaW5nUmVmIGdl
dFNoYWRpbmcoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBhZGRDb2xvclN0b3AgKGZsb2F0IHMsIGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGFscGhhKTsKLSAgICBjb25zdCBDb2xvclN0
b3AgKmNvbG9yU3RvcHMoaW50ICpjb3VudCkgY29uc3Q7Ci0gICAgCi0gICAgaW50IGxhc3RTdG9w
OwotICAgIGludCBuZXh0U3RvcDsKLSAgICAKLXByaXZhdGU6ICAgIAotICAgIHZvaWQgY29tbW9u
SW5pdCgpOwotICAgIAotICAgIGludCBfZ3JhZGllbnRUeXBlOwotICAgIGZsb2F0IF94MCwgX3kw
LCBfcjAsIF94MSwgX3kxLCBfcjE7Ci0KLSNpZiBfX0FQUExFX18KLSAgICAvLyBGSVhNRTogTWFj
aW50b3NoIHNwZWNpZmljLCBhbmQgc2hvdWxkIGJlIGFic3RyYWN0ZWQgYnkgR3JhcGhpY3NDb250
ZXh0LgotICAgIENHU2hhZGluZ1JlZiBfc2hhZGluZ1JlZjsKLSNlbmRpZgotCi0gICAgaW50IG1h
eFN0b3BzOwotICAgIGludCBzdG9wQ291bnQ7Ci0gICAgQ29sb3JTdG9wICpzdG9wczsKLSAgICBt
dXRhYmxlIGludCBhZGp1c3RlZFN0b3BDb3VudDsKLSAgICBtdXRhYmxlIENvbG9yU3RvcCAqYWRq
dXN0ZWRTdG9wczsKLSAgICBtdXRhYmxlIGJvb2wgc3RvcHNOZWVkQWRqdXN0aW5nIDogMTsKLSAg
ICBtdXRhYmxlIGJvb2wgcmVnZW5lcmF0ZVNoYWRpbmcgOiAxOwotICB9OwotCi0gIGNsYXNzIElt
YWdlUGF0dGVybiA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBXZWJDb3JlOjpDYWNoZWRPYmpl
Y3RDbGllbnQgewotICBwdWJsaWM6Ci0gICAgSW1hZ2VQYXR0ZXJuKFdlYkNvcmU6OkNhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSwgaW50IHJlcGV0aXRpb25UeXBlKTsKLSAgICB+SW1hZ2VQYXR0ZXJu
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIq
Lyk7Ci0gICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLQot
I2lmIF9fQVBQTEVfXwotICAgIC8vIEZJWE1FOiBNYWNpbnRvc2ggc3BlY2lmaWMsIGFuZCBzaG91
bGQgYmUgYWJzdHJhY3RlZCBieSBHcmFwaGljc0NvbnRleHQuCi0gICAgQ0dQYXR0ZXJuUmVmIGNy
ZWF0ZVBhdHRlcm4oQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKTsKLSNlbmRpZgotCi0gICAg
V2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRJbWFnZTsgfQotICAgIAotICAgIGVudW0gewotICAgICAgICBSZXBlYXQsIFJlcGVhdFgsIFJl
cGVhdFksIE5vUmVwZWF0Ci0gICAgfTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZmxvYXQgX3J3LCBf
cmg7Ci0gICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIG1fY2FjaGVkSW1hZ2U7Ci0jaWYgX19BUFBM
RV9fCi0gICAgLy8gRklYTUU6IE1hY2ludG9zaCBzcGVjaWZpYywgYW5kIHNob3VsZCBiZSBhYnN0
cmFjdGVkIGJ5IEdyYXBoaWNzQ29udGV4dC4KLSAgICBDR1JlY3QgX2JvdW5kczsKLSNlbmRpZgot
ICB9OwotCiAgIEpTVmFsdWUgKmdldEhUTUxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgRE9N
OjpIVE1MQ29sbGVjdGlvbkltcGwgKmMpOwogICBKU1ZhbHVlICpnZXRTZWxlY3RIVE1MQ29sbGVj
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsICpjLCBET006OkhU
TUxTZWxlY3RFbGVtZW50SW1wbCAqZSk7CiAgIEpTVmFsdWUgKmdldEFsbEhUTUxDb2xsZWN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGwgKmMpOwpJbmRleDoga2h0
bWwvZWNtYS9ranNfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfZXZlbnRz
LmgJKHJldmlzaW9uIDEzMjU2KQorKysga2h0bWwvZWNtYS9ranNfZXZlbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbXV0YWJs
ZSBDbGlwYm9hcmQqIGNsaXBib2FyZDsKICAgICB9OwogCi0gICAgSlNWYWx1ZSogZ2V0RE9NRXZl
bnQoRXhlY1N0YXRlKiwgRE9NOjpFdmVudEltcGwqKTsKKyAgICBKU1ZhbHVlKiB0b0pTKEV4ZWNT
dGF0ZSosIFdlYkNvcmU6OkV2ZW50SW1wbCopOwogCiAgICAgRE9NOjpFdmVudEltcGwqIHRvRXZl
bnQoSlNWYWx1ZSopOyAvLyByZXR1cm5zIDAgaWYgdmFsdWUgaXMgbm90IGEgRE9NRXZlbnQgb2Jq
ZWN0CiAKSW5kZXg6IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwv
ZWNtYS9ranNfZG9tLmNwcAkocmV2aXNpb24gMTMyNTYpCisrKyBraHRtbC9lY21hL2tqc19kb20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTkgKzI3MCwxOSBAQCBKU1ZhbHVlICpET01Ob2Rl
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGpzTnVtYmVyKG5vZGUubm9kZVR5
cGUoKSk7CiAgIGNhc2UgUGFyZW50Tm9kZToKICAgY2FzZSBQYXJlbnRFbGVtZW50OiAvLyBJRSBv
bmx5IGFwcGFyZW50bHkKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG5vZGUucGFyZW50Tm9k
ZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLG5vZGUucGFyZW50Tm9kZSgpKTsKICAgY2FzZSBD
aGlsZE5vZGVzOgotICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVjLG5vZGUuY2hpbGROb2Rl
cygpLmdldCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLG5vZGUuY2hpbGROb2RlcygpLmdldCgp
KTsKICAgY2FzZSBGaXJzdENoaWxkOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZS5m
aXJzdENoaWxkKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsbm9kZS5maXJzdENoaWxkKCkpOwog
ICBjYXNlIExhc3RDaGlsZDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG5vZGUubGFzdENo
aWxkKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsbm9kZS5sYXN0Q2hpbGQoKSk7CiAgIGNhc2Ug
UHJldmlvdXNTaWJsaW5nOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZS5wcmV2aW91
c1NpYmxpbmcoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxub2RlLnByZXZpb3VzU2libGluZygp
KTsKICAgY2FzZSBOZXh0U2libGluZzoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG5vZGUu
bmV4dFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxub2RlLm5leHRTaWJsaW5nKCkp
OwogICBjYXNlIEF0dHJpYnV0ZXM6Ci0gICAgcmV0dXJuIGdldERPTU5hbWVkTm9kZU1hcChleGVj
LG5vZGUuYXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLG5vZGUuYXR0cmlidXRl
cygpKTsKICAgY2FzZSBOYW1lc3BhY2VVUkk6CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKG5v
ZGUubmFtZXNwYWNlVVJJKCkpOwogICBjYXNlIFByZWZpeDoKQEAgLTI5MCw3ICsyOTAsNyBAQCBK
U1ZhbHVlICpET01Ob2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgIGNhc2UgTG9jYWxOYW1l
OgogICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChub2RlLmxvY2FsTmFtZSgpKTsKICAgY2FzZSBP
d25lckRvY3VtZW50OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZS5vd25lckRvY3Vt
ZW50KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsbm9kZS5vd25lckRvY3VtZW50KCkpOwogICBj
YXNlIFRleHRDb250ZW50OgogICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChub2RlLnRleHRDb250
ZW50KCkpOwogICBjYXNlIE9uQWJvcnQ6CkBAIC0zOTksNyArMzk5LDcgQEAgSlNWYWx1ZSAqRE9N
Tm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICAgICAgcmV0dXJuIHJlbmQgPyBqc051bWJl
cihyZW5kLT5vZmZzZXRIZWlnaHQoKSkgOiBzdGF0aWNfY2FzdDxKU1ZhbHVlICo+KGpzVW5kZWZp
bmVkKCkpOwogICAgIGNhc2UgT2Zmc2V0UGFyZW50OiB7CiAgICAgICBSZW5kZXJPYmplY3QqIHBh
ciA9IHJlbmQgPyByZW5kLT5vZmZzZXRQYXJlbnQoKSA6IDA7Ci0gICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLCBwYXIgPyBwYXItPmVsZW1lbnQoKSA6IDApOworICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgcGFyID8gcGFyLT5lbGVtZW50KCkgOiAwKTsKICAgICB9CiAgICAgY2FzZSBDbGllbnRX
aWR0aDoKICAgICAgIHJldHVybiByZW5kID8ganNOdW1iZXIocmVuZC0+Y2xpZW50V2lkdGgoKSkg
OiBzdGF0aWNfY2FzdDxKU1ZhbHVlICo+KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI3LDcgKzYyNyw3
IEBAIEpTVmFsdWUgKkRPTU5vZGVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW8KICAgICBjYXNlIERP
TU5vZGU6Okhhc0NoaWxkTm9kZXM6CiAgICAgICByZXR1cm4ganNCb29sZWFuKG5vZGUuaGFzQ2hp
bGROb2RlcygpKTsKICAgICBjYXNlIERPTU5vZGU6OkNsb25lTm9kZToKLSAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsbm9kZS5jbG9uZU5vZGUoYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpKSk7
CisgICAgICByZXR1cm4gdG9KUyhleGVjLG5vZGUuY2xvbmVOb2RlKGFyZ3NbMF0tPnRvQm9vbGVh
bihleGVjKSkpOwogICAgIGNhc2UgRE9NTm9kZTo6Tm9ybWFsaXplOgogICAgICAgbm9kZS5ub3Jt
YWxpemUoKTsKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNzMwLDEzICs3MzAsMTMg
QEAgSlNWYWx1ZSAqRE9NTm9kZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRQogSlNWYWx1ZSAqRE9N
Tm9kZUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgRE9NTm9kZUxpc3QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01Ob2Rl
TGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwotICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlz
T2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CisgIHJldHVybiB0b0pTKGV4ZWMsIHRo
aXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAogSlNWYWx1ZSAqRE9NTm9k
ZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmpl
Y3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICBET01Ob2RlTGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5vZGVMaXN0
ICo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmot
Pm1faW1wbC0+aXRlbUJ5SWQocHJvcGVydHlOYW1lLmRvbVN0cmluZygpLmltcGwoKSkpOworICBy
ZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW1CeUlkKHByb3BlcnR5TmFtZS5k
b21TdHJpbmcoKS5pbXBsKCkpKTsKIH0KIAogYm9vbCBET01Ob2RlTGlzdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC03NzUsNyArNzc1LDcgQEAgSlNWYWx1ZSAqRE9NTm9kZUxp
c3Q6OmNhbGxBc0Z1bmN0aW9uKEV4ZQogICBib29sIG9rOwogICB1bnNpZ25lZCBpbnQgdSA9IHMu
dG9VSW50MzIoJm9rKTsKICAgaWYgKG9rKQotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG1f
aW1wbC0+aXRlbSh1KSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgbV9pbXBsLT5pdGVtKHUpKTsK
IAogICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KQEAgLTc4OCw3ICs3ODgsNyBAQCBKU1ZhbHVl
ICpET01Ob2RlTGlzdEZ1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgIERPTTo6Tm9kZUxpc3RJbXBsICZs
aXN0ID0gKnN0YXRpY19jYXN0PERPTU5vZGVMaXN0ICo+KHRoaXNPYmopLT5pbXBsKCk7CiAKICAg
aWYgKGlkID09IERPTU5vZGVMaXN0OjpJdGVtKQotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGxpc3QuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMpKSk7CisgICAgcmV0dXJuIHRvSlMoZXhl
YywgbGlzdC5pdGVtKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykpKTsKIAogICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KQEAgLTg4NCwxMSArODg0LDExIEBAIEpTVmFsdWUgKkRPTURvY3VtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEUKIAogICBzd2l0Y2godG9rZW4pIHsKICAgY2FzZSBEb2NUeXBlOgot
ICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmRvY3R5cGUoKSk7CisgICAgcmV0dXJuIHRv
SlMoZXhlYyxkb2MuZG9jdHlwZSgpKTsKICAgY2FzZSBJbXBsZW1lbnRhdGlvbjoKLSAgICByZXR1
cm4gZ2V0RE9NRE9NSW1wbGVtZW50YXRpb24oZXhlYywgZG9jLmltcGxlbWVudGF0aW9uKCkpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGRvYy5pbXBsZW1lbnRhdGlvbigpKTsKICAgY2FzZSBEb2N1
bWVudEVsZW1lbnQ6Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuZG9jdW1lbnRFbGVt
ZW50KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsZG9jLmRvY3VtZW50RWxlbWVudCgpKTsKICAg
Y2FzZSBDaGFyc2V0OgogICBjYXNlIENoYXJhY3RlclNldDoKICAgY2FzZSBBY3R1YWxFbmNvZGlu
ZzoKQEAgLTkxNyw3ICs5MTcsNyBAQCBKU1ZhbHVlICpET01Eb2N1bWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFCiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICBjYXNlIERPTURvY3Vt
ZW50OjpEZWZhdWx0VmlldzogLy8gRE9NMgotICAgIHJldHVybiBnZXRET01BYnN0cmFjdFZpZXco
ZXhlYyxkb2MuZGVmYXVsdFZpZXcoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxkb2MuZGVmYXVs
dFZpZXcoKSk7CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KQEAgLTk1MywzOSAr
OTUzLDM5IEBAIEpTVmFsdWUgKkRPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW4KIAogICBz
d2l0Y2goaWQpIHsKICAgY2FzZSBET01Eb2N1bWVudDo6QWRvcHROb2RlOgotICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsZG9jLmFkb3B0Tm9kZSh0b05vZGUoYXJnc1swXSksZXhjZXB0aW9uKSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYyxkb2MuYWRvcHROb2RlKHRvTm9kZShhcmdzWzBdKSxleGNl
cHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlRWxlbWVudDoKLSAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVFbGVtZW50KHMsIGV4Y2VwdGlvbikpOworICAgIHJl
dHVybiB0b0pTKGV4ZWMsZG9jLmNyZWF0ZUVsZW1lbnQocywgZXhjZXB0aW9uKSk7CiAgIGNhc2Ug
RE9NRG9jdW1lbnQ6OkNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6Ci0gICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyxkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTsKKyAgICByZXR1cm4gdG9KUyhl
eGVjLGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpOwogICBjYXNlIERPTURvY3VtZW50OjpD
cmVhdGVUZXh0Tm9kZToKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVUZXh0
Tm9kZShzKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxkb2MuY3JlYXRlVGV4dE5vZGUocykpOwog
ICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVDb21tZW50OgotICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsZG9jLmNyZWF0ZUNvbW1lbnQocykpOworICAgIHJldHVybiB0b0pTKGV4ZWMsZG9jLmNy
ZWF0ZUNvbW1lbnQocykpOwogICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVDREFUQVNlY3Rpb246
Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbihzLCBl
eGNlcHRpb24pKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBkb2MuY3JlYXRlQ0RBVEFTZWN0aW9u
KHMsIGV4Y2VwdGlvbikpOwogICBjYXNlIERPTURvY3VtZW50OjpDcmVhdGVQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZG9jLmNyZWF0ZVByb2Nlc3Np
bmdJbnN0cnVjdGlvbihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwgYXJnc1sx
XS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGV4Y2VwdGlvbikpOworICAgIHJldHVybiB0
b0pTKGV4ZWMsIGRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygp
LCBleGNlcHRpb24pKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlQXR0cmlidXRlOgotICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmNyZWF0ZUF0dHJpYnV0ZShzLCBleGNlcHRpb24p
KTsKKyAgICByZXR1cm4gdG9KUyhleGVjLGRvYy5jcmVhdGVBdHRyaWJ1dGUocywgZXhjZXB0aW9u
KSk7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkNyZWF0ZUVudGl0eVJlZmVyZW5jZToKLSAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCBkb2MuY3JlYXRlRW50aXR5UmVmZXJlbmNlKHMsIGV4Y2VwdGlv
bikpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGRvYy5jcmVhdGVFbnRpdHlSZWZlcmVuY2Uocywg
ZXhjZXB0aW9uKSk7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkVsZW1lbnRGcm9tUG9pbnQ6Ci0gICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuZWxlbWVudEZyb21Qb2ludCgoaW50KWFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpLCAoaW50KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYyxkb2MuZWxlbWVudEZyb21Qb2ludCgoaW50KWFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpLCAoaW50KWFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAgIGNhc2UgRE9NRG9jdW1l
bnQ6OkdldEVsZW1lbnRzQnlUYWdOYW1lOgotICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChleGVj
LGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShzKS5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhl
Yyxkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUocykuZ2V0KCkpOwogICBjYXNlIERPTURvY3VtZW50
OjpJbXBvcnROb2RlOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxkb2MuaW1w
b3J0Tm9kZSh0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwgZXhjZXB0
aW9uKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxkb2MuaW1wb3J0Tm9kZSh0b05vZGUoYXJnc1sw
XSksIGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKSwgZXhjZXB0aW9uKSk7CiAgIGNhc2UgRE9NRG9j
dW1lbnQ6OkNyZWF0ZUVsZW1lbnROUzogLy8gRE9NMgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsZG9jLmNyZWF0ZUVsZW1lbnROUyhzLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJp
bmcoKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYyxkb2MuY3JlYXRlRWxlbWVu
dE5TKHMsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBleGNlcHRpb24pKTsK
ICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlQXR0cmlidXRlTlM6IC8vIERPTTIKLSAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGRvYy5jcmVhdGVBdHRyaWJ1dGVOUyhzLCBhcmdzWzFdLT50b1N0
cmluZyhleGVjKS5kb21TdHJpbmcoKSwgZXhjZXB0aW9uKSk7CisgICAgcmV0dXJuIHRvSlMoZXhl
Yyxkb2MuY3JlYXRlQXR0cmlidXRlTlMocywgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3Ry
aW5nKCksIGV4Y2VwdGlvbikpOwogICBjYXNlIERPTURvY3VtZW50OjpHZXRFbGVtZW50c0J5VGFn
TmFtZU5TOiAvLyBET00yCi0gICAgcmV0dXJuIGdldERPTU5vZGVMaXN0KGV4ZWMsZG9jLmdldEVs
ZW1lbnRzQnlUYWdOYW1lTlMocywgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkp
LmdldCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5T
KHMsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKS5nZXQoKSk7CiAgIGNhc2Ug
RE9NRG9jdW1lbnQ6OkdldEVsZW1lbnRCeUlkOgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
ZG9jLmdldEVsZW1lbnRCeUlkKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmlt
cGwoKSkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsZG9jLmdldEVsZW1lbnRCeUlkKGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmltcGwoKSkpOwogICBjYXNlIERPTURvY3VtZW50
OjpDcmVhdGVSYW5nZToKLSAgICByZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYywgZG9jLmNyZWF0ZVJh
bmdlKCkuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGRvYy5jcmVhdGVSYW5nZSgpLmdl
dCgpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6Q3JlYXRlTm9kZUl0ZXJhdG9yOiB7CiAgICAgUmVm
UHRyPE5vZGVGaWx0ZXJJbXBsPiBmaWx0ZXI7CiAgICAgSlNWYWx1ZSogYXJnMiA9IGFyZ3NbMl07
CkBAIC05OTMsNyArOTkzLDcgQEAgSlNWYWx1ZSAqRE9NRG9jdW1lbnRQcm90b0Z1bmM6OmNhbGxB
c0Z1bgogICAgICAgSlNPYmplY3QqIG8oc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmcyKSk7CiAg
ICAgICBmaWx0ZXIgPSBuZXcgTm9kZUZpbHRlckltcGwobmV3IEpTTm9kZUZpbHRlckNvbmRpdGlv
bihvKSk7CiAgICAgfQotICAgIHJldHVybiBnZXRET01Ob2RlSXRlcmF0b3IoZXhlYywgZG9jLmNy
ZWF0ZU5vZGVJdGVyYXRvcih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMp
LAorICAgIHJldHVybiB0b0pTKGV4ZWMsIGRvYy5jcmVhdGVOb2RlSXRlcmF0b3IodG9Ob2RlKGFy
Z3NbMF0pLCBhcmdzWzFdLT50b1VJbnQzMihleGVjKSwKICAgICAgICAgZmlsdGVyLnJlbGVhc2Uo
KSwgYXJnc1szXS0+dG9Cb29sZWFuKGV4ZWMpLCBleGNlcHRpb24pLmdldCgpKTsKICAgfQogICBj
YXNlIERPTURvY3VtZW50OjpDcmVhdGVUcmVlV2Fsa2VyOiB7CkBAIC0xMDAzLDE0ICsxMDAzLDE0
IEBAIEpTVmFsdWUgKkRPTURvY3VtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW4KICAgICAgIEpTT2Jq
ZWN0KiBvKHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZzIpKTsKICAgICAgIGZpbHRlciA9IG5l
dyBOb2RlRmlsdGVySW1wbChuZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKG8pKTsKICAgICB9Ci0g
ICAgcmV0dXJuIGdldERPTVRyZWVXYWxrZXIoZXhlYywgZG9jLmNyZWF0ZVRyZWVXYWxrZXIodG9O
b2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b1VJbnQzMihleGVjKSwKKyAgICByZXR1cm4gdG9KUyhl
eGVjLCBkb2MuY3JlYXRlVHJlZVdhbGtlcih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvVUlu
dDMyKGV4ZWMpLAogICAgICAgICBmaWx0ZXIucmVsZWFzZSgpLCBhcmdzWzNdLT50b0Jvb2xlYW4o
ZXhlYyksIGV4Y2VwdGlvbikuZ2V0KCkpOwogICB9CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkNyZWF0
ZUV2ZW50OgotICAgIHJldHVybiBnZXRET01FdmVudChleGVjLCBkb2MuY3JlYXRlRXZlbnQocywg
ZXhjZXB0aW9uKS5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZG9jLmNyZWF0ZUV2ZW50
KHMsIGV4Y2VwdGlvbikuZ2V0KCkpOwogICBjYXNlIERPTURvY3VtZW50OjpHZXRPdmVycmlkZVN0
eWxlOgogICAgIGlmIChFbGVtZW50SW1wbCAqZWxlbWVudDAgPSB0b0VsZW1lbnQoYXJnc1swXSkp
Ci0gICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZG9jLmdldE92
ZXJyaWRlU3R5bGUoZWxlbWVudDAsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygp
KSk7CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsZG9jLmdldE92ZXJyaWRlU3R5bGUoZWxlbWVu
dDAsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKSk7CiAgICAgLy8gRklYTUU6
IElzIHVuZGVmaW5lZCByaWdodCBoZXJlLCBvciBzaG91bGQgd2UgcmFpc2UgYW4gZXhjZXB0aW9u
PwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICBjYXNlIERPTURvY3VtZW50OjpFeGVjQ29t
bWFuZDogewpAQCAtMTIyMSwxMyArMTIyMSwxMyBAQCBKU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6
Omxlbmd0aEdldHRlcihFCiBKU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6OmluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWRO
b2RlTWFwICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NTmFtZWROb2RlTWFwICo+KHNsb3Quc2xv
dEJhc2UoKSk7Ci0gIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRl
bShzbG90LmluZGV4KCkpKTsKKyAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+bV9pbXBsLT5p
dGVtKHNsb3QuaW5kZXgoKSkpOwogfQogCiBKU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6Om5hbWVH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBE
T01OYW1lZE5vZGVNYXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4o
c2xvdC5zbG90QmFzZSgpKTsKLSAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGhpc09iai0+bV9p
bXBsLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSk7CisgIHJldHVybiB0
b0pTKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+Z2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZS5kb21T
dHJpbmcoKSkpOwogfQogCiBib29sIERPTU5hbWVkTm9kZU1hcDo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCkBAIC0xMjY3LDE5ICsxMjY3LDE5IEBAIEpTVmFsdWUgKkRPTU5hbWVkTm9k
ZU1hcFByb3RvRnVuYzo6Y2FsbEEKIAogICBzd2l0Y2goaWQpIHsKICAgICBjYXNlIERPTU5hbWVk
Tm9kZU1hcDo6R2V0TmFtZWRJdGVtOgotICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFw
LmdldE5hbWVkSXRlbShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSkpOworICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgbWFwLmdldE5hbWVkSXRlbShhcmdzWzBdLT50b1N0cmluZyhl
eGVjKS5kb21TdHJpbmcoKSkpOwogICAgIGNhc2UgRE9NTmFtZWROb2RlTWFwOjpTZXROYW1lZEl0
ZW06Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuc2V0TmFtZWRJdGVtKHRvTm9k
ZShhcmdzWzBdKSwgZXhjZXB0aW9uKS5nZXQoKSk7CisgICAgICByZXR1cm4gdG9KUyhleGVjLCBt
YXAuc2V0TmFtZWRJdGVtKHRvTm9kZShhcmdzWzBdKSwgZXhjZXB0aW9uKS5nZXQoKSk7CiAgICAg
Y2FzZSBET01OYW1lZE5vZGVNYXA6OlJlbW92ZU5hbWVkSXRlbToKLSAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsIG1hcC5yZW1vdmVOYW1lZEl0ZW0oYXJnc1swXS0+dG9TdHJpbmcoZXhlYyku
ZG9tU3RyaW5nKCksIGV4Y2VwdGlvbikuZ2V0KCkpOworICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
bWFwLnJlbW92ZU5hbWVkSXRlbShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwg
ZXhjZXB0aW9uKS5nZXQoKSk7CiAgICAgY2FzZSBET01OYW1lZE5vZGVNYXA6Okl0ZW06Ci0gICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4ZWMp
KSk7CisgICAgICByZXR1cm4gdG9KUyhleGVjLCBtYXAuaXRlbShhcmdzWzBdLT50b0ludDMyKGV4
ZWMpKSk7CiAgICAgY2FzZSBET01OYW1lZE5vZGVNYXA6OkdldE5hbWVkSXRlbU5TOiAvLyBET00y
Ci0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuZ2V0TmFtZWRJdGVtTlMoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRv
bVN0cmluZygpKSk7CisgICAgICByZXR1cm4gdG9KUyhleGVjLCBtYXAuZ2V0TmFtZWRJdGVtTlMo
YXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4
ZWMpLmRvbVN0cmluZygpKSk7CiAgICAgY2FzZSBET01OYW1lZE5vZGVNYXA6OlNldE5hbWVkSXRl
bU5TOiAvLyBET00yCi0gICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBtYXAuc2V0TmFtZWRJ
dGVtTlModG9Ob2RlKGFyZ3NbMF0pLCBleGNlcHRpb24pLmdldCgpKTsKKyAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIG1hcC5zZXROYW1lZEl0ZW1OUyh0b05vZGUoYXJnc1swXSksIGV4Y2VwdGlvbiku
Z2V0KCkpOwogICAgIGNhc2UgRE9NTmFtZWROb2RlTWFwOjpSZW1vdmVOYW1lZEl0ZW1OUzogLy8g
RE9NMgotICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbWFwLnJlbW92ZU5hbWVkSXRlbU5T
KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBhcmdzWzFdLT50b1N0cmluZyhl
eGVjKS5kb21TdHJpbmcoKSwgZXhjZXB0aW9uKS5nZXQoKSk7CisgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBtYXAucmVtb3ZlTmFtZWRJdGVtTlMoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3Ry
aW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBleGNlcHRpb24pLmdl
dCgpKTsKICAgICBkZWZhdWx0OgogICAgICAgYnJlYWs7CiAgIH0KQEAgLTEyODksNyArMTI4OSw3
IEBAIEpTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcFByb3RvRnVuYzo6Y2FsbEEKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1KU1ZhbHVlICpnZXRET01Eb2N1bWVudE5vZGUoRXhlY1N0YXRlICpleGVj
LCBEb2N1bWVudEltcGwgKm4pCitKU1ZhbHVlICp0b0pTKEV4ZWNTdGF0ZSAqZXhlYywgRG9jdW1l
bnRJbXBsICpuKQogewogICBET01Eb2N1bWVudCAqcmV0ID0gMDsKICAgU2NyaXB0SW50ZXJwcmV0
ZXIqIGludGVycCA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KGV4ZWMtPmR5bmFt
aWNJbnRlcnByZXRlcigpKTsKQEAgLTEzMjUsNyArMTMyNSw3IEBAIGJvb2wgY2hlY2tOb2RlU2Vj
dXJpdHkoRXhlY1N0YXRlICpleGVjLCAKICAgcmV0dXJuIHdpbiAmJiB3aW4tPmlzU2FmZVNjcmlw
dChleGVjKTsKIH0KIAotSlNWYWx1ZSAqZ2V0RE9NTm9kZShFeGVjU3RhdGUgKmV4ZWMsIFBhc3NS
ZWZQdHI8Tm9kZUltcGw+IG5vZGUpCitKU1ZhbHVlICp0b0pTKEV4ZWNTdGF0ZSAqZXhlYywgUGFz
c1JlZlB0cjxOb2RlSW1wbD4gbm9kZSkKIHsKICAgTm9kZUltcGwqIG4gPSBub2RlLmdldCgpOwog
ICBET01Ob2RlICpyZXQgPSAwOwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgSlNWYWx1ZSAqZ2V0RE9N
Tm9kZShFeGVjU3RhdGUgKmV4ZWMsIFBhcwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJDb3Jl
OjpOb2RlSW1wbDo6RE9DVU1FTlRfTk9ERToKICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2Fj
aGUgdGhlIGRvY3VtZW50IGl0c2VsZiBpbiB0aGUgcGVyLWRvY3VtZW50IGRpY3Rpb25hcnkKLSAg
ICAgIHJldHVybiBnZXRET01Eb2N1bWVudE5vZGUoZXhlYywgc3RhdGljX2Nhc3Q8RG9jdW1lbnRJ
bXBsICo+KG4pKTsKKyAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PERvY3VtZW50
SW1wbCAqPihuKSk7CiAgICAgY2FzZSBXZWJDb3JlOjpOb2RlSW1wbDo6RE9DVU1FTlRfVFlQRV9O
T0RFOgogICAgICAgcmV0ID0gbmV3IEpTRG9jdW1lbnRUeXBlKGV4ZWMsIHN0YXRpY19jYXN0PERv
Y3VtZW50VHlwZUltcGwgKj4obikpOwogICAgICAgYnJlYWs7CkBAIC0xMzgwLDcgKzEzODAsNyBA
QCBKU1ZhbHVlICpnZXRET01Ob2RlKEV4ZWNTdGF0ZSAqZXhlYywgUGFzCiAgIHJldHVybiByZXQ7
CiB9CiAKLUpTVmFsdWUgKmdldERPTU5hbWVkTm9kZU1hcChFeGVjU3RhdGUgKmV4ZWMsIE5hbWVk
Tm9kZU1hcEltcGwgKm0pCitKU1ZhbHVlICp0b0pTKEV4ZWNTdGF0ZSAqZXhlYywgTmFtZWROb2Rl
TWFwSW1wbCAqbSkKIHsKICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5hbWVkTm9kZU1hcEltcGws
IERPTU5hbWVkTm9kZU1hcD4oZXhlYywgbSk7CiB9CkBAIC0xNDEzLDEyICsxNDEzLDEyIEBAIEpT
VmFsdWUgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlICpleGUKICAgICByZXR1cm4gMDsKIH0K
IAotSlNWYWx1ZSAqZ2V0RE9NTm9kZUxpc3QoRXhlY1N0YXRlICpleGVjLCBQYXNzUmVmUHRyPE5v
ZGVMaXN0SW1wbD4gbCkKK0pTVmFsdWUgKnRvSlMoRXhlY1N0YXRlICpleGVjLCBQYXNzUmVmUHRy
PE5vZGVMaXN0SW1wbD4gbCkKIHsKICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5vZGVMaXN0SW1w
bCwgRE9NTm9kZUxpc3Q+KGV4ZWMsIGwuZ2V0KCkpOwogfQogCi1KU1ZhbHVlICpnZXRET01ET01J
bXBsZW1lbnRhdGlvbihFeGVjU3RhdGUgKmV4ZWMsIERPTUltcGxlbWVudGF0aW9uSW1wbCAqaSkK
K0pTVmFsdWUgKnRvSlMoRXhlY1N0YXRlICpleGVjLCBET01JbXBsZW1lbnRhdGlvbkltcGwgKmkp
CiB7CiAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01JbXBsZW1lbnRhdGlvbkltcGwsIEpTRE9N
SW1wbGVtZW50YXRpb24+KGV4ZWMsIGkpOwogfQpAQCAtMTUxNyw3ICsxNTE3LDcgQEAgSlNWYWx1
ZSAqRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxlbmd0aAogSlNWYWx1ZSAqRE9NTmFtZWROb2Rl
c0NvbGxlY3Rpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKm9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0
aWNfY2FzdDxET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAqPihzbG90LnNsb3RCYXNlKCkpOwotICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX25vZGVzW3Nsb3QuaW5kZXgoKV0uZ2V0
KCkpOworICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5tX25vZGVzW3Nsb3QuaW5kZXgoKV0u
Z2V0KCkpOwogfQogCiBib29sIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IGtodG1sL2VjbWEva2pzX2JpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBraHRtbC9lY21hL2tqc19iaW5kaW5nLmgJKHJldmlzaW9uIDEzMjU2KQorKysga2h0
bWwvZWNtYS9ranNfYmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAqICBHZXQgYSBET01TdHJpbmcgb2JqZWN0IG9yIGEgbnVsbCBE
T01TdHJpbmcgaWYgdGhlIHZhbHVlIGlzIG51bGwKICAgICovCiAgIERPTTo6RE9NU3RyaW5nIHZh
bHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSAqdmFsKTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgSlNWYWx1ZSogdG9KUyhFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8VD4gcHRyKSB7IHJldHVybiB0b0pTKGV4ZWMsIHB0ci5nZXQo
KSk7IH0KICAgCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBraHRtbC9lY21hL2tqc19wcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCShyZXZpc2lvbiAxMzI1
NikKKysrIGtodG1sL2VjbWEva2pzX3Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyAr
NjUsNyBAQCBKU1ZhbHVlKiBLSlNQcm94eUltcGw6OmV2YWx1YXRlKGNvbnN0IERPCiAKICAgSlNM
b2NrIGxvY2s7CiAKLSAgSlNWYWx1ZSogdGhpc05vZGUgPSBuID8gV2luZG93OjpyZXRyaWV2ZSht
X2ZyYW1lKSA6IGdldERPTU5vZGUobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgbik7CisgIEpTVmFs
dWUqIHRoaXNOb2RlID0gbiA/IFdpbmRvdzo6cmV0cmlldmUobV9mcmFtZSkgOiB0b0pTKG1fc2Ny
aXB0LT5nbG9iYWxFeGVjKCksIG4pOwogICBDb21wbGV0aW9uIGNvbXAgPSBtX3NjcmlwdC0+ZXZh
bHVhdGUoZmlsZW5hbWUsIGJhc2VMaW5lLCByZWludGVycHJldF9jYXN0PEtKUzo6VUNoYXIgKj4o
c3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSwgdGhpc05vZGUpOwogCiAgIGlmIChjb21wLmNv
bXBsVHlwZSgpID09IE5vcm1hbCB8fCBjb21wLmNvbXBsVHlwZSgpID09IFJldHVyblZhbHVlKQpJ
bmRleDoga2h0bWwvZWNtYS9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9l
Y21hL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMzI1NikKKysrIGtodG1sL2VjbWEvWFNM
VFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgSlNWYWx1ZSAq
WFNMVFByb2Nlc3NvclByb3RvRnVuYzo6Y2FsbEFzRgogICAgICAgICAgICAgaWYgKG5vZGVWYWwt
PmlzT2JqZWN0KCZET01Ob2RlOjppbmZvKSAmJiBkb2NWYWwtPmlzT2JqZWN0KCZET01Eb2N1bWVu
dDo6aW5mbykpIHsKICAgICAgICAgICAgICAgICBOb2RlSW1wbCogbm9kZSA9IHN0YXRpY19jYXN0
PERPTU5vZGUgKj4obm9kZVZhbCktPmltcGwoKTsKICAgICAgICAgICAgICAgICBEb2N1bWVudElt
cGwqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50SW1wbCo+KHN0YXRpY19jYXN0PERPTURvY3Vt
ZW50ICo+KGRvY1ZhbCktPmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgcHJvY2Vzc29yLnRyYW5zZm9ybVRvRnJhZ21lbnQobm9kZSwgZG9jKS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgcHJvY2Vzc29yLnRyYW5zZm9ybVRv
RnJhZ21lbnQobm9kZSwgZG9jKS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBUaHJvdyBleGNlcHRpb24/CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMyw3ICsxMDMsNyBA
QCBKU1ZhbHVlICpYU0xUUHJvY2Vzc29yUHJvdG9GdW5jOjpjYWxsQXNGCiAgICAgICAgICAgICAg
ICAgRE9NTm9kZSAqbm9kZSA9IHN0YXRpY19jYXN0PERPTU5vZGUgKj4obm9kZVZhbCk7CiAgICAg
ICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50SW1wbD4gcmVzdWx0RG9jdW1lbnQgPSBwcm9jZXNz
b3IudHJhbnNmb3JtVG9Eb2N1bWVudChub2RlLT5pbXBsKCkpOwogICAgICAgICAgICAgICAgIGlm
IChyZXN1bHREb2N1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldERPTURvY3Vt
ZW50Tm9kZShleGVjLCByZXN1bHREb2N1bWVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIHJlc3VsdERvY3VtZW50LmdldCgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRo
cm93IGV4Y2VwdGlvbj8KSW5kZXg6IGtodG1sL2VjbWEva2pzX2RvbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL2VjbWEva2pzX2RvbS5oCShyZXZpc2lvbiAxMzI1NikKKysrIGtodG1sL2VjbWEva2pz
X2RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTMgKzIwOSwxMyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIH07CiAKLSAgSlNWYWx1ZSAq
Z2V0RE9NRG9jdW1lbnROb2RlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudEltcGwgKm4p
OworICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFdlYkNvcmU6OkRvY3VtZW50SW1wbCopOwog
ICBib29sIGNoZWNrTm9kZVNlY3VyaXR5KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSW1wbCAq
bik7CiAgIEpTVmFsdWUgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlICpleGVjLCBET006Ok5v
ZGVJbXBsICpuKTsKLSAgSlNWYWx1ZSAqZ2V0RE9NTm9kZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRy
PERPTTo6Tm9kZUltcGw+KTsKLSAgSlNWYWx1ZSAqZ2V0RE9NTmFtZWROb2RlTWFwKEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpOYW1lZE5vZGVNYXBJbXBsICptKTsKLSAgSlNWYWx1ZSAqZ2V0RE9NTm9k
ZUxpc3QoRXhlY1N0YXRlICpleGVjLCBQYXNzUmVmUHRyPERPTTo6Tm9kZUxpc3RJbXBsPik7Ci0g
IEpTVmFsdWUgKmdldERPTURPTUltcGxlbWVudGF0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpE
T01JbXBsZW1lbnRhdGlvbkltcGwgKmkpOworICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0ZSosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6Tm9kZUltcGw+KTsKKyAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUq
LCBXZWJDb3JlOjpOYW1lZE5vZGVNYXBJbXBsICopOworICBKU1ZhbHVlKiB0b0pTKEV4ZWNTdGF0
ZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3RJbXBsPik7CisgIEpTVmFsdWUqIHRvSlMo
RXhlY1N0YXRlKiwgV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb25JbXBsKik7CiAgIEpTT2JqZWN0
ICpnZXROb2RlQ29uc3RydWN0b3IoRXhlY1N0YXRlICpleGVjKTsKICAgSlNPYmplY3QgKmdldERP
TUV4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqZXhlYyk7CiAKSW5kZXg6IGtodG1sL2Vj
bWEvZG9tcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2RvbXBhcnNlci5jcHAJ
KHJldmlzaW9uIDEzMjU2KQorKysga2h0bWwvZWNtYS9kb21wYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIEpTVmFsdWUgKkRPTVBhcnNlclByb3RvRnVuYzo6Y2FsbEFz
RnVuY3QKICAgICAgICAgZG9jLT5maW5pc2hQYXJzaW5nKCk7CiAgICAgICAgIGRvYy0+Y2xvc2Uo
KTsKIAotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBkb2MuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBkb2MuZ2V0KCkpOwogICAgICAgfQogICAgIH0KICAgfQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogcGxhdGZvcm0vRm9udFBsYXRmb3JtRGF0YS5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TmFtZTogc3ZuOmV4ZWN1dGFibGUKICAgLSAqCgoKUHJvcGVydHkgY2hhbmdlcyBvbjogcGxhdGZv
cm0vRm9udERhdGEuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgIC0gKgoKClBy
b3BlcnR5IGNoYW5nZXMgb246IHBsYXRmb3JtL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgIC0gKgoKSW5kZXg6IHBsYXRmb3JtL0lt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9JbWFnZS5jcHAJKHJldmlzaW9uIDEzMjU2
KQorKysgcGxhdGZvcm0vSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNCArMjUsMTYg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8
a3htbGNvcmUvVmVjdG9yLmg+CisKICNpbmNsdWRlICJBcnJheS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VBbmltYXRpb25PYnNl
cnZlci5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkltYWdlQW5pbWF0aW9uT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKICNpZiBfX0FQUExFX18KIC8vIEZJWE1FOiBXaWxs
IGdvIGF3YXkgd2hlbiB3ZSBtYWtlIFBERiBhIHN1YmNsYXNzLgpAQCAtMzI4LDIyICszMzAsMTMg
QEAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdG9yRW50cnkgY29tcG9zaXRlTwogICAgIHsgImxpZ2h0
ZXIiLCBJbWFnZTo6Q29tcG9zaXRlUGx1c0xpZ2h0ZXIgfQogfTsKIAotSW1hZ2U6OkNvbXBvc2l0
ZU9wZXJhdG9yIEltYWdlOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29uc3QgY2hhciog
YVN0cmluZykKK0ltYWdlOjpDb21wb3NpdGVPcGVyYXRvciBJbWFnZTo6Y29tcG9zaXRlT3BlcmF0
b3JGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBv
cCA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0gICAgCi0gICAgaWYgKHN0cmxlbihhU3RyaW5nKSkg
ewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DT01QT1NJVEVfT1BFUkFUT1JTOyBp
KyspIHsKLSNpZiBXSU4zMgotICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgbmV3IFN0cmlu
ZyBjbGFzcyAKLSAgICAgICAgICAgIGlmIChzdHJjbXAoYVN0cmluZywgY29tcG9zaXRlT3BlcmF0
b3JzW2ldLm5hbWUpID09IDApIHsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChh
U3RyaW5nLCBjb21wb3NpdGVPcGVyYXRvcnNbaV0ubmFtZSkgPT0gMCkgewotI2VuZGlmCisgICAg
aWYgKCFzLmlzRW1wdHkoKSkKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQ09NUE9T
SVRFX09QRVJBVE9SUzsgaSsrKQorICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHMs
IGNvbXBvc2l0ZU9wZXJhdG9yc1tpXS5uYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gY29t
cG9zaXRlT3BlcmF0b3JzW2ldLnZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQogICAgIHJldHVybiBvcDsKIH0KIApJbmRleDogcGxhdGZvcm0vSW1hZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9JbWFnZS5oCShyZXZpc2lvbiAxMzI1NikKKysrIHBsYXRmb3JtL0ltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3MgRmxvYXRQb2ludDsKIGNs
YXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOworY2xhc3MgU3Ry
aW5nOwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKQEAgLTE1OCw3ICsx
NTksNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5k
VGlsZSwgUmVwZWF0VGlsZSB9OwogCi0gICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhjb25zdCBjaGFyKiBjb21wb3NpdGVPcGVyYXRvcik7Cisg
ICAgc3RhdGljIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKIAogICAgIC8vIERyYXdpbmcgcm91dGluZXMuCiAgICAgdm9pZCBkcmF3
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LApJbmRleDogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDEzMjU2KQor
KysgYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTE1MiwyNiArMTUyLDIyIEBAIHN1YiBHZW5lcmF0ZU1vZHVsZQogc3ViIEdldFBhcmVudENsYXNz
TmFtZQogewogICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKLSAgCi0gIGlmIChAeyRkYXRhTm9kZS0+
cGFyZW50c30gZXEgMCkgewotICAgIHJldHVybiAiS0pTOjpET01PYmplY3QiOwotICB9Ci0gIAot
ICAjIENoZWNrIGlmIHRoZXJlJ3MgYSBsZWdhY3kgcGFyZW50IGNsYXNzIHNldCBhbmQKLSAgIyB1
c2UgaXQuCi0gIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJl
bnQifSkgewotICAgIHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdh
Y3lQYXJlbnQifTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gIkpTIiAuICRkYXRhTm9kZS0+cGFy
ZW50cygwKTsKLSAgfQorICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TGVnYWN5UGFyZW50In0gaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5
UGFyZW50In07CisgIHJldHVybiAiS0pTOjpET01PYmplY3QiIGlmIEB7JGRhdGFOb2RlLT5wYXJl
bnRzfSBlcSAwOworICByZXR1cm4gIkpTIiAuICRkYXRhTm9kZS0+cGFyZW50cygwKTsKIH0KIAog
c3ViIEdldExlZ2FjeUhlYWRlckluY2x1ZGVzCiB7Ci0gIGlmICgkbW9kdWxlIGVxICJldmVudHMi
KSB7CisgIG15ICRsZWdhY3lQYXJlbnQgPSBzaGlmdDsKKyAgaWYgKCRsZWdhY3lQYXJlbnQgZXEg
IkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSIpIHsKKyAgICByZXR1cm4gIiNpbmNsdWRl
IFwiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmhcIlxuXG4iOworICB9IGVsc2lmICgk
bW9kdWxlIGVxICJldmVudHMiKSB7CiAgICAgcmV0dXJuICIjaW5jbHVkZSBcImtqc19ldmVudHMu
aFwiXG5cbiI7CiAgIH0gZWxzaWYgKCRtb2R1bGUgZXEgImNvcmUiKSB7CiAgICAgcmV0dXJuICIj
aW5jbHVkZSBcImtqc19kb20uaFwiXG5cbiI7CisgIH0gZWxzaWYgKCRtb2R1bGUgZXEgImh0bWwi
KSB7CisgICAgcmV0dXJuICIjaW5jbHVkZSBcImtqc19odG1sLmhcIlxuXG4iOwogICB9IGVsc2Ug
ewogICAgIGRpZSAoIkRvbid0IGtub3cgd2hhdCBoZWFkZXJzIHRvIGluY2x1ZGUgZm9yIG1vZHVs
ZSAkbW9kdWxlIik7CiAgIH0KQEAgLTIwNSw2ICsyMDEsMTYgQEAgc3ViIEFkZEluY2x1ZGVzRm9y
VHlwZQogICAgICAgICAgICAkdHlwZSBlcSAiRW50aXR5IiBvcgogICAgICAgICAgICAkdHlwZSBl
cSAiTm90YXRpb24iKSB7CiAgICAgJGltcGxJbmNsdWRlc3siZG9tX3htbGltcGwuaCJ9ID0gMTsK
KyAgfSBlbHNpZiAoJHR5cGUgZXEgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpIHsKKyAgICAk
aW1wbEluY2x1ZGVzeyJDYW52YXNHcmFkaWVudC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7
IkNhbnZhc1BhdHRlcm4uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNTdHlsZS5oIn0g
PSAxOworICB9IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiKSB7CisgICAgJGltcGxJ
bmNsdWRlc3siQ2FudmFzR3JhZGllbnQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJQbGF0
Zm9ybVN0cmluZy5oIn0gPSAxOworICB9IGVsc2lmICgkdHlwZSBlcSAiQ2FudmFzUGF0dGVybiIp
IHsKKyAgICAkaW1wbEluY2x1ZGVzeyIkdHlwZS5oIn0gPSAxOwogICB9IGVsc2lmICgkY29kZUdl
bmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvcgogICAgICAgICAgICAkdHlwZSBlcSAi
RE9NU3RyaW5nIikgewogICAgICMgRG8gbm90aGluZwpAQCAtMjM0LDYgKzI0MCw4IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKICAg
bXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKICAgbXkgJGltcGxDbGFzc05hbWUg
PSAkaW50ZXJmYWNlTmFtZSAuICJJbXBsIjsKKyAgIyBDYW52YXMgY2xhc3NlcyBkb24ndCBoYXZl
IEltcGwgc3VmZml4IChyZW1vdmUgdGhpcyB3aGVuIHJlbW92aW5nIHRoZSBJbXBsIHN1ZmZpeCBl
bHNld2hlcmUpLgorICAkaW1wbENsYXNzTmFtZSA9ICRpbnRlcmZhY2VOYW1lIGlmICRpbnRlcmZh
Y2VOYW1lID1+IC9eQ2FudmFzLzsKICAgCiAgICMgRklYTUU6IElmIHdlJ3JlIHN1cmUgdGhhdCBh
biBpbnRlcmZhY2UgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4KICAgIyBvbmUgcGFyZW50IHdlIGNhbiBk
byB0aGUgY2hlY2sgaW4gdGhlIHBhcnNlciBpbnN0ZWFkCkBAIC0yNDEsNyArMjQ5LDkgQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgZGllICJBIGNsYXNzIGNhbid0IGhhdmUgbW9yZSB0aGFuIG9u
ZSBwYXJlbnQiOwogICB9CiAgIAotICBteSAkaGFzUGFyZW50ID0gQHskZGF0YU5vZGUtPnBhcmVu
dHN9ID4gMDsKKyAgbXkgJGhhc0xlZ2FjeVBhcmVudCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9OworICBteSAkaGFzUmVhbFBhcmVudCA9IEB7JGRhdGFO
b2RlLT5wYXJlbnRzfSA+IDA7CisgIG15ICRoYXNQYXJlbnQgPSAkaGFzTGVnYWN5UGFyZW50IHx8
ICRoYXNSZWFsUGFyZW50OwogICBteSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NO
YW1lKCRkYXRhTm9kZSk7CiAgIAogICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCkBA
IC0yNTIsNyArMjYyLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJcbiNkZWZpbmUgJGNsYXNzTmFtZSIgLiAiX0hcblxuIik7CiAgIAogICBpZiAoZXhpc3Rz
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9KSB7Ci0gICAg
cHVzaChAaGVhZGVyQ29udGVudCwgR2V0TGVnYWN5SGVhZGVySW5jbHVkZXMoKSk7CisgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgR2V0TGVnYWN5SGVhZGVySW5jbHVkZXMoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In0pKTsKICAgfSBlbHNlIHsKICAgICBpZiAo
JGhhc1BhcmVudCkgewogICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpbmNsdWRlIFwiJHBh
cmVudENsYXNzTmFtZS5oXCJcbiIpOwpAQCAtMjc4LDcgKzI4OCw2IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoS0pTOjpFeGVjU3Rh
dGUqLCAkaW1wbENsYXNzTmFtZSopO1xuIik7CiAgICAgCiAgICMgRGVzdHJ1Y3RvcgotICAjIEZJ
WE1FOiBJZiB3ZSBrbm93IHRoYXQgYSBjbGFzcyBjYW4ndCBoYXZlIHN1YmNsYXNzZXMsIHdlIGRv
bid0IG5lZWQgYSB2aXJ0dWFsIGRlc3RydWN0b3IKICAgaWYgKCEkaGFzUGFyZW50KSB7CiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCk7XG4iKTsKICAg
fQpAQCAtMjk5LDcgKzMwOCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAKICAgaWYgKCRoYXNS
ZWFkV3JpdGVQcm9wZXJ0aWVzKSB7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0
dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pT
OjpKU1ZhbHVlKiwgaW50IGF0dHIgPSBLSlM6Ok5vbmUpO1xuIik7Ci0gICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQs
IEtKUzo6SlNWYWx1ZSosIGludCk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCwgS0pTOjpKU1ZhbHVl
KiwgaW50IGF0dHIpO1xuIik7CiAgIH0KICAgCiAgICMgQ2xhc3MgaW5mbwpAQCAtMzYxLDEzICsz
NzAsMTcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgIH0KIAogICBpZiAoISRoYXNQYXJlbnQpIHsK
LSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsKCkgeyBy
ZXR1cm4gbV9pbXBsLmdldCgpOyB9XG4iKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJv
dGVjdGVkOlxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFt
ZSogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfVxuIik7CisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgInByaXZhdGU6XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIFJlZlB0cjwkaW1wbENsYXNzTmFtZT4gbV9pbXBsO1xuIik7CiAgIH0KICAgCiAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJ9O1xuXG4iKTsKICAgCisgIGlmICghJGhhc1BhcmVudCkgeworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUq
LCAkaW1wbENsYXNzTmFtZSopO1xuXG4iKTsKKyAgfQorCiAgICMgQWRkIHByb3RvdHlwZSBkZWNs
YXJhdGlvbgogICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKICAgICBpZiAoJGhhc1BhcmVudCkg
ewpAQCAtMzg4LDggKzQwMSwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICBteSAk
aW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRp
bnRlcmZhY2VOYW1lIjsKICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZSAuICJJ
bXBsIjsKKyAgIyBDYW52YXMgY2xhc3NlcyBkb24ndCBoYXZlIEltcGwgc3VmZml4IChyZW1vdmUg
dGhpcyB3aGVuIHJlbW92aW5nIHRoZSBJbXBsIHN1ZmZpeCBlbHNld2hlcmUpLgorICAkaW1wbENs
YXNzTmFtZSA9ICRpbnRlcmZhY2VOYW1lIGlmICRpbnRlcmZhY2VOYW1lID1+IC9eQ2FudmFzLzsK
ICAgCi0gIG15ICRoYXNQYXJlbnQgPSBAeyRkYXRhTm9kZS0+cGFyZW50c30gPiAwOworICBteSAk
aGFzTGVnYWN5UGFyZW50ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5
UGFyZW50In07CisgIG15ICRoYXNSZWFsUGFyZW50ID0gQHskZGF0YU5vZGUtPnBhcmVudHN9ID4g
MDsKKyAgbXkgJGhhc1BhcmVudCA9ICRoYXNMZWdhY3lQYXJlbnQgfHwgJGhhc1JlYWxQYXJlbnQ7
CiAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2RlKTsK
ICAgCiAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKQEAgLTU2Myw3ICs1ODAsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAiKGV4
ZWMsICYke2NsYXNzTmFtZX1UYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTtcbn1cblxu
Iik7CiAgIAogICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSogJHtjbGFzc05hbWV9Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdFxue1xuIik7
Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwgPSBzdGF0
aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KG1faW1wbC5nZXQoKSk7XG5cbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsID0gc3RhdGljX2Nhc3Q8JGlt
cGxDbGFzc05hbWUqPigke2NsYXNzTmFtZX06OmltcGwoKSk7XG5cbiIpOwogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHN3aXRjaCAodG9rZW4pIHtcbiIpOwogCiAgICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKQEAgLTU5OCw3ICs2MTUsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25z
KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpO1xuIik7CiAgICAgICB9Ci0gICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1l
Kj4obV9pbXBsLmdldCgpKTtcblxuIik7CisgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAk
aW1wbENsYXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oJHtjbGFz
c05hbWV9OjppbXBsKCkpO1xuXG4iKTsKICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN3
aXRjaCAodG9rZW4pIHtcbiIpOwogICAgICAgCiAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUg
KEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgewpAQCAtNjkzLDYgKzcxMCwxMyBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIikKICAgfQog
ICAKKyAgaWYgKCEkaGFzUGFyZW50KSB7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJLSlM6OkpT
VmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsICRpbXBsQ2xhc3NOYW1lKiBvYmopXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBLSlM6OmNhY2hlRE9NT2JqZWN0PCRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NO
YW1lPihleGVjLCBvYmopO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAg
fQorCiAgIHB1c2goQGltcGxDb250ZW50LCAiXG59XG4iKTsKIH0KIApAQCAtNzE2LDEwICs3NDAs
MTIgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICByZXR1cm4gImludCI7CiAgIH0gZWxzaWYgKCR0
eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpIHsKICAgICByZXR1cm4gInVuc2lnbmVkIHNob3J0IjsK
KyAgfSBlbHNpZiAoJHR5cGUgZXEgImZsb2F0IikgeworICAgIHJldHVybiAiZmxvYXQiOwogICB9
IGVsc2lmICgkdHlwZSBlcSAiQXRvbWljU3RyaW5nIikgewogICAgIHJldHVybiAiQXRvbWljU3Ry
aW5nIjsKICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTVN0cmluZyIpIHsKLSAgICByZXR1cm4gIkRP
TVN0cmluZyI7CisgICAgcmV0dXJuICJTdHJpbmciOwogICB9IGVsc2lmICgkdHlwZSBlcSAidmll
d3M6OkFic3RyYWN0VmlldyIpIHsKICAgICByZXR1cm4gIkFic3RyYWN0Vmlld0ltcGwqIjsKICAg
fSBlbHNpZiAoJHR5cGUgZXEgIk5vZGUiIG9yICR0eXBlIGVxICJBdHRyIiBvcgpAQCAtNzQzLDYg
Kzc2OSw4IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICByZXR1cm4gIiR2YWx1ZS0+dG9JbnQz
MihleGVjKSI7CiAgIH0gZWxzaWYgKCR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIpIHsKICAgICBy
ZXR1cm4gIiR2YWx1ZS0+dG9JbnQzMihleGVjKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJmbG9h
dCIpIHsKKyAgICByZXR1cm4gIiR2YWx1ZS0+dG9OdW1iZXIoZXhlYykiOwogICB9IGVsc2lmICgk
dHlwZSBlcSAiQXRvbWljU3RyaW5nIikgewogICAgIHJldHVybiAiQXRvbWljU3RyaW5nKCR2YWx1
ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpIjsKICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRP
TVN0cmluZyIpIHsKQEAgLTc3OCw3ICs4MDYsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgIGlm
ICgkdHlwZSBlcSAiYm9vbGVhbiIpIHsKICAgICByZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIjsK
ICAgfSBlbHNpZiAoJHR5cGUgZXEgImxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIiBv
ciAKLSAgICAgICAgICAgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IikgeworICAgICAgICAgICAk
dHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yICR0eXBlIGVxICJmbG9hdCIpIHsKICAgICByZXR1
cm4gImpzTnVtYmVyKCR2YWx1ZSkiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikg
ewogICAgIG15ICRjb252ID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZl
cnROdWxsU3RyaW5nVG8ifTsKQEAgLTc5NiwyOCArODI0LDMwIEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKICAgICAgICAgICAgJHR5cGUgZXEgIkhUTUxEb2N1bWVudCIgb3IgJHR5cGUgZXEgIkVsZW1l
bnQiIG9yCiAgICAgICAgICAgICR0eXBlIGVxICJBdHRyIikgewogICAgICMgQWRkIG5lY2Vzc2Fy
eSBpbmNsdWRlcwotICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsgICAKLSAgICAk
aW1wbEluY2x1ZGVzeyJOb2RlSW1wbC5oIn0gPSAxOyAgICAgCi0gICAgcmV0dXJuICJnZXRET01O
b2RlKGV4ZWMsICR2YWx1ZSkiOwotICB9IGVsc2lmICgkdHlwZSBlcSAiTm9kZUxpc3QiKSB7Ci0g
ICAgIyBBZGQgbmVjZXNzYXJ5IGluY2x1ZGVzCi0gICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5o
In0gPSAxOyAgICAKLSAgICByZXR1cm4gImdldERPTU5vZGVMaXN0KGV4ZWMsICR2YWx1ZSkiOyAg
ICAKLSAgfSBlbHNpZiAoJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKKyAgICAkaW1wbEluY2x1
ZGVzeyJranNfZG9tLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siTm9kZUltcGwuaCJ9ID0g
MTsKKyAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVlKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVx
ICJOb2RlTGlzdCIgb3IgJHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKICAgICAjIEFkZCBuZWNl
c3NhcnkgaW5jbHVkZXMKLSAgICAkaW1wbEluY2x1ZGVzeyJranNfZG9tLmgifSA9IDE7ICAgIAot
ICAgIHJldHVybiAiZ2V0RE9NTmFtZWROb2RlTWFwKGV4ZWMsICR2YWx1ZSkiOwotICB9IGVsc2lm
ICgkdHlwZSBlcSAiQ1NTU3R5bGVTaGVldCIgb3IgCi0gICAgICAgICAgICR0eXBlIGVxICJTdHls
ZVNoZWV0IikgeworICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsKKyAgICByZXR1
cm4gInRvSlMoZXhlYywgJHZhbHVlKSI7CisgIH0gZWxzaWYgKCR0eXBlIGVxICJDU1NTdHlsZVNo
ZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIpIHsKICAgICAjIEFkZCBuZWNlc3NhcnkgaW5j
bHVkZXMKLSAgICAkaW1wbEluY2x1ZGVzeyJjc3NfcnVsZWltcGwuaCJ9ID0gMTsgICAgCi0gICAg
JGltcGxJbmNsdWRlc3sia2pzX2Nzcy5oIn0gPSAxOyAgICAgICAgCi0gICAgcmV0dXJuICJnZXRE
T01TdHlsZVNoZWV0KGV4ZWMsICR2YWx1ZSkiOyAgICAKKyAgICAkaW1wbEluY2x1ZGVzeyJjc3Nf
cnVsZWltcGwuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJranNfY3NzLmgifSA9IDE7Cisg
ICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOyAgICAKICAgfSBlbHNpZiAoJHR5cGUgZXEg
IkNTU1N0eWxlRGVjbGFyYXRpb24iKSB7CiAgICAgIyBBZGQgbmVjZXNzYXJ5IGluY2x1ZGVzCi0g
ICAgJGltcGxJbmNsdWRlc3siY3NzX3ZhbHVlaW1wbC5oIn0gPSAxOyAKLSAgICAkaW1wbEluY2x1
ZGVzeyJranNfY3NzLmgifSA9IDE7ICAgICAgICAgICAgCi0gICAgcmV0dXJuICJnZXRET01DU1NT
dHlsZURlY2xhcmF0aW9uKGV4ZWMsICR2YWx1ZSkiOworICAgICRpbXBsSW5jbHVkZXN7ImNzc192
YWx1ZWltcGwuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJranNfY3NzLmgifSA9IDE7Cisg
ICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOworICB9IGVsc2lmICgkdHlwZSBlcSAiSFRN
TENhbnZhc0VsZW1lbnQiKSB7CisgICAgJGltcGxJbmNsdWRlc3sia2pzX2RvbS5oIn0gPSAxOwor
ICAgICRpbXBsSW5jbHVkZXN7Imh0bWxfY2FudmFzaW1wbC5oIn0gPSAxOworICAgIHJldHVybiAi
dG9KUyhleGVjLCAkdmFsdWUpIjsKKyAgfSBlbHNpZiAoJHR5cGUgZXEgIkNhbnZhc0dyYWRpZW50
IikgeworICAgICRpbXBsSW5jbHVkZXN7Imtqc19odG1sLmgifSA9IDE7CisgICAgcmV0dXJuICJ0
b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2UgewogICAgIGRpZSAiRG9uJ3Qga25vdyBob3cg
dG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5cGUgdG8gYSBKUyBWYWx1ZSI7CiAgIH0KQEAg
LTg5OCw3ICs5MjgsNyBAQCBzdWIgR2VuZXJhdGVIYXNoVGFibGUKICAgfQogCiAgICMgRHVtcCB0
aGUgaGFzaCB0YWJsZS4uLgotICBwdXNoKEBpbXBsQ29udGVudCwgIlxuc3RhdGljIGNvbnN0IHN0
cnVjdCBIYXNoRW50cnkgJG5hbWVFbnRyaWVzXFtcXSA9XG5ce1xuIik7CisgIHB1c2goQGltcGxD
b250ZW50LCAiXG5zdGF0aWMgY29uc3QgSGFzaEVudHJ5ICRuYW1lRW50cmllc1xbXF0gPVxuXHtc
biIpOwogCiAgICRpID0gMDsKICAgZm9yZWFjaCAkZW50cnkgKEB0YWJsZSkgewpAQCAtOTI3LDcg
Kzk1Nyw3IEBAIHN1YiBHZW5lcmF0ZUhhc2hUYWJsZQogICB9CiAKICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9O1xuXG4iKTsKLSAgcHVzaChAaW1wbENvbnRlbnQsICJjb25zdCBzdHJ1Y3QgSGFzaFRh
YmxlICRuYW1lID0gXG4iKTsKKyAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgSGFz
aFRhYmxlICRuYW1lID0gXG4iKTsKICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4gICAgMiwgJHNp
emUsICRuYW1lRW50cmllcywgJHNhdmVkU2l6ZVxufTtcblxuIik7CiB9CiAKSW5kZXg6IGJpbmRp
bmdzL2pzL0pTRE9NRXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0RPTUV2
ZW50cy5jcHAJKHJldmlzaW9uIDEzMjU2KQorKysgYmluZGluZ3MvanMvSlNET01FdmVudHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0v
LyBUaGUgZmlsZXMgbmFtZWQgYmVsb3cgYXJlIGdlbmVyYXRlZCBieSBhIHNjcmlwdC4KKy8vIFRo
ZSBmaWxlcyBiZWxvdyBhcmUgZ2VuZXJhdGVkIGJ5IGEgc2NyaXB0LgogCiAjaW5jbHVkZSAiSlNN
dXRhdGlvbkV2ZW50LmNwcCIKICNpbmNsdWRlICJKU1doZWVsRXZlbnQuY3BwIgpJbmRleDogYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CisKKyAgICBLSlNfREVGSU5F
X1BST1RPVFlQRShKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VQcm90bykKKworICAgIGNs
YXNzIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSA6IHB1YmxpYyBLSlM6OkRPTU9iamVj
dCB7CisgICAgcHVibGljOgorICAgICAgICBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Uo
S0pTOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4pOwor
ICAgICAgICB2aXJ0dWFsIH5KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0
IEtKUzo6SWRlbnRpZmllciYsIEtKUzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIEtKUzo6SlNW
YWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqLCBpbnQgYXR0ciA9IEtKUzo6Tm9uZSk7CisgICAgICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbiwgS0pTOjpK
U1ZhbHVlKiwgaW50IGF0dHIpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKKyAgICAgICAgZW51bSB7IFN0cm9rZVN0eWxlLCBGaWxs
U3R5bGUgfTsKKyAgICAgICAgZW51bSB7IFNldFN0cm9rZUNvbG9yLCBTZXRGaWxsQ29sb3IsIFN0
cm9rZVJlY3QsIERyYXdJbWFnZSwgRHJhd0ltYWdlRnJvbVJlY3QsIFNldFNoYWRvdywgQ3JlYXRl
UGF0dGVybiB9OworICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwoKSBjb25z
dCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBtX2ltcGw7CisgICAgfTsKKworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogYmluZGlu
Z3MvanMvSlNET01IVE1MLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0RPTUhUTUwu
Y3BwCShyZXZpc2lvbiAwKQorKysgYmluZGluZ3MvanMvSlNET01IVE1MLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vIFRoZSBmaWxlcyBi
ZWxvdyBhcmUgZ2VuZXJhdGVkIGJ5IGEgc2NyaXB0LgorCisjaW5jbHVkZSAiSlNDYW52YXNHcmFk
aWVudC5jcHAiCisjaW5jbHVkZSAiSlNDYW52YXNQYXR0ZXJuLmNwcCIKKyNpbmNsdWRlICJKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAiCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBiaW5kaW5n
cy9qcy9KU0RPTUhUTUwuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRE9NQ29yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmlu
ZGluZ3MvanMvSlNET01Db3JlLmNwcAkocmV2aXNpb24gMTMyNTYpCisrKyBiaW5kaW5ncy9qcy9K
U0RPTUNvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCi0vLyBUaGUgZmlsZXMgbmFtZWQgYmVsb3cgYXJlIGdlbmVyYXRlZCBieSBhIHNj
cmlwdC4KKy8vIFRoZSBmaWxlcyBiZWxvdyBhcmUgZ2VuZXJhdGVkIGJ5IGEgc2NyaXB0LgogCiAj
aW5jbHVkZSAiSlNBdHRyLmNwcCIKICNpbmNsdWRlICJKU0NoYXJhY3RlckRhdGEuY3BwIgpJbmRl
eDogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgiCisKKyNpbmNsdWRlICJDYW52YXNHcmFkaWVu
dC5oIgorI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgorI2luY2x1ZGUgIkpTQ2Fu
dmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJKU0NhbnZhc1BhdHRlcm4uaCIKKyNpbmNsdWRlICJo
dG1sX2ltYWdlaW1wbC5oIgorI2luY2x1ZGUgImtqc19odG1sLmgiCisKKyNpbmNsdWRlICJKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VUYWJsZS5jcHAiCisKK3VzaW5nIG5hbWVzcGFjZSBL
SlM7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKK0BiZWdpbiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2VQcm90b1RhYmxlIDcKKyAgc2V0U3Ryb2tlQ29sb3IgICAgICAgICAgIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U2V0U3Ryb2tlQ29sb3IgICAgICAgICAgICAg
IERvbnREZWxldGV8RnVuY3Rpb24gMQorICBzZXRGaWxsQ29sb3IgICAgICAgICAgICAgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTZXRGaWxsQ29sb3IgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiAxCisgIHN0cm9rZVJlY3QgICAgICAgICAgICAgICBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OlN0cm9rZVJlY3QgICAgICAgICAgICAgICAgICBEb250RGVs
ZXRlfEZ1bmN0aW9uIDQKKyAgZHJhd0ltYWdlICAgICAgICAgICAgICAgIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6RHJhd0ltYWdlICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMworICBkcmF3SW1hZ2VGcm9tUmVjdCAgICAgICAgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpEcmF3SW1hZ2VGcm9tUmVjdCAgICAgICAgICAgRG9udERlbGV0ZXxGdW5j
dGlvbiAxMAorICBzZXRTaGFkb3cgICAgICAgICAgICAgICAgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpTZXRTaGFkb3cgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAzCisgIGNyZWF0ZVBhdHRlcm4gICAgICAgICAgICBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OkNyZWF0ZVBhdHRlcm4gICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDIK
K0BlbmQKK0BiZWdpbiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VUYWJsZSAyCisgIHN0
cm9rZVN0eWxlICAgICAgICAgICAgICBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0
cm9rZVN0eWxlICAgICAgICAgICAgICAgICBEb250RGVsZXRlCisgIGZpbGxTdHlsZSAgICAgICAg
ICAgICAgICBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OkZpbGxTdHlsZSAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlCitAZW5kCisqLworCitLSlNfSU1QTEVNRU5UX1BST1RPRlVO
QyhKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VQcm90b0Z1bmMpCitLSlNfSU1QTEVNRU5U
X1BST1RPVFlQRSgiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSIsIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZVByb3RvLCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VQcm90
b0Z1bmMpCisKK0pTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZVByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYgYXJncykKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOworCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlKj4odGhpc09iaikt
PmltcGwoKTsKKyAgICAKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTZXRTdHJva2VDb2xvcjoKKyAgICAgICAgICAgIC8vIHN0
cmluZyBhcmcgPSBuYW1lZCBjb2xvcgorICAgICAgICAgICAgLy8gbnVtYmVyIGFyZyA9IGdyYXkg
Y29sb3IKKyAgICAgICAgICAgIC8vIHN0cmluZyBhcmcsIG51bWJlciBhcmcgPSBuYW1lZCBjb2xv
ciwgYWxwaGEKKyAgICAgICAgICAgIC8vIG51bWJlciBhcmcsIG51bWJlciBhcmcgPSBncmF5IGNv
bG9yLCBhbHBoYQorICAgICAgICAgICAgLy8gNCBhcmdzID0gciwgZywgYiwgYQorICAgICAgICAg
ICAgLy8gNSBhcmdzID0gYywgbSwgeSwgaywgYQorICAgICAgICAgICAgc3dpdGNoIChhcmdzLnNp
emUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3NbMF0tPmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXJnc1swXS0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBhcmdz
WzFdLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVt
YmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIo
ZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b051bWJlcihleGVjKSwg
YXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpTZXRGaWxsQ29sb3I6CisgICAgICAgICAgICAvLyBzdHJpbmcgYXJn
ID0gbmFtZWQgY29sb3IKKyAgICAgICAgICAgIC8vIG51bWJlciBhcmcgPSBncmF5IGNvbG9yCisg
ICAgICAgICAgICAvLyBzdHJpbmcgYXJnLCBudW1iZXIgYXJnID0gbmFtZWQgY29sb3IsIGFscGhh
CisgICAgICAgICAgICAvLyBudW1iZXIgYXJnLCBudW1iZXIgYXJnID0gZ3JheSBjb2xvciwgYWxw
aGEKKyAgICAgICAgICAgIC8vIDQgYXJncyA9IHIsIGcsIGIsIGEKKyAgICAgICAgICAgIC8vIDUg
YXJncyA9IGMsIG0sIHksIGssIGEKKyAgICAgICAgICAgIHN3aXRjaCAoYXJncy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBd
LT5pc1N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENv
bG9yKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXS0+
aXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwgYXJnc1sxXS0+dG9OdW1iZXIo
ZXhlYykpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
YXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVt
YmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSA1OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4
ZWMpLCBhcmdzWzRdLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3Ry
b2tlUmVjdDoKKyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA8PSA0KQorICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b051bWJlcihl
eGVjKSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b051
bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6U2V0U2hhZG93OgorICAgICAgICAgICAgc3dpdGNoIChhcmdzLnNpemUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U2hhZG93KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihl
eGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgICAgICAgICBpZiAoYXJnc1szXS0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sy
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U2hhZG93KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihl
eGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b051bWJlcihleGVj
KSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzNd
LT5pc1N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93
KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+
dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJnc1s0XS0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzRdLT50b051bWJlcihleGVjKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzFdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLT50b051bWJlcihleGVj
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA4OgorICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coYXJnc1swXS0+dG9OdW1iZXIoZXhlYyks
IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sy
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvTnVtYmVyKGV4
ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyksIGFy
Z3NbN10tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEcmF3SW1hZ2U6
IHsKKyAgICAgICAgICAgIC8vIERyYXdJbWFnZSBoYXMgdGhyZWUgdmFyaWFudHM6CisgICAgICAg
ICAgICAvLyBkcmF3SW1hZ2UoaW1nLCBkeCwgZHkpCisgICAgICAgICAgICAvLyBkcmF3SW1hZ2Uo
aW1nLCBkeCwgZHksIGR3LCBkaCkKKyAgICAgICAgICAgIC8vIGRyYXdJbWFnZShpbWcsIHN4LCBz
eSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKKyAgICAgICAgICAgIC8vIGNvbXBvc2l0ZSBvcGVy
YXRpb24gaXMgc3BlY2lmaWVkIHdpdGggZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uCisgICAgICAg
ICAgICAvLyBpbWcgcGFyYW1ldGVyIGNhbiBiZSBhIEphdmFTY3JpcHQgSW1hZ2UsIDxpbWc+LCBv
ciBhIDxjYW52YXM+CisgICAgICAgICAgICBKU09iamVjdCogbyA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oYXJnc1swXSk7CisgICAgICAgICAgICBpZiAoIW8tPmlzT2JqZWN0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAgICAgICAg
IGlmICghKG8tPmluaGVyaXRzKCZIVE1MRWxlbWVudDo6aW1nX2luZm8pIHx8IG8tPmluaGVyaXRz
KCZIVE1MRWxlbWVudDo6Y2FudmFzX2luZm8pKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudElt
cGwqIGltZ0VsdCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihhcmdzWzBdKS0+aW1wbCgpKTsKKyAgICAgICAgICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzJdLT50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltZ0VsdCwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4
ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFy
Z3NbNF0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1h
Z2UoaW1nRWx0LCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhl
YyksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzNdLT50b051bWJlcihleGVjKSwgYXJn
c1s0XS0+dG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzVdLT50
b051bWJlcihleGVjKSwgYXJnc1s2XS0+dG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzWzddLT50b051bWJlcihleGVjKSwgYXJnc1s4XS0+dG9OdW1iZXIoZXhlYykp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6RHJhd0ltYWdlRnJvbVJlY3Q6IHsK
KyAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBd
KTsKKyAgICAgICAgICAgIGlmICghby0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgICAgICAgICAgaWYgKCFvLT5pbmhl
cml0cygmSFRNTEVsZW1lbnQ6OmltZ19pbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdl
RnJvbVJlY3Qoc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGFyZ3NbMF0pLT5pbXBsKCkpLAorICAgICAgICAgICAgICAgIGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAg
ICBhcmdzWzNdLT50b051bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksCisgICAg
ICAgICAgICAgICAgYXJnc1s1XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNl0tPnRvTnVtYmVyKGV4
ZWMpLAorICAgICAgICAgICAgICAgIGFyZ3NbN10tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzhdLT50
b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAgICBhcmdzWzldLT50b1N0cmluZyhleGVjKS5k
b21TdHJpbmcoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Q3JlYXRlUGF0dGVybjoKKyAgICAgICAg
ICAgIEpTT2JqZWN0KiBvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBdKTsKKyAgICAg
ICAgICAgIGlmICghby0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgICAgICAgICAgaWYgKCFvLT5pbmhlcml0cygmSFRN
TEVsZW1lbnQ6OmltZ19pbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1l
bnRJbXBsKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihhcmdzWzBdKS0+aW1wbCgpKSwKKyAg
ICAgICAgICAgICAgICBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSkuZ2V0KCkp
OworICAgIH0KKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitjb25zdCBDbGFzc0lu
Zm8gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppbmZvID0geyAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZSIsIDAsICZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VUYWJs
ZSwgMCB9OworCitib29sIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UsIERPTU9iamVjdD4KKyAgICAgICAgKGV4ZWMs
ICZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2VUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKK30KKworc3RhdGljIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYW52
YXNTdHlsZSogc3R5bGUpCit7CisgICAgaWYgKHN0eWxlLT5ncmFkaWVudCgpKQorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBzdHlsZS0+Z3JhZGllbnQoKSk7CisgICAgaWYgKHN0eWxlLT5wYXR0
ZXJuKCkpCisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5wYXR0ZXJuKCkpOworICAg
IHJldHVybiBqc1N0cmluZyhzdHlsZS0+Y29sb3IoKSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUq
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIG5l
dyBDYW52YXNTdHlsZSh2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOworICAgIGlm
ICghdmFsdWUtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlKTsKKyAgICBpZiAob2JqZWN0LT5p
bmhlcml0cygmSlNDYW52YXNHcmFkaWVudDo6aW5mbykpCisgICAgICAgIHJldHVybiBuZXcgQ2Fu
dmFzU3R5bGUoc3RhdGljX2Nhc3Q8SlNDYW52YXNHcmFkaWVudCo+KG9iamVjdCktPmltcGwoKSk7
CisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTQ2FudmFzUGF0dGVybjo6aW5mbykpCisgICAg
ICAgIHJldHVybiBuZXcgQ2FudmFzU3R5bGUoc3RhdGljX2Nhc3Q8SlNDYW52YXNQYXR0ZXJuKj4o
b2JqZWN0KS0+aW1wbCgpKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNWYWx1ZSogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBT
dHJva2VTdHlsZToKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIG1faW1wbC0+c3Ryb2tl
U3R5bGUoKSk7ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWxsU3R5bGU6CisgICAgICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBtX2ltcGwtPmZpbGxTdHlsZSgpKTsgICAgICAgIAorICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUsIGludCBhdHRyKQoreworICAgIGxvb2t1cFB1dDxKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UsIERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwg
JkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZVRhYmxlLCB0aGlzKTsKK30KKwordm9pZCBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZhbHVlLCBpbnQgLyphdHRyKi8pCit7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFN0cm9rZVN0eWxlOgorICAgICAgICAgICAg
aW1wbCgpLT5zZXRTdHJva2VTdHlsZSh0b0hUTUxDYW52YXNTdHlsZShleGVjLCB2YWx1ZSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmlsbFN0eWxlOgorICAgICAgICAgICAg
aW1wbCgpLT5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUoZXhlYywgdmFsdWUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoRXhlY1N0YXRlKiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGltcGwpCisgICAgOiBtX2ltcGwo
aW1wbCkKK3sKK30KKworSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjp+SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlKCkKK3sKKyAgICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0
RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IGJp
bmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogYmluZGluZ3Mvb2JqYy9ET01J
bnRlcm5hbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCShy
ZXZpc2lvbiAxMzI1NikKKysrIGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBET01TdHJpbmc6OkRPTVN0cmluZyhOU1N0cmluZyAq
c3RyKQogICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7CiAg
ICAgCiAgICAgLy8gR2V0IChvciBjcmVhdGUpIGEgY2FjaGVkIEpTIG9iamVjdCBmb3IgdGhlIERP
TSBub2RlLgotICAgIEpTT2JqZWN0ICpzY3JpcHRJbXAgPSBzdGF0aWNfY2FzdDxKU09iamVjdCAq
PihnZXRET01Ob2RlKGV4ZWMsIG5vZGVJbXBsKSk7CisgICAgSlNPYmplY3QgKnNjcmlwdEltcCA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHRvSlMoZXhlYywgbm9kZUltcGwpKTsKIAogICAgIGNv
bnN0IFJvb3RPYmplY3QgKmV4ZWN1dGlvbkNvbnRleHQgPSBNYWMoZnJhbWUpLT5iaW5kaW5nUm9v
dE9iamVjdCgpOwogCkluZGV4OiBkb20vRG9jdW1lbnRUeXBlLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBk
b20vRG9jdW1lbnRUeXBlLmlkbAkocmV2aXNpb24gMTMyNTYpCisrKyBkb20vRG9jdW1lbnRUeXBl
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDE0IEBAIG1vZHVsZSBjb3JlIHsKIAog
ICAgIGludGVyZmFjZSBbTGVnYWN5UGFyZW50PUtKUzo6RE9NTm9kZV0gRG9jdW1lbnRUeXBlIDog
Tm9kZSB7CiAKKyAgICAgICAgLy8gRE9NIExldmVsIDEKKwogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYW1lZE5v
ZGVNYXAgZW50aXRpZXM7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYW1lZE5vZGVNYXAg
bm90YXRpb25zOwotICAgICAgICAKKworICAgICAgICAvLyBET00gTGV2ZWwgMgorCiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcg
cHVibGljSWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdU
bz1OdWxsXSBET01TdHJpbmcgc3lzdGVtSWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBb
Q29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcgaW50ZXJuYWxTdWJzZXQ7ICAgICAg
ICAKSW5kZXg6IGRvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RP
TUltcGxlbWVudGF0aW9uLmlkbAkocmV2aXNpb24gMTMyNTYpCisrKyBkb20vRE9NSW1wbGVtZW50
YXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMyArMjAsMjYgQEAKIG1vZHVsZSBjb3Jl
IHsKIAogICAgIGludGVyZmFjZSBET01JbXBsZW1lbnRhdGlvbiB7CisgICAgICAgIC8vIERPTSBM
ZXZlbCAxCiAgICAgICAgIGJvb2xlYW4gaGFzRmVhdHVyZShpbiBET01TdHJpbmcgZmVhdHVyZSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyB2ZXJzaW9uKTsKIAorICAgICAgICAvLyBET00gTGV2ZWwgMgogICAgICAgICBE
b2N1bWVudFR5cGUgY3JlYXRlRG9jdW1lbnRUeXBlKGluIERPTVN0cmluZyBxdWFsaWZpZWROYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERPTVN0cmluZyBw
dWJsaWNJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01T
dHJpbmcgc3lzdGVtSWQpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQogICAg
ICAgICBEb2N1bWVudCBjcmVhdGVEb2N1bWVudChpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyBuYW1lc3BhY2VVUkksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW0NvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nXSBEb2N1bWVudFR5cGUgZG9jdHlwZSkKICAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwogCisgICAgICAgIC8vIERPTUltcGxlbWVudGF0aW9uQ1NTIGludGVyZmFjZSBmcm9tIERP
TSBMZXZlbCAyIENTUwogICAgICAgICBDU1NTdHlsZVNoZWV0IGNyZWF0ZUNTU1N0eWxlU2hlZXQo
aW4gRE9NU3RyaW5nIHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gRE9NU3RyaW5nIG1lZGlhKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAKKyAgICAgICAgLy8gSFRNTERPTUltcGxlbWVudGF0aW9uIGludGVyZmFjZSBmcm9tIERP
TSBMZXZlbCAyIEhUTUwKICAgICAgICAgSFRNTERvY3VtZW50IGNyZWF0ZUhUTUxEb2N1bWVudChp
biBET01TdHJpbmcgdGl0bGUpOwogICAgIH07CiAKSW5kZXg6IGRvbS9UZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vVGV4dC5pZGwJKHJldmlzaW9uIDEzMjU2KQorKysgZG9tL1RleHQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw4IEBACiBtb2R1bGUgY29yZSB7CiAKICAgICBpbnRl
cmZhY2UgVGV4dCA6IENoYXJhY3RlckRhdGEgewotICAgIAorCisgICAgICAgIC8vIERPTSBMZXZl
bCAxCiAgICAgICAgIFRleHQgc3BsaXRUZXh0KGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIG9m
ZnNldCkKICAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKIApJbmRleDogZG9tL0Vs
ZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FbGVtZW50LmlkbAkocmV2aXNpb24gMTMyNTYp
CisrKyBkb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAgbW9k
dWxlIGNvcmUgewogCiAgICAgaW50ZXJmYWNlIFtMZWdhY3lQYXJlbnQ9S0pTOjpET01FbGVtZW50
XSBFbGVtZW50IDogTm9kZSB7CiAKKyAgICAgICAgLy8gRE9NIExldmVsIDEKKwogICAgICAgICBO
b2RlTGlzdCBnZXRFbGVtZW50c0J5VGFnTmFtZShpbiBET01TdHJpbmcgbmFtZSk7CiAKICAgICAg
ICAgLy8gQ29udmVydE51bGxTdHJpbmdUbz1OdWxsIHNob3VsZCBiZSB1c2VkIGhlcmUsIHNpbmNl
IGlmIHRoZSBhdHRyaWJ1dGUgaXNuJ3QgcHJlc2VudCBhdCBhbGwsIHlvdSBzaG91bGQKQEAgLTQy
LDcgKzQ0LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBBdHRyIHJlbW92ZUF0dHJpYnV0ZU5v
ZGUoaW4gQXR0ciBvbGRBdHRyKQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7ICAg
ICAgICAgICAgICAgICAgICAKIAotICAgICAgICAvLyBET00yCisgICAgICAgIC8vIERPTSBMZXZl
bCAyCisKICAgICAgICAgTm9kZUxpc3QgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhpbiBET01TdHJp
bmcgbmFtZXNwYWNlVVJJLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBET01TdHJpbmcgbG9jYWxOYW1lKTsKIApAQCAtNjksNyArNzIsOCBAQCBtb2R1bGUgY29y
ZSB7CiAgICAgICAgIEF0dHIgc2V0QXR0cmlidXRlTm9kZU5TKGluIEF0dHIgbmV3QXR0cikKICAg
ICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogCi0gICAgICAgIC8vIEV4dGVuc2lvbnMK
KyAgICAgICAgLy8gZXh0ZW5zaW9ucworCiAgICAgICAgIHZvaWQgZm9jdXMoKTsKICAgICAgICAg
dm9pZCBibHVyKCk7CiAKSW5kZXg6IGRvbS9odG1sL0NhbnZhc0dyYWRpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL2h0bWwvQ2FudmFzR3JhZGllbnQuaAkocmV2aXNpb24gMCkKKysrIGRvbS9odG1s
L0NhbnZhc0dyYWRpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSFRNTEdyYWRpZW50X2gKKyNkZWZpbmUgSFRNTEdyYWRpZW50
X2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKworI2lmIF9fQVBQTEVfXwordHlwZWRlZiBzdHJ1Y3Qg
Q0dTaGFkaW5nKiBDR1NoYWRpbmdSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQgOiBwdWJsaWMg
U2hhcmVkPENhbnZhc0dyYWRpZW50PiB7CisgICAgcHVibGljOgorICAgICAgICBDYW52YXNHcmFk
aWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOworICAgICAg
ICBDYW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZs
b2F0UG9pbnQmIHAxLCBmbG9hdCByMSk7CisgICAgICAgIH5DYW52YXNHcmFkaWVudCgpOworCisg
ICAgICAgIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBTdHJpbmcmIGNvbG9yKTsKKwor
ICAgICAgICB2b2lkIGdldENvbG9yKGZsb2F0IHZhbHVlLCBmbG9hdCogciwgZmxvYXQqIGcsIGZs
b2F0KiBiLCBmbG9hdCogYSk7CisKKyNpZiBfX0FQUExFX18KKyAgICAgICAgQ0dTaGFkaW5nUmVm
IHBsYXRmb3JtU2hhZGluZygpOworI2VuZGlmCisKKyAgICAgICAgc3RydWN0IENvbG9yU3RvcCB7
CisgICAgICAgICAgICBmbG9hdCBzdG9wOworICAgICAgICAgICAgZmxvYXQgcmVkOworICAgICAg
ICAgICAgZmxvYXQgZ3JlZW47CisgICAgICAgICAgICBmbG9hdCBibHVlOworICAgICAgICAgICAg
ZmxvYXQgYWxwaGE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvbG9yU3RvcCgpIDogc3Rv
cCgwKSwgcmVkKDApLCBncmVlbigwKSwgYmx1ZSgwKSwgYWxwaGEoMCkgeyB9CisgICAgICAgICAg
ICBDb2xvclN0b3AoZmxvYXQgcywgZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
OiBzdG9wKHMpLCByZWQociksIGdyZWVuKGcpLCBibHVlKGIpLCBhbHBoYShhKSB7IH0KKyAgICAg
ICAgfTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGludCBmaW5kU3RvcChmbG9hdCB2YWx1ZSkg
Y29uc3Q7CisKKyAgICAgICAgYm9vbCBtX3JhZGlhbDsKKyAgICAgICAgRmxvYXRQb2ludCBtX3Aw
LCBtX3AxOworICAgICAgICBmbG9hdCBtX3IwLCBtX3IxOworICAgICAgICBtdXRhYmxlIFZlY3Rv
cjxDb2xvclN0b3A+IG1fc3RvcHM7CisgICAgICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVk
OworICAgICAgICBtdXRhYmxlIGludCBtX2xhc3RTdG9wOworCisjaWYgX19BUFBMRV9fCisgICAg
ICAgIENHU2hhZGluZ1JlZiBtX3NoYWRpbmc7CisjZW5kaWYKKyAgICB9OworCit9IC8vbmFtZXNw
YWNlCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogZG9tL2h0bWwvQ2FudmFzR3JhZGll
bnQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBk
b20vaHRtbC9DYW52YXNQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL2h0bWwvQ2FudmFzUGF0
dGVybi5oCShyZXZpc2lvbiAwKQorKysgZG9tL2h0bWwvQ2FudmFzUGF0dGVybi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhUTUxJ
bWFnZVBhdHRlcm5faAorI2RlZmluZSBIVE1MSW1hZ2VQYXR0ZXJuX2gKKworI2luY2x1ZGUgIkNh
Y2hlZE9iamVjdENsaWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgorCisjaWYgX19BUFBMRV9f
CisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7Cisg
ICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgQ2FudmFzUGF0dGVybiA6IHB1YmxpYyBTaGFy
ZWQ8Q2FudmFzUGF0dGVybj4sIENhY2hlZE9iamVjdENsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiwgY29uc3QgU3RyaW5nJiByZXBldGl0aW9u
VHlwZSk7CisgICAgICAgIH5DYW52YXNQYXR0ZXJuKCk7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQorCisjaWYgX19B
UFBMRV9fCisgICAgICAgIENHUGF0dGVyblJlZiBjcmVhdGVQYXR0ZXJuKGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtJik7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIENhY2hlZEltYWdl
KiBjb25zdCBtX2NhY2hlZEltYWdlOworICAgICAgICBjb25zdCBib29sIG1fcmVwZWF0WDsKKyAg
ICAgICAgY29uc3QgYm9vbCBtX3JlcGVhdFk7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IGRvbS9odG1sL0NhbnZhc1BhdHRl
cm4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBk
b20vaHRtbC9DYW52YXNHcmFkaWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL2h0bWwvQ2FudmFz
R3JhZGllbnQuaWRsCShyZXZpc2lvbiAwKQorKysgZG9tL2h0bWwvQ2FudmFzR3JhZGllbnQuaWRs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworbW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIENhbnZhc0dy
YWRpZW50IHsKKworICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChpbiBmbG9hdCBvZmZzZXQsIGlu
IERPTVN0cmluZyBjb2xvcik7CisKKyAgICB9OworCit9CkluZGV4OiBkb20vaHRtbC9DYW52YXNQ
YXR0ZXJuLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vaHRtbC9DYW52YXNQYXR0ZXJuLmlkbAkocmV2
aXNpb24gMCkKKysrIGRvbS9odG1sL0NhbnZhc1BhdHRlcm4uaWRsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKwor
bW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIENhbnZhc1BhdHRlcm4geworCisgICAgfTsK
KworfQpJbmRleDogZG9tL2h0bWwvQ2FudmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vaHRt
bC9DYW52YXNTdHlsZS5oCShyZXZpc2lvbiAwKQorKysgZG9tL2h0bWwvQ2FudmFzU3R5bGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBIVE1MQ2FudmFzU3R5bGVfaAorI2RlZmluZSBIVE1MQ2FudmFzU3R5bGVfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlIDxreG1s
Y29yZS9QYXNzUmVmUHRyLmg+CisKKyNpZiBfX0FQUExFX18KK3R5cGVkZWYgc3RydWN0IENHQ29u
dGV4dCogQ0dDb250ZXh0UmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIENhbnZhc0dyYWRpZW50OworICAgIGNsYXNzIENhbnZhc1BhdHRlcm47CisKKyAgICBj
bGFzcyBDYW52YXNTdHlsZSA6IHB1YmxpYyBTaGFyZWQ8Q2FudmFzU3R5bGU+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIENhbnZhc1N0eWxlKGNvbnN0IFN0cmluZyYgY29sb3IpOworICAgICAgICBD
YW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwpOworICAgICAgICBDYW52YXNTdHlsZShjb25zdCBT
dHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSk7CisgICAgICAgIENhbnZhc1N0eWxlKGZsb2F0IGdy
YXlMZXZlbCwgZmxvYXQgYWxwaGEpOworICAgICAgICBDYW52YXNTdHlsZShmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgICAgQ2FudmFzU3R5bGUoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CisgICAgICAgIENhbnZhc1N0eWxlKFBh
c3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+KTsKKyAgICAgICAgQ2FudmFzU3R5bGUoUGFzc1JlZlB0
cjxDYW52YXNQYXR0ZXJuPik7CisKKyAgICAgICAgU3RyaW5nIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgICAgICBDYW52YXNHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7
IHJldHVybiBtX2dyYWRpZW50LmdldCgpOyB9CisgICAgICAgIENhbnZhc1BhdHRlcm4qIHBhdHRl
cm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KKworI2lmIF9fQVBQTEVfXwor
ICAgICAgICAvLyBUaGVzZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCisg
ICAgICAgIHZvaWQgYXBwbHlGaWxsQ29sb3IoQ0dDb250ZXh0UmVmKTsKKyAgICAgICAgdm9pZCBh
cHBseVN0cm9rZUNvbG9yKENHQ29udGV4dFJlZik7CisjZW5kaWYKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGVudW0gVHlwZSB7IENvbG9yU3RyaW5nLCBDb2xvclN0cmluZ1dpdGhBbHBoYSwgR3Jh
eUxldmVsLCBSR0JBLCBDTVlLQSwgR3JhZGllbnQsIEltYWdlUGF0dGVybiB9OworCisgICAgICAg
IFR5cGUgbV90eXBlOworCisgICAgICAgIFN0cmluZyBtX2NvbG9yOworICAgICAgICBSZWZQdHI8
Q2FudmFzR3JhZGllbnQ+IG1fZ3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJu
PiBtX3BhdHRlcm47CisKKyAgICAgICAgZmxvYXQgbV9hbHBoYTsKKworICAgICAgICBmbG9hdCBt
X2dyYXlMZXZlbDsKKworICAgICAgICBmbG9hdCBtX3JlZDsKKyAgICAgICAgZmxvYXQgbV9ncmVl
bjsKKyAgICAgICAgZmxvYXQgbV9ibHVlOworCisgICAgICAgIGZsb2F0IG1fY3lhbjsKKyAgICAg
ICAgZmxvYXQgbV9tYWdlbnRhOworICAgICAgICBmbG9hdCBtX3llbGxvdzsKKyAgICAgICAgZmxv
YXQgbV9ibGFjazsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogZG9tL2h0bWwvQ2FudmFzU3R5bGUuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBkb20vaHRtbC9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDApCisrKyBkb20vaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCisjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKKyNp
bmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCisjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCisjaW5jbHVk
ZSAiaHRtbF9jYW52YXNpbXBsLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisjaW5jbHVkZSAi
cmVuZGVyX2NhbnZhc2ltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKKworQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQoSFRNTENhbnZhc0VsZW1lbnRJbXBsKiBjYW52YXMpCisgICAgOiBtX2Nh
bnZhcyhjYW52YXMpCisgICAgLCBtX3N0YXRlU3RhY2soMSkKK3sKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKK3sKKyAgICBtX3N0YXRlU3RhY2sucmVzaXplKDEp
OworICAgIG1fc3RhdGVTdGFjay5maXJzdCgpID0gU3RhdGUoKTsKK30KKworQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoKQorICAgIDogbV9zdHJva2VTdHlsZShuZXcgQ2Fu
dmFzU3R5bGUoImJsYWNrIikpCisgICAgLCBtX2ZpbGxTdHlsZShuZXcgQ2FudmFzU3R5bGUoImJs
YWNrIikpCisgICAgLCBtX2xpbmVXaWR0aCgxKQorICAgICwgbV9saW5lQ2FwKCJidXR0IikKKyAg
ICAsIG1fbGluZUpvaW4oIm1pdGVyIikKKyAgICAsIG1fbWl0ZXJMaW1pdCgxMCkKKyAgICAsIG1f
c2hhZG93Qmx1cigwKQorICAgICwgbV9zaGFkb3dDb2xvcigiYmxhY2siKQorICAgICwgbV9nbG9i
YWxBbHBoYSgxKQorICAgICwgbV9nbG9iYWxDb21wb3NpdGUoInNvdXJjZS1vdmVyIikKKyNpZiBf
X0FQUExFX18KKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0U3Ryb2tlU3R5bGVJc1BhdHRlcm4oZmFs
c2UpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4dEZpbGxTdHlsZUlzUGF0dGVybihmYWxzZSkKKyNl
bmRpZgoreworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2F2ZSgpCit7Cisg
ICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7CisgICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZChzdGF0ZSgpKTsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0t
aW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0Nv
bnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1
cm47CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjKTsKKyNlbmRpZgorfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzdG9yZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFj
ay5zaXplKCkgPj0gMSk7CisgICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPD0gMSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICAvLyBGSVhN
RTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBB
UEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5nQ29udGV4dCgp
OworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUoYyk7CisjZW5kaWYKK30KKworQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0ZSgpLm1fc3Ryb2tlU3R5
bGUuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VT
dHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKK3sKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm47CisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5bGU7CisKKyAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5h
cHBseVN0cm9rZUNvbG9yKGRyYXdpbmdDb250ZXh0KCkpOworICAgIHN0YXRlKCkubV9wbGF0Zm9y
bUNvbnRleHRTdHJva2VTdHlsZUlzUGF0dGVybiA9IGZhbHNlOworI2VuZGlmCit9CisKK0NhbnZh
c1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRlKCkubV9maWxsU3R5bGUuZ2V0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5
bGUpCit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0YXRlKCkubV9m
aWxsU3R5bGUgPSBzdHlsZTsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZv
cm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5hcHBseUZpbGxDb2xvcihkcmF3aW5nQ29udGV4dCgpKTsKKyAg
ICBzdGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0RmlsbFN0eWxlSXNQYXR0ZXJuID0gZmFsc2U7Cisj
ZW5kaWYKK30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lV2lkdGgoKSBj
b25zdAoreworICAgIHJldHVybiBzdGF0ZSgpLm1fbGluZVdpZHRoOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQoreworICAgIHN0
YXRlKCkubV9saW5lV2lkdGggPSB3aWR0aDsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91
Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExF
X18KKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoZHJhd2luZ0NvbnRleHQoKSwgd2lkdGgpOwor
I2VuZGlmCit9CisKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVDYXAoKSBj
b25zdAoreworICAgIHJldHVybiBzdGF0ZSgpLm1fbGluZUNhcDsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVDYXAoY29uc3QgU3RyaW5nJiBjYXApCit7CisgICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBzdG9yZSB0aGUgYWN0dWFsIHN0cmluZyBwYXNzZWQsIG9yIHNo
b3VsZCB3ZQorICAgIC8vIGNvbnZlcnQgaXQgdG8gInJvdW5kIiwgInNxdWFyZSIsIG9yICJidXR0
Ij8KKyAgICBzdGF0ZSgpLm1fbGluZUNhcCA9IGNhcDsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBf
X0FQUExFX18KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY2FwLCAicm91bmQiKSkKKyAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZUNhcChkcmF3aW5nQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQp
OworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGNhcCwgInNxdWFyZSIpKQorICAgICAg
ICBDR0NvbnRleHRTZXRMaW5lQ2FwKGRyYXdpbmdDb250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUp
OworICAgIGVsc2UKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChkcmF3aW5nQ29udGV4dCgp
LCBrQ0dMaW5lQ2FwQnV0dCk7CisjZW5kaWYKK30KKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6bGluZUpvaW4oKSBjb25zdAoreworICAgIHJldHVybiBzdGF0ZSgpLm1fbGluZUpv
aW47Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lSm9pbihjb25z
dCBTdHJpbmcmIGpvaW4pCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzdG9yZSB0aGUgYWN0
dWFsIHN0cmluZyBwYXNzZWQsIG9yIHNob3VsZCB3ZQorICAgIC8vIGNvbnZlcnQgaXQgdG8gInJv
dW5kIiwgImJldmVsIiwgb3IgIm1pdGVyIj8KKyAgICBzdGF0ZSgpLm1fbGluZUpvaW4gPSBqb2lu
OworCisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBH
cmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShqb2luLCAicm91bmQiKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oZHJhd2lu
Z0NvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2Uoam9pbiwgImJldmVsIikpCisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGRyYXdp
bmdDb250ZXh0KCksIGtDR0xpbmVKb2luQmV2ZWwpOworICAgIGVsc2UKKyAgICAgICAgQ0dDb250
ZXh0U2V0TGluZUpvaW4oZHJhd2luZ0NvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7CisjZW5k
aWYKK30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptaXRlckxpbWl0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX21pdGVyTGltaXQ7Cit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQoreworICAgIHN0
YXRlKCkubV9taXRlckxpbWl0ID0gbGltaXQ7CisKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJv
dWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBM
RV9fCisgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChkcmF3aW5nQ29udGV4dCgpLCBsaW1pdCk7
CisjZW5kaWYKK30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dPZmZz
ZXRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX3NoYWRvd09mZnNldC53aWR0aCgp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93T2Zmc2V0WChm
bG9hdCB4KQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQuc2V0V2lkdGgoeCk7CisgICAg
YXBwbHlTaGFkb3coKTsKK30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFk
b3dPZmZzZXRZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX3NoYWRvd09mZnNldC5o
ZWlnaHQoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd09m
ZnNldFkoZmxvYXQgeSkKK3sKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNldEhlaWdodCh5
KTsKKyAgICBhcHBseVNoYWRvdygpOworfQorCitmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNoYWRvd0JsdXIoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0ZSgpLm1fc2hhZG93Qmx1
cjsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd0JsdXIoZmxv
YXQgYmx1cikKK3sKKyAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CisgICAgYXBwbHlT
aGFkb3coKTsKK30KKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2hhZG93Q29s
b3IoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBpZiB5
b3UgY2FsbGVkIHNldFNoYWRvdyB3aXRoIGEgbm9uLXN0cmluZyBjb2xvci4KKyAgICByZXR1cm4g
c3RhdGUoKS5tX3NoYWRvd0NvbG9yOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcikKK3sKKyAgICBzdGF0ZSgpLm1f
c2hhZG93Q29sb3IgPSBjb2xvcjsKKyAgICBhcHBseVNoYWRvdygpOworfQorCitmbG9hdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omdsb2JhbEFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RhdGUoKS5tX2dsb2JhbEFscGhhOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0R2xvYmFsQWxwaGEoZmxvYXQgYWxwaGEpCit7CisgICAgc3RhdGUoKS5tX2dsb2JhbEFs
cGhhID0gYWxwaGE7CisKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250
ZXh0U2V0QWxwaGEoZHJhd2luZ0NvbnRleHQoKSwgYWxwaGEpOworI2VuZGlmCit9CisKK1N0cmlu
ZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGU7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29u
c3QgU3RyaW5nJiBvcGVyYXRpb24pCit7CisgICAgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9
IG9wZXJhdGlvbjsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5k
ZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihkcmF3aW5nQ29udGV4dCgpLCBvcGVyYXRp
b24ucXN0cmluZygpKTsKKyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRo
cm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQ
UExFX18KKyAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3aW5nQ29udGV4dCgpLCBzeCwgc3kpOwor
I2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCit7CisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgIENH
Q29udGV4dFJvdGF0ZUNUTShkcmF3aW5nQ29udGV4dCgpLCBhbmdsZUluUmFkaWFucyk7CisjZW5k
aWYKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZShmbG9hdCB0
eCwgZmxvYXQgdHkpCit7CisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1p
bmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShkcmF3aW5nQ29udGV4dCgpLCB0eCwgdHkpOworI2VuZGlmCit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihjb25zdCBTdHJp
bmcmIGNvbG9yKQoreworICAgIHNldFN0cm9rZVN0eWxlKG5ldyBDYW52YXNTdHlsZShjb2xvcikp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoZmxv
YXQgZ3JheUxldmVsKQoreworICAgIHNldFN0cm9rZVN0eWxlKG5ldyBDYW52YXNTdHlsZShncmF5
TGV2ZWwsIDEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9r
ZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKQoreworICAgIHNldFN0cm9r
ZVN0eWxlKG5ldyBDYW52YXNTdHlsZShjb2xvciwgYWxwaGEpKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQg
YWxwaGEpCit7CisgICAgc2V0U3Ryb2tlU3R5bGUobmV3IENhbnZhc1N0eWxlKGdyYXlMZXZlbCwg
YWxwaGEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNv
bG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgc2V0U3Ryb2tl
U3R5bGUobmV3IENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCit7CisgICAgc2V0U3Ryb2tlU3R5bGUobmV3IENhbnZhc1N0eWxl
KGMsIG0sIHksIGssIGEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQoreworICAgIHNldEZpbGxTdHlsZShuZXcg
Q2FudmFzU3R5bGUoY29sb3IpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZpbGxDb2xvcihmbG9hdCBncmF5TGV2ZWwpCit7CisgICAgc2V0RmlsbFN0eWxlKG5ldyBD
YW52YXNTdHlsZShncmF5TGV2ZWwsIDEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKK3sK
KyAgICBzZXRGaWxsU3R5bGUobmV3IENhbnZhc1N0eWxlKGNvbG9yLCAxKSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoZmxvYXQgZ3JheUxldmVsLCBm
bG9hdCBhbHBoYSkKK3sKKyAgICBzZXRGaWxsU3R5bGUobmV3IENhbnZhc1N0eWxlKGdyYXlMZXZl
bCwgYWxwaGEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQoreworICAgIHNldEZpbGxT
dHlsZShuZXcgQ2FudmFzU3R5bGUociwgZywgYiwgYSkpOworfQorCit2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZs
b2F0IGssIGZsb2F0IGEpCit7CisgICAgc2V0RmlsbFN0eWxlKG5ldyBDYW52YXNTdHlsZShjLCBt
LCB5LCBrLCBhKSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZWdpblBh
dGgoKQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYg
YyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAg
Q0dDb250ZXh0QmVnaW5QYXRoKGMpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjbG9zZVBhdGgoKQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2gg
cGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18K
KyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAg
ICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGMpOworI2VuZGlmCit9CisKK3Zv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSkKK3sK
KyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3
aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4
dE1vdmVUb1BvaW50KGMsIHgsIHkpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisj
aWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAg
IGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGMs
IHgsIHkpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpxdWFk
cmF0aWNDdXJ2ZVRvKGZsb2F0IGNweCwgZmxvYXQgY3B5LCBmbG9hdCB4LCBmbG9hdCB5KQorewor
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdp
bmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0
QWRkUXVhZEN1cnZlVG9Qb2ludChjLCBjcHgsIGNweSwgeCwgeSk7CisjZW5kaWYKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlemllckN1cnZlVG8oZmxvYXQgY3AxeCwgZmxv
YXQgY3AxeSwgZmxvYXQgY3AyeCwgZmxvYXQgY3AyeSwgZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5n
Q29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dEFk
ZEN1cnZlVG9Qb2ludChkcmF3aW5nQ29udGV4dCgpLCBjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4
LCB5KTsKKyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8o
ZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHJhZGl1cykKK3sK
KyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3
aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4
dEFkZEFyY1RvUG9pbnQoZHJhd2luZ0NvbnRleHQoKSwgeDAsIHkwLCB4MSwgeTEsIHJhZGl1cyk7
CisjZW5kaWYKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNlKQor
eworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRy
YXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250
ZXh0QWRkQXJjKGRyYXdpbmdDb250ZXh0KCksIHgsIHksIHIsIHNhLCBlYSwgY2xvY2t3aXNlKTsK
KyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVjdChmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBE
byB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4K
KyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7Cisg
ICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0QWRkUmVjdChkcmF3aW5n
Q29udGV4dCgpLCBDR1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyNlbmRpZgorfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbCgpCit7CisgICAgLy8gRklYTUU6
IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJ
LgorI2lmIF9fQVBQTEVfXworICAgIENHQ29udGV4dFJlZiBjID0gZHJhd2luZ0NvbnRleHQoKTsK
KyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKworICAgIHdpbGxEcmF3KENHQ29udGV4dEdl
dFBhdGhCb3VuZGluZ0JveChjKSk7CisKKyAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Z3Jh
ZGllbnQoKSkgeworICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCBy
ZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCisgICAgICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoYyk7ICAgICAgICAKKyAgICAgICAgQ0dDb250ZXh0Q2xpcChjKTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoYywgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Z3Jh
ZGllbnQoKS0+cGxhdGZvcm1TaGFkaW5nKCkpOyAgICAgICAgCisgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPnBhdHRlcm4oKSkKKyAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAg
ICAgQ0dDb250ZXh0RmlsbFBhdGgoYyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRo
cm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQ
UExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFj
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogSXMgdGhpcyByaWdodCBmb3IgbmVn
YXRpdmUgd2lkdGhzPworICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0YXRlKCkubV9saW5lV2lkdGg7
CisgICAgZmxvYXQgaW5zZXQgPSAtbGluZVdpZHRoIC8gMjsKKyAgICBDR1JlY3QgYm91bmRpbmdS
ZWN0ID0gQ0dSZWN0SW5zZXQoQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5nQm94KGMpLCBpbnNldCwg
aW5zZXQpOworCisgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0KTsKKworICAgIGlmIChzdGF0ZSgp
Lm1fc3Ryb2tlU3R5bGUtPmdyYWRpZW50KCkpIHsKKyAgICAgICAgLy8gU2hhZGluZyB3b3JrcyBv
biB0aGUgZW50aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252ZXJ0IHRoZSBjdXJyZW50IHBhdGggdG8g
YSBjbGlwLgorICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGMpOyAgICAgICAgCisgICAgICAg
IENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGMpOworICAgICAgICBDR0NvbnRl
eHRDbGlwKGMpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLCBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUtPmdyYWRpZW50KCktPnBsYXRmb3JtU2hhZGluZygpKTsgICAgICAgIAorICAgICAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChz
dGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkKKyAgICAgICAgICAgIGFwcGx5U3Ryb2tl
UGF0dGVybigpOworICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGMpOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xpcCgpCit7CisgICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgIENHQ29udGV4dFJlZiBjID0gZHJhd2luZ0NvbnRl
eHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRDbGlwKGMp
OworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclJlY3Qo
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5nQ29udGV4
dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIENHUmVjdCByZWN0ID0gQ0dS
ZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHdpbGxEcmF3KHJlY3QpOworCisg
ICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGMsIHJlY3QpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZv
cm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBD
R0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICBy
ZXR1cm47CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQp
OworCisgICAgd2lsbERyYXcocmVjdCk7CisKKyAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+
Z3JhZGllbnQoKSkgeworICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xp
cCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIHJlY3QgdG8gYSBjbGlwLgorICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGMpOyAgICAgICAgCisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoYywg
cmVjdCk7CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGMsIHN0YXRlKCkubV9maWxsU3R5
bGUtPmdyYWRpZW50KCktPnBsYXRmb3JtU2hhZGluZygpKTsgICAgICAgIAorICAgICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCisgICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7
CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGMsIHJlY3QpOworICAgIH0KKyNlbmRpZgorfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBf
X0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYg
KCFjKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogSXMgdGhpcyByaWdodCBmb3Ig
bmVnYXRpdmUgd2lkdGhzPworICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0YXRlKCkubV9saW5lV2lk
dGg7CisgICAgZmxvYXQgaW5zZXQgPSAtbGluZVdpZHRoIC8gMjsKKyAgICBDR1JlY3QgcmVjdCA9
IENHUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgQ0dSZWN0IGJvdW5kaW5nUmVj
dCA9IENHUmVjdEluc2V0KHJlY3QsIGluc2V0LCBpbnNldCk7CisKKyAgICB3aWxsRHJhdyhib3Vu
ZGluZ1JlY3QpOworCisgICAgLy8gRklYTUU6IE5vIHN1cHBvcnQgZm9yIGdyYWRpZW50cyEKKyAg
ICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCisgICAgICAgIGFwcGx5U3Ry
b2tlUGF0dGVybigpOworICAgIENHQ29udGV4dFN0cm9rZVJlY3QoYywgcmVjdCk7CisjZW5kaWYK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgbGluZVdpZHRoKQorewor
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdp
bmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogSXMgdGhpcyByaWdodCBmb3IgbmVnYXRpdmUgd2lkdGhzPworICAgIGZsb2F0IGluc2V0ID0g
LWxpbmVXaWR0aCAvIDI7CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKHgsIHksIHdpZHRo
LCBoZWlnaHQpOworICAgIENHUmVjdCBib3VuZGluZ1JlY3QgPSBDR1JlY3RJbnNldChyZWN0LCBp
bnNldCwgaW5zZXQpOworCisgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0KTsKKworICAgIC8vIEZJ
WE1FOiBObyBzdXBwb3J0IGZvciBncmFkaWVudHMhCisgICAgaWYgKHN0YXRlKCkubV9zdHJva2VT
dHlsZS0+cGF0dGVybigpKQorICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICBDR0Nv
bnRleHRTdHJva2VSZWN0V2l0aFdpZHRoKGMsIHJlY3QsIGxpbmVXaWR0aCk7CisjZW5kaWYKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyKQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQg
PSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBi
bHVyOworICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9ICIiOworICAgIGFwcGx5U2hhZG93KCk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvcikKK3sKKyAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3Ig
PSBjb2xvcjsKKyAgICBhcHBseVNoYWRvdygpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IGdyYXlMZXZlbCkKK3sKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRT
aXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKKyAg
ICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSAiIjsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRo
cm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQ
UExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFj
KQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgZmxvYXQgY29tcG9uZW50c1syXSA9IHsgZ3Jh
eUxldmVsLCAxIH07CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VHcmF5KCk7CisgICAgQ0dDb2xvclJlZiBjb2xvciA9IENHQ29sb3JDcmVh
dGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xv
clNwYWNlKTsKKyAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYywgQ0dTaXplTWFrZSh3
aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29sb3IpOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yKTsK
KyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3Is
IGZsb2F0IGFscGhhKQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAgIHN0
YXRlKCkubV9zaGFkb3dDb2xvciA9IGNvbG9yOworCisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQ
TEVfXworICAgIENHQ29udGV4dFJlZiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMp
CisgICAgICAgIHJldHVybjsKKyAgICBSR0JBMzIgcmdiYSA9IENTU1BhcnNlcjo6cGFyc2VDb2xv
cihjb2xvcik7CisgICAgY29uc3QgZmxvYXQgY29tcG9uZW50c1s0XSA9IHsKKyAgICAgICAgKChy
Z2JhID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAorICAgICAgICAoKHJnYmEgPj4gOCkgJiAweEZG
KSAvIDI1NS4wZiwKKyAgICAgICAgKHJnYmEgJiAweEZGKSAvIDI1NS4wZiwKKyAgICAgICAgYWxw
aGEKKyAgICB9OworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNl
Q3JlYXRlRGV2aWNlUkdCKCk7CisgICAgQ0dDb2xvclJlZiBzaGFkb3dDb2xvciA9IENHQ29sb3JD
cmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CisgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShj
b2xvclNwYWNlKTsKKyAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYywgQ0dTaXplTWFr
ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgc2hhZG93Q29sb3IpOworICAgIENHQ29sb3JSZWxlYXNl
KHNoYWRvd0NvbG9yKTsKKyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0
IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCit7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9
IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJs
dXI7CisgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7CisKKyAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisj
aWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAg
IGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IGZsb2F0IGNvbXBvbmVudHNbMl0g
PSB7IGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9
IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZUdyYXkoKTsKKyAgICBDR0NvbG9yUmVmIGNvbG9yID0g
Q0dDb2xvckNyZWF0ZShjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKKyAgICBDR0NvbG9yU3BhY2VS
ZWxlYXNlKGNvbG9yU3BhY2UpOworICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjLCBD
R1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb2xvcik7CisgICAgQ0dDb2xvclJlbGVh
c2UoY29sb3IpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgciwg
ZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK3sKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0g
Ymx1cjsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSAiIjsKKworICAgIC8vIEZJWE1FOiBE
byB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4K
KyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7Cisg
ICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgZmxvYXQgY29tcG9uZW50c1s0
XSA9IHsgciwgZywgYiwgYSB9OworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgQ0dDb2xvclJlZiBzaGFkb3dDb2xvciA9
IENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CisgICAgQ0dDb2xvclNwYWNl
UmVsZWFzZShjb2xvclNwYWNlKTsKKyAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYywg
Q0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgc2hhZG93Q29sb3IpOworICAgIENHQ29s
b3JSZWxlYXNlKHNoYWRvd0NvbG9yKTsKKyNlbmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJs
dXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCit7CisgICAg
c3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBz
dGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CisgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0g
IiI7CisKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50
IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGRj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWRjKQorICAgICAgICByZXR1cm47CisgICAg
Y29uc3QgZmxvYXQgY29tcG9uZW50c1s1XSA9IHsgYywgbSwgeSwgaywgYSB9OworICAgIENHQ29s
b3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlQ01ZSygpOwor
ICAgIENHQ29sb3JSZWYgc2hhZG93Q29sb3IgPSBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNv
bXBvbmVudHMpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGRjLCBDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpLCBi
bHVyLCBzaGFkb3dDb2xvcik7CisgICAgQ0dDb2xvclJlbGVhc2Uoc2hhZG93Q29sb3IpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclNoYWRvdygpCit7
CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOworICAgIHN0YXRlKCku
bV9zaGFkb3dCbHVyID0gMDsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSAiIjsKKyAgICBh
cHBseVNoYWRvdygpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlT
aGFkb3coKQoreworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBl
bmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRS
ZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47Cisg
ICAgUkdCQTMyIHJnYmEgPSBzdGF0ZSgpLm1fc2hhZG93Q29sb3IuaXNFbXB0eSgpID8gMCA6IENT
U1BhcnNlcjo6cGFyc2VDb2xvcihzdGF0ZSgpLm1fc2hhZG93Q29sb3IpOworICAgIGNvbnN0IGZs
b2F0IGNvbXBvbmVudHNbNF0gPSB7CisgICAgICAgICgocmdiYSA+PiAxNikgJiAweEZGKSAvIDI1
NS4wZiwKKyAgICAgICAgKChyZ2JhID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCisgICAgICAgIChy
Z2JhICYgMHhGRikgLyAyNTUuMGYsCisgICAgICAgICgocmdiYSA+PiAyNCkgJiAweEZGKSAvIDI1
NS4wZgorICAgIH07CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgICBDR0NvbG9yUmVmIGNvbG9yID0gQ0dDb2xvckNyZWF0
ZShjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9y
U3BhY2UpOworICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjLCBzdGF0ZSgpLm1fc2hh
ZG93T2Zmc2V0LCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgY29sb3IpOworICAgIENHQ29sb3JSZWxl
YXNlKGNvbG9yKTsKKyNlbmRpZgorfQorCisvLyBGSVhNRTogVGhpcyBvbmx5IGV4aXN0cyBiZWNh
dXNlIGNhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIGltYWdlLgorc3RhdGljIEludFNpemUgaW1hZ2VP
ckNhbnZhc1NpemUoSFRNTEltYWdlRWxlbWVudEltcGwqIGltYWdlKQoreworICAgIGlmIChpbWFn
ZS0+aGFzTG9jYWxOYW1lKGNhbnZhc1RhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MQ2FudmFzRWxlbWVudEltcGwqPihpbWFnZSktPnNpemUoKTsKKyAgICBpZiAoQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCkpCisgICAgICAgIHJldHVybiBj
YWNoZWRJbWFnZS0+aW1hZ2VTaXplKCk7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50SW1w
bCogaW1hZ2UsIGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIEludFNpemUgc2l6ZSA9IGltYWdlT3JDYW52YXNTaXplKGltYWdlKTsKKyAg
ICBkcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgeCwg
eSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50SW1wbCogaW1hZ2UsIGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFNpemUgc2l6ZSA9IGltYWdlT3JDYW52YXNTaXpl
KGltYWdlKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudEltcGwqIGltYWdlLAorICAgIGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLAorICAgIGZsb2F0IGR4LCBmbG9h
dCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRSZWYg
YyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgsIGR5LCBkdywgZGgpOworCisgICAg
aWYgKCFpbWFnZS0+aGFzTG9jYWxOYW1lKGNhbnZhc1RhZykpIHsKKyAgICAgICAgQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisgICAgICAgIGlmICghY2Fj
aGVkSW1hZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgd2lsbERyYXcoZGVzdFJl
Y3QpOworICAgICAgICBjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+ZHJhd0luUmVjdChkZXN0UmVjdCwg
RmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwKKyAgICAgICAgICAgIEltYWdlOjpjb21wb3NpdGVP
cGVyYXRvckZyb21TdHJpbmcoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSksIGMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gc3RhdGlj
X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4oaW1hZ2UpLT5jcmVhdGVQbGF0Zm9ybUltYWdl
KCk7CisgICAgaWYgKCFwbGF0Zm9ybUltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB3aWxs
RHJhdyhkZXN0UmVjdCk7CisKKyAgICBmbG9hdCBpdyA9IENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9y
bUltYWdlKTsKKyAgICBmbG9hdCBpaCA9IENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSk7
CisgICAgaWYgKHN4ID09IDAgJiYgc3kgPT0gMCAmJiBpdyA9PSBzdyAmJiBpaCA9PSBzaCkgewor
ICAgICAgICAvLyBGYXN0IHBhdGgsIHlheSEKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGMs
IENHUmVjdE1ha2UoZHgsIGR5LCBkdywgZGgpLCBwbGF0Zm9ybUltYWdlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBTbG93IHBhdGgsIGJvbyEKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJp
dG1hcCBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZSBhbmQgdGhlbiBkcmF3IHRoYXQgaW50byBvdXIg
Y29udGV4dC4KKworICAgICAgICBzaXplX3QgY3N3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjZWls
ZihzdykpOworICAgICAgICBzaXplX3QgY3NoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjZWlsZihz
aCkpOworCisgICAgICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNl
Q3JlYXRlRGV2aWNlUkdCKCk7CisgICAgICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNzdyAqIDQ7
CisgICAgICAgIHZvaWQqIGJ1ZmZlciA9IGZhc3RNYWxsb2MoY3NoICogYnl0ZXNQZXJSb3cpOwor
CisgICAgICAgIENHQ29udGV4dFJlZiBjbGlwcGVkU291cmNlQ29udGV4dCA9IENHQml0bWFwQ29u
dGV4dENyZWF0ZShidWZmZXIsIGNzdywgY3NoLAorICAgICAgICAgICAgOCwgYnl0ZXNQZXJSb3cs
IGNvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgICAgIENH
Q29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShjbGlwcGVkU291cmNlQ29udGV4dCwgLXN4LCAtc3kpOworICAgICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY2xpcHBlZFNvdXJjZUNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgaXcsIGloKSwg
cGxhdGZvcm1JbWFnZSk7CisKKyAgICAgICAgQ0dJbWFnZVJlZiBjbGlwcGVkU291cmNlSW1hZ2Ug
PSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjbGlwcGVkU291cmNlQ29udGV4dCk7CisgICAg
ICAgIENHQ29udGV4dFJlbGVhc2UoY2xpcHBlZFNvdXJjZUNvbnRleHQpOworCisgICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjLCBDR1JlY3RNYWtlKGR4LCBkeSwgZHcsIGRoKSwgY2xpcHBlZFNv
dXJjZUltYWdlKTsKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2xpcHBlZFNvdXJjZUltYWdlKTsK
KyAgICAgICAgCisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisgICAgfQorCisgICAgQ0dJbWFn
ZVJlbGVhc2UocGxhdGZvcm1JbWFnZSk7CisjZW5kaWYKK30KKworLy8gRklYTUU6IFdoeSBpc24n
dCB0aGlzIGp1c3QgYW5vdGhlciBvdmVybG9hZCBvZiBkcmF3SW1hZ2U/IFdoeSBoYXZlIGEgZGlm
ZmVyZW50IG5hbWU/Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlRnJv
bVJlY3QoSFRNTEltYWdlRWxlbWVudEltcGwqIGltYWdlLAorICAgIGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3csIGZsb2F0IHNoLAorICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcs
IGZsb2F0IGRoLAorICAgIGNvbnN0IFN0cmluZyYgY29tcG9zaXRlT3BlcmF0aW9uKQoreworICAg
IGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRo
cm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQ
UExFX18KKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFj
KQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3Qo
ZHgsIGR5LCBkdywgZGgpOworCisgICAgLy8gRklYTUU6IERvZXMgbm90IHN1cHBvcnQgdXNpbmcg
YSBjYW52YXMgYXMgYSBzb3VyY2UgaW1hZ2UuCisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdl
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgd2lsbERyYXcoZGVzdFJlY3QpOworCisgICAgY2FjaGVkSW1hZ2UtPmlt
YWdlKCktPmRyYXdJblJlY3QoZGVzdFJlY3QsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksCisg
ICAgICAgIEltYWdlOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29tcG9zaXRlT3BlcmF0
aW9uKSwgYyk7CisjZW5kaWYKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEFscGhhKGZsb2F0IGFscGhhKQoreworICAgIHNldEdsb2JhbEFscGhhKGFscGhhKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb25z
dCBTdHJpbmcmIG9wZXJhdGlvbikKK3sKKyAgICBzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24o
b3BlcmF0aW9uKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjcmVhdGVMaW5lYXJHcmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZs
b2F0IHgxLCBmbG9hdCB5MSkKK3sKKyAgICByZXR1cm4gbmV3IENhbnZhc0dyYWRpZW50KEZsb2F0
UG9pbnQoeDAsIHkwKSwgRmxvYXRQb2ludCh4MSwgeTEpKTsKK30KKworUGFzc1JlZlB0cjxDYW52
YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVSYWRpYWxHcmFkaWVu
dChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHIwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0
IHIxKQoreworICAgIHJldHVybiBuZXcgQ2FudmFzR3JhZGllbnQoRmxvYXRQb2ludCh4MCwgeTAp
LCByMCwgRmxvYXRQb2ludCh4MSwgeTEpLCByMSk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzUGF0
dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKiBpbWFnZSwgY29uc3QgU3RyaW5nJiByZXBldGl0aW9uVHlwZSkKK3sKKyAgICBy
ZXR1cm4gbmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UgPyBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSA6IDAs
IHJlcGV0aXRpb25UeXBlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Ondp
bGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgaWYgKCFtX2NhbnZhcykKKyAgICAgICAg
cmV0dXJuOworICAgIFJlbmRlckNhbnZhc0ltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJl
bmRlckNhbnZhc0ltYWdlKj4obV9jYW52YXMtPnJlbmRlcmVyKCkpOworICAgIGlmIChyZW5kZXJl
cikKKyAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzSW1hZ2VVcGRhdGUoKTsKK30KKworI2lmIF9f
QVBQTEVfXworCitDR0NvbnRleHRSZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5n
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NhbnZhcykKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgUmVuZGVyQ2FudmFzSW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQ2Fu
dmFzSW1hZ2UqPihtX2NhbnZhcy0+cmVuZGVyZXIoKSk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5kcmF3aW5nQ29udGV4dCgpOwor
fQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
K3sKKyAgICBDR0NvbnRleHRSZWYgYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBDaGVjayBmb3IgY2FzZSB3aGVyZSB0aGUgcGF0dGVy
biBpcyBhbHJlYWR5IHNldC4KKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dDb250ZXh0R2V0
Q1RNKGMpOworICAgIGlmIChzdGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0U3Ryb2tlU3R5bGVJc1Bh
dHRlcm4KKyAgICAgICAgICAgICYmIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxUb1RyYW5zZm9ybSht
LCBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
cGF0dGVybigpOworICAgIGlmICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dQ
YXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4tPmNyZWF0ZVBhdHRlcm4obSk7Cisg
ICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29sb3JT
cGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApOworICAg
IENHQ29udGV4dFNldFN0cm9rZUNvbG9yU3BhY2UoYywgcGF0dGVyblNwYWNlKTsKKyAgICBDR0Nv
bG9yU3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7CisKKyAgICBjb25zdCBmbG9hdCBwYXR0ZXJu
QWxwaGEgPSAxOworICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oYywgcGxhdGZvcm1QYXR0
ZXJuLCAmcGF0dGVybkFscGhhKTsKKyAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVy
bik7CisKKyAgICBzdGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0U3Ryb2tlU3R5bGVJc1BhdHRlcm4g
PSB0cnVlOworICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBtOwor
fQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlGaWxsUGF0dGVybigpCit7
CisgICAgQ0dDb250ZXh0UmVmIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4g
aXMgYWxyZWFkeSBzZXQuCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENU
TShjKTsKKyAgICBpZiAoc3RhdGUoKS5tX3BsYXRmb3JtQ29udGV4dEZpbGxTdHlsZUlzUGF0dGVy
bgorICAgICAgICAgICAgJiYgQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNmb3JtKG0sIHN0
YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4o
KTsKKyAgICBpZiAoIXBhdHRlcm4pCisgICAgICAgIHJldHVybjsKKworICAgIENHUGF0dGVyblJl
ZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQYXR0ZXJuKG0pOworICAgIGlmICgh
cGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbG9yU3BhY2VSZWYg
cGF0dGVyblNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKKyAgICBDR0NvbnRl
eHRTZXRGaWxsQ29sb3JTcGFjZShjLCBwYXR0ZXJuU3BhY2UpOworICAgIENHQ29sb3JTcGFjZVJl
bGVhc2UocGF0dGVyblNwYWNlKTsKKworICAgIGNvbnN0IGZsb2F0IHBhdHRlcm5BbHBoYSA9IDE7
CisgICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oYywgcGxhdGZvcm1QYXR0ZXJuLCAmcGF0dGVy
bkFscGhhKTsKKyAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7CisKKyAgICBz
dGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0RmlsbFN0eWxlSXNQYXR0ZXJuID0gdHJ1ZTsKKyAgICBz
dGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IG07Cit9CisKKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBkb20vaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IGRvbS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vaHRtbC9DYW52YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBkb20vaHRt
bC9DYW52YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzR3Jh
ZGllbnQuaCIKKworI2luY2x1ZGUgImNzc3BhcnNlci5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisjaWYgX19BUFBMRV9fCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlv
blNlcnZpY2VzLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXNHcmFk
aWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxKQorICAgIDogbV9yYWRpYWwoZmFsc2UpLCBtX3AwKHAwKSwgbV9wMShwMSksIG1fc3Rv
cHNTb3J0ZWQoZmFsc2UpLCBtX2xhc3RTdG9wKDApCisjaWYgX19BUFBMRV9fCisgICAgLCBtX3No
YWRpbmcoMCkKKyNlbmRpZgoreworfQorCitDYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEpCisgICAgOiBtX3JhZGlhbCh0cnVlKSwgbV9wMChwMCksIG1fcDEocDEpLCBtX3IwKHIw
KSwgbV9yMShyMSksIG1fc3RvcHNTb3J0ZWQoZmFsc2UpLCBtX2xhc3RTdG9wKDApCisjaWYgX19B
UFBMRV9fCisgICAgLCBtX3NoYWRpbmcoMCkKKyNlbmRpZgoreworfQorCitDYW52YXNHcmFkaWVu
dDo6fkNhbnZhc0dyYWRpZW50KCkKK3sKKyNpZiBfX0FQUExFX18KKyAgICBDR1NoYWRpbmdSZWxl
YXNlKG1fc2hhZGluZyk7CisjZW5kaWYKK30KKwordm9pZCBDYW52YXNHcmFkaWVudDo6YWRkQ29s
b3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBTdHJpbmcmIGNvbG9yKQoreworICAgIFJHQkEzMiBy
Z2JhID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yKTsKKyAgICBtX3N0b3BzLmFwcGVuZChD
b2xvclN0b3AodmFsdWUsCisgICAgICAgICgocmdiYSA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwK
KyAgICAgICAgKChyZ2JhID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCisgICAgICAgIChyZ2JhICYg
MHhGRikgLyAyNTUuMGYsCisgICAgICAgICgocmdiYSA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZikp
OworCisgICAgbV9zdG9wc1NvcnRlZCA9IGZhbHNlOworCisjaWYgX19BUFBMRV9fCisgICAgQ0dT
aGFkaW5nUmVsZWFzZShtX3NoYWRpbmcpOworICAgIG1fc2hhZGluZyA9IDA7CisjZW5kaWYKK30K
KworI2lmIF9fQVBQTEVfXworCitzdGF0aWMgdm9pZCBncmFkaWVudENhbGxiYWNrKHZvaWQqIGlu
Zm8sIGNvbnN0IGZsb2F0KiBpbiwgZmxvYXQqIG91dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxDYW52
YXNHcmFkaWVudCo+KGluZm8pLT5nZXRDb2xvcigqaW4sICZvdXRbMF0sICZvdXRbMV0sICZvdXRb
Ml0sICZvdXRbM10pOworfQorCitzdGF0aWMgdm9pZCBncmFkaWVudFJlbGVhc2VDYWxsYmFjayh2
b2lkKiBpbmZvKQoreworICAgIHN0YXRpY19jYXN0PENhbnZhc0dyYWRpZW50Kj4oaW5mbyktPmRl
cmVmKCk7Cit9CisKK0NHU2hhZGluZ1JlZiBDYW52YXNHcmFkaWVudDo6cGxhdGZvcm1TaGFkaW5n
KCkKK3sKKyAgICBpZiAobV9zaGFkaW5nKQorICAgICAgICByZXR1cm4gbV9zaGFkaW5nOworCisg
ICAgY29uc3QgZmxvYXQgaW50ZXJ2YWxSYW5nZXNbMl0gPSB7IDAsIDEgfTsKKyAgICBjb25zdCBm
bG9hdCBjb2xvckNvbXBvbmVudFJhbmdlc1s0ICogMl0gPSB7IDAsIDEsIDAsIDEsIDAsIDEsIDAs
IDEgfTsKKyAgICBjb25zdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGdyYWRpZW50Q2FsbGJhY2tzID0g
eyAwLCBncmFkaWVudENhbGxiYWNrLCBncmFkaWVudFJlbGVhc2VDYWxsYmFjayB9OworICAgIHJl
ZigpOworICAgIENHRnVuY3Rpb25SZWYgY29sb3JGdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUo
dGhpcywgMSwgaW50ZXJ2YWxSYW5nZXMsIDQsIGNvbG9yQ29tcG9uZW50UmFuZ2VzLCAmZ3JhZGll
bnRDYWxsYmFja3MpOworCisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKworICAgIGlmIChtX3JhZGlhbCkKKyAgICAgICAgbV9z
aGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlUmFkaWFsKGNvbG9yU3BhY2UsIG1fcDAsIG1fcjAsIG1f
cDEsIG1fcjEsIGNvbG9yRnVuY3Rpb24sIHRydWUsIHRydWUpOworICAgIGVsc2UKKyAgICAgICAg
bV9zaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY29sb3JTcGFjZSwgbV9wMCwgbV9wMSwg
Y29sb3JGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNv
bG9yU3BhY2UpOworICAgIENHRnVuY3Rpb25SZWxlYXNlKGNvbG9yRnVuY3Rpb24pOworCisgICAg
cmV0dXJuIG1fc2hhZGluZzsKK30KKworI2VuZGlmCisKK3ZvaWQgQ2FudmFzR3JhZGllbnQ6Omdl
dENvbG9yKGZsb2F0IHZhbHVlLCBmbG9hdCogciwgZmxvYXQqIGcsIGZsb2F0KiBiLCBmbG9hdCog
YSkKK3sKKyAgICBBU1NFUlQodmFsdWUgPj0gMCk7CisgICAgQVNTRVJUKHZhbHVlIDw9IDEpOwor
CisgICAgaWYgKHZhbHVlIDw9IDApIHsKKyAgICAgICAgKnIgPSBtX3N0b3BzLmZpcnN0KCkucmVk
OworICAgICAgICAqZyA9IG1fc3RvcHMuZmlyc3QoKS5ncmVlbjsKKyAgICAgICAgKmIgPSBtX3N0
b3BzLmZpcnN0KCkuYmx1ZTsKKyAgICAgICAgKmEgPSBtX3N0b3BzLmZpcnN0KCkuYWxwaGE7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHZhbHVlID49IDEpIHsKKyAgICAgICAgKnIg
PSBtX3N0b3BzLmxhc3QoKS5yZWQ7CisgICAgICAgICpnID0gbV9zdG9wcy5sYXN0KCkuZ3JlZW47
CisgICAgICAgICpiID0gbV9zdG9wcy5sYXN0KCkuYmx1ZTsKKyAgICAgICAgKmEgPSBtX3N0b3Bz
Lmxhc3QoKS5hbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZpbmQgc3Rv
cCBiZWZvcmUgYW5kIHN0b3AgYWZ0ZXIgYW5kIGludGVycG9sYXRlLgorICAgIGludCBzdG9wID0g
ZmluZFN0b3AodmFsdWUpOworICAgIGNvbnN0IENvbG9yU3RvcCYgbGFzdFN0b3AgPSBtX3N0b3Bz
W3N0b3BdOyAgICAKKyAgICBjb25zdCBDb2xvclN0b3AmIG5leHRTdG9wID0gbV9zdG9wc1tzdG9w
ICsgMV07CisgICAgZmxvYXQgc3RvcEZyYWN0aW9uID0gKHZhbHVlIC0gbGFzdFN0b3Auc3RvcCkg
LyAobmV4dFN0b3Auc3RvcCAtIGxhc3RTdG9wLnN0b3ApOworICAgICpyID0gbGFzdFN0b3AucmVk
ICsgKG5leHRTdG9wLnJlZCAtIGxhc3RTdG9wLnJlZCkgKiBzdG9wRnJhY3Rpb247CisgICAgKmcg
PSBsYXN0U3RvcC5ncmVlbiArIChuZXh0U3RvcC5ncmVlbiAtIGxhc3RTdG9wLmdyZWVuKSAqIHN0
b3BGcmFjdGlvbjsKKyAgICAqYiA9IGxhc3RTdG9wLmJsdWUgKyAobmV4dFN0b3AuYmx1ZSAtIGxh
c3RTdG9wLmJsdWUpICogc3RvcEZyYWN0aW9uOworICAgICphID0gbGFzdFN0b3AuYWxwaGEgKyAo
bmV4dFN0b3AuYWxwaGEgLSBsYXN0U3RvcC5hbHBoYSkgKiBzdG9wRnJhY3Rpb247Cit9CisKK3N0
YXRpYyBpbnQgY29tcGFyZVN0b3BzKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCit7Cisg
ICAgZmxvYXQgYXMgPSBzdGF0aWNfY2FzdDxjb25zdCBDYW52YXNHcmFkaWVudDo6Q29sb3JTdG9w
Kj4oYSktPnN0b3A7CisgICAgZmxvYXQgYnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDYW52YXNHcmFk
aWVudDo6Q29sb3JTdG9wKj4oYiktPnN0b3A7CisKKyAgICBpZiAoYXMgPiBicykKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgaWYgKGFzIDwgYnMpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1
cm4gMDsKK30KKworaW50IENhbnZhc0dyYWRpZW50OjpmaW5kU3RvcChmbG9hdCB2YWx1ZSkgY29u
c3QKK3sKKyAgICBpZiAoIW1fc3RvcHNTb3J0ZWQpIHsKKyAgICAgICAgYm9vbCBhZGRaZXJvU3Rv
cCA9IHRydWU7CisgICAgICAgIGJvb2wgYWRkT25lU3RvcCA9IHRydWU7CisgICAgICAgIGlmICht
X3N0b3BzLnNpemUoKSkgeworICAgICAgICAgICAgcXNvcnQobV9zdG9wcy5kYXRhKCksIG1fc3Rv
cHMuc2l6ZSgpLCBzaXplb2YoQ29sb3JTdG9wKSwgY29tcGFyZVN0b3BzKTsKKyAgICAgICAgICAg
IGFkZFplcm9TdG9wID0gbV9zdG9wcy5maXJzdCgpLnN0b3AgIT0gMDsKKyAgICAgICAgICAgIGFk
ZE9uZVN0b3AgPSBtX3N0b3BzLmxhc3QoKS5zdG9wICE9IDE7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGFkZFplcm9TdG9wKQorICAgICAgICAgICAgbV9zdG9wcy5pbnNlcnQoMCwgQ29sb3JTdG9w
KDAsIDAsIDAsIDAsIDEpKTsKKyAgICAgICAgaWYgKGFkZE9uZVN0b3ApCisgICAgICAgICAgICBt
X3N0b3BzLmFwcGVuZChDb2xvclN0b3AoMSwgMCwgMCwgMCwgMSkpOworICAgICAgICBtX3N0b3Bz
U29ydGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQodmFsdWUgPj0gMCk7CisgICAgQVNT
RVJUKHZhbHVlIDw9IDEpOworCisgICAgaW50IG51bVN0b3BzID0gbV9zdG9wcy5zaXplKCk7Cisg
ICAgQVNTRVJUKG51bVN0b3BzID49IDIpOworICAgIEFTU0VSVChtX2xhc3RTdG9wIDwgbnVtU3Rv
cHMgLSAxKTsKKworICAgIGludCBpID0gbV9sYXN0U3RvcDsKKyAgICBpZiAodmFsdWUgPCBtX3N0
b3BzW2ldLnN0b3ApCisgICAgICAgIGkgPSAxOworICAgIGVsc2UKKyAgICAgICAgaSA9IG1fbGFz
dFN0b3AgKyAxOworCisgICAgZm9yICg7IGkgPCBudW1TdG9wcyAtIDE7ICsraSkKKyAgICAgICAg
aWYgKHZhbHVlIDwgbV9zdG9wc1tpXS5zdG9wKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBt
X2xhc3RTdG9wID0gaSAtIDE7CisgICAgcmV0dXJuIG1fbGFzdFN0b3A7Cit9CisKK30gLy9uYW1l
c3BhY2UKClByb3BlcnR5IGNoYW5nZXMgb246IGRvbS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBkb20vaHRt
bC9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vaHRtbC9DYW52YXNQYXR0ZXJu
LmNwcAkocmV2aXNpb24gMCkKKysrIGRvbS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgorCisjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0NhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlLCBjb25zdCBTdHJpbmcmIHJlcGV0aXRpb25UeXBlKQorICAgIDogbV9j
YWNoZWRJbWFnZShjYWNoZWRJbWFnZSkKKyAgICAsIG1fcmVwZWF0WCghKGVxdWFsSWdub3JpbmdD
YXNlKHJlcGV0aXRpb25UeXBlLCAicmVwZWF0LXkiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShyZXBl
dGl0aW9uVHlwZSwgIm5vLXJlcGVhdCIpKSkKKyAgICAsIG1fcmVwZWF0WSghKGVxdWFsSWdub3Jp
bmdDYXNlKHJlcGV0aXRpb25UeXBlLCAicmVwZWF0LXgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShy
ZXBldGl0aW9uVHlwZSwgIm5vLXJlcGVhdCIpKSkKK3sKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisg
ICAgICAgIGNhY2hlZEltYWdlLT5yZWYodGhpcyk7Cit9CisKK0NhbnZhc1BhdHRlcm46On5DYW52
YXNQYXR0ZXJuKCkKK3sKKyAgICBpZiAobV9jYWNoZWRJbWFnZSkKKyAgICAgICAgbV9jYWNoZWRJ
bWFnZS0+ZGVyZWYodGhpcyk7Cit9CisKKyNpZiBfX0FQUExFX18KKworc3RhdGljIHZvaWQgcGF0
dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIENh
Y2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhbnZhc1BhdHRlcm4qPihpbmZv
KS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHJlY3QgPSBpbWFnZS0+cmVjdCgp
OworICAgIAorICAgIC8vIEZJWE1FOiBJcyB1c2luZyBDR0ltYWdlUmVmIGRpcmVjdGx5IHJlYWxs
eSBzdXBlcmlvciB0byBhc2tpbmcgdGhlIGltYWdlIHRvIGRyYXc/CisgICAgaWYgKGltYWdlLT5n
ZXRDR0ltYWdlUmVmKCkpIHsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJl
Y3QsIGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW1hZ2UtPmRyYXdJblJlY3QocmVjdCwgcmVjdCwgSW1hZ2U6OkNvbXBvc2l0ZVNvdXJjZU92
ZXIsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZv
aWQqIGluZm8pCit7CisgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUGF0dGVybio+KGluZm8pLT5kZXJl
ZigpOworfQorCitDR1BhdHRlcm5SZWYgQ2FudmFzUGF0dGVybjo6Y3JlYXRlUGF0dGVybihjb25z
dCBDR0FmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmICghbV9jYWNoZWRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSW1hZ2UqIGltYWdlID0gbV9jYWNoZWRJbWFnZS0+
aW1hZ2UoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENHQWZm
aW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPQorICAgICAgICBDR0FmZmluZVRyYW5zZm9y
bVRyYW5zbGF0ZShDR0FmZmluZVRyYW5zZm9ybVNjYWxlKHRyYW5zZm9ybSwgMSwgLTEpLCAwLCAt
aW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGZsb2F0IHhTdGVwID0gbV9yZXBlYXRYID8gaW1hZ2Ut
PndpZHRoKCkgOiAwOworICAgIGZsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gaW1hZ2UtPmhlaWdo
dCgpIDogMDsKKworICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJhY2tz
ID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sgfTsKKyAgICBy
ZWYoKTsKKyAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHRoaXMsIGltYWdlLT5yZWN0KCksIHBh
dHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwKKyAgICAgICAga0NHUGF0dGVyblRpbGluZ0Nv
bnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOworfQorCisjZW5kaWYKKwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogZG9tL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogZG9tL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDApCisrKyBkb20vaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSFRNTENhbnZhczJEQ29udGV4dF9oCisjZGVmaW5lIEhUTUxDYW52
YXMyRENvbnRleHRfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+CisjaW5jbHVkZSA8a3htbGNv
cmUvVmVjdG9yLmg+CisKKyNpZiBfX0FQUExFX18KKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudEltcGw7CisgICAgY2xhc3MgQ2FudmFzU3R5
bGU7CisgICAgY2xhc3MgSFRNTEltYWdlRWxlbWVudEltcGw7CisgICAgY2xhc3MgQ2FudmFzR3Jh
ZGllbnQ7CisgICAgY2xhc3MgQ2FudmFzUGF0dGVybjsKKworICAgIGNsYXNzIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCA6IHB1YmxpYyBTaGFyZWQ8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7
CisgICAgcHVibGljOgorICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoSFRNTENhbnZh
c0VsZW1lbnRJbXBsKik7CisKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBsKiBjYW52YXMo
KSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQorCisgICAgICAgIENhbnZhc1N0eWxlKiBzdHJv
a2VTdHlsZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFBhc3NSZWZQdHI8
Q2FudmFzU3R5bGU+KTsKKworICAgICAgICBDYW52YXNTdHlsZSogZmlsbFN0eWxlKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2V0RmlsbFN0eWxlKFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+KTsKKwor
ICAgICAgICBmbG9hdCBsaW5lV2lkdGgoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRMaW5lV2lk
dGgoZmxvYXQpOworCisgICAgICAgIFN0cmluZyBsaW5lQ2FwKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0TGluZUNhcChjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBTdHJpbmcgbGluZUpvaW4o
KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihjb25zdCBTdHJpbmcmKTsKKworICAg
ICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0TWl0ZXJMaW1p
dChmbG9hdCk7CisKKyAgICAgICAgZmxvYXQgc2hhZG93T2Zmc2V0WCgpIGNvbnN0OworICAgICAg
ICB2b2lkIHNldFNoYWRvd09mZnNldFgoZmxvYXQpOworCisgICAgICAgIGZsb2F0IHNoYWRvd09m
ZnNldFkoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3dPZmZzZXRZKGZsb2F0KTsKKwor
ICAgICAgICBmbG9hdCBzaGFkb3dCbHVyKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U2hhZG93
Qmx1cihmbG9hdCk7CisKKyAgICAgICAgU3RyaW5nIHNoYWRvd0NvbG9yKCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJik7CisKKyAgICAgICAgZmxvYXQg
Z2xvYmFsQWxwaGEoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRHbG9iYWxBbHBoYShmbG9hdCk7
CisKKyAgICAgICAgU3RyaW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0OworICAg
ICAgICB2b2lkIHNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmKTsKKwor
ICAgICAgICB2b2lkIHNhdmUoKTsKKyAgICAgICAgdm9pZCByZXN0b3JlKCk7CisKKyAgICAgICAg
dm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOworICAgICAgICB2b2lkIHJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucyk7CisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9h
dCB0eSk7CisKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9y
KTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwpOworICAgICAg
ICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsK
KyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhh
KTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBjLCBmbG9hdCBt
LCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKKworICAgICAgICB2b2lkIHNldEZpbGxDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoZmxvYXQg
Z3JheUxldmVsKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xv
ciwgZmxvYXQgYWxwaGEpOworICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihmbG9hdCBncmF5TGV2
ZWwsIGZsb2F0IGFscGhhKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CisgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGZsb2F0
IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworCisgICAgICAgIHZvaWQg
YmVnaW5QYXRoKCk7CisgICAgICAgIHZvaWQgY2xvc2VQYXRoKCk7CisKKyAgICAgICAgdm9pZCBt
b3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgbGluZVRvKGZsb2F0IHgsIGZs
b2F0IHkpOworICAgICAgICB2b2lkIHF1YWRyYXRpY0N1cnZlVG8oZmxvYXQgY3B4LCBmbG9hdCBj
cHksIGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIGJlemllckN1cnZlVG8oZmxvYXQg
Y3AxeCwgZmxvYXQgY3AxeSwgZmxvYXQgY3AyeCwgZmxvYXQgY3AyeSwgZmxvYXQgeCwgZmxvYXQg
eSk7CisgICAgICAgIHZvaWQgYXJjVG8oZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxv
YXQgeTEsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIHZvaWQgYXJjKGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBjbG9ja3dpc2UpOworICAgICAgICB2
b2lkIHJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisK
KyAgICAgICAgdm9pZCBmaWxsKCk7CisgICAgICAgIHZvaWQgc3Ryb2tlKCk7CisgICAgICAgIHZv
aWQgY2xpcCgpOworCisgICAgICAgIHZvaWQgY2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgICAgICB2b2lkIHN0cm9r
ZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAg
ICAgIHZvaWQgc3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCB3aWR0aCk7CisKKyAgICAgICAgdm9pZCBzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1cik7CisgICAgICAgIHZvaWQgc2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3Ip
OworICAgICAgICB2b2lkIHNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9h
dCBibHVyLCBmbG9hdCBncmF5TGV2ZWwpOworICAgICAgICB2b2lkIHNldFNoYWRvdyhmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9h
dCBhbHBoYSk7CisgICAgICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpOworICAgICAgICB2
b2lkIHNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3co
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgYywgZmxvYXQgbSwg
ZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CisKKyAgICAgICAgdm9pZCBjbGVhclNoYWRvdygp
OworCisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnRJbXBsKiwgZmxvYXQg
eCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnRJbXBs
KiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAgICAg
IHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnRJbXBsKiwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gsCisgICAgICAgICAgICBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGR3LCBmbG9hdCBkaCk7CisKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2VGcm9tUmVjdChIVE1M
SW1hZ2VFbGVtZW50SW1wbCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNo
LAorICAgICAgICAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIGNv
bnN0IFN0cmluZyYgY29tcG9zaXRlT3BlcmF0aW9uKTsKKworICAgICAgICB2b2lkIHNldEFscGhh
KGZsb2F0KTsKKworICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJp
bmcmKTsKKworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGVMaW5lYXJH
cmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSk7CisgICAgICAg
IFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZVJhZGlhbEdyYWRpZW50KGZsb2F0IHgw
LCBmbG9hdCB5MCwgZmxvYXQgcjAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgcjEpOworICAg
ICAgICBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZVBhdHRlcm4oSFRNTEltYWdlRWxl
bWVudEltcGwqLCBjb25zdCBTdHJpbmcmIHJlcGV0aXRpb25UeXBlKTsKKworICAgICAgICB2b2lk
IHJlc2V0KCk7CisgICAgICAgIHZvaWQgZGV0YWNoQ2FudmFzKCkgeyBtX2NhbnZhcyA9IDA7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgICAgICBTdGF0
ZSgpOworCisgICAgICAgICAgICBSZWZQdHI8Q2FudmFzU3R5bGU+IG1fc3Ryb2tlU3R5bGU7Cisg
ICAgICAgICAgICBSZWZQdHI8Q2FudmFzU3R5bGU+IG1fZmlsbFN0eWxlOworICAgICAgICAgICAg
ZmxvYXQgbV9saW5lV2lkdGg7CisgICAgICAgICAgICBTdHJpbmcgbV9saW5lQ2FwOworICAgICAg
ICAgICAgU3RyaW5nIG1fbGluZUpvaW47CisgICAgICAgICAgICBmbG9hdCBtX21pdGVyTGltaXQ7
CisgICAgICAgICAgICBGbG9hdFNpemUgbV9zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBmbG9h
dCBtX3NoYWRvd0JsdXI7CisgICAgICAgICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKKyAgICAg
ICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CisgICAgICAgICAgICBTdHJpbmcgbV9nbG9iYWxD
b21wb3NpdGU7CisjaWYgX19BUFBMRV9fCisgICAgICAgICAgICBib29sIG1fcGxhdGZvcm1Db250
ZXh0U3Ryb2tlU3R5bGVJc1BhdHRlcm47CisgICAgICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBt
X3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybTsKKyAgICAgICAgICAgIGJvb2wgbV9wbGF0Zm9y
bUNvbnRleHRGaWxsU3R5bGVJc1BhdHRlcm47CisgICAgICAgICAgICBDR0FmZmluZVRyYW5zZm9y
bSBtX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm07CisjZW5kaWYKKyAgICAgICAgfTsKKworICAg
ICAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOyB9CisgICAg
ICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0
KCk7IH0KKworICAgICAgICB2b2lkIGFwcGx5U2hhZG93KCk7CisKKyAgICAgICAgdm9pZCB3aWxs
RHJhdyhjb25zdCBGbG9hdFJlY3QmKTsKKworI2lmIF9fQVBQTEVfXworICAgICAgICB2b2lkIGFw
cGx5U3Ryb2tlUGF0dGVybigpOworICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKKwor
ICAgICAgICAvLyBGSVhNRTogVXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkLgorICAgICAgICBD
R0NvbnRleHRSZWYgZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEhU
TUxDYW52YXNFbGVtZW50SW1wbCogbV9jYW52YXM7CisgICAgICAgIFZlY3RvcjxTdGF0ZSwgMT4g
bV9zdGF0ZVN0YWNrOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBkb20vaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBkb20v
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9odG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9uIDApCisrKyBkb20vaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIGh0bWwg
eworCisgICAgaW50ZXJmYWNlIFtMZWdhY3lQYXJlbnQ9SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlXSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgeworCisgICAgICAgIC8vIFdlYiBBcHBs
aWNhdGlvbnMgMS4wIGRyYWZ0CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDYW52
YXNFbGVtZW50IGNhbnZhczsKKworICAgICAgICB2b2lkIHNhdmUoKTsKKyAgICAgICAgdm9pZCBy
ZXN0b3JlKCk7CisKKyAgICAgICAgdm9pZCBzY2FsZShpbiBmbG9hdCBzeCwgaW4gZmxvYXQgc3kp
OworICAgICAgICB2b2lkIHJvdGF0ZShpbiBmbG9hdCBhbmdsZSk7CisgICAgICAgIHZvaWQgdHJh
bnNsYXRlKGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSk7CisKKyAgICAgICAgYXR0cmlidXRlIGZs
b2F0IGdsb2JhbEFscGhhOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGdsb2JhbENvbXBv
c2l0ZU9wZXJhdGlvbjsKKworICAgICAgICBDYW52YXNHcmFkaWVudCBjcmVhdGVMaW5lYXJHcmFk
aWVudChpbiBmbG9hdCB4MCwgaW4gZmxvYXQgeTAsIGluIGZsb2F0IHgxLCBpbiBmbG9hdCB5MSk7
CisgICAgICAgIENhbnZhc0dyYWRpZW50IGNyZWF0ZVJhZGlhbEdyYWRpZW50KGluIGZsb2F0IHgw
LCBpbiBmbG9hdCB5MCwgaW4gZmxvYXQgcjAsIGluIGZsb2F0IHgxLCBpbiBmbG9hdCB5MSwgaW4g
ZmxvYXQgcjEpOworCisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBsaW5lV2lkdGg7CisgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgbGluZUNhcDsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyBsaW5lSm9pbjsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG1pdGVyTGltaXQ7CisKKyAgICAg
ICAgYXR0cmlidXRlIGZsb2F0IHNoYWRvd09mZnNldFg7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9h
dCBzaGFkb3dPZmZzZXRZOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgc2hhZG93Qmx1cjsKKyAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBzaGFkb3dDb2xvcjsKKworICAgICAgICB2b2lkIGNs
ZWFyUmVjdChpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB3aWR0aCwgaW4gZmxvYXQg
aGVpZ2h0KTsKKyAgICAgICAgdm9pZCBmaWxsUmVjdChpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBp
biBmbG9hdCB3aWR0aCwgaW4gZmxvYXQgaGVpZ2h0KTsKKworICAgICAgICB2b2lkIGJlZ2luUGF0
aCgpOworICAgICAgICB2b2lkIGNsb3NlUGF0aCgpOworICAgICAgICB2b2lkIG1vdmVUbyhpbiBm
bG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCBsaW5lVG8oaW4gZmxvYXQgeCwgaW4g
ZmxvYXQgeSk7CisgICAgICAgIHZvaWQgcXVhZHJhdGljQ3VydmVUbyhpbiBmbG9hdCBjcHgsIGlu
IGZsb2F0IGNweSwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgYmV6aWVy
Q3VydmVUbyhpbiBmbG9hdCBjcDF4LCBpbiBmbG9hdCBjcDF5LCBpbiBmbG9hdCBjcDJ4LCBpbiBm
bG9hdCBjcDJ5LCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCBhcmNUbyhp
biBmbG9hdCB4MSwgaW4gZmxvYXQgeTEsIGluIGZsb2F0IHgyLCBpbiBmbG9hdCB5MiwgaW4gZmxv
YXQgcmFkaXVzKTsKKyAgICAgICAgdm9pZCByZWN0KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGlu
IGZsb2F0IHdpZHRoLCBpbiBmbG9hdCBoZWlnaHQpOworICAgICAgICB2b2lkIGFyYyhpbiBmbG9h
dCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCByYWRpdXMsIGluIGZsb2F0IHN0YXJ0QW5nbGUsIGlu
IGZsb2F0IGVuZEFuZ2xlLCBpbiBib29sZWFuIGNsb2Nrd2lzZSk7CisgICAgICAgIHZvaWQgZmls
bCgpOworICAgICAgICB2b2lkIHN0cm9rZSgpOworICAgICAgICB2b2lkIGNsaXAoKTsKKworICAg
ICAgICAvLyBvdGhlcgorCisgICAgICAgIHZvaWQgc2V0QWxwaGEoaW4gZmxvYXQgYWxwaGEpOwor
ICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihpbiBET01TdHJpbmcgY29tcG9zaXRl
T3BlcmF0aW9uKTsKKworICAgICAgICB2b2lkIHNldExpbmVXaWR0aChpbiBmbG9hdCB3aWR0aCk7
CisgICAgICAgIHZvaWQgc2V0TGluZUNhcChpbiBET01TdHJpbmcgY2FwKTsKKyAgICAgICAgdm9p
ZCBzZXRMaW5lSm9pbihpbiBET01TdHJpbmcgam9pbik7CisgICAgICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChpbiBmbG9hdCBsaW1pdCk7CisKKyAgICAgICAgdm9pZCBjbGVhclNoYWRvdygpOworCisg
ICAgfTsKKworfQpJbmRleDogZG9tL2h0bWwvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9odG1sL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMCkKKysrIGRvbS9odG1sL0NhbnZh
c1N0eWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgorCisj
aW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCisj
aW5jbHVkZSAiY3NzcGFyc2VyLmgiCisKKyNpZiBfX0FQUExFX18KKyNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTdHJpbmcmIGNvbG9y
KQorICAgIDogbV90eXBlKENvbG9yU3RyaW5nKSwgbV9jb2xvcihjb2xvcikKK3sKK30KKworQ2Fu
dmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCkKKyAgICA6IG1fdHlwZShHcmF5
TGV2ZWwpLCBtX2FscGhhKDEpLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCit7Cit9CisKK0NhbnZh
c1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKKyAg
ICA6IG1fdHlwZShDb2xvclN0cmluZ1dpdGhBbHBoYSksIG1fY29sb3IoY29sb3IpLCBtX2FscGhh
KGFscGhhKQoreworfQorCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVs
LCBmbG9hdCBhbHBoYSkKKyAgICA6IG1fdHlwZShHcmF5TGV2ZWwpLCBtX2FscGhhKGFscGhhKSwg
bV9ncmF5TGV2ZWwoZ3JheUxldmVsKQoreworfQorCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKKyAgICA6IG1fdHlwZShSR0JBKSwg
bV9hbHBoYShhKSwgbV9yZWQociksIG1fZ3JlZW4oZyksIG1fYmx1ZShiKQoreworfQorCitDYW52
YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywg
ZmxvYXQgYSkKKyAgICA6IG1fdHlwZShDTVlLQSksIG1fYWxwaGEoYSksIG1fY3lhbihjKSwgbV9t
YWdlbnRhKG0pLCBtX3llbGxvdyh5KSwgbV9ibGFjayhrKQoreworfQorCitDYW52YXNTdHlsZTo6
Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQpCisgICAgOiBt
X3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENvbG9yU3RyaW5nKSwgbV9ncmFkaWVudChncmFk
aWVudCkKK3sKK30KKworQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFz
UGF0dGVybj4gcGF0dGVybikKKyAgICA6IG1fdHlwZShwYXR0ZXJuID8gSW1hZ2VQYXR0ZXJuIDog
Q29sb3JTdHJpbmcpLCBtX3BhdHRlcm4ocGF0dGVybikKK3sKK30KKworI2lmIF9fQVBQTEVfXwor
Cit2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0
KQoreworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKKyAgICAgICAgICAgIFJHQkEzMiBj
b2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcihtX2NvbG9yKTsKKyAgICAgICAgICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsCisgICAgICAgICAgICAgICAgKChjb2xvciA+
PiAxNikgJiAweEZGKSAvIDI1NS4wZiwKKyAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYg
MHhGRikgLyAyNTUuMGYsCisgICAgICAgICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYs
CisgICAgICAgICAgICAgICAgKChjb2xvciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFs
cGhhOiB7CisgICAgICAgICAgICBSR0JBMzIgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3Io
bV9jb2xvcik7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0
LAorICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMGYsCisgICAg
ICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjBmLAorICAgICAgICAgICAg
ICAgIChjb2xvciAmIDB4RkYpIC8gMjU1LjBmLAorICAgICAgICAgICAgICAgIG1fYWxwaGEpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmF5TGV2ZWw6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ryb2tlQ29sb3IoY29udGV4dCwgbV9ncmF5TGV2
ZWwsIG1fYWxwaGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkdCQToKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIG1fcmVkLCBtX2dy
ZWVuLCBtX2JsdWUsIG1fYWxwaGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q01ZS0E6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3IoY29udGV4dCwg
bV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICBjYXNlIEltYWdlUGF0
dGVybjoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBDYW52YXNTdHlsZTo6
YXBwbHlGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBD
b2xvclN0cmluZzogeworICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0gQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKG1fY29sb3IpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNv
bnRleHQsCisgICAgICAgICAgICAgICAgKChjb2xvciA+PiAxNikgJiAweEZGKSAvIDI1NS4wZiwK
KyAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUuMGYsCisgICAgICAg
ICAgICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMGYsCisgICAgICAgICAgICAgICAgKChjb2xv
ciA+PiAyNCkgJiAweEZGKSAvIDI1NS4wZik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7CisgICAgICAgICAgICBSR0JB
MzIgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IobV9jb2xvcik7CisgICAgICAgICAgICBD
R0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwKKyAgICAgICAgICAgICAgICAoKGNvbG9y
ID4+IDE2KSAmIDB4RkYpIC8gMjU1LjBmLAorICAgICAgICAgICAgICAgICgoY29sb3IgPj4gOCkg
JiAweEZGKSAvIDI1NS4wZiwKKyAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4w
ZiwKKyAgICAgICAgICAgICAgICBtX2FscGhhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgR3JheUxldmVsOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3Jh
eUZpbGxDb2xvcihjb250ZXh0LCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSR0JBOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmls
bENvbG9yKGNvbnRleHQsIG1fcmVkLCBtX2dyZWVuLCBtX2JsdWUsIG1fYWxwaGEpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01ZS0E6CisgICAgICAgICAgICBDR0NvbnRleHRT
ZXRDTVlLRmlsbENvbG9yKGNvbnRleHQsIG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxvdywgbV9i
bGFjaywgbV9hbHBoYSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFkaWVu
dDoKKyAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKKyNlbmRpZgorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBkb20vaHRtbC9DYW52YXNT
dHlsZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogZG9tL011dGF0aW9uRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9NdXRhdGlvbkV2ZW50
LmlkbAkocmV2aXNpb24gMTMyNTYpCisrKyBkb20vTXV0YXRpb25FdmVudC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDYgKzIxLDggQEAgbW9kdWxlIGV2ZW50cyB7CiAKICAgICBpbnRlcmZhY2Ug
W0xlZ2FjeVBhcmVudD1LSlM6OkRPTUV2ZW50XSBNdXRhdGlvbkV2ZW50IDogRXZlbnQgewogCisg
ICAgICAgIC8vIERPTSBMZXZlbCAyCisKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTU9E
SUZJQ0FUSU9OID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQURESVRJT04gICAg
ID0gMjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVNT1ZBTCAgICAgID0gMzsKSW5k
ZXg6IGRvbS9BdHRyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vQXR0ci5pZGwJKHJldmlzaW9uIDEz
MjU2KQorKysgZG9tL0F0dHIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMyArMjAsMTYgQEAK
IG1vZHVsZSBjb3JlIHsKIAogICAgIGludGVyZmFjZSBbTGVnYWN5UGFyZW50PUtKUzo6RE9NTm9k
ZV0gQXR0ciA6IE5vZGUgeworICAgICAgICAvLyBET00gTGV2ZWwgMQogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nIG5hbWU7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHNwZWNpZmllZDsKICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyB2YWx1
ZSAKICAgICAgICAgICAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKworICAgICAg
ICAvLyBET00gTGV2ZWwgMgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudCBvd25l
ckVsZW1lbnQ7CiAgICAgICAgIAotICAgICAgICAvLyBXZWIgaW5zcGVjdG9yIGV4dGVuc2lvbgor
ICAgICAgICAvLyBleHRlbnNpb25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NTdHls
ZURlY2xhcmF0aW9uIHN0eWxlOwogICAgIH07CiAKSW5kZXg6IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCShy
ZXZpc2lvbiAxMzI1NikKKysrIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0yMCw5ICsyMCwxMiBAQAogbW9kdWxlIGNvcmUgewogCiAgICAgaW50ZXJmYWNl
IFtMZWdhY3lQYXJlbnQ9S0pTOjpET01Ob2RlXSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gOiBOb2Rl
IHsKKyAgICAgICAgLy8gRE9NIExldmVsIDEKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyB0YXJnZXQ7CiAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1OdWxsXSBET01TdHJpbmcgZGF0YQog
ICAgICAgICAgICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOworCisgICAgICAgIC8v
IGludGVyZmFjZSBMaW5rU3R5bGUgZnJvbSBET00gTGV2ZWwgMiBTdHlsZSBTaGVldHMKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFN0eWxlU2hlZXQgc2hlZXQ7CiAgICAgfTsKIApJbmRleDog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMyNTcpCisrKyBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDEzIEBA
CiAJCTkzMDMyQ0M4MDlBRUMzNDMwMEY4MkExOCAvKiBQYXRoQ0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMzJDQzcwOUFFQzM0MzAwRjgyQTE4
IC8qIFBhdGhDRy5jcHAgKi87IH07CiAJCTkzMDMyQ0NBMDlBRUMzNEIwMEY4MkExOCAvKiBQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAzMkND
OTA5QUVDMzRCMDBGODJBMTggLyogUGF0aC5oICovOyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovOyB9OworCQk5MzBD
QUFENzA5QzQ5NUI2MDAyMjlDMDQgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQ0FBRDYwOUM0
OTVCNjAwMjI5QzA0IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgKi87IH07CisJCTkz
MENBQjg5MDlDNDlFRkEwMDIyOUMwNCAvKiBDYW52YXNHcmFkaWVudC5pZGwgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMENBQjg4MDlDNDlFRkEwMDIy
OUMwNCAvKiBDYW52YXNHcmFkaWVudC5pZGwgKi87IH07CisJCTkzMENBQjkwMDlDNDlGMUIwMDIy
OUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwQ0FCOEYwOUM0OUYxQjAwMjI5QzA0IC8qIENhbnZhc1BhdHRl
cm4uaWRsICovOyB9OworCQk5MzBDQUI5NzA5QzQ5RkFBMDAyMjlDMDQgLyogQ29kZUdlbmVyYXRv
ckpTLnBtIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzBDQUI5NjA5QzQ5RkFBMDAyMjlDMDQgLyogQ29kZUdlbmVyYXRvckpTLnBtICovOyB9OworCQk5
MzBDQUNCQTA5QzRFRTc3MDAyMjlDMDQgLyogSlNET01IVE1MLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMENBQ0I5MDlDNEVFNzcwMDIyOUMwNCAv
KiBKU0RPTUhUTUwuY3BwICovOyB9OworCQk5MzBDQUQxNTA5QzRGM0MzMDAyMjlDMDQgLyogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzBDQUQxNDA5QzRGM0MzMDAyMjlDMDQgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggKi87IH07CisJCTkzMENBRDI2MDlDNEY0OTEwMDIyOUMw
NCAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQ0FEMjUwOUM0RjQ5MTAwMjI5QzA0IC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgKi87IH07CiAJCTkzMjdBOTQyMDk5
NjhEMUEwMDY4QTU0NiAvKiBIVE1MT3B0aW9uc0NvbGxlY3Rpb25JbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMjdBOTQxMDk5NjhEMUEwMDY4
QTU0NiAvKiBIVE1MT3B0aW9uc0NvbGxlY3Rpb25JbXBsLmNwcCAqLzsgfTsKIAkJOTMzMDlERDYw
OTlFNjQ5MjAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAv
KiBBcHBlbmROb2RlQ29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5REQ3MDk5RTY0OTIwMDU2RTU4
MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21t
YW5kLmggKi87IH07CkBAIC0yMTcsNiArMjI0LDI2IEBACiAJCTkzQ0Q0RkU0MDk5NUY5RUEwMDdF
Q0M5NyAvKiBTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0NENEZERDA5OTVGOUVBMDA3RUNDOTcgLyogU3RyaW5nSW1wbC5oICovOyB9
OwogCQk5M0NENEZFQzA5OTVGRDJBMDA3RUNDOTcgLyogUGxhdGZvcm1TdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0Q0RkVCMDk5NUZEMkEw
MDdFQ0M5NyAvKiBQbGF0Zm9ybVN0cmluZy5oICovOyB9OwogCQk5M0U2MkQ5QjA5ODVGNDE2MDBF
MUI1RTMgLyogU3lzdGVtVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNFNjJEOTkwOTg1RjQxNjAwRTFCNUUzIC8qIFN5c3RlbVRpbWUuaCAqLzsg
fTsKKwkJOTNFRUMxRjgwOUMyODc3NzAwQzUxNUQxIC8qIEF0dHIuaWRsIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFNTA5QzI4Nzc3MDBDNTE1
RDEgLyogQXR0ci5pZGwgKi87IH07CisJCTkzRUVDMUY5MDlDMjg3NzcwMEM1MTVEMSAvKiBDaGFy
YWN0ZXJEYXRhLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNFRUMxRTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICovOyB9
OworCQk5M0VFQzFGQTA5QzI4Nzc3MDBDNTE1RDEgLyogRG9jUHRyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFNzA5QzI4Nzc3MDBDNTE1RDEg
LyogRG9jUHRyLmggKi87IH07CisJCTkzRUVDMUZCMDlDMjg3NzcwMEM1MTVEMSAvKiBEb2N1bWVu
dFR5cGUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0VFQzFFODA5QzI4Nzc3MDBDNTE1RDEgLyogRG9jdW1lbnRUeXBlLmlkbCAqLzsgfTsKKwkJ
OTNFRUMxRkMwOUMyODc3NzAwQzUxNUQxIC8qIERPTUltcGxlbWVudGF0aW9uLmlkbCBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRTkwOUMyODc3
NzAwQzUxNUQxIC8qIERPTUltcGxlbWVudGF0aW9uLmlkbCAqLzsgfTsKKwkJOTNFRUMxRkQwOUMy
ODc3NzAwQzUxNUQxIC8qIEVsZW1lbnQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFQTA5QzI4Nzc3MDBDNTE1RDEgLyogRWxlbWVudC5p
ZGwgKi87IH07CisJCTkzRUVDMUZFMDlDMjg3NzcwMEM1MTVEMSAvKiBFbnRpdHkuaWRsIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFQjA5QzI4
Nzc3MDBDNTE1RDEgLyogRW50aXR5LmlkbCAqLzsgfTsKKwkJOTNFRUMxRkYwOUMyODc3NzAwQzUx
NUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFRDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLzsgfTsKKwkJOTNFRUMyMDAwOUMyODc3NzAwQzUx
NUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRUUwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oICovOyB9OworCQk5M0VFQzIwMTA5QzI4Nzc3MDBDNTE1RDEg
LyogQ2FudmFzU3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRUVDMUVGMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5oICovOyB9Owor
CQk5M0VFQzIwMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRjAwOUMyODc3NzAw
QzUxNUQxIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLzsgfTsKKwkJOTNFRUMyMDMwOUMyODc3NzAw
QzUxNUQxIC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFGMTA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGll
bnQuaCAqLzsgfTsKKwkJOTNFRUMyMDQwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVDMUYy
MDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmggKi87IH07CisJCTkzRUVDMjA1MDlD
Mjg3NzcwMEM1MTVEMSAvKiBNdXRhdGlvbkV2ZW50LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRjMwOUMyODc3NzAwQzUxNUQxIC8qIE11
dGF0aW9uRXZlbnQuaWRsICovOyB9OworCQk5M0VFQzIwNjA5QzI4Nzc3MDBDNTE1RDEgLyogTm90
YXRpb24uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0VFQzFGNDA5QzI4Nzc3MDBDNTE1RDEgLyogTm90YXRpb24uaWRsICovOyB9OworCQk5M0VF
QzIwNzA5QzI4Nzc3MDBDNTE1RDEgLyogUHJvY2Vzc2luZ0luc3RydWN0aW9uLmlkbCBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRjUwOUMyODc3
NzAwQzUxNUQxIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5pZGwgKi87IH07CisJCTkzRUVDMjA4
MDlDMjg3NzcwMEM1MTVEMSAvKiBUZXh0LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRjYwOUMyODc3NzAwQzUxNUQxIC8qIFRleHQuaWRs
ICovOyB9OworCQk5M0VFQzIwOTA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVDMUY3MDlD
Mjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCAqLzsgfTsKKwkJOTNFRUMyNkYwOUMzMjE4
MDAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1Bh
dHRlcm4uY3BwICovOyB9OworCQk5M0VFQzI3MTA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
RUMyNzAwOUMzMjE4ODAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmNwcCAqLzsgfTsKIAkJOTNGMTk4
Q0UwODI0NUU1OTAwMUU5QUJDIC8qIGtqc19iaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDFGNTAyREU0MzY5MDE4NjM1Q0EgLyoga2pz
X2JpbmRpbmcuaCAqLzsgfTsKIAkJOTNGMTk4Q0YwODI0NUU1OTAwMUU5QUJDIC8qIGtqc19jc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMUY3
MDJERTQzNjkwMTg2MzVDQSAvKiBranNfY3NzLmggKi87IH07CiAJCTkzRjE5OEQxMDgyNDVFNTkw
MDFFOUFCQyAvKiBranNfZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDFGQTAyREU0MzY5MDE4NjM1Q0EgLyoga2pzX2RvbS5oICovOyB9OwpA
QCAtMTIwOSw2ICsxMjM2LDEzIEBACiAJCTkzMDMyQ0M3MDlBRUMzNDMwMEY4MkExOCAvKiBQYXRo
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aENHLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMzJDQzkwOUFFQzM0QjAwRjgyQTE4IC8q
IFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGF0aC5oOyBwYXRoID0g
cGxhdGZvcm0vUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5
OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGltZXIuaDsgcGF0aCA9IHBsYXRmb3JtL1RpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzMENBQUQ2MDlDNDk1QjYwMDIyOUMwNCAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMENBQjg4MDlDNDlFRkEwMDIy
OUMwNCAvKiBDYW52YXNHcmFkaWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFz
R3JhZGllbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzBDQUI4RjA5QzQ5
RjFCMDAyMjlDMDQgLyogQ2FudmFzUGF0dGVybi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
Q2FudmFzUGF0dGVybi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMENBQjk2
MDlDNDlGQUEwMDIyOUMwNCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvckpTLnBtOyBwYXRoID0gYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
MENBQ0I5MDlDNEVFNzcwMDIyOUMwNCAvKiBKU0RPTUhUTUwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gSlNET01IVE1MLmNwcDsgcGF0aCA9IGJpbmRpbmdzL2pzL0pT
RE9NSFRNTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMENBRDE0MDlDNEYz
QzMwMDIyOUMwNCAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg7
IHBhdGggPSBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMwQ0FEMjUwOUM0RjQ5MTAwMjI5QzA0IC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOyBwYXRoID0g
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMyN0E5NDEwOTk2OEQxQTAwNjhBNTQ2IC8qIEhUTUxPcHRp
b25zQ29sbGVjdGlvbkltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTE9wdGlvbnNDb2xsZWN0aW9uSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBlbmROb2RlQ29tbWFuZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RDg4MDk5RTY0OTEwMDU2RTU4
MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBcHBlbmROb2RlQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0
OCw2ICsxMzgyLDI2IEBACiAJCTkzQ0Q0RkREMDk5NUY5RUEwMDdFQ0M5NyAvKiBTdHJpbmdJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmluZ0ltcGwuaDsgcGF0aCA9
IHBsYXRmb3JtL1N0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTND
RDRGRUIwOTk1RkQyQTAwN0VDQzk3IC8qIFBsYXRmb3JtU3RyaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRmb3JtU3RyaW5nLmg7IHBhdGggPSBwbGF0Zm9ybS9QbGF0
Zm9ybVN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0U2MkQ5OTA5ODVG
NDE2MDBFMUI1RTMgLyogU3lzdGVtVGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTeXN0ZW1UaW1lLmg7IHBhdGggPSBwbGF0Zm9ybS9TeXN0ZW1UaW1lLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVDMUU1MDlDMjg3NzcwMEM1MTVEMSAvKiBBdHRyLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBBdHRyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTNFRUMxRTYwOUMyODc3NzAwQzUxNUQxIC8qIENoYXJhY3RlckRhdGEuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IENoYXJhY3RlckRhdGEuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0VFQzFFNzA5QzI4Nzc3MDBDNTE1RDEgLyogRG9jUHRyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY1B0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5M0VFQzFFODA5QzI4Nzc3MDBDNTE1RDEgLyogRG9jdW1lbnRUeXBlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEb2N1bWVudFR5cGUuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5M0VFQzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRp
b24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFRUMxRUEwOUMyODc3NzAwQzUxNUQxIC8qIEVs
ZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5M0VFQzFFQjA5QzI4Nzc3MDBDNTE1RDEgLyogRW50aXR5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFbnRpdHkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5M0VFQzFFRDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVD
MUVFMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVDMUVGMDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0VFQzFGMDA5QzI4Nzc3MDBDNTE1
RDEgLyogQ2FudmFzR3JhZGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2FudmFzR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0VFQzFGMTA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTNFRUMxRjIwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzUGF0dGVybi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0VFQzFGMzA5QzI4Nzc3MDBDNTE1RDEgLyogTXV0YXRp
b25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTXV0YXRpb25FdmVudC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVDMUY0MDlDMjg3NzcwMEM1MTVEMSAvKiBO
b3RhdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTm90YXRpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5M0VFQzFGNTA5QzI4Nzc3MDBDNTE1RDEgLyogUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0VFQzFGNjA5QzI4
Nzc3MDBDNTE1RDEgLyogVGV4dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVGV4dC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAv
KiBXaGVlbEV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8q
IENhbnZhc1BhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FudmFzUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRUVDMjcw
MDlDMzIxODgwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzRjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhtbDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk5M0YxOUIxQTA4MjQ1RTVBMDAxRTlBQkMgLyog
V2ViQ29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBX
ZWJDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
OTNGMUQzMUEwNTU4Q0M1QzAwODIxQkMwIC8qIGxpYmljdWNvcmUuZHlsaWIgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5
bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJpY3Vjb3Jl
LmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtMjU5Niw2ICsyNjUwLDI0
IEBACiAJCQlwYXRoID0gZWRpdGluZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5M0VFQzFGMDA5QzI4Nzc3MDBDNTE1RDEgLyog
Q2FudmFzR3JhZGllbnQuY3BwICovLAorCQkJCTkzRUVDMUYxMDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNHcmFkaWVudC5oICovLAorCQkJCTkzMENBQjg4MDlDNDlFRkEwMDIyOUMwNCAvKiBDYW52
YXNHcmFkaWVudC5pZGwgKi8sCisJCQkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZh
c1BhdHRlcm4uY3BwICovLAorCQkJCTkzRUVDMUYyMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNQ
YXR0ZXJuLmggKi8sCisJCQkJOTMwQ0FCOEYwOUM0OUYxQjAwMjI5QzA0IC8qIENhbnZhc1BhdHRl
cm4uaWRsICovLAorCQkJCTkzRUVDMUVEMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwICovLAorCQkJCTkzRUVDMUVFMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKKwkJCQk5MzBDQUFENjA5QzQ5NUI2MDAyMjlDMDQg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKKwkJCQk5M0VFQzI3MDA5QzMyMTg4
MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovLAorCQkJCTkzRUVDMUVGMDlDMjg3NzcwMEM1
MTVEMSAvKiBDYW52YXNTdHlsZS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBodG1sOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQTgxMjJDN0IwOEQ1NjRCMDAwODQ0RkEzIC8q
IGJpbmRpbmdzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTMyMzAsOCArMzMwMiwxMiBAQAogCQlCQzFBMzc5MzA5N0M2RkIxMDAxOUYzRDggLyogSmF2YVNj
cmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTMw
Q0FCOTYwOUM0OUZBQTAwMjI5QzA0IC8qIENvZGVHZW5lcmF0b3JKUy5wbSAqLywKKwkJCQk5MzBD
QUQyNTA5QzRGNDkxMDAyMjlDMDQgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cCAqLywKKwkJCQk5MzBDQUQxNDA5QzRGM0MzMDAyMjlDMDQgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmggKi8sCiAJCQkJMUEyMTU0RUMwOTlBMTFBODAwMzQzREY4IC8qIEpTRE9N
Q29yZS5jcHAgKi8sCiAJCQkJMUEyMTU0RUQwOTlBMTFBODAwMzQzREY4IC8qIEpTRE9NRXZlbnRz
LmNwcCAqLywKKwkJCQk5MzBDQUNCOTA5QzRFRTc3MDAyMjlDMDQgLyogSlNET01IVE1MLmNwcCAq
LywKIAkJCSk7CiAJCQluYW1lID0gSmF2YVNjcmlwdDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0zNzAzLDExICszNzc5LDE0IEBACiAJCUY1MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSAv
KiBkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTkz
RUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovLAogCQkJCUJDM0IzNjQ3MDVDOUQ1RTIw
MEU0MjkwMiAvKiBBdG9taWNTdHJpbmdMaXN0LmggKi8sCisJCQkJOTNFRUMxRTUwOUMyODc3NzAw
QzUxNUQxIC8qIEF0dHIuaWRsICovLAogCQkJCUFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuY3BwICovLAogCQkJCUFCMjNBMzI2MDlCQkE3RDAw
MDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudEltcGwuaCAqLywKIAkJCQk2NTUwQjY5
MzA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uSW1wbC5jcHAgKi8sCiAJCQkJNjU1MEI2
OTQwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbkltcGwuaCAqLywKKwkJCQk5M0VFQzFF
NjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0YS5pZGwgKi8sCiAJCQkJNjU1MEI2OTUw
OTlERjAyNzAwOTBENzgxIC8qIENoYXJhY3RlckRhdGFJbXBsLmNwcCAqLywKIAkJCQk2NTUwQjY5
NjA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YUltcGwuaCAqLywKIAkJCQlBODE4NzIx
QTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdEltcGwuY3BwICovLApAQCAtMzcxNiwx
MSArMzc5NSwxMyBAQAogCQkJCTY1NTBCNjk4MDk5REYwMjcwMDkwRDc4MSAvKiBDb21tZW50SW1w
bC5oICovLAogCQkJCUE4MTg3MjE0MDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlSW1w
bC5jcHAgKi8sCiAJCQkJQTgxODcyMTEwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGVJ
bXBsLmggKi8sCisJCQkJOTNFRUMxRTcwOUMyODc3NzAwQzUxNUQxIC8qIERvY1B0ci5oICovLAog
CQkJCUE4MTg1RjM3MDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudEZyYWdtZW50SW1wbC5jcHAg
Ki8sCiAJCQkJQTgxODVGMzUwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnRJbXBs
LmggKi8sCiAJCQkJQTgxODVGMzQwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50SW1wbC5jcHAg
Ki8sCiAJCQkJQTgxODVGMzgwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50SW1wbC5oICovLAog
CQkJCUVEMkJBODNCMDlBMjRCOTEwMDZDMEFDNCAvKiBEb2N1bWVudE1hcmtlci5oICovLAorCQkJ
CTkzRUVDMUU4MDlDMjg3NzcwMEM1MTVEMSAvKiBEb2N1bWVudFR5cGUuaWRsICovLAogCQkJCUE4
MTg1RjMyMDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGVJbXBsLmNwcCAqLywKIAkJCQlB
ODE4NUYzMTA5NzY1NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlSW1wbC5oICovLAogCQkJCUY1
MjNEMzAxMDJERTQ0NzYwMTg2MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuY3BwICovLApAQCAtMzcz
NywxNCArMzgxOCwxOCBAQAogCQkJCUJFOTFGQzhCMDYxMzM2NjYwMDVFMzc5MCAvKiBkb21fcG9z
aXRpb24uaCAqLywKIAkJCQlGNTIzRDJGRjAyREU0NDc2MDE4NjM1Q0EgLyogZG9tX3htbGltcGwu
Y3BwICovLAogCQkJCUY1MjNEMzAwMDJERTQ0NzYwMTg2MzVDQSAvKiBkb21feG1saW1wbC5oICov
LAorCQkJCTkzRUVDMUU5MDlDMjg3NzcwMEM1MTVEMSAvKiBET01JbXBsZW1lbnRhdGlvbi5pZGwg
Ki8sCiAJCQkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uSW1w
bC5jcHAgKi8sCiAJCQkJQTgxODVGMzMwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0
aW9uSW1wbC5oICovLAogCQkJCTY1NTBCNjk5MDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4
dEltcGwuY3BwICovLAogCQkJCTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4
dEltcGwuaCAqLywKKwkJCQk5M0VFQzFFQTA5QzI4Nzc3MDBDNTE1RDEgLyogRWxlbWVudC5pZGwg
Ki8sCisJCQkJOTNFRUMxRUIwOUMyODc3NzAwQzUxNUQxIC8qIEVudGl0eS5pZGwgKi8sCiAJCQkJ
OTM1RkJDNDQwOUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVuZXIuaCAqLywKIAkJCQk5Mzk4
ODVDMTA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5jcHAgKi8sCiAJCQkJOTM5ODg1QzIw
OEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLywKIAkJCQk5MzVGQkNGMTA5QkExNDNC
MDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oICovLAorCQkJCTkzRUVDMUYzMDlDMjg3NzcwMEM1
MTVEMSAvKiBNdXRhdGlvbkV2ZW50LmlkbCAqLywKIAkJCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZWROb2RlTWFwSW1wbC5oICovLAogCQkJCUE4MTg3MjE5MDk3N0QzQzAwMDU4MjZE
OSAvKiBOYW1lTm9kZUxpc3RJbXBsLmNwcCAqLywKIAkJCQlBODE4NzIxMzA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZU5vZGVMaXN0SW1wbC5oICovLApAQCAtMzc1MiwxMCArMzgzNywxNCBAQAogCQkJ
CUE4MTg3MjE3MDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlSW1wbC5oICovLAogCQkJCUE4MTg3MjE2
MDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdEltcGwuY3BwICovLAogCQkJCUE4MTg3MjEwMDk3
N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdEltcGwuaCAqLywKKwkJCQk5M0VFQzFGNDA5QzI4Nzc3
MDBDNTE1RDEgLyogTm90YXRpb24uaWRsICovLAorCQkJCTkzRUVDMUY1MDlDMjg3NzcwMEM1MTVE
MSAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsICovLAogCQkJCTU1MEEwQkM3MDg1RjYwMzkw
MDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLywKIAkJCQk1NTBBMEJDODA4NUY2MDM5MDA3
MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovLAorCQkJCTkzRUVDMUY2MDlDMjg3NzcwMEM1MTVE
MSAvKiBUZXh0LmlkbCAqLywKIAkJCQk2NTUwQjY5QjA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dElt
cGwuY3BwICovLAogCQkJCTY1NTBCNjlDMDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0SW1wbC5oICov
LAorCQkJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCAqLywKIAkJ
CQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogeG1sX3Rva2VuaXplci5jcHAgKi8sCiAJCQkJ
RjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tlbml6ZXIuaCAqLywKIAkJCSk7CkBA
IC00MzYwLDYgKzQ0NDksMTIgQEAKIAkJCQk5MzUyMDcxRTA5QkQzQkJCMDBGMjAzOEQgLyogV2Vi
Q29yZVdpZGdldEhvbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1MjA3QkUwOUJENDEwQTAw
RjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTIwODgy
MDlCRDQ1RTkwMEYyMDM4RCAvKiBDb29raWVKYXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRUVD
MUZBMDlDMjg3NzcwMEM1MTVEMSAvKiBEb2NQdHIuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRUVD
MjAwMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTkzRUVDMjAxMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTNFRUMyMDMwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc0dyYWRp
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0VFQzIwNDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2Fu
dmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTMwQ0FEMTUwOUM0RjNDMzAwMjI5QzA0
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00
Mzg3LDYgKzQ0ODIsNyBAQAogCQkJCTkzMkZDMERBMDgyNEEzMzcwMDVCM0M3NSAvKiBDb2xvckRh
dGEuYyAqLywKIAkJCQk5MzJGQzM4RjA4MjRCQTMwMDA1QjNDNzUgLyogdG9rZW5pemVyLmNwcCAq
LywKIAkJCQk5MzJGQzE3MTA4MjRBOTEzMDA1QjNDNzUgLyogSlNYTUxIdHRwUmVxdWVzdC5sdXQu
aCAqLywKKwkJCQk5MzBDQUQ3NDA5QzRGNzRBMDAyMjlDMDQgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlVGFibGUuY3BwICovLAogCQkJCTkzMkZDMTczMDgyNEE5MTkwMDVCM0M3NSAv
KiB4bWxzZXJpYWxpemVyLmx1dC5oICovLAogCQkJCUE4M0M4NjdEMDkxMUFBMTkwMDlCRjRBNyAv
KiBYU0xUUHJvY2Vzc29yLmx1dC5oICovLAogCQkJCTFBNjlEMzg3MDg1NjI4NjUwMDA5ODgwRCAv
KiBkb21wYXJzZXIubHV0LmggKi8sCkBAIC00Mzk0LDggKzQ0OTAsOCBAQAogCQkJCUE4OEFENTI1
MDk1MjRBMzQwMDFERDE5NiAvKiBYTGlua05hbWVzICovLAogCQkJCUE4OEFENTI5MDk1MjRBNEEw
MDFERDE5NiAvKiBrc3ZnY3NzcHJvcGVydGllcy5jL2ggKi8sCiAJCQkJQTg4QUQ1MkIwOTUyNEE1
MjAwMUREMTk2IC8qIGtzdmdjc3N2YWx1ZXMuYy9oICovLAotCQkJCTkzN0EzNjUxMDk3RTI1N0Iw
MEU0RUUyRiAvKiBVc2VyIEFnZW50IFN0eWxlIFNoZWV0ICovLAotCQkJCTFBREI1NkFGMDk4ODI4
NzMwMDMyRUVFMiAvKiBHZW5lcmF0ZSBKYXZhc2NyaXB0IEJpbmRpbmdzICovLAorCQkJCTkzN0Ez
NjUxMDk3RTI1N0IwMEU0RUUyRiAvKiBDb21waWxlIFVzZXIgQWdlbnQgU3R5bGUgU2hlZXQgKi8s
CisJCQkJMUFEQjU2QUYwOTg4Mjg3MzAwMzJFRUUyIC8qIEdlbmVyYXRlIEphdmFTY3JpcHQgQmlu
ZGluZ3MgKi8sCiAJCQkJOTNGMTk4QTYwODI0NUU1OTAwMUU5QUJDIC8qIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5RkQwODI0NUU1OTAwMUU5QUJDIC8qIFJlc291cmNlcyAqLywKIAkJCQk5M0YxOUEw
QzA4MjQ1RTU5MDAxRTlBQkMgLyogU291cmNlcyAqLywKQEAgLTQ1MjksNiArNDYyNSwyMSBAQAog
CQkJCTY1RjUzODIyMDlCMkI1NTcwMEYzREM0QSAvKiBjaGFyYWN0ZXItc2V0cy50eHQgaW4gUmVz
b3VyY2VzICovLAogCQkJCTY1RjUzODIzMDlCMkI1NTcwMEYzREM0QSAvKiBtYWtlLWNoYXJzZXQt
dGFibGUucGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTY1RjUzODI1MDlCMkI1NzUwMEYzREM0QSAv
KiBtYWMtZW5jb2RpbmdzLnR4dCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJOTNFRUMxRjgwOUMyODc3
NzAwQzUxNUQxIC8qIEF0dHIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk5M0VFQzFGOTA5QzI4
Nzc3MDBDNTE1RDEgLyogQ2hhcmFjdGVyRGF0YS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkz
RUVDMUZCMDlDMjg3NzcwMEM1MTVEMSAvKiBEb2N1bWVudFR5cGUuaWRsIGluIFJlc291cmNlcyAq
LywKKwkJCQk5M0VFQzFGQzA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRs
IGluIFJlc291cmNlcyAqLywKKwkJCQk5M0VFQzFGRDA5QzI4Nzc3MDBDNTE1RDEgLyogRWxlbWVu
dC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkzRUVDMUZFMDlDMjg3NzcwMEM1MTVEMSAvKiBF
bnRpdHkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk5M0VFQzIwNTA5QzI4Nzc3MDBDNTE1RDEg
LyogTXV0YXRpb25FdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkzRUVDMjA2MDlDMjg3
NzcwMEM1MTVEMSAvKiBOb3RhdGlvbi5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkzRUVDMjA3
MDlDMjg3NzcwMEM1MTVEMSAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsIGluIFJlc291cmNl
cyAqLywKKwkJCQk5M0VFQzIwODA5QzI4Nzc3MDBDNTE1RDEgLyogVGV4dC5pZGwgaW4gUmVzb3Vy
Y2VzICovLAorCQkJCTkzRUVDMjA5MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCBp
biBSZXNvdXJjZXMgKi8sCisJCQkJOTMwQ0FBRDcwOUM0OTVCNjAwMjI5QzA0IC8qIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkzMENBQjg5MDlDNDlF
RkEwMDIyOUMwNCAvKiBDYW52YXNHcmFkaWVudC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTkz
MENBQjkwMDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlkbCBpbiBSZXNvdXJjZXMg
Ki8sCisJCQkJOTMwQ0FCOTcwOUM0OUZBQTAwMjI5QzA0IC8qIENvZGVHZW5lcmF0b3JKUy5wbSBp
biBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC00NTUyLDIwICs0NjYzLDM3IEBACiAJCQlzaGVsbFBhdGggPSAv
YmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAiXCIkQ1JFQVRFX0hBU0hfVEFCTEVcIiBraHRtbC9l
Y21hL2RvbXBhcnNlci5jcHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL2RvbXBhcnNlci5sdXQuaFwi
IjsKIAkJfTsKLQkJMUFEQjU2QUYwOTg4Mjg3MzAwMzJFRUUyIC8qIEdlbmVyYXRlIEphdmFzY3Jp
cHQgQmluZGluZ3MgKi8gPSB7CisJCTFBREI1NkFGMDk4ODI4NzMwMDMyRUVFMiAvKiBHZW5lcmF0
ZSBKYXZhU2NyaXB0IEJpbmRpbmdzICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWls
ZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAog
CQkJKTsKIAkJCWlucHV0UGF0aHMgPSAoCiAJCQkpOwotCQkJbmFtZSA9ICJHZW5lcmF0ZSBKYXZh
c2NyaXB0IEJpbmRpbmdzIjsKKwkJCW5hbWUgPSAiR2VuZXJhdGUgSmF2YVNjcmlwdCBCaW5kaW5n
cyI7CiAJCQlvdXRwdXRQYXRocyA9ICgKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNjcmlw
dCA9ICIvdXNyL2Jpbi9wZXJsIC1JXCIkU1JDUk9PVC9iaW5kaW5ncy9zY3JpcHRzXCIgXCIkU1JD
Uk9PVC9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsXCIgLS1nZW5lcmF0b3Ig
SlMgLS1pZGxkaXIgXCIkU1JDUk9PVC9kb21cIiAtLW91dHB1dGRpciBcIiRERVJJVkVEX0ZJTEVf
RElSXCJcbiI7CiAJCX07CisJCTkzMENBRDc0MDlDNEY3NEEwMDIyOUMwNCAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2VUYWJsZS5jcHAgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNj
cmlwdEJ1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmls
ZXMgPSAoCisJCQkpOworCQkJaW5wdXRQYXRocyA9ICgKKwkJCQkiJChDUkVBVEVfSEFTSF9UQUJM
RSkiLAorCQkJCWJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAs
CisJCQkpOworCQkJbmFtZSA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZVRhYmxlLmNw
cDsKKwkJCW91dHB1dFBhdGhzID0gKAorCQkJCSIkKERFUklWRURfRklMRV9ESVIpL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZVRhYmxlLmNwcCIsCisJCQkpOworCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJ
c2hlbGxTY3JpcHQgPSAiXCIkQ1JFQVRFX0hBU0hfVEFCTEVcIiBiaW5kaW5ncy9qcy9KU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIC1uIFdlYkNvcmUgPiBcIiRERVJJVkVEX0ZJTEVf
RElSL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZVRhYmxlLmNwcFwiIjsKKwkJfTsKIAkJ
OTMyRkMwQjcwODI0QTE3NTAwNUIzQzc1IC8qIGRvY3R5cGVzLmNwcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CkBAIC00ODU2LDcgKzQ5ODQsNyBAQAogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKIAkJCXNo
ZWxsU2NyaXB0ID0gImZsZXggLXQgY3NzL3Rva2VuaXplci5mbGV4IHwgcGVybCBjc3MvbWFrZXRv
a2VuaXplciA+IFwiJERFUklWRURfRklMRV9ESVIvdG9rZW5pemVyLmNwcFwiIjsKIAkJfTsKLQkJ
OTM3QTM2NTEwOTdFMjU3QjAwRTRFRTJGIC8qIFVzZXIgQWdlbnQgU3R5bGUgU2hlZXQgKi8gPSB7
CisJCTkzN0EzNjUxMDk3RTI1N0IwMEU0RUUyRiAvKiBDb21waWxlIFVzZXIgQWdlbnQgU3R5bGUg
U2hlZXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCkBAIC00ODY3LDcgKzQ5OTUs
NyBAQAogCQkJCSIkKFNSQ1JPT1QpL2Nzcy9xdWlya3MuY3NzIiwKIAkJCQkiJChTUkNST09UKS9j
c3Mvc3ZnLmNzcyIsCiAJCQkpOwotCQkJbmFtZSA9ICJVc2VyIEFnZW50IFN0eWxlIFNoZWV0IjsK
KwkJCW5hbWUgPSAiQ29tcGlsZSBVc2VyIEFnZW50IFN0eWxlIFNoZWV0IjsKIAkJCW91dHB1dFBh
dGhzID0gKAogCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmgi
LAogCQkJCSIkKERFUklWRURfRklMRV9ESVIpL1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAi
LApAQCAtNTQ3NCw2ICs1NjAyLDEyIEBACiAJCQkJOTM1MjA3QzAwOUJENDEyMTAwRjIwMzhEIC8q
IExvY2FsaXplZFN0cmluZ3NNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzUyMDg0NTA5QkQ0
M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzUyMDg3NzA5
QkQ0NTM0MDBGMjAzOEQgLyogQ29va2llSmFyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTNFRUMx
RkYwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk5M0VFQzIwMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNFRUMyNkYwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZh
c1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNFRUMyNzEwOUMzMjE4ODAwQzUxNUQx
IC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzMENBQ0JBMDlDNEVFNzcw
MDIyOUMwNCAvKiBKU0RPTUhUTUwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTMwQ0FEMjYwOUM0
RjQ5MTAwMjI5QzA0IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsK
</data>
<flag name="review"
          id="1828"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>